refactor: optimize paginator typings

This commit is contained in:
三咲智子 2023-01-09 23:04:09 +08:00
parent 162b56f5cb
commit 01a24a6015
No known key found for this signature in database
GPG key ID: 69992F2250DFD93E

View file

@ -1,16 +1,16 @@
import type { Paginator, WsEvents } from 'masto'
import type { Paginator, WsEvents, mastodon } from 'masto'
import type { PaginatorState } from '~/types'
export function usePaginator<T, P, U = T>(
paginator: Paginator<T[], P>,
stream?: Promise<WsEvents>,
eventType: 'notification' | 'update' = 'update',
preprocess: (items: T[]) => U[] = (items: T[]) => items as unknown as U[],
preprocess: (items: T[]) => U[] = items => items as unknown as U[],
buffer = 10,
) {
const state = ref<PaginatorState>(isMastoInitialised.value ? 'idle' : 'loading')
const items = ref<T[]>([])
const nextItems = ref<T[]>([])
const items = ref<U[]>([])
const nextItems = ref<U[]>([])
const prevItems = ref<T[]>([])
const endAnchor = ref<HTMLDivElement>()
@ -20,7 +20,7 @@ export function usePaginator<T, P, U = T>(
const deactivated = useDeactivated()
async function update() {
items.value.unshift(...preprocess(prevItems.value as any) as any)
(items.value as U[]).unshift(...preprocess(prevItems.value as T[]))
prevItems.value = []
}
@ -40,17 +40,19 @@ export function usePaginator<T, P, U = T>(
s.on('status.update', (status) => {
cacheStatus(status, undefined, true)
const index = items.value.findIndex((s: any) => s.id === status.id)
const data = items.value as mastodon.v1.Status[]
const index = data.findIndex(s => s.id === status.id)
if (index >= 0)
items.value[index] = status as any
data[index] = status
})
s.on('delete', (id) => {
removeCachedStatus(id)
const index = items.value.findIndex((s: any) => s.id === id)
const data = items.value as mastodon.v1.Status[]
const index = data.findIndex(s => s.id === id)
if (index >= 0)
items.value.splice(index, 1)
data.splice(index, 1)
})
})