From ea715f15bbbc232a2346874d95798aa087647406 Mon Sep 17 00:00:00 2001 From: LynithDev <61880709+LynithDev@users.noreply.github.com> Date: Fri, 17 May 2024 22:08:44 +0200 Subject: [PATCH] feat: Close confirmation dialog setting --- desktop/src/ui/components/WindowFrame.tsx | 12 ++++-- .../settings/launcher/SettingsAppearance.tsx | 8 ++-- .../settings/launcher/SettingsGeneral.tsx | 17 ++++++++- desktop/src/ui/state/appSettings.ts | 37 +++++++++++++++++++ desktop/src/ui/state/reducedMotionTracker.ts | 20 ---------- 5 files changed, 64 insertions(+), 30 deletions(-) create mode 100644 desktop/src/ui/state/appSettings.ts delete mode 100644 desktop/src/ui/state/reducedMotionTracker.ts diff --git a/desktop/src/ui/components/WindowFrame.tsx b/desktop/src/ui/components/WindowFrame.tsx index 5194660f..f01cb9e8 100644 --- a/desktop/src/ui/components/WindowFrame.tsx +++ b/desktop/src/ui/components/WindowFrame.tsx @@ -4,6 +4,7 @@ import type { JSX } from 'solid-js'; import { createSignal, onMount } from 'solid-js'; import Modal from './overlay/Modal'; import Button from './base/Button'; +import appSettings from '~ui/state/appSettings'; interface TitlebarButtonProps { icon: (any: any) => JSX.Element; @@ -25,12 +26,15 @@ function WindowFrame() { const [isModalVisible, setModalVisible] = createSignal(false); const minimize = () => Window.getCurrent().minimize(); - const quit = () => Window.getCurrent().destroy(); + const quit = () => Window.getCurrent().close(); + // const kill = () => Window.getCurrent().destroy(); onMount(() => { Window.getCurrent().onCloseRequested((event) => { - event.preventDefault(); - setModalVisible(true); + if (appSettings.settings.closeDialog) { + event.preventDefault(); + setModalVisible(true); + } }); }); @@ -42,7 +46,7 @@ function WindowFrame() {
minimize()} /> - setModalVisible(true)} danger /> + quit()} danger />
@@ -28,9 +28,9 @@ function SettingsAppearance() { icon={} > { - setReducedMotion(checked); + setSettings('reducedMotion', checked); }} /> diff --git a/desktop/src/ui/pages/settings/launcher/SettingsGeneral.tsx b/desktop/src/ui/pages/settings/launcher/SettingsGeneral.tsx index 55330fa5..da0235b2 100644 --- a/desktop/src/ui/pages/settings/launcher/SettingsGeneral.tsx +++ b/desktop/src/ui/pages/settings/launcher/SettingsGeneral.tsx @@ -1,11 +1,24 @@ -import { Code01Icon } from '@untitled-theme/icons-solid'; +import { XIcon } from '@untitled-theme/icons-solid'; import SettingsRow from '../components'; import ScrollableContainer from '~ui/components/ScrollableContainer'; +import Toggle from '~ui/components/base/Toggle'; +import appSettings from '~ui/state/appSettings'; function SettingsGeneral() { return ( - } /> + } + > + { + appSettings.setSettings('closeDialog', checked); + }} + /> + ); } diff --git a/desktop/src/ui/state/appSettings.ts b/desktop/src/ui/state/appSettings.ts new file mode 100644 index 00000000..1f8a956c --- /dev/null +++ b/desktop/src/ui/state/appSettings.ts @@ -0,0 +1,37 @@ +import { createEffect, createRoot, onMount } from 'solid-js'; +import { createStore } from 'solid-js/store'; + +export interface AppSettingsStore { + reducedMotion: boolean; + closeDialog: boolean; +}; + +function globalStore() { + // TODO: Much better management of this, currently temporary + const [settings, setSettings] = createStore({ + reducedMotion: false, + closeDialog: true, + }); + + function set(key: K, value: AppSettingsStore[K]) { + window.localStorage.setItem(key, value.toString()); + } + + onMount(() => { + setSettings('reducedMotion', window.localStorage.getItem('reducedMotion') === 'true'); + setSettings('closeDialog', window.localStorage.getItem('closeDialog') === 'true'); + }); + + createEffect(() => { + // Reduced Motion + set('reducedMotion', settings.reducedMotion); + document.body.classList.toggle('reduce-motion', settings.reducedMotion); + + // Close Dialog + set('closeDialog', settings.closeDialog); + }); + + return { settings, setSettings }; +} + +export default createRoot(globalStore); diff --git a/desktop/src/ui/state/reducedMotionTracker.ts b/desktop/src/ui/state/reducedMotionTracker.ts deleted file mode 100644 index 6aa16cf7..00000000 --- a/desktop/src/ui/state/reducedMotionTracker.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { createEffect, createRoot, createSignal, onMount } from 'solid-js'; - -function createReducedMotionTracker() { - const [reducedMotion, setReducedMotion] = createSignal(false); - - onMount(() => { - const enabled = window.localStorage.getItem('reduced-motion') === 'true'; - setReducedMotion(enabled); - }); - - createEffect(() => { - const enabled = reducedMotion(); - document.body.classList.toggle('reduce-motion', enabled); - window.localStorage.setItem('reduced-motion', enabled.toString()); - }); - - return { reducedMotion, setReducedMotion }; -} - -export default createRoot(createReducedMotionTracker);