From 5b4115e21a6822a434a9bfbbd53f22b3ca961239 Mon Sep 17 00:00:00 2001 From: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Sat, 13 Sep 2025 08:33:14 +0900 Subject: refactor(frontend): フロントエンドの型エラー解消(途中まで) (#16539) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(frontend): FormLinkをボタンとして使用した際にエラーが出る問題を修正 * refactor(frontend): フロントエンドの型エラー解消 * remove unused ts-expect-error * migrate * remove unrelated changes * fix lint * more type fixes --- packages/frontend/src/pages/settings/2fa.vue | 2 + packages/frontend/src/pages/settings/privacy.vue | 64 +++++++++++++++------- .../frontend/src/pages/settings/sounds.sound.vue | 14 ++--- packages/frontend/src/pages/settings/sounds.vue | 2 +- 4 files changed, 52 insertions(+), 30 deletions(-) (limited to 'packages/frontend/src/pages/settings') diff --git a/packages/frontend/src/pages/settings/2fa.vue b/packages/frontend/src/pages/settings/2fa.vue index ca404b43c4..2cc13744b1 100644 --- a/packages/frontend/src/pages/settings/2fa.vue +++ b/packages/frontend/src/pages/settings/2fa.vue @@ -196,6 +196,7 @@ async function addSecurityKey() { if (auth.canceled) return; const registrationOptions = parseCreationOptionsFromJSON({ + // @ts-expect-error misskey-js側に型がない publicKey: await os.apiWithDialog('i/2fa/register-key', { password: auth.result.password, token: auth.result.token, @@ -226,6 +227,7 @@ async function addSecurityKey() { password: auth.result.password, token: auth.result.token, name: name.result, + // @ts-expect-error misskey-js側に型がない credential: credential.toJSON(), }); } diff --git a/packages/frontend/src/pages/settings/privacy.vue b/packages/frontend/src/pages/settings/privacy.vue index 54a6c0af82..8ae8c79ebd 100644 --- a/packages/frontend/src/pages/settings/privacy.vue +++ b/packages/frontend/src/pages/settings/privacy.vue @@ -119,7 +119,7 @@ SPDX-License-Identifier: AGPL-3.0-only
- + @@ -140,7 +140,7 @@ SPDX-License-Identifier: AGPL-3.0-only @@ -189,7 +190,7 @@ SPDX-License-Identifier: AGPL-3.0-only { - if (makeNotesFollowersOnlyBefore.value == null) { - return null; - } else if (makeNotesFollowersOnlyBefore.value >= 0) { - return 'absolute'; - } else { - return 'relative'; - } +const makeNotesFollowersOnlyBefore_type = computed({ + get: () => { + if (makeNotesFollowersOnlyBefore.value == null) { + return null; + } else if (makeNotesFollowersOnlyBefore.value >= 0) { + return 'absolute'; + } else { + return 'relative'; + } + }, + set(value) { + if (value === 'relative') { + makeNotesFollowersOnlyBefore.value = -604800; + } else if (value === 'absolute') { + makeNotesFollowersOnlyBefore.value = Math.floor(Date.now() / 1000); + } else { + makeNotesFollowersOnlyBefore.value = null; + } + }, }); const makeNotesFollowersOnlyBefore_presets = [ @@ -288,14 +299,25 @@ const makeNotesFollowersOnlyBefore_customMonths = computed({ }, }); -const makeNotesHiddenBefore_type = computed(() => { - if (makeNotesHiddenBefore.value == null) { - return null; - } else if (makeNotesHiddenBefore.value >= 0) { - return 'absolute'; - } else { - return 'relative'; - } +const makeNotesHiddenBefore_type = computed({ + get: () => { + if (makeNotesHiddenBefore.value == null) { + return null; + } else if (makeNotesHiddenBefore.value >= 0) { + return 'absolute'; + } else { + return 'relative'; + } + }, + set(value) { + if (value === 'relative') { + makeNotesHiddenBefore.value = -604800; + } else if (value === 'absolute') { + makeNotesHiddenBefore.value = Math.floor(Date.now() / 1000); + } else { + makeNotesHiddenBefore.value = null; + } + }, }); const makeNotesHiddenBefore_presets = [ diff --git a/packages/frontend/src/pages/settings/sounds.sound.vue b/packages/frontend/src/pages/settings/sounds.sound.vue index 7aad43b1d0..9e9671487e 100644 --- a/packages/frontend/src/pages/settings/sounds.sound.vue +++ b/packages/frontend/src/pages/settings/sounds.sound.vue @@ -41,25 +41,23 @@ import * as os from '@/os.js'; import { misskeyApi } from '@/utility/misskey-api.js'; import { playMisskeySfxFile, soundsTypes, getSoundDuration } from '@/utility/sound.js'; import { selectFile } from '@/utility/drive.js'; +import type { SoundStore } from '@/preferences/def.js'; const props = defineProps<{ - type: SoundType; - fileId?: string; - fileUrl?: string; - volume: number; + def: SoundStore; }>(); const emit = defineEmits<{ (ev: 'update', result: { type: SoundType; fileId?: string; fileUrl?: string; volume: number; }): void; }>(); -const type = ref(props.type); -const fileId = ref(props.fileId); -const fileUrl = ref(props.fileUrl); +const type = ref(props.def.type); +const fileId = ref('fileId' in props.def ? props.def.fileId : undefined); +const fileUrl = ref('fileUrl' in props.def ? props.def.fileUrl : undefined); const fileName = ref(''); const driveFileError = ref(false); const hasChanged = ref(false); -const volume = ref(props.volume); +const volume = ref(props.def.volume); if (type.value === '_driveFile_' && fileId.value) { await misskeyApi('drive/files/show', { diff --git a/packages/frontend/src/pages/settings/sounds.vue b/packages/frontend/src/pages/settings/sounds.vue index ea5b347525..1b851825d6 100644 --- a/packages/frontend/src/pages/settings/sounds.vue +++ b/packages/frontend/src/pages/settings/sounds.vue @@ -42,7 +42,7 @@ SPDX-License-Identifier: AGPL-3.0-only