feat(FE): add drawer ui store

This commit is contained in:
randy-ar
2025-12-01 10:13:28 +07:00
parent 892bb19dfd
commit 2ace95a0db
6 changed files with 89 additions and 9 deletions
+40
View File
@@ -0,0 +1,40 @@
import { StateCreator } from 'zustand';
import { DrawerUiSlice } from '@/types/stores';
export const createFormDrawerUiSlice: StateCreator<
DrawerUiSlice,
[],
[],
DrawerUiSlice
> = (set, get, api) => ({
// event flag untuk memicu formik validate
triggerValidate: false,
// dibalik untuk memicu event
toggleValidate: () => {
const current = get().triggerValidate;
set({ triggerValidate: !current });
},
// sistem subscriber sederhana agar form bisa listen perubahan flag
subscribeValidate: (callback: () => void) => {
let prev = get().triggerValidate;
const unsub = api.subscribe((state) => {
if (state.triggerValidate !== prev) {
prev = state.triggerValidate;
callback();
}
});
return unsub;
},
isValid: false,
setIsValid: (isValid: boolean) => set({ isValid }),
subscribeIsValid: (callback: (isValid: boolean) => void) => {
return api.subscribe((state) => {
callback(Boolean(state.isValid));
});
},
});
+2
View File
@@ -5,11 +5,13 @@ import { devtools } from 'zustand/middleware';
import { UIStore } from '@/types/stores';
import { createMainUiSlice } from '@/stores/ui/slices/main.slice';
import { createFormDrawerUiSlice } from '@/stores/ui/slices/drawer.slice';
export const useUiStore = create<UIStore>()(
devtools(
(...args) => ({
...createMainUiSlice(...args),
...createFormDrawerUiSlice(...args),
}),
{
name: 'UIStore',