From 4ecb21e0aed656405a83985d2f4803d9f08933be Mon Sep 17 00:00:00 2001 From: Tiago Ribeiro Date: Thu, 11 Apr 2024 11:23:13 +0100 Subject: [PATCH] ENCOA-4: Added the ability to filter by Creator on the Code List --- src/components/Low/Select.tsx | 4 +- src/pages/(admin)/Lists/CodeList.tsx | 60 +++++++++++++++++++++++----- 2 files changed, 52 insertions(+), 12 deletions(-) diff --git a/src/components/Low/Select.tsx b/src/components/Low/Select.tsx index 4c336202..4381455c 100644 --- a/src/components/Low/Select.tsx +++ b/src/components/Low/Select.tsx @@ -17,9 +17,10 @@ interface Props { onChange: (value: Option | null) => void; isClearable?: boolean; styles?: StylesConfig>; + className?: string; } -export default function Select({value, defaultValue, options, placeholder, disabled, onChange, styles, isClearable}: Props) { +export default function Select({value, defaultValue, options, placeholder, disabled, onChange, styles, isClearable, className}: Props) { const [target, setTarget] = useState(); useEffect(() => { @@ -34,6 +35,7 @@ export default function Select({value, defaultValue, options, placeholder, disab : clsx( "placeholder:text-mti-gray-cool border-mti-gray-platinum w-full rounded-full border bg-white px-4 py-4 text-sm font-normal focus:outline-none", disabled && "!bg-mti-gray-platinum/40 !text-mti-gray-dim cursor-not-allowed", + className, ) } options={options} diff --git a/src/pages/(admin)/Lists/CodeList.tsx b/src/pages/(admin)/Lists/CodeList.tsx index 4f7f318a..cfdf4554 100644 --- a/src/pages/(admin)/Lists/CodeList.tsx +++ b/src/pages/(admin)/Lists/CodeList.tsx @@ -1,5 +1,6 @@ import Button from "@/components/Low/Button"; import Checkbox from "@/components/Low/Checkbox"; +import Select from "@/components/Low/Select"; import useCodes from "@/hooks/useCodes"; import useUser from "@/hooks/useUser"; import useUsers from "@/hooks/useUsers"; @@ -31,10 +32,18 @@ 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 [filteredCodes, setFilteredCodes] = useState([]); const {users} = useUsers(); const {codes, reload} = useCodes(user?.type === "corporate" ? user?.id : undefined); + useEffect(() => { + if (!filteredCorporate) return setFilteredCodes(codes); + + setFilteredCodes(codes.filter((x) => x.creator === filteredCorporate.id)); + }, [codes, filteredCorporate]); + const toggleCode = (id: string) => { setSelectedCodes((prev) => (prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id])); }; @@ -139,23 +148,52 @@ export default function CodeList({user}: {user: User}) { ]; const table = useReactTable({ - data: codes, + data: filteredCodes, columns: defaultColumns, getCoreRowModel: getCoreRowModel(), }); return ( <> -
- {selectedCodes.length} code(s) selected - +
+