diff options
| author | MohamedBassem <me@mbassem.com> | 2024-03-13 21:43:44 +0000 |
|---|---|---|
| committer | Mohamed Bassem <me@mbassem.com> | 2024-03-14 16:40:45 +0000 |
| commit | 04572a8e5081b1e4871e273cde9dbaaa44c52fe0 (patch) | |
| tree | 8e993acb732a50d1306d4d6953df96c165c57f57 /apps/mobile/components/bookmarks/BookmarkList.tsx | |
| parent | 2df08ed08c065e8b91bc8df0266bd4bcbb062be4 (diff) | |
| download | karakeep-04572a8e5081b1e4871e273cde9dbaaa44c52fe0.tar.zst | |
structure: Create apps dir and copy tooling dir from t3-turbo repo
Diffstat (limited to 'apps/mobile/components/bookmarks/BookmarkList.tsx')
| -rw-r--r-- | apps/mobile/components/bookmarks/BookmarkList.tsx | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/apps/mobile/components/bookmarks/BookmarkList.tsx b/apps/mobile/components/bookmarks/BookmarkList.tsx new file mode 100644 index 00000000..8e408709 --- /dev/null +++ b/apps/mobile/components/bookmarks/BookmarkList.tsx @@ -0,0 +1,61 @@ +import { useEffect, useState } from "react"; +import { Text, View } from "react-native"; +import Animated, { LinearTransition } from "react-native-reanimated"; + +import BookmarkCard from "./BookmarkCard"; +import FullPageSpinner from "../ui/FullPageSpinner"; + +import { api } from "@/lib/trpc"; + +export default function BookmarkList({ + favourited, + archived, + ids, +}: { + favourited?: boolean; + archived?: boolean; + ids?: string[]; +}) { + const apiUtils = api.useUtils(); + const [refreshing, setRefreshing] = useState(false); + const { data, isPending, isPlaceholderData } = + api.bookmarks.getBookmarks.useQuery({ + favourited, + archived, + ids, + }); + + useEffect(() => { + setRefreshing(isPending || isPlaceholderData); + }, [isPending, isPlaceholderData]); + + if (isPending || !data) { + return <FullPageSpinner />; + } + + const onRefresh = () => { + apiUtils.bookmarks.getBookmarks.invalidate(); + apiUtils.bookmarks.getBookmark.invalidate(); + }; + + return ( + <Animated.FlatList + itemLayoutAnimation={LinearTransition} + contentContainerStyle={{ + gap: 15, + marginVertical: 15, + alignItems: "center", + }} + renderItem={(b) => <BookmarkCard bookmark={b.item} />} + ListEmptyComponent={ + <View className="h-full items-center justify-center"> + <Text className="text-xl">No Bookmarks</Text> + </View> + } + data={data.bookmarks} + refreshing={refreshing} + onRefresh={onRefresh} + keyExtractor={(b) => b.id} + /> + ); +} |
