fix(frontend): デッキのプロファイルが新規作成できない問題を修正 (#15406)

* fix(frontend): デッキのプロファイルが保存できない問題を修正

* Update Changelog

* Update CHANGELOG.md
This commit is contained in:
かっこかり 2025-02-05 17:02:10 +09:00 committed by GitHub
parent 2f4e2a7cca
commit fd880660a3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 28 additions and 9 deletions

View File

@ -10,6 +10,7 @@
- Fix: データセーバー有効時にもユーザーページの「ファイル」タブで画像が読み込まれてしまう問題を修正 - Fix: データセーバー有効時にもユーザーページの「ファイル」タブで画像が読み込まれてしまう問題を修正
- Fix: MFMの `sparkle` エフェクトが正しく表示されない問題を修正 - Fix: MFMの `sparkle` エフェクトが正しく表示されない問題を修正
- Fix: ページのURLにスラッシュが含まれている場合にページが正しく表示されない問題を修正 - Fix: ページのURLにスラッシュが含まれている場合にページが正しく表示されない問題を修正
- Fix: デッキのプロファイルが新規作成できない問題を修正
- ローカライゼーションの更新 - ローカライゼーションの更新
- Playが実装されたため、ページ機能の「ソースを見る」は削除されました - Playが実装されたため、ページ機能の「ソースを見る」は削除されました

View File

@ -95,7 +95,7 @@ SPDX-License-Identifier: AGPL-3.0-only
import { computed, defineAsyncComponent, ref, watch, shallowRef } from 'vue'; import { computed, defineAsyncComponent, ref, watch, shallowRef } from 'vue';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
import XCommon from './_common_/common.vue'; import XCommon from './_common_/common.vue';
import { deckStore, columnTypes, addColumn as addColumnToStore, loadDeck, getProfiles, deleteProfile as deleteProfile_ } from './deck/deck-store.js'; import { deckStore, columnTypes, addColumn as addColumnToStore, forceSaveDeck, loadDeck, getProfiles, deleteProfile as deleteProfile_ } from './deck/deck-store.js';
import type { ColumnType } from './deck/deck-store.js'; import type { ColumnType } from './deck/deck-store.js';
import type { MenuItem } from '@/types/menu.js'; import type { MenuItem } from '@/types/menu.js';
import XSidebar from '@/ui/_common_/navbar.vue'; import XSidebar from '@/ui/_common_/navbar.vue';
@ -233,10 +233,15 @@ function changeProfile(ev: MouseEvent) {
title: i18n.ts._deck.profile, title: i18n.ts._deck.profile,
minLength: 1, minLength: 1,
}); });
if (canceled || name == null) return; if (canceled || name == null) return;
deckStore.set('profile', name); os.promiseDialog((async () => {
await deckStore.set('profile', name);
await forceSaveDeck();
})(), () => {
unisonReload(); unisonReload();
});
}, },
}); });
}).then(() => { }).then(() => {
@ -251,9 +256,18 @@ async function deleteProfile() {
}); });
if (canceled) return; if (canceled) return;
deleteProfile_(deckStore.state.profile); os.promiseDialog((async () => {
deckStore.set('profile', 'default'); if (deckStore.state.profile === 'default') {
await deckStore.set('columns', []);
await deckStore.set('layout', []);
await forceSaveDeck();
} else {
await deleteProfile_(deckStore.state.profile);
}
await deckStore.set('profile', 'default');
})(), () => {
unisonReload(); unisonReload();
});
} }
</script> </script>

View File

@ -112,9 +112,8 @@ export const loadDeck = async () => {
deckStore.set('layout', deck.layout); deckStore.set('layout', deck.layout);
}; };
// TODO: deckがloadされていない状態でsaveすると意図せず上書きが発生するので対策する export async function forceSaveDeck() {
export const saveDeck = throttle(1000, () => { await misskeyApi('i/registry/set', {
misskeyApi('i/registry/set', {
scope: ['client', 'deck', 'profiles'], scope: ['client', 'deck', 'profiles'],
key: deckStore.state.profile, key: deckStore.state.profile,
value: { value: {
@ -122,6 +121,11 @@ export const saveDeck = throttle(1000, () => {
layout: deckStore.reactiveState.layout.value, layout: deckStore.reactiveState.layout.value,
}, },
}); });
}
// TODO: deckがloadされていない状態でsaveすると意図せず上書きが発生するので対策する
export const saveDeck = throttle(1000, () => {
forceSaveDeck();
}); });
export async function getProfiles(): Promise<string[]> { export async function getProfiles(): Promise<string[]> {