11'use client' ;
22
3- import { useState , useCallback , useEffect } from 'react' ;
43import { useAppearance } from '@/hooks/useAppearance' ;
4+ import { useAppSettings } from '@/hooks/useAppSettings' ;
55import { useTranslation } from '@/hooks/useTranslation' ;
66import {
77 FONT_SIZES ,
@@ -20,70 +20,11 @@ const FONT_SIZE_LABELS: Record<FontSizeKey, TranslationKey> = {
2020
2121export function AppearanceSection ( ) {
2222 const { fontSize, setFontSize } = useAppearance ( ) ;
23+ const { showModeSelector, showImageAgent, saveShowModeSelector, saveShowImageAgent } = useAppSettings ( ) ;
2324 const { t } = useTranslation ( ) ;
24- const [ showModeSelector , setShowModeSelector ] = useState ( true ) ;
25- const [ showImageAgent , setShowImageAgent ] = useState ( true ) ;
2625
2726 const fontSizeKeys = Object . keys ( FONT_SIZES ) as FontSizeKey [ ] ;
2827
29- const fetchAppSettings = useCallback ( async ( ) => {
30- try {
31- const res = await fetch ( '/api/settings/app' ) ;
32- if ( res . ok ) {
33- const data = await res . json ( ) ;
34- const appSettings = data . settings || { } ;
35- setShowModeSelector ( appSettings . show_mode_selector !== 'false' ) ;
36- setShowImageAgent ( appSettings . show_image_agent !== 'false' ) ;
37- }
38- } catch {
39- // ignore
40- }
41- } , [ ] ) ;
42-
43- useEffect ( ( ) => {
44- fetchAppSettings ( ) ;
45- } , [ fetchAppSettings ] ) ;
46-
47- const saveShowImageAgent = async ( enabled : boolean ) => {
48- try {
49- const res = await fetch ( '/api/settings/app' , {
50- method : 'PUT' ,
51- headers : { 'Content-Type' : 'application/json' } ,
52- body : JSON . stringify ( {
53- settings : { show_image_agent : enabled ? 'true' : 'false' } ,
54- } ) ,
55- } ) ;
56- if ( res . ok ) {
57- setShowImageAgent ( enabled ) ;
58- window . dispatchEvent ( new CustomEvent ( 'settings-changed' , {
59- detail : { show_image_agent : enabled ? 'true' : 'false' } ,
60- } ) ) ;
61- }
62- } catch {
63- // ignore
64- }
65- } ;
66-
67- const saveShowModeSelector = async ( enabled : boolean ) => {
68- try {
69- const res = await fetch ( '/api/settings/app' , {
70- method : 'PUT' ,
71- headers : { 'Content-Type' : 'application/json' } ,
72- body : JSON . stringify ( {
73- settings : { show_mode_selector : enabled ? 'true' : 'false' } ,
74- } ) ,
75- } ) ;
76- if ( res . ok ) {
77- setShowModeSelector ( enabled ) ;
78- window . dispatchEvent ( new CustomEvent ( 'settings-changed' , {
79- detail : { show_mode_selector : enabled ? 'true' : 'false' } ,
80- } ) ) ;
81- }
82- } catch {
83- // ignore
84- }
85- } ;
86-
8728 return (
8829 < div className = "max-w-3xl space-y-6" >
8930 { /* Mode selector toggle */ }
@@ -94,7 +35,7 @@ export function AppearanceSection() {
9435 < p className = "text-xs text-muted-foreground" > { t ( 'settings.showModeSelectorDesc' ) } </ p >
9536 </ div >
9637 < Switch
97- checked = { showModeSelector }
38+ checked = { showModeSelector ?? false }
9839 onCheckedChange = { saveShowModeSelector }
9940 />
10041 </ div >
@@ -108,7 +49,7 @@ export function AppearanceSection() {
10849 < p className = "text-xs text-muted-foreground" > { t ( 'settings.showImageAgentDesc' ) } </ p >
10950 </ div >
11051 < Switch
111- checked = { showImageAgent }
52+ checked = { showImageAgent ?? false }
11253 onCheckedChange = { saveShowImageAgent }
11354 />
11455 </ div >
0 commit comments