Files
lti-web-client/src/stores/ui/slices/drawer.slice.ts
T
2025-12-02 11:01:53 +07:00

41 lines
1004 B
TypeScript

import { DrawerUISlice } from '@/types/stores';
import { StateCreator } from 'zustand';
export const createDrawerUISlice: 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));
});
},
});