From c6c1c1c0242d8e8a9190449a890a51425abe47b9 Mon Sep 17 00:00:00 2001 From: Dimitrie Stefanescu Date: Sun, 23 Jul 2023 20:30:40 +0100 Subject: [PATCH] feat(dui3): adds theme config switching --- packages/dui3/app.vue | 12 ++-- .../dui3/components/header/UserAccount.vue | 2 +- packages/dui3/components/header/UserMenu.vue | 49 ++++++++----- .../bindings/definitions/IConfigBinding.ts | 41 +++++++++++ packages/dui3/lib/bridge/generic.ts | 2 +- packages/dui3/pages/index.vue | 71 ++----------------- packages/dui3/plugins/00.bindings.ts | 10 +++ packages/dui3/store/uiConfig.ts | 34 +++++++++ 8 files changed, 134 insertions(+), 87 deletions(-) create mode 100644 packages/dui3/lib/bindings/definitions/IConfigBinding.ts create mode 100644 packages/dui3/store/uiConfig.ts diff --git a/packages/dui3/app.vue b/packages/dui3/app.vue index f13f49d79..aaadc1d36 100644 --- a/packages/dui3/app.vue +++ b/packages/dui3/app.vue @@ -6,18 +6,22 @@ + diff --git a/packages/dui3/plugins/00.bindings.ts b/packages/dui3/plugins/00.bindings.ts index 3451380bf..b6df5669f 100644 --- a/packages/dui3/plugins/00.bindings.ts +++ b/packages/dui3/plugins/00.bindings.ts @@ -15,6 +15,12 @@ import { MockedTestBinding } from '~/lib/bindings/definitions/ITestBinding' +import { + IConfigBinding, + IConfigBindingKey, + MockedConfigBinding +} from '~/lib/bindings/definitions/IConfigBinding' + // Makes TS happy declare let globalThis: Record & { CefSharp?: { BindObjectAsync: (name: string) => Promise } @@ -40,6 +46,9 @@ export default defineNuxtPlugin(async () => { (await tryHoistBinding(IBasicConnectorBindingKey)) || new MockedBaseBinding() + // UI configuration bindings. + const configBinding = await tryHoistBinding(IConfigBindingKey) + const showDevTools = () => { baseBinding.showDevTools() } @@ -53,6 +62,7 @@ export default defineNuxtPlugin(async () => { testBindings, nonExistantBindings, baseBinding, + configBinding, showDevTools, openUrl } diff --git a/packages/dui3/store/uiConfig.ts b/packages/dui3/store/uiConfig.ts new file mode 100644 index 000000000..404d8ae56 --- /dev/null +++ b/packages/dui3/store/uiConfig.ts @@ -0,0 +1,34 @@ +import { defineStore } from 'pinia' +import { Config } from 'lib/bindings/definitions/IConfigBinding' + +export const useDocumentInfoStore = defineStore('documentInfoStore', () => { + const { $configBinding } = useNuxtApp() + + const hasConfigBindings = ref(!!$configBinding) + const uiConfig = ref({ darkTheme: false }) + + watch( + uiConfig, + async (newValue) => { + if (!newValue || !$configBinding) return + await $configBinding.updateConfig(newValue) + }, + { deep: true } + ) + + const isDarkTheme = computed(() => { + return uiConfig.value?.darkTheme + }) + + const toggleTheme = () => { + uiConfig.value.darkTheme = !uiConfig.value.darkTheme + } + + const init = async () => { + if (!$configBinding) return + uiConfig.value = await $configBinding.getConfig() + } + void init() + + return { hasConfigBindings, isDarkTheme, toggleTheme } +})