fix app tabs

This commit is contained in:
Chris Wanstrath 2026-02-04 08:27:07 -08:00
parent ed200431f2
commit d8769b2d9d
4 changed files with 17 additions and 10 deletions

View File

@ -2,7 +2,7 @@ import { define } from '@because/forge'
import type { App } from '../../shared/types'
import { restartApp, startApp, stopApp } from '../api'
import { openDeleteAppModal, openRenameAppModal } from '../modals'
import { apps, selectedTab } from '../state'
import { apps, getSelectedTab } from '../state'
import {
ActionBar,
Button,
@ -44,6 +44,7 @@ const OpenEmojiPicker = define('OpenEmojiPicker', {
export function AppDetail({ app, render }: { app: App, render: () => void }) {
// Find all tools
const tools = apps.filter(a => a.tool)
const selectedTab = getSelectedTab(app.name)
return (
<Main>

View File

@ -1,16 +1,18 @@
import type { App } from '../../shared/types'
import { apps, selectedApp, selectedTab, setSelectedTab } from '../state'
import { apps, getSelectedTab, setSelectedTab } from '../state'
import { Tab, TabBar } from '../styles'
import { resetToolIframe } from '../tool-iframes'
export function Nav({ app, render }: { app: App; render: () => void }) {
const selectedTab = getSelectedTab(app.name)
const handleTabClick = (tab: string) => {
// If clicking already-selected tool tab, reset to home
if (tab === selectedTab && tab !== 'overview') {
resetToolIframe(tab, selectedApp)
resetToolIframe(tab, app.name)
return
}
setSelectedTab(tab)
setSelectedTab(app.name, tab)
render()
}

View File

@ -1,6 +1,6 @@
import { render as renderApp } from 'hono/jsx/dom'
import { Dashboard } from './components'
import { apps, selectedApp, selectedTab, setApps, setSelectedApp } from './state'
import { apps, getSelectedTab, selectedApp, setApps, setSelectedApp } from './state'
import { initModal } from './components/modal'
import { initToolIframes, updateToolIframes } from './tool-iframes'
import { initUpdate } from './update'
@ -10,7 +10,7 @@ const render = () => {
// Update tool iframes after DOM settles
requestAnimationFrame(() => {
const tools = apps.filter(a => a.tool)
updateToolIframes(selectedTab, tools, selectedApp)
updateToolIframes(getSelectedTab(selectedApp), tools, selectedApp)
})
}

View File

@ -9,7 +9,7 @@ export let sidebarSection: 'apps' | 'tools' = (localStorage.getItem('sidebarSect
export let apps: App[] = []
// Tab state
export let selectedTab: string = localStorage.getItem('selectedTab') || 'overview'
export let appTabs: Record<string, string> = JSON.parse(localStorage.getItem('appTabs') || '{}')
// State setters
export function setSelectedApp(name: string | null) {
@ -35,7 +35,11 @@ export function setApps(newApps: App[]) {
apps = newApps
}
export function setSelectedTab(tab: string) {
selectedTab = tab
localStorage.setItem('selectedTab', tab)
export const getSelectedTab = (appName: string | null) =>
appName ? appTabs[appName] || 'overview' : 'overview'
export function setSelectedTab(appName: string | null, tab: string) {
if (!appName) return
appTabs[appName] = tab
localStorage.setItem('appTabs', JSON.stringify(appTabs))
}