Merge branch 'Recent-Activities' of WrenchBoard/Users-Wrench into master

This commit is contained in:
2023-09-25 09:56:25 +00:00
committed by Gogs
+111 -50
View File
@@ -14,7 +14,9 @@ import FamilyTable from "./FamilyTable";
export default function FamilyAcc() { export default function FamilyAcc() {
const [selectTab, setValue] = useState("today"); const [selectTab, setValue] = useState("today");
const [selectedAge, setSelectedAge] = useState(undefined); // State to store the selected year and month
const [selectedYear, setSelectedYear] = useState("");
const [selectedMonth, setSelectedMonth] = useState("");
const [familyList, setFamilyList] = useState([]); const [familyList, setFamilyList] = useState([]);
const [loader, setLoader] = useState(false); const [loader, setLoader] = useState(false);
const [popUp, setPopUp] = useState(false); const [popUp, setPopUp] = useState(false);
@@ -35,17 +37,14 @@ export default function FamilyAcc() {
setValue(value); setValue(value);
}; };
const ageRange = useMemo(() => { // Handle year selection
const startAge = 5; const handleYearChange = (e) => {
const endAge = 16; setSelectedYear(e.target.value);
return Array.from( };
{ length: endAge - startAge + 1 },
(_, index) => startAge + index
);
}, []);
const handleAgeSelect = (event) => { // Handle month selection
setSelectedAge(parseInt(event.target.value)); const handleMonthChange = (e) => {
setSelectedMonth(e.target.value);
}; };
const handleInputChange = (event) => { const handleInputChange = (event) => {
@@ -53,6 +52,13 @@ export default function FamilyAcc() {
setFormData((prevFormData) => ({ ...prevFormData, [name]: value })); setFormData((prevFormData) => ({ ...prevFormData, [name]: value }));
}; };
// use the useEffect hook to clear the selected month if the year changes (to ensure consistency)
useEffect(() => {
if (selectedYear === "" && selectedMonth !== "") {
setSelectedMonth("");
}
}, [selectedYear]);
const addMember = async () => { const addMember = async () => {
const { first_name, last_name } = formData; const { first_name, last_name } = formData;
setLoader(true); setLoader(true);
@@ -61,7 +67,8 @@ export default function FamilyAcc() {
const reqData = { const reqData = {
firstname: first_name, firstname: first_name,
lastname: last_name, lastname: last_name,
age: selectedAge, year: +selectedYear,
month: +selectedMonth,
}; };
const res = await apiCall.addFamily(reqData); const res = await apiCall.addFamily(reqData);
@@ -91,7 +98,8 @@ export default function FamilyAcc() {
first_name: "", first_name: "",
last_name: "", last_name: "",
}); });
setSelectedAge(""); setSelectedMonth("");
setSelectedYear("");
} }
}; };
@@ -129,8 +137,6 @@ export default function FamilyAcc() {
}; };
}, [listReload, memberList]); }, [listReload, memberList]);
console.log("Family List ====>", familyList.length);
return ( return (
<Layout> <Layout>
{/*<CommonHead />*/} {/*<CommonHead />*/}
@@ -145,16 +151,16 @@ export default function FamilyAcc() {
> >
Family Accounts Family Accounts
</span> </span>
{(familyList.length < {familyList.length < process.env.REACT_APP_MAX_FAMILY_MEMBERS &&
process.env.REACT_APP_MAX_FAMILY_MEMBERS && !loader) && ( !loader && (
<button <button
onClick={popUpHandler} onClick={popUpHandler}
type="button" type="button"
className="text-white btn-gradient text-lg tracking-wide px-5 py-2 rounded-full" className="text-white btn-gradient text-lg tracking-wide px-5 py-2 rounded-full"
> >
Add Add
</button> </button>
)} )}
</h1> </h1>
</div> </div>
<div className="slider-btns flex space-x-4"> <div className="slider-btns flex space-x-4">
@@ -178,9 +184,10 @@ export default function FamilyAcc() {
<FamilyForm <FamilyForm
popUpHandler={popUpHandler} popUpHandler={popUpHandler}
value={formData} value={formData}
ageHandler={handleAgeSelect} selectedYear={selectedYear}
ageRange={ageRange} selectedMonth={selectedMonth}
ageValue={selectedAge} monthHandler={handleMonthChange}
yearHandler={handleYearChange}
inputHandler={handleInputChange} inputHandler={handleInputChange}
msgErr={msgErr} msgErr={msgErr}
onClick={addMember} onClick={addMember}
@@ -196,8 +203,10 @@ const FamilyForm = ({
value: { first_name, last_name }, value: { first_name, last_name },
ageValue, ageValue,
inputHandler, inputHandler,
ageHandler, selectedMonth,
ageRange, selectedYear,
monthHandler,
yearHandler,
msgErr, msgErr,
loader, loader,
onClick, onClick,
@@ -242,33 +251,22 @@ const FamilyForm = ({
value={last_name} value={last_name}
inputHandler={inputHandler} inputHandler={inputHandler}
/> />
<div className="input-com mb-7 flex gap-1 items-center w-full justify-between"> <div className="input-com mb-7 flex flex-col gap-1 w-full">
{/* Age dropdown */} {/* Age dropdown */}
<div className="flex items-center justify-between flex-[0.3]"> <div className="">
<label <label
className="input-label text-[#181c32] dark:text-white text-[15px] font-semibold" className="input-label text-[#181c32] dark:text-white text-[15px] font-semibold"
htmlFor="age-selection" htmlFor="age-selection"
> >
Select your age: Birthday: (Year/Month)
</label> </label>
</div> </div>
<div className=" flex-[0.7] max-w-[150px]"> <YearMonthDropdowns
<select handleMonthChange={monthHandler}
name="age-selection" handleYearChange={yearHandler}
id="age-selection" selectedMonth={selectedMonth}
className="input-wrapper border border-[#f5f8fa] dark:border-[#5e6278] w-full rounded-[35px] h-[42px] overflow-hidden relative font-medium leading-6 bg-clip-padding text-[#5e6278] dark:text-gray-100 bg-[#f5f8fa] dark:bg-[#5e6278] text-base focus-visible:border-transparent focus-visible:outline-0 focus-visible:ring-transparent px-4" selectedYear={selectedYear}
onChange={ageHandler} />
value={ageValue}
>
<option value={""}>Select age</option>
{ageRange?.length > 0 &&
ageRange?.map((age) => (
<option value={age} key={age}>
{age}
</option>
))}
</select>
</div>
</div> </div>
{msgErr && ( {msgErr && (
<div className="relative p-4 text-[#912741] bg-[#fcd9e2] border-[#fbc6d3] mb-4 rounded-[0.475rem] text-xs font-light leading-[19.5px]"> <div className="relative p-4 text-[#912741] bg-[#fcd9e2] border-[#fbc6d3] mb-4 rounded-[0.475rem] text-xs font-light leading-[19.5px]">
@@ -317,3 +315,66 @@ const CloseIcon = () => (
/> />
</svg> </svg>
); );
function YearMonthDropdowns({
selectedMonth,
selectedYear,
handleMonthChange,
handleYearChange,
}) {
// Get the current year
const currentYear = new Date().getFullYear();
// Generate an array of years from the current year to (currentYear - 19)
const years = Array.from({ length: 17 }, (_, index) => currentYear - index);
// Array of month names
const months = [
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December",
];
return (
<div className="flex max-w-[330px] w-full self-end gap-4">
<select
id="yearDropdown"
value={selectedYear}
onChange={handleYearChange}
className="input-wrapper border border-[#f5f8fa] dark:border-[#5e6278] w-56 rounded-[35px] h-10 overflow-hidden relative font-medium leading-6 bg-clip-padding text-[#5e6278] dark:text-gray-100 bg-[#f5f8fa] dark:bg-[#5e6278] text-base focus-visible:border-transparent focus-visible:outline-0 focus-visible:ring-transparent px-4"
// size="5"
>
<option value="">Select a Year</option>
{years.map((year) => (
<option key={year} value={year}>
{year}
</option>
))}
</select>
<select
id="monthDropdown"
value={selectedMonth}
onChange={handleMonthChange}
className="input-wrapper border border-[#f5f8fa] dark:border-[#5e6278] w-56 rounded-[35px] h-10 overflow-hidden relative font-medium leading-6 bg-clip-padding text-[#5e6278] dark:text-gray-100 bg-[#f5f8fa] dark:bg-[#5e6278] text-base focus-visible:border-transparent focus-visible:outline-0 focus-visible:ring-transparent px-4"
// size="5"
>
<option value="">Select a Month</option>
{months.map((month, index) => (
<option key={month} value={index + 1}>
{month}
</option>
))}
</select>
</div>
);
}