diff options
| author | soryu <soryu@soryu.co> | 2026-04-28 19:12:52 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-04-28 19:12:52 +0100 |
| commit | d1fdfb140cc440664f77a24886172f9976a05a31 (patch) | |
| tree | 454739f80dde60fc6c1cd97acbaef3223ac041c6 /frontend/src/stores/index.ts | |
| parent | 636694182fe9381479f2e9062229dda3838c5421 (diff) | |
| download | soryu-d1fdfb140cc440664f77a24886172f9976a05a31.tar.gz soryu-d1fdfb140cc440664f77a24886172f9976a05a31.zip | |
feat: revert broken directive PRs, re-implement Lexical document orchestrator (#98)
* feat: soryu-co/soryu - makima: Revert broken directive PRs and verify clean build
* feat: soryu-co/soryu - makima: Re-implement frontend: Lexical document editor with feature flag and base components
* WIP: heartbeat checkpoint
* feat: soryu-co/soryu - makima: Add contract blocks, expandable log rows, and interaction controls
* WIP: heartbeat checkpoint
* feat: soryu-co/soryu - makima: End-to-end build verification and integration polish
Diffstat (limited to 'frontend/src/stores/index.ts')
| -rw-r--r-- | frontend/src/stores/index.ts | 58 |
1 files changed, 36 insertions, 22 deletions
diff --git a/frontend/src/stores/index.ts b/frontend/src/stores/index.ts index e247068..1853f4f 100644 --- a/frontend/src/stores/index.ts +++ b/frontend/src/stores/index.ts @@ -1,5 +1,29 @@ import { atom } from 'nanostores' import { ChatMessage, Choice } from '../types' +import { upsertUserSetting } from '../services/directiveApi' + +// Document UI feature flag +export const documentUiEnabledStore = atom<boolean>( + (() => { + try { + const saved = localStorage.getItem('document_ui_enabled') + return saved === 'true' + } catch { + return false + } + })() +) + +export const setDocumentUiEnabled = async (enabled: boolean) => { + documentUiEnabledStore.set(enabled) + localStorage.setItem('document_ui_enabled', enabled.toString()) + // Persist to backend (best-effort) + try { + await upsertUserSetting('document_ui_enabled', enabled) + } catch (err) { + console.error('Failed to persist document UI setting:', err) + } +} // Authentication state export const isLoggedInStore = atom<boolean>(false) @@ -29,36 +53,21 @@ export const nameStore = atom<string>('???') export const backgroundStore = atom<string>('/__gaogao__56242cbde8f18ac64522e410bad04e68_waifu2x_art_noise2.png') export const locationStore = atom<string>('Tokyo') export const configModalOpenStore = atom<boolean>(false) -export const skipIntroStore = atom<boolean>( + +// Feature flags +export const documentEditorEnabledStore = atom<boolean>( (() => { - const saved = localStorage.getItem('skipIntro') + const saved = localStorage.getItem('documentEditorEnabled') return saved === 'true' })() ) - -// Document UI feature flag -export const documentUiEnabledStore = atom<boolean>( +export const skipIntroStore = atom<boolean>( (() => { - try { - const saved = localStorage.getItem('document_ui_enabled') - return saved === 'true' - } catch { - return false - } + const saved = localStorage.getItem('skipIntro') + return saved === 'true' })() ) -export const setDocumentUiEnabled = (enabled: boolean) => { - documentUiEnabledStore.set(enabled) - localStorage.setItem('document_ui_enabled', JSON.stringify(enabled)) - // Persist to backend (fire-and-forget) - fetch('/api/v1/user-settings', { - method: 'PUT', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ key: 'document_ui_enabled', value: enabled }), - }).catch((err) => console.error('Failed to persist document_ui_enabled:', err)) -} - // Actions export const login = () => { isLoggedInStore.set(true) @@ -109,6 +118,11 @@ export const setSkipIntro = (skip: boolean) => { localStorage.setItem('skipIntro', skip.toString()) } +export const setDocumentEditorEnabled = (enabled: boolean) => { + documentEditorEnabledStore.set(enabled) + localStorage.setItem('documentEditorEnabled', enabled.toString()) +} + export const setLoadingComplete = (complete: boolean) => { loadingCompleteStore.set(complete) if (complete) { |
