From 4a73feb041a554e813e490cc5cd63c105e142623 Mon Sep 17 00:00:00 2001 From: syuilo <4439005+syuilo@users.noreply.github.com> Date: Wed, 12 Mar 2025 21:12:08 +0900 Subject: [PATCH] enhance(frontend): make deck profiles syncable --- locales/index.d.ts | 4 ++ locales/ja-JP.yml | 1 + packages/frontend/src/pages/settings/deck.vue | 40 ++++++++++++++----- .../utility/autogen/settings-search-index.ts | 7 ++++ 4 files changed, 41 insertions(+), 11 deletions(-) diff --git a/locales/index.d.ts b/locales/index.d.ts index 297b56e289..a4233cf7c8 100644 --- a/locales/index.d.ts +++ b/locales/index.d.ts @@ -9848,6 +9848,10 @@ export interface Locale extends ILocale { * 幅を自動調整 */ "flexible": string; + /** + * プロファイル情報のデバイス間同期を有効にする + */ + "enableSyncBetweenDevicesForProfiles": string; "_columns": { /** * メイン diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index 23aeb59863..c45553817d 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -2603,6 +2603,7 @@ _deck: useSimpleUiForNonRootPages: "非ルートページは簡易UIで表示" usedAsMinWidthWhenFlexible: "「幅を自動調整」が有効の場合、これが幅の最小値となります" flexible: "幅を自動調整" + enableSyncBetweenDevicesForProfiles: "プロファイル情報のデバイス間同期を有効にする" _columns: main: "メイン" diff --git a/packages/frontend/src/pages/settings/deck.vue b/packages/frontend/src/pages/settings/deck.vue index e7c5c942e9..2c4ec01344 100644 --- a/packages/frontend/src/pages/settings/deck.vue +++ b/packages/frontend/src/pages/settings/deck.vue @@ -4,23 +4,27 @@ SPDX-License-Identifier: AGPL-3.0-only --> <template> -<div class="_gaps_m"> - <MkSwitch v-model="useSimpleUiForNonRootPages">{{ i18n.ts._deck.useSimpleUiForNonRootPages }}</MkSwitch> +<SearchMarker path="/settings/deck" :label="i18n.ts.deck" :keywords="['deck', 'ui']" icon="ti ti-columns"> + <div class="_gaps_m"> + <MkSwitch :modelValue="profilesSyncEnabled" @update:modelValue="changeProfilesSyncEnabled">{{ i18n.ts._deck.enableSyncBetweenDevicesForProfiles }}</MkSwitch> - <MkSwitch v-model="navWindow">{{ i18n.ts.defaultNavigationBehaviour }}: {{ i18n.ts.openInWindow }}</MkSwitch> + <MkSwitch v-model="useSimpleUiForNonRootPages">{{ i18n.ts._deck.useSimpleUiForNonRootPages }}</MkSwitch> - <MkSwitch v-model="alwaysShowMainColumn">{{ i18n.ts._deck.alwaysShowMainColumn }}</MkSwitch> + <MkSwitch v-model="navWindow">{{ i18n.ts.defaultNavigationBehaviour }}: {{ i18n.ts.openInWindow }}</MkSwitch> - <MkRadios v-model="columnAlign"> - <template #label>{{ i18n.ts._deck.columnAlign }}</template> - <option value="left">{{ i18n.ts.left }}</option> - <option value="center">{{ i18n.ts.center }}</option> - </MkRadios> -</div> + <MkSwitch v-model="alwaysShowMainColumn">{{ i18n.ts._deck.alwaysShowMainColumn }}</MkSwitch> + + <MkRadios v-model="columnAlign"> + <template #label>{{ i18n.ts._deck.columnAlign }}</template> + <option value="left">{{ i18n.ts.left }}</option> + <option value="center">{{ i18n.ts.center }}</option> + </MkRadios> + </div> +</SearchMarker> </template> <script lang="ts" setup> -import { computed } from 'vue'; +import { computed, ref } from 'vue'; import MkSwitch from '@/components/MkSwitch.vue'; import MkRadios from '@/components/MkRadios.vue'; import { i18n } from '@/i18n.js'; @@ -32,6 +36,20 @@ const useSimpleUiForNonRootPages = prefer.model('deck.useSimpleUiForNonRootPages const alwaysShowMainColumn = prefer.model('deck.alwaysShowMainColumn'); const columnAlign = prefer.model('deck.columnAlign'); +const profilesSyncEnabled = ref(prefer.isSyncEnabled('deck.profiles')); + +function changeProfilesSyncEnabled(value: boolean) { + if (value) { + prefer.enableSync('deck.profiles').then((res) => { + if (res == null) return; + if (res.enabled) profilesSyncEnabled.value = true; + }); + } else { + prefer.disableSync('deck.profiles'); + profilesSyncEnabled.value = false; + } +} + const headerActions = computed(() => []); const headerTabs = computed(() => []); diff --git a/packages/frontend/src/utility/autogen/settings-search-index.ts b/packages/frontend/src/utility/autogen/settings-search-index.ts index 79310716e0..d0bce9a522 100644 --- a/packages/frontend/src/utility/autogen/settings-search-index.ts +++ b/packages/frontend/src/utility/autogen/settings-search-index.ts @@ -604,6 +604,13 @@ export const searchIndexes: SearchIndexItem[] = [ path: '/settings/drive', icon: 'ti ti-cloud', }, + { + id: 'FfZdOs8y', + label: i18n.ts.deck, + keywords: ['deck', 'ui'], + path: '/settings/deck', + icon: 'ti ti-columns', + }, { id: 'BlJ2rsw9h', children: [