Skip to content
File

Blob: src/client/stores/shared-inbox.ts

typescript48 lines
1import { create } from "zustand";
2import type { SharedWithMeItem, SharedInboxWorkspaceSummary } from "@/shared/types";
3 
4export interface SharedInboxState {
5 items: SharedWithMeItem[];
6 workspaceSummaries: SharedInboxWorkspaceSummary[];
7}
8 
9const initialState: SharedInboxState = {
10 items: [],
11 workspaceSummaries: [],
12};
13 
14export const useSharedInboxStore = create<SharedInboxState>(() => initialState);
15 
16export function applySharedInboxProjection(projection: SharedInboxState): void {
17 useSharedInboxStore.setState(projection, true);
18}
19 
20export function resetSharedInboxProjection(): void {
21 useSharedInboxStore.setState(initialState, true);
22}
23 
24export function selectSharedInboxItems(state: SharedInboxState): SharedWithMeItem[] {
25 return state.items;
26}
27 
28export function selectSharedInboxWorkspaceSummaries(state: SharedInboxState): SharedInboxWorkspaceSummary[] {
29 return state.workspaceSummaries;
30}
31 
32export interface SharedInboxView {
33 items: SharedWithMeItem[];
34 workspaceSummaries: SharedInboxWorkspaceSummary[];
35}
36 
37export function selectSharedInboxView(state: SharedInboxState): SharedInboxView {
38 return { items: state.items, workspaceSummaries: state.workspaceSummaries };
39}
40 
41export function useSharedInboxItems(): SharedWithMeItem[] {
42 return useSharedInboxStore(selectSharedInboxItems);
43}
44 
45export function useSharedInboxWorkspaceSummaries(): SharedInboxWorkspaceSummary[] {
46 return useSharedInboxStore(selectSharedInboxWorkspaceSummaries);
47}