fix(client): テーマを作成するとクライアントが起動しなくなる

This commit is contained in:
syuilo 2022-07-06 07:08:45 +09:00
parent 7cb84dc30a
commit 1ceeec7cfa
3 changed files with 17 additions and 3 deletions

View file

@ -97,7 +97,10 @@ const darkThemeId = computed({
return darkTheme.value.id; return darkTheme.value.id;
}, },
set(id) { set(id) {
ColdDeviceStorage.set('darkTheme', themes.value.find(x => x.id === id)); const t = themes.value.find(x => x.id === id);
if (t) { // themes undefined
ColdDeviceStorage.set('darkTheme', t);
}
}, },
}); });
const lightTheme = ColdDeviceStorage.ref('lightTheme'); const lightTheme = ColdDeviceStorage.ref('lightTheme');
@ -106,7 +109,10 @@ const lightThemeId = computed({
return lightTheme.value.id; return lightTheme.value.id;
}, },
set(id) { set(id) {
ColdDeviceStorage.set('lightTheme', themes.value.find(x => x.id === id)); const t = themes.value.find(x => x.id === id);
if (t) { // themes undefined
ColdDeviceStorage.set('lightTheme', t);
}
}, },
}); });
const darkMode = computed(defaultStore.makeGetterSetter('darkMode')); const darkMode = computed(defaultStore.makeGetterSetter('darkMode'));

View file

@ -192,7 +192,7 @@ async function saveAs() {
theme.name = name; theme.name = name;
theme.author = `@${$i.username}@${toUnicode(host)}`; theme.author = `@${$i.username}@${toUnicode(host)}`;
if (description) theme.desc = description; if (description) theme.desc = description;
addTheme(theme); await addTheme(theme);
applyTheme(theme); applyTheme(theme);
if (defaultStore.state.darkMode) { if (defaultStore.state.darkMode) {
ColdDeviceStorage.set('darkTheme', theme); ColdDeviceStorage.set('darkTheme', theme);

View file

@ -304,6 +304,14 @@ export class ColdDeviceStorage {
} }
public static set<T extends keyof typeof ColdDeviceStorage.default>(key: T, value: typeof ColdDeviceStorage.default[T]): void { public static set<T extends keyof typeof ColdDeviceStorage.default>(key: T, value: typeof ColdDeviceStorage.default[T]): void {
// 呼び出し側のバグ等で undefined が来ることがある
// undefined を文字列として localStorage に入れると参照する際の JSON.parse でコケて不具合の元になるため無視
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if (value === undefined) {
console.error(`attempt to store undefined value for key '${key}'`);
return;
}
localStorage.setItem(PREFIX + key, JSON.stringify(value)); localStorage.setItem(PREFIX + key, JSON.stringify(value));
for (const watcher of this.watchers) { for (const watcher of this.watchers) {