diff --git a/src/components/pages/closing/sale/SalesReportTable.tsx b/src/components/pages/closing/sale/SalesReportTable.tsx index 6ddd9e4f..99868984 100644 --- a/src/components/pages/closing/sale/SalesReportTable.tsx +++ b/src/components/pages/closing/sale/SalesReportTable.tsx @@ -112,12 +112,16 @@ const SalesReportTable = ({
Total Penjualan
), }, - // { - // id: 'age', - // accessorKey: 'age', - // header: 'Umur', - // cell: (props) => props.getValue() || '-', - // }, + { + id: 'age', + accessorKey: 'age', + header: 'Umur', + cell: (props) => { + const age = props.row.original.age; + const week = props.row.original.week; + return age && week ? `${age} hari (${week} minggu)` : '-'; + }, + }, { id: 'do_number', accessorKey: 'do_number', diff --git a/src/components/pages/dashboard/DashboardProduction.tsx b/src/components/pages/dashboard/DashboardProduction.tsx index dd4abd47..c2b62473 100644 --- a/src/components/pages/dashboard/DashboardProduction.tsx +++ b/src/components/pages/dashboard/DashboardProduction.tsx @@ -8,7 +8,7 @@ import SelectInput, { OptionType, useSelect, } from '@/components/input/SelectInput'; -import { useState, useEffect, useRef } from 'react'; +import { useState, useEffect, useRef, useCallback } from 'react'; import useSWR from 'swr'; import { DashboardApi } from '@/services/api/dashboard'; import { useFormik } from 'formik'; @@ -91,7 +91,6 @@ const DashboardProduction = () => { isLoadingOptions: isLoadingFlockOptions, loadMore: loadMoreFlock, } = useSelect(ProjectFlockApi.basePath, 'id', 'flock_name', '', { - limit: 'limit', location_id: selectedLocationIds ? selectedLocationIds.toString() : '', }); const { @@ -99,16 +98,13 @@ const DashboardProduction = () => { options: locationOptions, isLoadingOptions: isLoadingLocationOptions, loadMore: loadMoreLocation, - } = useSelect(LocationApi.basePath, 'id', 'name', '', { - limit: 'limit', - }); + } = useSelect(LocationApi.basePath, 'id', 'name'); const { setInputValue: setInputValueKandang, options: kandangOptions, isLoadingOptions: isLoadingKandangOptions, loadMore: loadMoreKandang, } = useSelect(KandangApi.basePath, 'id', 'name', '', { - limit: 'limit', location_id: selectedLocationIds ? selectedLocationIds.toString() : '', }); const comparisonTypeOptions = [ @@ -120,17 +116,18 @@ const DashboardProduction = () => { // ===== FORMIK ===== const formik = useFormik({ initialValues: { - startDate: filterValues.startDate || '', - endDate: filterValues.endDate || '', - flock: filterValues.flock || ([] as OptionType[]), - location: filterValues.location || ([] as OptionType[]), - kandang: filterValues.kandang || ([] as OptionType[]), - analysisMode: filterValues.analysisMode || analysisMode, - comparisonType: filterValues.comparisonType || '', - locationIds: filterValues.locationIds || [], - flockIds: filterValues.flockIds || [], - kandangIds: filterValues.kandangIds || [], + startDate: filterValues.startDate ?? '', + endDate: filterValues.endDate ?? '', + flock: filterValues.flock ?? ([] as OptionType[]), + location: filterValues.location ?? ([] as OptionType[]), + kandang: filterValues.kandang ?? ([] as OptionType[]), + analysisMode: filterValues.analysisMode ?? analysisMode, + comparisonType: filterValues.comparisonType ?? '', + locationIds: filterValues.locationIds ?? [], + flockIds: filterValues.flockIds ?? [], + kandangIds: filterValues.kandangIds ?? [], } as DashboardFilterType, + enableReinitialize: true, validationSchema: getDashboardFilterSchema(analysisMode), onSubmit: (values) => { // Save filter values to store @@ -148,13 +145,13 @@ const DashboardProduction = () => { }, }); - const handleResetFilter = () => { + const handleResetFilter = useCallback(() => { formik.resetForm(); resetFilterValues(); // Clear stored filter values setAnalysisMode('OVERVIEW'); setEndpointUrl('/dashboards'); setSelectedLocationIds([]); - }; + }, [resetFilterValues, filterValues, selectedLocationIds]); const handleApplyFilter = (values: DashboardFilter) => { // Build query params object, only include non-empty values @@ -444,7 +441,13 @@ const DashboardProduction = () => { )?.value === 'FARM' ? ( { @@ -466,7 +469,13 @@ const DashboardProduction = () => { ) : ( { @@ -502,7 +511,13 @@ const DashboardProduction = () => { )?.value === 'FLOCK' ? ( formik.setFieldValue('flock', selected) } @@ -519,7 +534,13 @@ const DashboardProduction = () => { ) : ( formik.setFieldValue('flock', selected) } @@ -548,7 +569,13 @@ const DashboardProduction = () => { )?.value === 'KANDANG' ? ( formik.setFieldValue('kandang', selected) } @@ -565,7 +592,13 @@ const DashboardProduction = () => { ) : ( formik.setFieldValue('kandang', selected) } diff --git a/src/components/pages/finance/FinanceTable.tsx b/src/components/pages/finance/FinanceTable.tsx index 505e411f..c6584b96 100644 --- a/src/components/pages/finance/FinanceTable.tsx +++ b/src/components/pages/finance/FinanceTable.tsx @@ -1,4 +1,10 @@ -import { ChangeEventHandler, useMemo, useState } from 'react'; +import { + ChangeEventHandler, + useEffect, + useMemo, + useRef, + useState, +} from 'react'; import { CellContext } from '@tanstack/react-table'; import { useSearchParams } from 'next/navigation'; import useSWR from 'swr'; @@ -33,6 +39,7 @@ import RequirePermission from '@/components/helper/RequirePermission'; import { Icon } from '@iconify/react'; import RowDropdownOptions from '@/components/table/RowDropdownOptions'; import RowCollapseOptions from '@/components/table/RowCollapseOptions'; +import { useUiStore } from '@/stores/ui/ui.store'; const RowOptionsMenu = ({ type = 'dropdown', @@ -133,6 +140,9 @@ const RowOptionsMenu = ({ }; const FinanceTable = () => { + const { searchValue, setSearchValue, resetSearchValue } = useUiStore(); + const previousPathRef = useRef(null); + const { state: tableFilterState, updateFilter, @@ -141,7 +151,7 @@ const FinanceTable = () => { toQueryString: getTableFilterQueryString, } = useTableFilter({ initial: { - search: '', + search: searchValue, transactionType: '', bankId: '', customerId: '', @@ -167,7 +177,7 @@ const FinanceTable = () => { const [searchParams, setSearchParams] = useSearchParams(); const deleteModal = useModal(); const [pendingFilters, setPendingFilters] = useState({ - search: '', + search: searchValue, transactionType: '', bankId: '', customerId: '', @@ -296,6 +306,7 @@ const FinanceTable = () => { }; const submitFilterHandler = () => { updateFilter('search', pendingFilters.search); + setSearchValue(pendingFilters.search); updateFilter('transactionType', pendingFilters.transactionType); updateFilter('bankId', pendingFilters.bankId); updateFilter('customerId', pendingFilters.customerId); @@ -324,6 +335,7 @@ const FinanceTable = () => { setPendingFilters(emptyFilters); updateFilter('search', ''); + resetSearchValue(); updateFilter('transactionType', ''); updateFilter('bankId', ''); updateFilter('customerId', ''); @@ -447,6 +459,26 @@ const FinanceTable = () => { }, ]; }, []); + + useEffect(() => { + // Store current path on mount + previousPathRef.current = window.location.pathname; + + return () => { + const currentPath = window.location.pathname; + + // if both paths are within /finance module + const isCurrentPathFinance = currentPath.includes('/finance'); + const isPreviousPathFinance = + previousPathRef.current?.includes('/finance'); + + // reset if we outside finance module entirely + if (isPreviousPathFinance && !isCurrentPathFinance) { + resetSearchValue(); + } + }; + }, [resetSearchValue]); + return (
diff --git a/src/components/pages/finance/add/FormFinanceAdd.tsx b/src/components/pages/finance/add/FormFinanceAdd.tsx index 168d306a..29e311cc 100644 --- a/src/components/pages/finance/add/FormFinanceAdd.tsx +++ b/src/components/pages/finance/add/FormFinanceAdd.tsx @@ -54,9 +54,6 @@ const FormFinanceAdd = ({ }: FormFinanceAddProps) => { const router = useRouter(); const [serverErrorMessage, setServerErrorMessage] = useState(''); - const [isSupplier, setIsSupplier] = useState( - initialValues?.party?.type === 'SUPPLIER' - ); // ===== Formik ===== const formikInitialValues = useMemo((): FinanceFormValues => { @@ -215,7 +212,7 @@ const FormFinanceAdd = ({ ? formik.errors.party_type_option : '' } - isDisabled={type === 'edit' || isSupplier} + isDisabled={type === 'edit'} required isClearable /> @@ -254,7 +251,11 @@ const FormFinanceAdd = ({ } required isClearable - isDisabled={!formik.values.party_type_option?.value || isSupplier} + isDisabled={ + !formik.values.party_type_option?.value || + (type === 'edit' && + formik.values.party_type_option.value == 'SUPPLIER') + } />