refactor(FE): Refactor chickin approval modal logic into Zustand store

This commit is contained in:
rstubryan
2026-02-19 15:22:28 +07:00
parent a4ff92520a
commit 6ac903313c
4 changed files with 147 additions and 43 deletions
@@ -0,0 +1,19 @@
'use client';
import { create } from 'zustand';
import { devtools } from 'zustand/middleware';
import { createChickinApprovalSlice } from '@/stores/production/chickin/slices/chickin-approval.slice';
import { ChickinApprovalSlice } from '@/stores/production/chickin/slices/chickin-approval.slice';
export type ChickinStore = ChickinApprovalSlice;
export const useChickinStore = create<ChickinStore>()(
devtools(
(...args) => ({
...createChickinApprovalSlice(...args),
}),
{
name: 'ChickinStore',
}
)
);
@@ -0,0 +1,58 @@
import { StateCreator } from 'zustand';
import { ProjectFlockKandang } from '@/types/api/production/project-flock-kandang';
export type ChickinApprovalSlice = {
// State
isChickinApproveModalOpen: boolean;
selectedChickinForApproval: ProjectFlockKandang | null;
isChickinApproveLoading: boolean;
chickinApproveCallback: ((notes?: string) => Promise<void>) | null;
// Actions
openChickinApproveModal: (
data: ProjectFlockKandang,
callback: (notes?: string) => Promise<void>
) => void;
closeChickinApproveModal: () => void;
setChickinApproveLoading: (loading: boolean) => void;
resetChickinApproval: () => void;
};
export const createChickinApprovalSlice: StateCreator<
ChickinApprovalSlice,
[],
[],
ChickinApprovalSlice
> = (set) => ({
// Initial state
isChickinApproveModalOpen: false,
selectedChickinForApproval: null,
isChickinApproveLoading: false,
chickinApproveCallback: null,
// Actions
openChickinApproveModal: (data, callback) =>
set({
isChickinApproveModalOpen: true,
selectedChickinForApproval: data,
chickinApproveCallback: callback,
}),
closeChickinApproveModal: () =>
set({
isChickinApproveModalOpen: false,
selectedChickinForApproval: null,
chickinApproveCallback: null,
}),
setChickinApproveLoading: (loading) =>
set({ isChickinApproveLoading: loading }),
resetChickinApproval: () =>
set({
isChickinApproveModalOpen: false,
selectedChickinForApproval: null,
isChickinApproveLoading: false,
chickinApproveCallback: null,
}),
});