diff --git a/frontend/src/ts/config.ts b/frontend/src/ts/config.ts index 0af3df5ff..6757b9c97 100644 --- a/frontend/src/ts/config.ts +++ b/frontend/src/ts/config.ts @@ -88,55 +88,55 @@ function isConfigChangeBlocked(): boolean { return false; } -export function batchSetConfig( - keyValues: Partial, - nosave: boolean = false, -): Partial> { - let ret: Partial> = {}; - for (const key of typedKeys(keyValues)) { - ret[key] = setConfig(key, keyValues[key] as Config[keyof Config], { - nosave: true, - batched: true, - }); - //@ts-expect-error this is fine - configToSend[key] = config[key]; - } +// export function batchSetConfig( +// keyValues: Partial, +// nosave: boolean = false, +// ): Partial> { +// let ret: Partial> = {}; +// for (const key of typedKeys(keyValues)) { +// ret[key] = setConfig(key, keyValues[key] as Config[keyof Config], { +// nosave: true, +// batched: true, +// }); +// //@ts-expect-error this is fine +// configToSend[key] = config[key]; +// } - const restartRequired = typedKeys(keyValues).some((key) => { - const metadata = configMetadata[key]; - return metadata.changeRequiresRestart; - }); +// const restartRequired = typedKeys(keyValues).some((key) => { +// const metadata = configMetadata[key]; +// return metadata.changeRequiresRestart; +// }); - const triggerResizeNeeded = typedKeys(keyValues).some((key) => { - const metadata = configMetadata[key]; - return metadata.triggerResize; - }); +// const triggerResizeNeeded = typedKeys(keyValues).some((key) => { +// const metadata = configMetadata[key]; +// return metadata.triggerResize; +// }); - if (triggerResizeNeeded) { - triggerResize(); - } +// if (triggerResizeNeeded) { +// triggerResize(); +// } - if (!nosave) { - configLS.set(config); - saveToDatabase(); - } +// if (!nosave) { +// configLS.set(config); +// saveToDatabase(); +// } - ConfigEvent.dispatch({ - key: "batchConfigApplied", - nosave, - fullConfig: config, - restartRequired, - }); +// ConfigEvent.dispatch({ +// key: "batchConfigApplied", +// nosave, +// fullConfig: config, +// restartRequired, +// }); - return ret; -} +// return ret; +// } export function setConfig( key: T, value: Config[T], options?: { nosave?: boolean; - batched?: boolean; + noevent?: boolean; }, ): boolean { const metadata = configMetadata[key] as ConfigMetadataObject[T]; @@ -225,7 +225,8 @@ export function setConfig( config[key] = value; if (!options?.nosave) saveToLocalStorage(key, options?.nosave); - if (!options?.batched) { + + if (!options?.noevent) { // @ts-expect-error i can't figure this out ConfigEvent.dispatch({ key: key, @@ -233,11 +234,12 @@ export function setConfig( nosave: options?.nosave ?? false, previousValue: previousValue as Config[T], }); - - if (metadata.triggerResize && !options?.nosave) { - triggerResize(); - } } + + if (metadata.triggerResize && !options?.nosave) { + triggerResize(); + } + metadata.afterSet?.({ nosave: options?.nosave ?? false, currentConfig: config, @@ -345,7 +347,7 @@ export async function applyConfig( const set = setConfig(configKey, configValue, { nosave: true, - batched: true, + noevent: true, }); if (!set) { @@ -357,6 +359,8 @@ export async function applyConfig( saveToLocalStorage(key); } + ConfigEvent.dispatch({ key: "configApplied", fullConfig: config }); + ConfigEvent.dispatch({ key: "fullConfigChangeFinished" }); } diff --git a/frontend/src/ts/observables/config-event.ts b/frontend/src/ts/observables/config-event.ts index 098c698e7..e4f978c57 100644 --- a/frontend/src/ts/observables/config-event.ts +++ b/frontend/src/ts/observables/config-event.ts @@ -4,12 +4,11 @@ export type ConfigEventKey = | keyof Config | "fullConfigChange" | "fullConfigChangeFinished" - | "batchConfigApplied"; + | "configApplied"; type SubscribeParams = { nosave?: boolean; fullConfig?: Config; - restartRequired?: boolean; } & { [K in ConfigEventKey]?: K extends keyof Config ? { key: K; newValue: Config[K]; previousValue: Config[K] } @@ -25,7 +24,7 @@ export function subscribe(fn: SubscribeFunction): void { } export function dispatch(options: SubscribeParams): void { - console.log("displatching config event", options); + console.log("dispatching config event", options); subscribers.forEach((fn) => { try { fn(options); diff --git a/frontend/src/ts/test/test-ui.ts b/frontend/src/ts/test/test-ui.ts index 4ec86b2f9..ffaa1f380 100644 --- a/frontend/src/ts/test/test-ui.ts +++ b/frontend/src/ts/test/test-ui.ts @@ -2033,6 +2033,24 @@ $("#wordsWrapper").on("click", () => { }); ConfigEvent.subscribe(({ key, newValue }) => { + if (key === "configApplied") { + $( + "#caret, #paceCaret, #liveStatsMini, #typingTest, #wordsInput, #compositionDisplay", + ).css("fontSize", Config.fontSize + "rem"); + updateWordWrapperClasses(); + updateLiveStatsOpacity(Config.timerOpacity); + updateLiveStatsColor(Config.timerColor); + if (!Config.showOutOfFocusWarning) OutOfFocus.hide(); + if (Config.compositionDisplay === "below") { + CompositionDisplay.update(" "); + CompositionDisplay.show(); + } else { + CompositionDisplay.hide(); + } + flipColors(Config.flipTestColors); + colorful(Config.colorfulMode); + } + if (key === "quickRestart") { if (newValue === "off") { $(".pageTest #restartTestButton").removeClass("hidden");