diff options
| author | syuilo <4439005+syuilo@users.noreply.github.com> | 2025-09-01 12:59:53 +0900 |
|---|---|---|
| committer | syuilo <4439005+syuilo@users.noreply.github.com> | 2025-09-01 12:59:53 +0900 |
| commit | 3c998e1f482c933aa22e597c79978bfe618845eb (patch) | |
| tree | 654c23dd7c935ddd869f623aa73fff7b1d3d84bc /packages | |
| parent | refactor (diff) | |
| download | misskey-3c998e1f482c933aa22e597c79978bfe618845eb.tar.gz misskey-3c998e1f482c933aa22e597c79978bfe618845eb.tar.bz2 misskey-3c998e1f482c933aa22e597c79978bfe618845eb.zip | |
refactor
Diffstat (limited to 'packages')
13 files changed, 46 insertions, 32 deletions
diff --git a/packages/frontend/src/components/MkChartTooltip.vue b/packages/frontend/src/components/MkChartTooltip.vue index 51081ede23..b9d2c8219a 100644 --- a/packages/frontend/src/components/MkChartTooltip.vue +++ b/packages/frontend/src/components/MkChartTooltip.vue @@ -25,12 +25,12 @@ defineProps<{ showing: boolean; x: number; y: number; - title?: string; + title?: string | null; series?: { backgroundColor: string; borderColor: string; text: string; - }[]; + }[] | null; }>(); const emit = defineEmits<{ diff --git a/packages/frontend/src/components/page/page.image.vue b/packages/frontend/src/components/page/page.image.vue index 69443ce7dd..7e8d8f7bfb 100644 --- a/packages/frontend/src/components/page/page.image.vue +++ b/packages/frontend/src/components/page/page.image.vue @@ -15,7 +15,7 @@ import * as Misskey from 'misskey-js'; import MkMediaList from '@/components/MkMediaList.vue'; const props = defineProps<{ - block: Misskey.entities.PageBlock, + block: Extract<Misskey.entities.PageBlock, { type: 'image' }>, page: Misskey.entities.Page, }>(); diff --git a/packages/frontend/src/components/page/page.note.vue b/packages/frontend/src/components/page/page.note.vue index df26874c17..bae05b9765 100644 --- a/packages/frontend/src/components/page/page.note.vue +++ b/packages/frontend/src/components/page/page.note.vue @@ -18,7 +18,7 @@ import MkNoteDetailed from '@/components/MkNoteDetailed.vue'; import { misskeyApi } from '@/utility/misskey-api.js'; const props = defineProps<{ - block: Misskey.entities.PageBlock, + block: Extract<Misskey.entities.PageBlock, { type: 'note' }>, page: Misskey.entities.Page, }>(); diff --git a/packages/frontend/src/components/page/page.section.vue b/packages/frontend/src/components/page/page.section.vue index e3d26d924f..05c12b3b83 100644 --- a/packages/frontend/src/components/page/page.section.vue +++ b/packages/frontend/src/components/page/page.section.vue @@ -29,7 +29,7 @@ import * as Misskey from 'misskey-js'; const XBlock = defineAsyncComponent(() => import('./page.block.vue')); defineProps<{ - block: Misskey.entities.PageBlock, + block: Extract<Misskey.entities.PageBlock, { type: 'section' }>, h: number, page: Misskey.entities.Page, }>(); diff --git a/packages/frontend/src/components/page/page.text.vue b/packages/frontend/src/components/page/page.text.vue index a00eb0b5ca..792f6529d8 100644 --- a/packages/frontend/src/components/page/page.text.vue +++ b/packages/frontend/src/components/page/page.text.vue @@ -22,7 +22,7 @@ import { isEnabledUrlPreview } from '@/utility/url-preview.js'; const MkUrlPreview = defineAsyncComponent(() => import('@/components/MkUrlPreview.vue')); const props = defineProps<{ - block: Misskey.entities.PageBlock, + block: Extract<Misskey.entities.PageBlock, { type: 'text' }>, page: Misskey.entities.Page, }>(); diff --git a/packages/frontend/src/instance.ts b/packages/frontend/src/instance.ts index a5397f0c0d..c9d83a4dbe 100644 --- a/packages/frontend/src/instance.ts +++ b/packages/frontend/src/instance.ts @@ -51,3 +51,9 @@ export async function fetchInstance(force = false): Promise<Misskey.entities.Met return instance; } + +export type ClientOptions = { + entrancePageStyle: 'classic' | 'simple'; + showTimelineForVisitor: boolean; + showActivitiesForVisitor: boolean; +}; diff --git a/packages/frontend/src/pages/admin/branding.vue b/packages/frontend/src/pages/admin/branding.vue index f78a4f27bd..e5e0f087e1 100644 --- a/packages/frontend/src/pages/admin/branding.vue +++ b/packages/frontend/src/pages/admin/branding.vue @@ -152,6 +152,7 @@ SPDX-License-Identifier: AGPL-3.0-only import { ref, computed } from 'vue'; import JSON5 from 'json5'; import { host } from '@@/js/config.js'; +import type { ClientOptions } from '@/instance.js'; import MkInput from '@/components/MkInput.vue'; import MkTextarea from '@/components/MkTextarea.vue'; import * as os from '@/os.js'; @@ -166,9 +167,13 @@ import MkSwitch from '@/components/MkSwitch.vue'; const meta = await misskeyApi('admin/meta'); -const entrancePageStyle = ref(meta.clientOptions.entrancePageStyle ?? 'classic'); -const showTimelineForVisitor = ref(meta.clientOptions.showTimelineForVisitor ?? true); -const showActivitiesForVisitor = ref(meta.clientOptions.showActivitiesForVisitor ?? true); +// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition +const entrancePageStyle = ref<ClientOptions['entrancePageStyle']>(meta.clientOptions.entrancePageStyle ?? 'classic'); +// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition +const showTimelineForVisitor = ref<ClientOptions['showTimelineForVisitor']>(meta.clientOptions.showTimelineForVisitor ?? true); +// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition +const showActivitiesForVisitor = ref<ClientOptions['showActivitiesForVisitor']>(meta.clientOptions.showActivitiesForVisitor ?? true); + const iconUrl = ref(meta.iconUrl); const app192IconUrl = ref(meta.app192IconUrl); const app512IconUrl = ref(meta.app512IconUrl); @@ -186,11 +191,11 @@ const manifestJsonOverride = ref(meta.manifestJsonOverride === '' ? '{}' : JSON. function save() { os.apiWithDialog('admin/update-meta', { - clientOptions: { + clientOptions: ({ entrancePageStyle: entrancePageStyle.value, showTimelineForVisitor: showTimelineForVisitor.value, showActivitiesForVisitor: showActivitiesForVisitor.value, - }, + } as ClientOptions) as any, iconUrl: iconUrl.value, app192IconUrl: app192IconUrl.value, app512IconUrl: app512IconUrl.value, diff --git a/packages/frontend/src/pages/admin/email-settings.vue b/packages/frontend/src/pages/admin/email-settings.vue index 8eb403f94c..340391a12f 100644 --- a/packages/frontend/src/pages/admin/email-settings.vue +++ b/packages/frontend/src/pages/admin/email-settings.vue @@ -107,7 +107,7 @@ const smtpPass = ref(meta.smtpPass); async function testEmail() { const { canceled, result: destination } = await os.inputText({ - title: i18n.ts.destination, + title: 'To', type: 'email', default: instance.maintainerEmail ?? '', placeholder: 'test@example.com', diff --git a/packages/frontend/src/pages/admin/federation-job-queue.chart.vue b/packages/frontend/src/pages/admin/federation-job-queue.chart.vue index b17eceadde..d449801985 100644 --- a/packages/frontend/src/pages/admin/federation-job-queue.chart.vue +++ b/packages/frontend/src/pages/admin/federation-job-queue.chart.vue @@ -81,10 +81,10 @@ function onStats(stats: Misskey.entities.QueueStats) { delayed.value = stats[props.domain].delayed; waiting.value = stats[props.domain].waiting; - chartProcess.value.pushData(stats[props.domain].activeSincePrevTick); - chartActive.value.pushData(stats[props.domain].active); - chartDelayed.value.pushData(stats[props.domain].delayed); - chartWaiting.value.pushData(stats[props.domain].waiting); + if (chartProcess.value != null) chartProcess.value.pushData(stats[props.domain].activeSincePrevTick); + if (chartActive.value != null) chartActive.value.pushData(stats[props.domain].active); + if (chartDelayed.value != null) chartDelayed.value.pushData(stats[props.domain].delayed); + if (chartWaiting.value != null) chartWaiting.value.pushData(stats[props.domain].waiting); } function onStatsLog(statsLog: Misskey.entities.QueueStatsLog) { @@ -100,10 +100,10 @@ function onStatsLog(statsLog: Misskey.entities.QueueStatsLog) { dataWaiting.push(stats[props.domain].waiting); } - chartProcess.value.setData(dataProcess); - chartActive.value.setData(dataActive); - chartDelayed.value.setData(dataDelayed); - chartWaiting.value.setData(dataWaiting); + if (chartProcess.value != null) chartProcess.value.setData(dataProcess); + if (chartActive.value != null) chartActive.value.setData(dataActive); + if (chartDelayed.value != null) chartDelayed.value.setData(dataDelayed); + if (chartWaiting.value != null) chartWaiting.value.setData(dataWaiting); } onMounted(() => { diff --git a/packages/frontend/src/pages/emoji-edit-dialog.vue b/packages/frontend/src/pages/emoji-edit-dialog.vue index 201ce003f0..033e3376a5 100644 --- a/packages/frontend/src/pages/emoji-edit-dialog.vue +++ b/packages/frontend/src/pages/emoji-edit-dialog.vue @@ -36,7 +36,7 @@ SPDX-License-Identifier: AGPL-3.0-only <MkInput v-model="name" pattern="[a-z0-9_]" autocapitalize="off"> <template #label>{{ i18n.ts.name }}</template> </MkInput> - <MkInput v-model="category" :datalist="customEmojiCategories"> + <MkInput v-model="category" :datalist="customEmojiCategories.filter(x => x != null)"> <template #label>{{ i18n.ts.category }}</template> </MkInput> <MkInput v-model="aliases" autocapitalize="off"> diff --git a/packages/frontend/src/pages/settings/2fa.qrdialog.vue b/packages/frontend/src/pages/settings/2fa.qrdialog.vue index 5bb125e67c..780040f699 100644 --- a/packages/frontend/src/pages/settings/2fa.qrdialog.vue +++ b/packages/frontend/src/pages/settings/2fa.qrdialog.vue @@ -135,7 +135,7 @@ const emit = defineEmits<{ const dialog = useTemplateRef('dialog'); const page = ref(0); -const token = ref<string | number | null>(null); +const token = ref<string | null>(null); const backupCodes = ref<string[]>(); function cancel() { @@ -145,7 +145,7 @@ function cancel() { async function tokenDone() { if (token.value == null) return; const res = await os.apiWithDialog('i/2fa/done', { - token: typeof token.value === 'string' ? token.value : token.value.toString(), + token: token.value.toString(), // 実装ミスなどでnumberが入る可能性を払拭できないため念のためtoString }); backupCodes.value = res.backupCodes; diff --git a/packages/frontend/src/pages/settings/statusbar.vue b/packages/frontend/src/pages/settings/statusbar.vue index 2db9f7e6f9..1d0fadabd7 100644 --- a/packages/frontend/src/pages/settings/statusbar.vue +++ b/packages/frontend/src/pages/settings/statusbar.vue @@ -17,8 +17,8 @@ SPDX-License-Identifier: AGPL-3.0-only <script lang="ts" setup> import { onMounted, ref, computed } from 'vue'; import * as Misskey from 'misskey-js'; -import { genId } from '@/utility/id.js'; import XStatusbar from './statusbar.statusbar.vue'; +import { genId } from '@/utility/id.js'; import MkFolder from '@/components/MkFolder.vue'; import MkButton from '@/components/MkButton.vue'; import { misskeyApi } from '@/utility/misskey-api.js'; @@ -39,6 +39,7 @@ onMounted(() => { async function add() { prefer.commit('statusbars', [...statusbars.value, { id: genId(), + name: null, type: null, black: false, size: 'medium', diff --git a/packages/frontend/src/preferences/def.ts b/packages/frontend/src/preferences/def.ts index 702d9a4acf..414aa34753 100644 --- a/packages/frontend/src/preferences/def.ts +++ b/packages/frontend/src/preferences/def.ts @@ -32,6 +32,15 @@ export type SoundStore = { volume: number; }; +export type StatusbarStore = { + name: string | null; + id: string; + type: string | null; + size: 'verySmall' | 'small' | 'medium' | 'large' | 'veryLarge'; + black: boolean; + props: Record<string, any>; +}; + type OmitStrict<T, K extends keyof T> = T extends any ? Pick<T, Exclude<keyof T, K>> : never; // NOTE: デフォルト値は他の設定の状態に依存してはならない(依存していた場合、ユーザーがその設定項目単体で「初期値にリセット」した場合不具合の原因になる) @@ -182,14 +191,7 @@ export const PREF_DEF = definePreferences({ ], }, statusbars: { - default: [] as { - name: string; - id: string; - type: string; - size: 'verySmall' | 'small' | 'medium' | 'large' | 'veryLarge'; - black: boolean; - props: Record<string, any>; - }[], + default: [] as StatusbarStore[], }, serverDisconnectedBehavior: { default: 'quiet' as 'quiet' | 'reload' | 'dialog', |