forked from defunkt/toes
42 lines
1.2 KiB
TypeScript
42 lines
1.2 KiB
TypeScript
import type { App } from '../shared/types'
|
|
|
|
// UI state (survives re-renders)
|
|
export let selectedApp: string | null = localStorage.getItem('selectedApp')
|
|
export let sidebarCollapsed: boolean = localStorage.getItem('sidebarCollapsed') === 'true'
|
|
export let sidebarSection: 'apps' | 'tools' = (localStorage.getItem('sidebarSection') as 'apps' | 'tools') || 'apps'
|
|
|
|
// Server state (from SSE)
|
|
export let apps: App[] = []
|
|
|
|
// Tab state
|
|
export let selectedTab: string = localStorage.getItem('selectedTab') || 'overview'
|
|
|
|
// State setters
|
|
export function setSelectedApp(name: string | null) {
|
|
selectedApp = name
|
|
if (name) {
|
|
localStorage.setItem('selectedApp', name)
|
|
} else {
|
|
localStorage.removeItem('selectedApp')
|
|
}
|
|
}
|
|
|
|
export function setSidebarCollapsed(collapsed: boolean) {
|
|
sidebarCollapsed = collapsed
|
|
localStorage.setItem('sidebarCollapsed', String(collapsed))
|
|
}
|
|
|
|
export function setSidebarSection(section: 'apps' | 'tools') {
|
|
sidebarSection = section
|
|
localStorage.setItem('sidebarSection', section)
|
|
}
|
|
|
|
export function setApps(newApps: App[]) {
|
|
apps = newApps
|
|
}
|
|
|
|
export function setSelectedTab(tab: string) {
|
|
selectedTab = tab
|
|
localStorage.setItem('selectedTab', tab)
|
|
}
|