refactor(FE-316): Extract uniformity slice and add types

This commit is contained in:
rstubryan
2025-12-29 14:24:23 +07:00
parent 39f2fc48a8
commit ded1cc1f62
3 changed files with 92 additions and 50 deletions
@@ -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,
}),
});
+10 -50
View File
@@ -1,58 +1,18 @@
'use client';
import { create } from 'zustand'; import { create } from 'zustand';
import { devtools } from 'zustand/middleware'; 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 = { export const useUniformityStore = create<UniformityStore>()(
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<UniformityState>()(
devtools( devtools(
(set) => ({ (...args) => ({
// Initial state ...createUniformitySlice(...args),
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,
}),
}), }),
{ {
name: 'UniformityStore', name: 'UniformityStore',
+24
View File
@@ -46,3 +46,27 @@ type ProductionStandardFormSlice = {
}; };
export type FormStore = 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;