From b6bf57fca746f193c23fa7d939e0a0cb28bd7e94 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Thu, 7 Mar 2024 14:05:53 -0600 Subject: [PATCH] Some work on Likes dialog, needs discussion --- src/components/LikesDialog.tsx | 75 +++++++++++++++------------------- 1 file changed, 33 insertions(+), 42 deletions(-) diff --git a/src/components/LikesDialog.tsx b/src/components/LikesDialog.tsx index 02ea924aef..94a3f27e26 100644 --- a/src/components/LikesDialog.tsx +++ b/src/components/LikesDialog.tsx @@ -9,12 +9,12 @@ import {useLikedByQuery} from '#/state/queries/post-liked-by' import {cleanError} from '#/lib/strings/errors' import {logger} from '#/logger' -import {atoms as a, useBreakpoints, useTheme} from '#/alf' +import {atoms as a, useTheme} from '#/alf' import {Text} from '#/components/Typography' import * as Dialog from '#/components/Dialog' -import {Button} from '#/components/Button' import {ErrorMessage} from '#/view/com/util/error/ErrorMessage' import {ProfileCardWithFollowBtn} from '#/view/com/profile/ProfileCard' +import {Loader} from '#/components/Loader' interface LikesDialogProps { control: Dialog.DialogOuterProps['control'] @@ -34,23 +34,24 @@ export function LikesDialog(props: LikesDialogProps) { export function LikesDialogInner({control, uri}: LikesDialogProps) { const {_} = useLingui() const t = useTheme() - const {gtMobile} = useBreakpoints() const { data: resolvedUri, error: resolveError, - isFetching: isFetchingResolvedUri, + isFetched: hasFetchedResolvedUri, } = useResolveUriQuery(uri) const { data, - isFetching, - isFetched, + isFetching: isFetchingLikedBy, + isFetched: hasFetchedLikedBy, isFetchingNextPage, hasNextPage, fetchNextPage, isError, - error, + error: likedByError, } = useLikedByQuery(resolvedUri?.uri) + + const isLoading = !hasFetchedResolvedUri || !hasFetchedLikedBy const likes = useMemo(() => { if (data?.pages) { return data.pages.flatMap(page => page.likes) @@ -59,13 +60,13 @@ export function LikesDialogInner({control, uri}: LikesDialogProps) { }, [data]) const onEndReached = useCallback(async () => { - if (isFetching || !hasNextPage || isError) return + if (isFetchingLikedBy || !hasNextPage || isError) return try { await fetchNextPage() } catch (err) { logger.error('Failed to load more likes', {message: err}) } - }, [isFetching, hasNextPage, isError, fetchNextPage]) + }, [isFetchingLikedBy, hasNextPage, isError, fetchNextPage]) const renderItem = useCallback( ({item}: {item: GetLikes.Like}) => { @@ -81,18 +82,17 @@ export function LikesDialogInner({control, uri}: LikesDialogProps) { ) return ( - - + + Liked by - {isFetchingResolvedUri || !isFetched ? ( - - ) : resolveError || isError ? ( - + + {isLoading ? ( + + + + ) : resolveError || likedByError || !data ? ( + ) : likes.length === 0 ? ( @@ -101,29 +101,20 @@ export function LikesDialogInner({control, uri}: LikesDialogProps) { - ) : null} - item.actor.did} - onEndReached={onEndReached} - renderItem={renderItem} - initialNumToRender={15} - ListFooterComponent={ - - } - style={{height: 400}} - /> - - - + ) : ( + item.actor.did} + onEndReached={onEndReached} + renderItem={renderItem} + initialNumToRender={15} + ListFooterComponent={ + + } + /> + )} + + ) }