diff options
| author | MohamedBassem <me@mbassem.com> | 2024-03-20 17:56:22 +0000 |
|---|---|---|
| committer | MohamedBassem <me@mbassem.com> | 2024-03-20 17:56:22 +0000 |
| commit | 20d1a90e65d08c16f30d8d9adac005dda7f4dad1 (patch) | |
| tree | 1182180136d0ef8488932e56f807fbb37a2f6f12 /apps/mobile/components/bookmarks/UpdatingBookmarkList.tsx | |
| parent | 23285cb5eb44551f8200ebda6b305240d1da09f9 (diff) | |
| download | karakeep-20d1a90e65d08c16f30d8d9adac005dda7f4dad1.tar.zst | |
fix(mobile): Fix flicker on search
Diffstat (limited to 'apps/mobile/components/bookmarks/UpdatingBookmarkList.tsx')
| -rw-r--r-- | apps/mobile/components/bookmarks/UpdatingBookmarkList.tsx | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/apps/mobile/components/bookmarks/UpdatingBookmarkList.tsx b/apps/mobile/components/bookmarks/UpdatingBookmarkList.tsx new file mode 100644 index 00000000..8495ee22 --- /dev/null +++ b/apps/mobile/components/bookmarks/UpdatingBookmarkList.tsx @@ -0,0 +1,52 @@ +import { Text } from "react-native"; +import { api } from "@/lib/trpc"; + +import type { ZGetBookmarksRequest } from "@hoarder/trpc/types/bookmarks"; + +import FullPageSpinner from "../ui/FullPageSpinner"; +import BookmarkList2 from "./BookmarkList"; + +export default function UpdatingBookmarkList({ + query, + header, +}: { + query: ZGetBookmarksRequest; + header?: React.ReactElement; +}) { + const apiUtils = api.useUtils(); + const { + data, + isPending, + isPlaceholderData, + error, + fetchNextPage, + isFetchingNextPage, + } = api.bookmarks.getBookmarks.useInfiniteQuery(query, { + initialCursor: null, + getNextPageParam: (lastPage) => lastPage.nextCursor, + }); + + if (error) { + return <Text>{JSON.stringify(error)}</Text>; + } + + if (isPending || !data) { + return <FullPageSpinner />; + } + + const onRefresh = () => { + apiUtils.bookmarks.getBookmarks.invalidate(); + apiUtils.bookmarks.getBookmark.invalidate(); + }; + + return ( + <BookmarkList2 + bookmarks={data.pages.flatMap((p) => p.bookmarks)} + header={header} + onRefresh={onRefresh} + fetchNextPage={fetchNextPage} + isFetchingNextPage={isFetchingNextPage} + isRefreshing={isPending || isPlaceholderData} + /> + ); +} |
