diff options
| author | かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> | 2025-07-03 11:20:26 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-03 11:20:26 +0900 |
| commit | 09a5e4b10aad85d27875f3cdc8f32bd820615978 (patch) | |
| tree | b79819b40e0630314522461ea01ef365562fb255 /packages/frontend/src/components | |
| parent | 🎨 (diff) | |
| download | misskey-09a5e4b10aad85d27875f3cdc8f32bd820615978.tar.gz misskey-09a5e4b10aad85d27875f3cdc8f32bd820615978.tar.bz2 misskey-09a5e4b10aad85d27875f3cdc8f32bd820615978.zip | |
fix(frontend): Paginatorの型エラー解消 (#16230)
* fix(frontend): fix paginator type error
* fix
* refactor
* fix
* fix
* fix(paginator): remove readonly type
* fix
* typo
* fix: R -> E
* remove any
---------
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
Diffstat (limited to 'packages/frontend/src/components')
8 files changed, 31 insertions, 27 deletions
diff --git a/packages/frontend/src/components/MkChannelList.vue b/packages/frontend/src/components/MkChannelList.vue index 7f82e531ae..394dcb6bd1 100644 --- a/packages/frontend/src/components/MkChannelList.vue +++ b/packages/frontend/src/components/MkChannelList.vue @@ -14,15 +14,16 @@ SPDX-License-Identifier: AGPL-3.0-only </template> <script lang="ts" setup> -import type { Paginator } from '@/utility/paginator.js'; +import * as Misskey from 'misskey-js'; +import type { IPaginator } from '@/utility/paginator.js'; import MkChannelPreview from '@/components/MkChannelPreview.vue'; import MkPagination from '@/components/MkPagination.vue'; import { i18n } from '@/i18n.js'; const props = withDefaults(defineProps<{ - paginator: Paginator; + paginator: IPaginator; noGap?: boolean; - extractor?: (item: any) => any; + extractor?: (item: any) => Misskey.entities.Channel; }>(), { extractor: (item) => item, }); diff --git a/packages/frontend/src/components/MkNotesTimeline.vue b/packages/frontend/src/components/MkNotesTimeline.vue index 1ae97fd0c0..83af7db26f 100644 --- a/packages/frontend/src/components/MkNotesTimeline.vue +++ b/packages/frontend/src/components/MkNotesTimeline.vue @@ -31,8 +31,9 @@ SPDX-License-Identifier: AGPL-3.0-only </MkPagination> </template> -<script lang="ts" setup generic="T extends Paginator"> -import type { Paginator } from '@/utility/paginator.js'; +<script lang="ts" setup generic="T extends IPaginator<Misskey.entities.Note>"> +import * as Misskey from 'misskey-js'; +import type { IPaginator } from '@/utility/paginator.js'; import MkNote from '@/components/MkNote.vue'; import MkPagination from '@/components/MkPagination.vue'; import { i18n } from '@/i18n.js'; diff --git a/packages/frontend/src/components/MkPagination.vue b/packages/frontend/src/components/MkPagination.vue index fb9cd6e1f0..8ca1c80e84 100644 --- a/packages/frontend/src/components/MkPagination.vue +++ b/packages/frontend/src/components/MkPagination.vue @@ -25,7 +25,7 @@ SPDX-License-Identifier: AGPL-3.0-only </div> <div v-else key="_root_" class="_gaps"> - <slot :items="paginator.items.value" :fetching="paginator.fetching.value || paginator.fetchingOlder.value"></slot> + <slot :items="unref(paginator.items)" :fetching="paginator.fetching.value || paginator.fetchingOlder.value"></slot> <div v-if="paginator.order.value === 'oldest'"> <MkButton v-if="!paginator.fetchingNewer.value" :class="$style.more" :wait="paginator.fetchingNewer.value" primary rounded @click="paginator.fetchNewer()"> {{ i18n.ts.loadMore }} @@ -44,11 +44,11 @@ SPDX-License-Identifier: AGPL-3.0-only </component> </template> -<script lang="ts" setup generic="T extends Paginator, I = UnwrapRef<T['items']>"> +<script lang="ts" setup generic="T extends IPaginator"> import { isLink } from '@@/js/is-link.js'; -import { onMounted, watch } from 'vue'; +import { onMounted, watch, unref } from 'vue'; import type { UnwrapRef } from 'vue'; -import type { Paginator } from '@/utility/paginator.js'; +import type { IPaginator } from '@/utility/paginator.js'; import MkButton from '@/components/MkButton.vue'; import { i18n } from '@/i18n.js'; import { prefer } from '@/preferences.js'; @@ -95,7 +95,7 @@ if (props.paginator.computedParams) { defineSlots<{ empty: () => void; - default: (props: { items: I }) => void; + default: (props: { items: UnwrapRef<T['items']> }) => void; }>(); </script> diff --git a/packages/frontend/src/components/MkPaginationControl.vue b/packages/frontend/src/components/MkPaginationControl.vue index 91630eca35..10bed575a4 100644 --- a/packages/frontend/src/components/MkPaginationControl.vue +++ b/packages/frontend/src/components/MkPaginationControl.vue @@ -37,9 +37,9 @@ SPDX-License-Identifier: AGPL-3.0-only </div> </template> -<script lang="ts" setup generic="T extends Paginator"> +<script lang="ts" setup generic="T extends IPaginator"> import { ref, watch } from 'vue'; -import type { Paginator } from '@/utility/paginator.js'; +import type { IPaginator } from '@/utility/paginator.js'; import MkButton from '@/components/MkButton.vue'; import { i18n } from '@/i18n.js'; import MkSelect from '@/components/MkSelect.vue'; diff --git a/packages/frontend/src/components/MkStreamingNotesTimeline.vue b/packages/frontend/src/components/MkStreamingNotesTimeline.vue index 6e87c02949..b697e18f79 100644 --- a/packages/frontend/src/components/MkStreamingNotesTimeline.vue +++ b/packages/frontend/src/components/MkStreamingNotesTimeline.vue @@ -75,6 +75,7 @@ import { i18n } from '@/i18n.js'; import { globalEvents, useGlobalEvent } from '@/events.js'; import { isSeparatorNeeded, getSeparatorInfo } from '@/utility/timeline-date-separate.js'; import { Paginator } from '@/utility/paginator.js'; +import type { IPaginator, MisskeyEntity } from '@/utility/paginator.js'; const props = withDefaults(defineProps<{ src: BasicTimelineType | 'mentions' | 'directs' | 'list' | 'antenna' | 'channel' | 'role'; @@ -101,12 +102,12 @@ provide('inTimeline', true); provide('tl_withSensitive', computed(() => props.withSensitive)); provide('inChannel', computed(() => props.src === 'channel')); -let paginator: Paginator; +let paginator: IPaginator<Misskey.entities.Note>; if (props.src === 'antenna') { paginator = markRaw(new Paginator('antennas/notes', { computedParams: computed(() => ({ - antennaId: props.antenna, + antennaId: props.antenna!, })), useShallowRef: true, })); @@ -160,21 +161,21 @@ if (props.src === 'antenna') { computedParams: computed(() => ({ withRenotes: props.withRenotes, withFiles: props.onlyFiles ? true : undefined, - listId: props.list, + listId: props.list!, })), useShallowRef: true, })); } else if (props.src === 'channel') { paginator = markRaw(new Paginator('channels/timeline', { computedParams: computed(() => ({ - channelId: props.channel, + channelId: props.channel!, })), useShallowRef: true, })); } else if (props.src === 'role') { paginator = markRaw(new Paginator('roles/notes', { computedParams: computed(() => ({ - roleId: props.role, + roleId: props.role!, })), useShallowRef: true, })); @@ -259,7 +260,7 @@ function releaseQueue() { scrollToTop(rootEl.value); } -function prepend(note: Misskey.entities.Note) { +function prepend(note: Misskey.entities.Note & MisskeyEntity) { adInsertionCounter++; if (instance.notesPerOneAd > 0 && adInsertionCounter % instance.notesPerOneAd === 0) { @@ -281,12 +282,13 @@ function prepend(note: Misskey.entities.Note) { } } -let connection: Misskey.ChannelConnection | null = null; -let connection2: Misskey.ChannelConnection | null = null; +let connection: Misskey.IChannelConnection | null = null; +let connection2: Misskey.IChannelConnection | null = null; const stream = store.s.realtimeMode ? useStream() : null; function connectChannel() { + if (stream == null) return; if (props.src === 'antenna') { if (props.antenna == null) return; connection = stream.useChannel('antenna', { diff --git a/packages/frontend/src/components/MkStreamingNotificationsTimeline.vue b/packages/frontend/src/components/MkStreamingNotificationsTimeline.vue index 04b230277c..869d848d90 100644 --- a/packages/frontend/src/components/MkStreamingNotificationsTimeline.vue +++ b/packages/frontend/src/components/MkStreamingNotificationsTimeline.vue @@ -109,7 +109,7 @@ function reload() { return paginator.reload(); } -let connection: Misskey.ChannelConnection<Misskey.Channels['main']> | null = null; +let connection: Misskey.IChannelConnection<Misskey.Channels['main']> | null = null; onMounted(() => { paginator.init(); diff --git a/packages/frontend/src/components/MkUserList.vue b/packages/frontend/src/components/MkUserList.vue index 761e1cdd04..c639e18b1d 100644 --- a/packages/frontend/src/components/MkUserList.vue +++ b/packages/frontend/src/components/MkUserList.vue @@ -16,15 +16,16 @@ SPDX-License-Identifier: AGPL-3.0-only </template> <script lang="ts" setup> -import type { Paginator } from '@/utility/paginator.js'; +import * as Misskey from 'misskey-js'; +import type { IPaginator } from '@/utility/paginator.js'; import MkUserInfo from '@/components/MkUserInfo.vue'; import MkPagination from '@/components/MkPagination.vue'; import { i18n } from '@/i18n.js'; const props = withDefaults(defineProps<{ - paginator: Paginator; + paginator: IPaginator; noGap?: boolean; - extractor?: (item: any) => any; + extractor?: (item: any) => Misskey.entities.UserDetailed; }>(), { extractor: (item) => item, }); diff --git a/packages/frontend/src/components/MkUserSetupDialog.Follow.vue b/packages/frontend/src/components/MkUserSetupDialog.Follow.vue index 02171a123d..c853eb5054 100644 --- a/packages/frontend/src/components/MkUserSetupDialog.Follow.vue +++ b/packages/frontend/src/components/MkUserSetupDialog.Follow.vue @@ -13,7 +13,7 @@ SPDX-License-Identifier: AGPL-3.0-only <MkPagination :paginator="pinnedUsersPaginator"> <template #default="{ items }"> <div :class="$style.users"> - <XUser v-for="item in (items as Misskey.entities.UserDetailed[])" :key="item.id" :user="item"/> + <XUser v-for="item in items" :key="item.id" :user="item"/> </div> </template> </MkPagination> @@ -25,7 +25,7 @@ SPDX-License-Identifier: AGPL-3.0-only <MkPagination :paginator="popularUsersPaginator"> <template #default="{ items }"> <div :class="$style.users"> - <XUser v-for="item in (items as Misskey.entities.UserDetailed[])" :key="item.id" :user="item"/> + <XUser v-for="item in items" :key="item.id" :user="item"/> </div> </template> </MkPagination> @@ -34,7 +34,6 @@ SPDX-License-Identifier: AGPL-3.0-only </template> <script lang="ts" setup> -import * as Misskey from 'misskey-js'; import { markRaw } from 'vue'; import { i18n } from '@/i18n.js'; import MkFolder from '@/components/MkFolder.vue'; |