From 9a650a130db6f76f9eff30154b2a3acb0e18c787 Mon Sep 17 00:00:00 2001 From: rstubryan Date: Tue, 18 Nov 2025 13:35:58 +0700 Subject: [PATCH] feat(FE-208): enhance PurchaseTable with improved state management and memoization --- .../pages/purchase/PurchaseTable.tsx | 318 ++++++++++-------- 1 file changed, 172 insertions(+), 146 deletions(-) diff --git a/src/components/pages/purchase/PurchaseTable.tsx b/src/components/pages/purchase/PurchaseTable.tsx index c8a75694..f48d1da6 100644 --- a/src/components/pages/purchase/PurchaseTable.tsx +++ b/src/components/pages/purchase/PurchaseTable.tsx @@ -1,6 +1,6 @@ 'use client'; -import { ChangeEventHandler, useState } from 'react'; +import { ChangeEventHandler, useCallback, useMemo, useState } from 'react'; import useSWR from 'swr'; import { CellContext, ColumnDef, SortingState } from '@tanstack/react-table'; import toast from 'react-hot-toast'; @@ -10,7 +10,6 @@ import Table from '@/components/Table'; import DebouncedTextInput from '@/components/input/DebouncedTextInput'; import Button from '@/components/Button'; import { useModal } from '@/components/Modal'; -import Modal from '@/components/Modal'; import ConfirmationModal from '@/components/modal/ConfirmationModal'; import SelectInput, { OptionType, @@ -23,20 +22,25 @@ import RowOptionsMenuWrapper from '@/components/table/RowOptionsMenuWrapper'; import { cn, formatDate, formatCurrency } from '@/lib/helper'; import { isResponseSuccess } from '@/lib/api-helper'; + import { useTableFilter } from '@/services/hooks/useTableFilter'; import { ROWS_OPTIONS } from '@/config/constant'; import { Purchase } from '@/types/api/purchase/purchase'; import { PurchaseRequestApi } from '@/services/api/purchase'; +import { SupplierApi } from '@/services/api/master-data'; + +// ===== INTERFACES ===== +interface RowOptionsMenuProps { + type: 'dropdown' | 'collapse'; + props: CellContext; + deleteClickHandler: () => void; +} const RowOptionsMenu = ({ type = 'dropdown', props, deleteClickHandler, -}: { - type: 'dropdown' | 'collapse'; - props: CellContext; - deleteClickHandler: () => void; -}) => { +}: RowOptionsMenuProps) => { return (