diff --git a/src/app/closing/detail/page.tsx b/src/app/closing/detail/page.tsx index 309addbd..8f164f44 100644 --- a/src/app/closing/detail/page.tsx +++ b/src/app/closing/detail/page.tsx @@ -3,7 +3,7 @@ import { useRouter, useSearchParams } from 'next/navigation'; import useSWR from 'swr'; -import ClosingDetail from '@/components/pages/closing/ClosingDetail'; +import ClosingDetail from '@/components/pages/closing/ClosingDetailTabs'; import { ClosingApi } from '@/services/api/closing'; import { isResponseError, isResponseSuccess } from '@/lib/api-helper'; diff --git a/src/components/pages/closing/ClosingDetail.tsx b/src/components/pages/closing/ClosingDetailTabs.tsx similarity index 86% rename from src/components/pages/closing/ClosingDetail.tsx rename to src/components/pages/closing/ClosingDetailTabs.tsx index 9100186b..2ec3fe1e 100644 --- a/src/components/pages/closing/ClosingDetail.tsx +++ b/src/components/pages/closing/ClosingDetailTabs.tsx @@ -5,7 +5,7 @@ import { useMemo, useState } from 'react'; import { Icon } from '@iconify/react'; import Button from '@/components/Button'; import Tabs from '@/components/Tabs'; -import ClosingGeneralInformationTable from '@/components/pages/closing/ClosingGeneralInformationTable'; +import ClosingGeneralInformationTable from '@/components/pages/closing/table/ClosingGeneralInformationTable'; import SapronakClosingTab from '@/components/pages/closing/tab/SapronakClosingTab'; import ProductionDataClosingTab from '@/components/pages/closing/tab/ProductionDataClosingTab'; @@ -22,6 +22,7 @@ import HppExpeditionClosingTable from './table/HppExpeditionClosingTable'; import ClosingKandangList from '@/components/pages/closing/ClosingKandangList'; import { ProjectFlock } from '@/types/api/production/project-flock'; import { ProjectFlockKandang } from '@/types/api/production/project-flock-kandang'; +import { useClosingTabStore } from '@/stores/closing/closing-tab.store'; interface ClosingDetailProps { id: number; initialValue?: ClosingGeneralInformation; @@ -39,7 +40,8 @@ const ClosingDetail: React.FC = ({ projectData, kandangData, }) => { - const [activeTab, setActiveTab] = useState('sapronak'); + const [activeTabId, setActiveTabId] = useState('sapronak'); + const tabActions = useClosingTabStore((state) => state.tabActions); const closingDetailTabs = useMemo(() => { const validTabs = [ @@ -94,7 +96,7 @@ const ClosingDetail: React.FC = ({ ]; return validTabs; - }, [initialValue]); + }, [initialValue, salesData, kandangData, id]); return ( <> @@ -128,13 +130,17 @@ const ClosingDetail: React.FC = ({ )} diff --git a/src/components/pages/closing/ClosingGeneralInformationTable.tsx b/src/components/pages/closing/table/ClosingGeneralInformationTable.tsx similarity index 100% rename from src/components/pages/closing/ClosingGeneralInformationTable.tsx rename to src/components/pages/closing/table/ClosingGeneralInformationTable.tsx diff --git a/src/stores/closing/closing-tab.store.ts b/src/stores/closing/closing-tab.store.ts new file mode 100644 index 00000000..1f81c26a --- /dev/null +++ b/src/stores/closing/closing-tab.store.ts @@ -0,0 +1,21 @@ +'use client'; + +import { create } from 'zustand'; +import { devtools } from 'zustand/middleware'; +import { + createClosingTabSlice, + ClosingTabSlice, +} from '@/stores/closing/slices/closing-tab.slice'; + +export type ClosingTabStore = ClosingTabSlice; + +export const useClosingTabStore = create()( + devtools( + (...args) => ({ + ...createClosingTabSlice(...args), + }), + { + name: 'ClosingTabStore', + } + ) +); diff --git a/src/stores/closing/slices/closing-tab.slice.ts b/src/stores/closing/slices/closing-tab.slice.ts new file mode 100644 index 00000000..cd47bbdc --- /dev/null +++ b/src/stores/closing/slices/closing-tab.slice.ts @@ -0,0 +1,37 @@ +import { ReactNode } from 'react'; +import { StateCreator } from 'zustand'; + +export type ClosingTabSlice = { + // State - actions per tab ID + tabActions: Record; + + // Actions + setTabActions: (tabId: string, actions: ReactNode) => void; + clearTabActions: (tabId: string) => void; + clearAllTabActions: () => void; +}; + +export const createClosingTabSlice: StateCreator< + ClosingTabSlice, + [], + [], + ClosingTabSlice +> = (set) => ({ + tabActions: {}, + + setTabActions: (tabId, actions) => + set((state) => ({ + tabActions: { + ...state.tabActions, + [tabId]: actions, + }, + })), + + clearTabActions: (tabId) => + set((state) => { + const { [tabId]: _, ...rest } = state.tabActions; + return { tabActions: rest }; + }), + + clearAllTabActions: () => set({ tabActions: {} }), +});