diff --git a/src/stores/uniformity/slices/uniformity.slice.ts b/src/stores/uniformity/slices/uniformity.slice.ts new file mode 100644 index 00000000..c3b0fbb6 --- /dev/null +++ b/src/stores/uniformity/slices/uniformity.slice.ts @@ -0,0 +1,58 @@ +import { StateCreator } from 'zustand'; +import { VerifyUniformityResponse } from '@/types/api/uniformity/uniformity'; + +export type UniformityStep = 'preview' | 'result'; + +export type UniformityFormData = { + date: string; + week: number; + project_flock_kandang_id: number; + file: File | null; + fileName: string; +}; + +export type UniformitySlice = { + // State + uniformityStep: UniformityStep; + verifyUniformityResult: VerifyUniformityResponse | null; + uniformityFormData: UniformityFormData | null; + isSuccess: boolean; + + // Actions + setUniformityStep: (step: UniformityStep) => void; + setVerifyUniformityResult: (result: VerifyUniformityResponse | null) => void; + setUniformityFormData: (data: UniformityFormData | null) => void; + setIsSuccess: (success: boolean) => void; + resetUniformity: () => void; +}; + +export const createUniformitySlice: StateCreator< + UniformitySlice, + [], + [], + UniformitySlice +> = (set) => ({ + // Initial state + uniformityStep: 'preview', + verifyUniformityResult: null, + uniformityFormData: null, + isSuccess: false, + + // Actions + setUniformityStep: (step) => set({ uniformityStep: step }), + + setVerifyUniformityResult: (result) => + set({ verifyUniformityResult: result }), + + setUniformityFormData: (data) => set({ uniformityFormData: data }), + + setIsSuccess: (success) => set({ isSuccess: success }), + + resetUniformity: () => + set({ + uniformityStep: 'preview', + verifyUniformityResult: null, + uniformityFormData: null, + isSuccess: false, + }), +}); diff --git a/src/stores/uniformity/uniformity.store.ts b/src/stores/uniformity/uniformity.store.ts index 082a2d5b..da8dc4e3 100644 --- a/src/stores/uniformity/uniformity.store.ts +++ b/src/stores/uniformity/uniformity.store.ts @@ -1,58 +1,18 @@ +'use client'; + import { create } from 'zustand'; import { devtools } from 'zustand/middleware'; -import { VerifyUniformityResponse } from '@/types/api/uniformity/uniformity'; +import { + createUniformitySlice, + UniformitySlice, +} from '@/stores/uniformity/slices/uniformity.slice'; -export type UniformityStep = 'preview' | 'result'; +export type UniformityStore = UniformitySlice; -export type UniformityFormData = { - date: string; - week: number; - project_flock_kandang_id: number; - file: File | null; - fileName: string; -}; - -type UniformityState = { - // State - uniformityStep: UniformityStep; - verifyUniformityResult: VerifyUniformityResponse | null; - uniformityFormData: UniformityFormData | null; - isSuccess: boolean; - - // Actions - setUniformityStep: (step: UniformityStep) => void; - setVerifyUniformityResult: (result: VerifyUniformityResponse | null) => void; - setUniformityFormData: (data: UniformityFormData | null) => void; - setIsSuccess: (success: boolean) => void; - resetUniformity: () => void; -}; - -export const useUniformityStore = create()( +export const useUniformityStore = create()( devtools( - (set) => ({ - // Initial state - uniformityStep: 'preview', - verifyUniformityResult: null, - uniformityFormData: null, - isSuccess: false, - - // Actions - setUniformityStep: (step) => set({ uniformityStep: step }), - - setVerifyUniformityResult: (result) => - set({ verifyUniformityResult: result }), - - setUniformityFormData: (data) => set({ uniformityFormData: data }), - - setIsSuccess: (success) => set({ isSuccess: success }), - - resetUniformity: () => - set({ - uniformityStep: 'preview', - verifyUniformityResult: null, - uniformityFormData: null, - isSuccess: false, - }), + (...args) => ({ + ...createUniformitySlice(...args), }), { name: 'UniformityStore', diff --git a/src/types/stores.d.ts b/src/types/stores.d.ts index b9145459..c1281437 100644 --- a/src/types/stores.d.ts +++ b/src/types/stores.d.ts @@ -46,3 +46,27 @@ type ProductionStandardFormSlice = { }; export type FormStore = ProductionStandardFormSlice; + +type UniformityStep = 'preview' | 'result'; + +type UniformityFormData = { + date: string; + week: number; + project_flock_kandang_id: number; + file: File | null; + fileName: string; +}; + +type UniformitySlice = { + uniformityStep: UniformityStep; + verifyUniformityResult: VerifyUniformityResponse | null; + uniformityFormData: UniformityFormData | null; + isSuccess: boolean; + setUniformityStep: (step: UniformityStep) => void; + setVerifyUniformityResult: (result: VerifyUniformityResponse | null) => void; + setUniformityFormData: (data: UniformityFormData | null) => void; + setIsSuccess: (success: boolean) => void; + resetUniformity: () => void; +}; + +export type UniformityStore = UniformitySlice;