From d7a90f47d0ab5431a86fdbdeca43dd22327a65fb Mon Sep 17 00:00:00 2001 From: Hafid Nur Date: Mon, 31 Mar 2025 22:46:09 +0700 Subject: [PATCH] feat: dynamic radio button for Filter component --- apps/backoffice/src/app/prizes/page.tsx | 14 ++++- apps/backoffice/src/app/transactions/page.tsx | 15 +++++- libs/ui/src/organisms/filter/filter.tsx | 53 ++++++++++++------- 3 files changed, 60 insertions(+), 22 deletions(-) diff --git a/apps/backoffice/src/app/prizes/page.tsx b/apps/backoffice/src/app/prizes/page.tsx index 72a77ec..1e15a2a 100644 --- a/apps/backoffice/src/app/prizes/page.tsx +++ b/apps/backoffice/src/app/prizes/page.tsx @@ -66,6 +66,11 @@ export const Components: FC = (): ReactElement => { const [rowSelection, setRowSelection] = React.useState({}); const [showFilter, setShowFilter] = useState(false); + const deliveryOptions = [ + { id: 'option1', value: 'undelivered', label: 'Undelivered' }, + { id: 'option1', value: 'delivered', label: 'Delivered' }, + ]; + const columns: ColumnDef[] = [ { id: 'select', @@ -214,7 +219,14 @@ export const Components: FC = (): ReactElement => { {showFilter && (
- setShowFilter(false)} /> + setShowFilter(false)} + onFilterChange={(value) => { + console.log('Selected filter:', value); + // Filter logic di sini + }} + />
)} diff --git a/apps/backoffice/src/app/transactions/page.tsx b/apps/backoffice/src/app/transactions/page.tsx index dec6413..f2f5070 100644 --- a/apps/backoffice/src/app/transactions/page.tsx +++ b/apps/backoffice/src/app/transactions/page.tsx @@ -50,6 +50,12 @@ export const Components: FC = (): ReactElement => { const [rowSelection, setRowSelection] = React.useState({}); const [showFilter, setShowFilter] = useState(false); + const validationOptions = [ + { id: 'option1', value: 'unchecked', label: 'Unchecked' }, + { id: 'option2', value: 'valid', label: 'Valid' }, + { id: 'option3', value: 'invalid', label: 'Invalid' }, + ]; + const columns: ColumnDef[] = [ { id: 'select', @@ -174,7 +180,14 @@ export const Components: FC = (): ReactElement => { {showFilter && (
- setShowFilter(false)} /> + setShowFilter(false)} + onFilterChange={(value) => { + console.log('Selected filter:', value); + // Filter logic di sini + }} + />
)} diff --git a/libs/ui/src/organisms/filter/filter.tsx b/libs/ui/src/organisms/filter/filter.tsx index 268a36c..b0119cb 100644 --- a/libs/ui/src/organisms/filter/filter.tsx +++ b/libs/ui/src/organisms/filter/filter.tsx @@ -42,13 +42,31 @@ const Radio = ({ interface FilterProps { onClose?: () => void; + options: Array<{ + id: string; + value: string; + label: string; + }>; + selectedValue?: string; + onFilterChange?: (value: string) => void; + title?: string; } -export const Filter = ({ onClose }: FilterProps) => { - const [selectedStatus, setSelectedStatus] = useState('delivered'); +export const Filter = ({ + onClose, + options, + selectedValue, + onFilterChange, + title = 'Status', +}: FilterProps) => { + const [selectedStatus, setSelectedStatus] = useState( + selectedValue || options[0]?.value || '' + ); const handleStatusChange = (e: React.ChangeEvent) => { - setSelectedStatus(e.target.value); + const newValue = e.target.value; + setSelectedStatus(newValue); + onFilterChange?.(newValue); }; return ( @@ -63,24 +81,19 @@ export const Filter = ({ onClose }: FilterProps) => {
- Status + {title}
- - + {options.map((option) => ( + + ))}
);