DEV Community

Akash Yadav
Akash Yadav

Posted on

useDrawerSheetStore

const useDrawerSheetStore = create((set) => ({
    drawerSheets: {},
    currentRoute: null,
    previousRoute: null,
    addDrawerSheet: (drawerSheetObject) => {
        set((state) => {
            const drawerSheets = { ...state.drawerSheets };

            if (drawerSheets[drawerSheetObject.name]) { drawerSheets[drawerSheetObject.name].children = drawerSheetObject.children }
            else { drawerSheets[drawerSheetObject.name] = drawerSheetObject }

            return { drawerSheets: drawerSheets };
        });
    },
    removeDrawerSheet: (drawerSheetName) => {
        set((state) => {
            const drawerSheets = { ...state.drawerSheets };
            delete drawerSheets[drawerSheetName];
            return { drawerSheets: drawerSheets };
        });
    },
    openDrawerSheet: (drawerSheetName) => {
        set((state) => {
            const drawerSheets = { ...state.drawerSheets };
            drawerSheets[drawerSheetName].open = true;
            return { drawerSheets: drawerSheets };
        });
    },
    closeDrawerSheet: (drawerSheetName) => {
        set((state) => {
            const drawerSheets = { ...state.drawerSheets };
            drawerSheets[drawerSheetName].open = false;
            return { drawerSheets: drawerSheets };
        });
    },
    toggleDrawerSheet: (drawerSheetName) => {
        set((state) => {
            const drawerSheets = { ...state.drawerSheets };
            drawerSheets[drawerSheetName].open = !drawerSheets[drawerSheetName].open;
            return { drawerSheets: drawerSheets };
        });
    },
    updateDrawerSheetOpen: (drawerSheetName, open) => {
        set((state) => {
            const drawerSheets = { ...state.drawerSheets };
            drawerSheets[drawerSheetName].open = open;
            return { drawerSheets: drawerSheets };
        });
    },
    updateNavigationState: (navigationState) => {
        const currentRoute = getCurrentRouteFromNavigationState(navigationState);
        set((state) => ({ currentRoute: currentRoute, previousRoute: state.currentRoute }));
    }
}));

Enter fullscreen mode Exit fullscreen mode

Top comments (0)