Files
paseo/packages/app/src/stores/sidebar-collapsed-sections-store/index.ts
T
Mohamed Boudra 31ae545289 Group and clear workspace status in the sidebar (#1317)
* Add status grouping to the workspace sidebar

* Mark workspaces as read from the sidebar

* Clean package builds before release checks

* Fix sidebar status follow-up checks
2026-06-04 01:20:20 +08:00

43 lines
1.6 KiB
TypeScript

import AsyncStorage from "@react-native-async-storage/async-storage";
import { create } from "zustand";
import { createJSONStorage, persist } from "zustand/middleware";
import {
type CollapsedProjectsState,
mergePersistedCollapsedProjects,
serializeCollapsedProjects,
setProjectCollapsed,
toggleProjectCollapsed,
toggleStatusGroupCollapsed,
} from "./state";
interface SidebarCollapsedSectionsState extends CollapsedProjectsState {
toggleProjectCollapsed: (projectKey: string) => void;
setProjectCollapsed: (projectKey: string, collapsed: boolean) => void;
toggleStatusGroupCollapsed: (statusGroupKey: string) => void;
}
export const useSidebarCollapsedSectionsStore = create<SidebarCollapsedSectionsState>()(
persist(
(set) => ({
collapsedProjectKeys: new Set(),
collapsedStatusGroupKeys: new Set(),
toggleProjectCollapsed: (projectKey) =>
set((state) => toggleProjectCollapsed(state, projectKey)),
setProjectCollapsed: (projectKey, collapsed) =>
set((state) => setProjectCollapsed(state, projectKey, collapsed)),
toggleStatusGroupCollapsed: (statusGroupKey) =>
set((state) => toggleStatusGroupCollapsed(state, statusGroupKey)),
}),
{
name: "sidebar-collapsed-sections",
storage: createJSONStorage(() => AsyncStorage),
partialize: (state) => serializeCollapsedProjects(state),
merge: (persistedState, currentState) =>
mergePersistedCollapsedProjects(
persistedState as { collapsedProjectKeys?: unknown } | undefined,
currentState,
),
},
),
);