Compare commits

..

No commits in common. "303d2dfc720e5a201335a64db63160b693a8e738" and "ed200431f2e58ea2183257076a6066b23c436fbb" have entirely different histories.

8 changed files with 17 additions and 25 deletions

View File

@ -1,6 +1,6 @@
import { Hype } from '@because/hype'
import { define, stylesToCSS } from '@because/forge'
import { baseStyles, ToolScript, theme } from '@because/toes/tools'
import { baseStyles, initScript, theme } from '@because/toes/tools'
import { readdir, stat } from 'fs/promises'
import { readFileSync } from 'fs'
import { join, extname, basename } from 'path'
@ -309,7 +309,7 @@ function Layout({ title, children, highlight, editable }: LayoutProps) {
</head>
<body>
<script dangerouslySetInnerHTML={{ __html: fileMemoryScript }} />
<ToolScript />
<script dangerouslySetInnerHTML={{ __html: initScript }} />
<Container>
{children}
</Container>

View File

@ -1,6 +1,6 @@
import { Hype } from '@because/hype'
import { define, stylesToCSS } from '@because/forge'
import { baseStyles, ToolScript, theme } from '@because/toes/tools'
import { baseStyles, initScript, theme } from '@because/toes/tools'
import { discoverCronJobs } from './lib/discovery'
import { scheduleJob, stopJob } from './lib/scheduler'
import { executeJob } from './lib/executor'
@ -183,7 +183,7 @@ function Layout({ title, children }: { title: string; children: Child }) {
<link rel="stylesheet" href="/styles.css" />
</head>
<body>
<ToolScript />
<script dangerouslySetInnerHTML={{ __html: initScript }} />
<Container>
{children}
</Container>

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, getSelectedTab } from '../state'
import { apps, selectedTab } from '../state'
import {
ActionBar,
Button,
@ -44,7 +44,6 @@ 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,18 +1,16 @@
import type { App } from '../../shared/types'
import { apps, getSelectedTab, setSelectedTab } from '../state'
import { apps, selectedApp, selectedTab, 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, app.name)
resetToolIframe(tab, selectedApp)
return
}
setSelectedTab(app.name, tab)
setSelectedTab(tab)
render()
}

View File

@ -1,6 +1,6 @@
import { render as renderApp } from 'hono/jsx/dom'
import { Dashboard } from './components'
import { apps, getSelectedTab, selectedApp, setApps, setSelectedApp } from './state'
import { apps, selectedApp, selectedTab, 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(getSelectedTab(selectedApp), tools, selectedApp)
updateToolIframes(selectedTab, tools, selectedApp)
})
}

View File

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

View File

@ -1,2 +1,3 @@
export { theme } from '../client/themes'
export { baseStyles, ToolScript } from './scripts.tsx'
export { baseStyles, initScript } from './scripts'
export { define, stylesToCSS } from '@because/forge'

View File

@ -1,6 +1,6 @@
import { theme } from '../client/themes'
const initScript = `
export const initScript = `
(function() {
var theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
document.body.setAttribute('data-theme', theme);
@ -29,5 +29,3 @@ body {
margin: 0;
}
`
export const ToolScript = () => <script dangerouslySetInnerHTML={{ __html: initScript }} />