import {useCallback, useMemo, useState} from 'react' import {type AppBskyFeedGetLikes as GetLikes} from '@atproto/api' import {msg} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useInitialNumToRender} from '#/lib/hooks/useInitialNumToRender' import {cleanError} from '#/lib/strings/errors' import {logger} from '#/logger' import {useLikedByQuery} from '#/state/queries/post-liked-by' import {useResolveUriQuery} from '#/state/queries/resolve-uri' import {ProfileCardWithFollowBtn} from '#/view/com/profile/ProfileCard' import {List} from '#/view/com/util/List' import {ListFooter, ListMaybePlaceholder} from '#/components/Lists' function renderItem({item, index}: {item: GetLikes.Like; index: number}) { return ( ) } function keyExtractor(item: GetLikes.Like) { return item.actor.did } export function PostLikedBy({uri}: {uri: string}) { const {_} = useLingui() const initialNumToRender = useInitialNumToRender() const [isPTRing, setIsPTRing] = useState(false) const { data: resolvedUri, error: resolveError, isLoading: isLoadingUri, } = useResolveUriQuery(uri) const { data, isLoading: isLoadingLikes, isFetchingNextPage, hasNextPage, fetchNextPage, error, refetch, } = useLikedByQuery(resolvedUri?.uri) const isError = Boolean(resolveError || error) const likes = useMemo(() => { if (data?.pages) { return data.pages.flatMap(page => page.likes) } return [] }, [data]) const onRefresh = useCallback(async () => { setIsPTRing(true) try { await refetch() } catch (err) { logger.error('Failed to refresh likes', {message: err}) } setIsPTRing(false) }, [refetch, setIsPTRing]) const onEndReached = useCallback(async () => { if (isFetchingNextPage || !hasNextPage || isError) return try { await fetchNextPage() } catch (err) { logger.error('Failed to load more likes', {message: err}) } }, [isFetchingNextPage, hasNextPage, isError, fetchNextPage]) if (likes.length < 1) { return ( ) } return ( } desktopFixedHeight initialNumToRender={initialNumToRender} windowSize={11} sideBorders={false} /> ) }