mirror of
https://gitlab.com/mbugroup/lti-web-client.git
synced 2026-05-20 13:32:00 +00:00
49 lines
1.3 KiB
TypeScript
49 lines
1.3 KiB
TypeScript
import { DrawerUISlice } from '@/types/stores';
|
|
import { StateCreator } from 'zustand';
|
|
import { ReactNode } from 'react';
|
|
|
|
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));
|
|
});
|
|
},
|
|
|
|
expandedDrawerOpen: false,
|
|
setExpandedDrawerOpen: (open: boolean) => set({ expandedDrawerOpen: open }),
|
|
|
|
expandedDrawerContent: null as ReactNode | null,
|
|
setExpandedDrawerContent: (content: ReactNode) =>
|
|
set({ expandedDrawerContent: content }),
|
|
});
|