mirror of
https://github.com/getpaseo/paseo.git
synced 2026-10-14 13:22:37 +00:00
* 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
43 lines
1.6 KiB
TypeScript
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,
|
|
),
|
|
},
|
|
),
|
|
);
|