summaryrefslogtreecommitdiff
path: root/frontend/src/stores/index.ts
diff options
context:
space:
mode:
authorsoryu <soryu@soryu.co>2026-04-28 19:12:52 +0100
committerGitHub <noreply@github.com>2026-04-28 19:12:52 +0100
commitd1fdfb140cc440664f77a24886172f9976a05a31 (patch)
tree454739f80dde60fc6c1cd97acbaef3223ac041c6 /frontend/src/stores/index.ts
parent636694182fe9381479f2e9062229dda3838c5421 (diff)
downloadsoryu-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.ts58
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) {