Merge branch 'Recent-Activities' of WrenchBoard/Users-Wrench into master
This commit is contained in:
@@ -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>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user