From 6a6e010daaa63496add3747dfe34cf5032d4713d Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Thu, 18 Apr 2024 09:40:47 +0100 Subject: [PATCH] ENCOA-13: Add filter for "In Use" and "Unused" for the Code List ENCOA-15: Checkbox to select/unselect all for the Code List --- src/pages/(admin)/Lists/CodeList.tsx | 96 +++++++++++++++++++--------- 1 file changed, 65 insertions(+), 31 deletions(-) diff --git a/src/pages/(admin)/Lists/CodeList.tsx b/src/pages/(admin)/Lists/CodeList.tsx index cfdf4554..b8fc3311 100644 --- a/src/pages/(admin)/Lists/CodeList.tsx +++ b/src/pages/(admin)/Lists/CodeList.tsx @@ -32,22 +32,33 @@ const CreatorCell = ({id, users}: {id: string; users: User[]}) => { export default function CodeList({user}: {user: User}) { const [selectedCodes, setSelectedCodes] = useState([]); + const [filteredCorporate, setFilteredCorporate] = useState(user?.type === "corporate" ? user : undefined); + const [filterAvailability, setFilterAvailability] = useState<"in-use" | "unused">(); + const [filteredCodes, setFilteredCodes] = useState([]); const {users} = useUsers(); const {codes, reload} = useCodes(user?.type === "corporate" ? user?.id : undefined); useEffect(() => { - if (!filteredCorporate) return setFilteredCodes(codes); + let result = [...codes]; + if (filteredCorporate) result = result.filter((x) => x.creator === filteredCorporate.id); + if (filterAvailability) result = result.filter((x) => (filterAvailability === "in-use" ? !!x.userId : !x.userId)); - setFilteredCodes(codes.filter((x) => x.creator === filteredCorporate.id)); - }, [codes, filteredCorporate]); + setFilteredCodes(result); + }, [codes, filteredCorporate, filterAvailability]); const toggleCode = (id: string) => { setSelectedCodes((prev) => (prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id])); }; + const toggleAllCodes = (checked: boolean) => { + if (checked) return setSelectedCodes(filteredCodes.filter((x) => !x.userId).map((x) => x.code)); + + return setSelectedCodes([]); + }; + const deleteCodes = async (codes: string[]) => { if (!confirm(`Are you sure you want to delete these ${codes.length} code(s)?`)) return; @@ -97,7 +108,17 @@ export default function CodeList({user}: {user: User}) { const defaultColumns = [ columnHelper.accessor("code", { - header: "", + id: "code", + header: () => ( + !x.userId).length === 0} + isChecked={ + selectedCodes.length === filteredCodes.filter((x) => !x.userId).length && filteredCodes.filter((x) => !x.userId).length > 0 + } + onChange={(checked) => toggleAllCodes(checked)}> + {""} + + ), cell: (info) => !info.row.original.userId ? ( toggleCode(info.getValue())}> @@ -156,33 +177,46 @@ export default function CodeList({user}: {user: User}) { return ( <>
- ["admin", "developer", "corporate"].includes(x.type)) + .map((x) => ({ + label: `${x.type === "corporate" ? x.corporateInformation?.companyInformation?.name || x.name : x.name} (${ + USER_TYPE_LABELS[x.type] + })`, + value: x.id, + user: x, + }))} + onChange={(value) => setFilteredCorporate(value ? users.find((x) => x.id === value?.value) : undefined)} + /> +