diff options
| author | syuilo <4439005+syuilo@users.noreply.github.com> | 2025-03-11 11:14:55 +0900 |
|---|---|---|
| committer | syuilo <4439005+syuilo@users.noreply.github.com> | 2025-03-11 11:14:55 +0900 |
| commit | 1f345eb839ee69fc05bdf4362bec75d02042523a (patch) | |
| tree | faf9dd286508a157d1c7157a0f20230f6dccae28 /packages/frontend/src/ui/deck.vue | |
| parent | Merge branch 'develop' of https://github.com/misskey-dev/misskey into develop (diff) | |
| download | misskey-1f345eb839ee69fc05bdf4362bec75d02042523a.tar.gz misskey-1f345eb839ee69fc05bdf4362bec75d02042523a.tar.bz2 misskey-1f345eb839ee69fc05bdf4362bec75d02042523a.zip | |
enhance(frontend): deckをpreferences管理に
Diffstat (limited to 'packages/frontend/src/ui/deck.vue')
| -rw-r--r-- | packages/frontend/src/ui/deck.vue | 70 |
1 files changed, 10 insertions, 60 deletions
diff --git a/packages/frontend/src/ui/deck.vue b/packages/frontend/src/ui/deck.vue index 08f8ca4f65..337b0dac94 100644 --- a/packages/frontend/src/ui/deck.vue +++ b/packages/frontend/src/ui/deck.vue @@ -36,7 +36,7 @@ SPDX-License-Identifier: AGPL-3.0-only </div> <div :class="$style.sideMenu"> <div :class="$style.sideMenuTop"> - <button v-tooltip.noDelay.left="`${i18n.ts._deck.profile}: ${store.s['deck.profile']}`" :class="$style.sideMenuButton" class="_button" @click="changeProfile"><i class="ti ti-caret-down"></i></button> + <button v-tooltip.noDelay.left="`${i18n.ts._deck.profile}: ${prefer.s['deck.profile']}`" :class="$style.sideMenuButton" class="_button" @click="switchProfileMenu"><i class="ti ti-caret-down"></i></button> <button v-tooltip.noDelay.left="i18n.ts._deck.deleteProfile" :class="$style.sideMenuButton" class="_button" @click="deleteProfile"><i class="ti ti-trash"></i></button> </div> <div :class="$style.sideMenuMiddle"> @@ -95,7 +95,6 @@ SPDX-License-Identifier: AGPL-3.0-only import { computed, defineAsyncComponent, ref, watch, shallowRef } from 'vue'; import { v4 as uuid } from 'uuid'; import XCommon from './_common_/common.vue'; -import type { MenuItem } from '@/types/menu.js'; import XSidebar from '@/ui/_common_/navbar.vue'; import XDrawerMenu from '@/ui/_common_/navbar-for-mobile.vue'; import MkButton from '@/components/MkButton.vue'; @@ -103,7 +102,6 @@ import * as os from '@/os.js'; import { navbarItemDef } from '@/navbar.js'; import { $i } from '@/account.js'; import { i18n } from '@/i18n.js'; -import { unisonReload } from '@/utility/unison-reload.js'; import { deviceKind } from '@/utility/device-kind.js'; import { prefer } from '@/preferences.js'; import XMainColumn from '@/ui/deck/main-column.vue'; @@ -117,8 +115,7 @@ import XMentionsColumn from '@/ui/deck/mentions-column.vue'; import XDirectColumn from '@/ui/deck/direct-column.vue'; import XRoleTimelineColumn from '@/ui/deck/role-timeline-column.vue'; import { mainRouter } from '@/router/main.js'; -import { store } from '@/store.js'; -import { columnTypes, forceSaveDeck, getProfiles, loadDeck, addColumn as addColumnToStore, deleteProfile as deleteProfile_ } from '@/deck.js'; +import { columns, layout, columnTypes, switchProfileMenu, addColumn as addColumnToStore, deleteProfile as deleteProfile_ } from '@/deck.js'; const XStatusBars = defineAsyncComponent(() => import('@/ui/_common_/statusbars.vue')); const XAnnouncements = defineAsyncComponent(() => import('@/ui/_common_/announcements.vue')); @@ -137,7 +134,7 @@ const columnComponents = { mainRouter.navHook = (path, flag): boolean => { if (flag === 'forcePage') return false; - const noMainColumn = !store.s['deck.columns'].some(x => x.type === 'main'); + const noMainColumn = !columns.value.some(x => x.type === 'main'); if (prefer.s['deck.navWindow'] || noMainColumn) { os.pageWindow(path); return true; @@ -160,8 +157,6 @@ watch(route, () => { }); */ -const columns = store.r['deck.columns']; -const layout = store.r['deck.layout']; const menuIndicated = computed(() => { if ($i == null) return false; for (const def in navbarItemDef) { @@ -210,65 +205,20 @@ function onWheel(ev: WheelEvent) { document.documentElement.style.overflowY = 'hidden'; document.documentElement.style.scrollBehavior = 'auto'; -loadDeck(); - -function changeProfile(ev: MouseEvent) { - let items: MenuItem[] = [{ - text: store.s['deck.profile'], - active: true, - action: () => {}, - }]; - getProfiles().then(profiles => { - items.push(...(profiles.filter(k => k !== store.s['deck.profile']).map(k => ({ - text: k, - action: () => { - store.set('deck.profile', k); - unisonReload(); - }, - }))), { type: 'divider' as const }, { - text: i18n.ts._deck.newProfile, - icon: 'ti ti-plus', - action: async () => { - const { canceled, result: name } = await os.inputText({ - title: i18n.ts._deck.profile, - minLength: 1, - }); - - if (canceled || name == null) return; - - os.promiseDialog((async () => { - await store.set('deck.profile', name); - await forceSaveDeck(); - })(), () => { - unisonReload(); - }); - }, - }); - }).then(() => { - os.popupMenu(items, ev.currentTarget ?? ev.target); - }); -} - async function deleteProfile() { + if (prefer.s['deck.profile'] == null) return; + const { canceled } = await os.confirm({ type: 'warning', - text: i18n.tsx.deleteAreYouSure({ x: store.s['deck.profile'] }), + text: i18n.tsx.deleteAreYouSure({ x: prefer.s['deck.profile'] }), }); if (canceled) return; - os.promiseDialog((async () => { - if (store.s['deck.profile'] === 'default') { - await store.set('deck.columns', []); - await store.set('deck.layout', []); - await forceSaveDeck(); - } else { - await deleteProfile_(store.s['deck.profile']); - } - await store.set('deck.profile', 'default'); - })(), () => { - unisonReload(); - }); + await deleteProfile_(prefer.s['deck.profile']); + + os.success(); } + </script> <style> |