66 * workspace" while the underlying storage is keyed by workspace id.
77 */
88
9- import { atom , type Getter } from "jotai" ;
9+ import { atom , type Getter , type WritableAtom } from "jotai" ;
1010import { atomWithStorage , createJSONStorage } from "jotai/utils" ;
11- import { atomFamily } from "jotai-family" ;
11+ import { type AtomFamily , atomFamily } from "jotai-family" ;
1212import type { SetStateAction } from "react" ;
1313import { resolvedActiveWorkspaceIdAtom } from "../../../atoms/workspaces" ;
1414
@@ -17,8 +17,7 @@ export type DesktopSidebarView =
1717 | "search"
1818 | "source-control"
1919 | "agent-instructions"
20- | "skills"
21- | "extensions" ;
20+ | "skills" ;
2221
2322export interface WorkspaceLayoutState {
2423 focusMode : boolean ;
@@ -37,7 +36,6 @@ const DESKTOP_SIDEBAR_VIEW_VALUES = new Set<DesktopSidebarView>([
3736 "source-control" ,
3837 "agent-instructions" ,
3938 "skills" ,
40- "extensions" ,
4139] ) ;
4240const DEFAULT_WORKSPACE_LAYOUT_STATE : WorkspaceLayoutState = {
4341 focusMode : false ,
@@ -144,7 +142,14 @@ function resolveNextValue<T>(current: T, update: SetStateAction<T>): T {
144142 return typeof update === "function" ? ( update as ( prevState : T ) => T ) ( current ) : update ;
145143}
146144
147- function createWorkspaceLayoutFieldAtomFamily < Key extends keyof WorkspaceLayoutState > ( field : Key ) {
145+ type WorkspaceLayoutFieldAtomFamily < Key extends keyof WorkspaceLayoutState > = AtomFamily <
146+ string ,
147+ WritableAtom < WorkspaceLayoutState [ Key ] , [ update : SetStateAction < WorkspaceLayoutState [ Key ] > ] , void >
148+ > ;
149+
150+ function createWorkspaceLayoutFieldAtomFamily < Key extends keyof WorkspaceLayoutState > (
151+ field : Key
152+ ) : WorkspaceLayoutFieldAtomFamily < Key > {
148153 return atomFamily ( ( workspaceId : string ) =>
149154 atom (
150155 ( get ) => get ( workspaceLayoutStateAtomFamily ( workspaceId ) ) [ field ] ,
@@ -165,8 +170,12 @@ function createWorkspaceLayoutFieldAtomFamily<Key extends keyof WorkspaceLayoutS
165170}
166171
167172function createActiveWorkspaceLayoutFieldAtom < Key extends keyof WorkspaceLayoutState > (
168- family : ReturnType < typeof createWorkspaceLayoutFieldAtomFamily < Key > >
169- ) {
173+ family : WorkspaceLayoutFieldAtomFamily < Key >
174+ ) : WritableAtom <
175+ WorkspaceLayoutState [ Key ] ,
176+ [ update : SetStateAction < WorkspaceLayoutState [ Key ] > ] ,
177+ void
178+ > {
170179 return atom (
171180 ( get ) => get ( family ( resolveWorkspaceLayoutId ( get ) ) ) ,
172181 ( get , set , update : SetStateAction < WorkspaceLayoutState [ Key ] > ) => {
@@ -196,17 +205,17 @@ export const desktopSidebarViewAtomFamily =
196205export const terminalPanelVisibleAtomFamily =
197206 createWorkspaceLayoutFieldAtomFamily ( "terminalPanelVisible" ) ;
198207
199- export const focusModeAtom = createActiveWorkspaceLayoutFieldAtom ( focusModeAtomFamily ) ;
200- export const leftPanelWidthAtom = createActiveWorkspaceLayoutFieldAtom ( leftPanelWidthAtomFamily ) ;
201- export const bottomPanelHeightAtom = createActiveWorkspaceLayoutFieldAtom (
208+ export const focusModeAtom = createActiveWorkspaceLayoutFieldAtom < "focusMode" > ( focusModeAtomFamily ) ;
209+ export const leftPanelWidthAtom =
210+ createActiveWorkspaceLayoutFieldAtom < "leftPanelWidth" > ( leftPanelWidthAtomFamily ) ;
211+ export const bottomPanelHeightAtom = createActiveWorkspaceLayoutFieldAtom < "bottomPanelHeight" > (
202212 bottomPanelHeightAtomFamily
203213) ;
204- export const sidebarCollapsedAtom = createActiveWorkspaceLayoutFieldAtom (
214+ export const sidebarCollapsedAtom = createActiveWorkspaceLayoutFieldAtom < "sidebarCollapsed" > (
205215 sidebarCollapsedAtomFamily
206216) ;
207- export const desktopSidebarViewAtom = createActiveWorkspaceLayoutFieldAtom (
217+ export const desktopSidebarViewAtom = createActiveWorkspaceLayoutFieldAtom < "desktopSidebarView" > (
208218 desktopSidebarViewAtomFamily
209219) ;
210- export const terminalPanelVisibleAtom = createActiveWorkspaceLayoutFieldAtom (
211- terminalPanelVisibleAtomFamily
212- ) ;
220+ export const terminalPanelVisibleAtom =
221+ createActiveWorkspaceLayoutFieldAtom < "terminalPanelVisible" > ( terminalPanelVisibleAtomFamily ) ;
0 commit comments