From d56bb79ac203d3621c54dd4463b169a32e7fdd85 Mon Sep 17 00:00:00 2001 From: Fredrik Burmester Date: Sat, 17 Aug 2024 23:34:51 +0200 Subject: [PATCH] feat: filters with bottom sheet --- .../library/collections/[collectionId].tsx | 68 ++++-- app/+not-found.tsx | 4 - app/_layout.tsx | 193 +++++++++-------- app/login.tsx | 204 +++++++++++------- bun.lockb | Bin 557693 -> 558732 bytes components/CurrentlyPlayingBar.tsx | 12 +- components/common/Input.tsx | 12 +- components/filters/FilterButton.tsx | 95 ++++---- components/filters/FilterSheet.tsx | 190 ++++++++++++++++ .../{SortButton.tsx => _SortButton.tsx} | 0 components/posters/AlbumCover.tsx | 2 - package.json | 1 + utils/atoms/filters.ts | 6 +- 13 files changed, 513 insertions(+), 274 deletions(-) create mode 100644 components/filters/FilterSheet.tsx rename components/filters/{SortButton.tsx => _SortButton.tsx} (100%) diff --git a/app/(auth)/(tabs)/library/collections/[collectionId].tsx b/app/(auth)/(tabs)/library/collections/[collectionId].tsx index 947d849b..90156f77 100644 --- a/app/(auth)/(tabs)/library/collections/[collectionId].tsx +++ b/app/(auth)/(tabs)/library/collections/[collectionId].tsx @@ -2,14 +2,15 @@ import { ColumnItem } from "@/components/common/ColumnItem"; import { TouchableItemRouter } from "@/components/common/TouchableItemRouter"; import { FilterButton } from "@/components/filters/FilterButton"; import { ResetFiltersButton } from "@/components/filters/ResetFiltersButton"; -import { SortButton } from "@/components/filters/SortButton"; import { ItemCardText } from "@/components/ItemCardText"; import MoviePoster from "@/components/posters/MoviePoster"; import { apiAtom, userAtom } from "@/providers/JellyfinProvider"; import { genreFilterAtom, sortByAtom, + sortOptions, sortOrderAtom, + sortOrderOptions, tagsFilterAtom, yearFilterAtom, } from "@/utils/atoms/filters"; @@ -35,8 +36,8 @@ const page: React.FC = () => { const [selectedGenres, setSelectedGenres] = useAtom(genreFilterAtom); const [selectedYears, setSelectedYears] = useAtom(yearFilterAtom); const [selectedTags, setSelectedTags] = useAtom(tagsFilterAtom); - const [sortBy] = useAtom(sortByAtom); - const [sortOrder] = useAtom(sortOrderAtom); + const [sortBy, setSortBy] = useAtom(sortByAtom); + const [sortOrder, setSortOrder] = useAtom(sortOrderAtom); const { data: collection } = useQuery({ queryKey: ["collection", collectionId], @@ -85,8 +86,8 @@ const page: React.FC = () => { parentId: collectionId, limit: 50, startIndex: pageParam, - sortBy: [sortBy.key, "SortName", "ProductionYear"], - sortOrder: [sortOrder.key], + sortBy: [sortBy[0].key, "SortName", "ProductionYear"], + sortOrder: [sortOrder[0].key], includeItemTypes, enableImageTypes: ["Primary", "Backdrop", "Banner", "Thumb"], recursive: true, @@ -112,17 +113,7 @@ const page: React.FC = () => { ] ); - const { - status, - data, - error, - isFetching, - isFetchingNextPage, - isFetchingPreviousPage, - fetchNextPage, - fetchPreviousPage, - hasPreviousPage, - } = useInfiniteQuery({ + const { data, isFetching, fetchNextPage } = useInfiniteQuery({ queryKey: [ "library-items", collection, @@ -205,6 +196,10 @@ const page: React.FC = () => { set={setSelectedGenres} values={selectedGenres} title="Genres" + renderItemLabel={(item) => item.toString()} + searchFilter={(item, search) => + item.toLowerCase().includes(search.toLowerCase()) + } /> { set={setSelectedTags} values={selectedTags} title="Tags" + renderItemLabel={(item) => item.toString()} + searchFilter={(item, search) => + item.toLowerCase().includes(search.toLowerCase()) + } /> { set={setSelectedYears} values={selectedYears} title="Years" + renderItemLabel={(item) => item.toString()} + searchFilter={(item, search) => + item.toLowerCase().includes(search.toLowerCase()) + } + /> + { + return sortOptions; + }} + set={setSortBy} + values={sortBy} + title="Sort by" + renderItemLabel={(item) => item.value} + searchFilter={(item, search) => + item.value.toLowerCase().includes(search.toLowerCase()) || + item.value.toLowerCase().includes(search.toLowerCase()) + } + showSearch={false} + /> + { + return sortOrderOptions; + }} + set={setSortOrder} + values={sortOrder} + title="Order by" + renderItemLabel={(item) => item.value} + searchFilter={(item, search) => + item.value.toLowerCase().includes(search.toLowerCase()) || + item.value.toLowerCase().includes(search.toLowerCase()) + } /> - {!type && isFetching && ( diff --git a/app/+not-found.tsx b/app/+not-found.tsx index 7d6ea6be..41968287 100644 --- a/app/+not-found.tsx +++ b/app/+not-found.tsx @@ -8,10 +8,6 @@ import { useEffect } from "react"; export default function NotFoundScreen() { const pathname = usePathname(); - useEffect(() => { - console.log(`Navigated to ${pathname}`); - }, [pathname]); - return ( <> diff --git a/app/_layout.tsx b/app/_layout.tsx index 0161ca59..19150605 100644 --- a/app/_layout.tsx +++ b/app/_layout.tsx @@ -16,6 +16,7 @@ import { JobQueueProvider } from "@/providers/JobQueueProvider"; import { useKeepAwake } from "expo-keep-awake"; import { useSettings } from "@/utils/atoms/settings"; import { GestureHandlerRootView } from "react-native-gesture-handler"; +import { BottomSheetModalProvider } from "@gorhom/bottom-sheet"; // Prevent the splash screen from auto-hiding before asset loading is complete. SplashScreen.preventAutoHideAsync(); @@ -79,101 +80,103 @@ function Layout() { - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/login.tsx b/app/login.tsx index 694079bc..d4c1d51c 100644 --- a/app/login.tsx +++ b/app/login.tsx @@ -6,7 +6,13 @@ import { Ionicons } from "@expo/vector-icons"; import { AxiosError } from "axios"; import { useAtom } from "jotai"; import React, { useMemo, useState } from "react"; -import { KeyboardAvoidingView, Platform, View } from "react-native"; +import { + Alert, + KeyboardAvoidingView, + Platform, + SafeAreaView, + View, +} from "react-native"; import { z } from "zod"; @@ -46,102 +52,134 @@ const Login: React.FC = () => { }; const handleConnect = (url: string) => { + if (!url.startsWith("http")) { + Alert.alert("Error", "URL needs to start with http or https."); + return; + } setServer({ address: url.trim() }); }; if (api?.basePath) { return ( - - - - Streamyfin - Server: {api.basePath} + + + + + + + Streamyfin + + Server: {api.basePath} + + + + + + Log in + + Log in to any user account + + + setCredentials({ ...credentials, username: text }) + } + value={credentials.username} + autoFocus + secureTextEntry={false} + keyboardType="default" + returnKeyType="done" + autoCapitalize="none" + textContentType="username" + clearButtonMode="while-editing" + maxLength={500} + /> + + + setCredentials({ ...credentials, password: text }) + } + value={credentials.password} + secureTextEntry + keyboardType="default" + returnKeyType="done" + autoCapitalize="none" + textContentType="password" + clearButtonMode="while-editing" + maxLength={500} + /> + + + {error} + + - - Log in - - setCredentials({ ...credentials, username: text }) - } - value={credentials.username} - autoFocus - secureTextEntry={false} - keyboardType="default" - returnKeyType="done" - autoCapitalize="none" - textContentType="username" - clearButtonMode="while-editing" - maxLength={500} - /> - - - setCredentials({ ...credentials, password: text }) - } - value={credentials.password} - secureTextEntry - keyboardType="default" - returnKeyType="done" - autoCapitalize="none" - textContentType="password" - clearButtonMode="while-editing" - maxLength={500} - /> - - - {error} - - - - + + ); } return ( - - - - Streamyfin - Enter a server adress - - + + + + + + Streamyfin + + Connect to your Jellyfin server + + + + Server URL requires http or https + + + - - + + ); }; diff --git a/bun.lockb b/bun.lockb index 5ec4bf6c69a42c981d4de3ef27782a89b31173f4..05d1cf9e90b0e91c33252b1bc8e25037864736b2 100755 GIT binary patch delta 88363 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 J&l>6azW`6}_Y(jB delta 90773 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

h z=Mb0+2gjAZ#BVcRnxni>%nf%~_{~z{S7eRA3h99+5L&Mo^tu$Xu4r zG!z<}YZXWOP{&hY@1P7kxmvxE;f7iIg+AfvluVH9aqq5m&73f!M{|ooX8+V9KBC)k z6-3O|JEPLp&c;|$icZZ&hVJxrHnda*;o@%F9O$g+{<4-{oF6;XWlr*2l?j9??FDj} z3yo8oB731_1XJ)_q?b1ECsWvUl|W zrRQ@YRL4qkYz^9aY}FmB89glo)yRpES}0Y<#S{fPD2b?iWoFG;x+Hr&(4nJo>Eo#% z2z(BKfXCoR$8XIY*vhH2NC?$~`MwGn-)&j@Q@^+Kw2aO(G z*L<+>(1czy4}&PrJkZSp9W+GLoHa$3?s6=FiZvHzFI5A9π70l{sbcdtGcDD~1p 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 diff --git a/components/CurrentlyPlayingBar.tsx b/components/CurrentlyPlayingBar.tsx index 846a7efc..cecbb85e 100644 --- a/components/CurrentlyPlayingBar.tsx +++ b/components/CurrentlyPlayingBar.tsx @@ -45,7 +45,7 @@ export const CurrentlyPlayingBar: React.FC = () => { const [user] = useAtom(userAtom); const [playing, setPlaying] = useAtom(playingAtom); const [currentlyPlaying, setCurrentlyPlaying] = useAtom( - currentlyPlayingItemAtom, + currentlyPlayingItemAtom ); const [fullScreen, setFullScreen] = useAtom(fullScreenAtom); @@ -143,7 +143,7 @@ export const CurrentlyPlayingBar: React.FC = () => { sessionId: sessionData.PlaySessionId, }); }, - [sessionData?.PlaySessionId, api, playing, currentlyPlaying?.item.Id], + [sessionData?.PlaySessionId, api, playing, currentlyPlaying?.item.Id] ); useEffect(() => { @@ -185,7 +185,7 @@ export const CurrentlyPlayingBar: React.FC = () => { item?.UserData?.PlaybackPositionTicks ? Math.round(item.UserData.PlaybackPositionTicks / 10000) : 0, - [item], + [item] ); const backdropUrl = useMemo( @@ -196,7 +196,7 @@ export const CurrentlyPlayingBar: React.FC = () => { quality: 70, width: 200, }), - [item], + [item] ); if (!currentlyPlaying || !api) return null; @@ -283,7 +283,7 @@ export const CurrentlyPlayingBar: React.FC = () => { console.log(e); writeToLog( "ERROR", - "Video playback error: " + JSON.stringify(e), + "Video playback error: " + JSON.stringify(e) ); Alert.alert("Error", "Cannot play this video file."); setPlaying(false); @@ -302,7 +302,6 @@ export const CurrentlyPlayingBar: React.FC = () => { { - console.log(JSON.stringify(item)); if (item?.Type === "Audio") router.push(`/albums/${item?.AlbumId}`); else router.push(`/items/${item?.Id}`); @@ -330,7 +329,6 @@ export const CurrentlyPlayingBar: React.FC = () => { {item?.Type === "Audio" && ( { - console.log(JSON.stringify(item)); router.push(`/albums/${item?.AlbumId}`); }} > diff --git a/components/common/Input.tsx b/components/common/Input.tsx index 60a60778..62f19023 100644 --- a/components/common/Input.tsx +++ b/components/common/Input.tsx @@ -1,17 +1,9 @@ -import { useFocusEffect } from "expo-router"; -import React, { useEffect } from "react"; -import { TextInputProps, TextProps } from "react-native"; -import { TextInput } from "react-native"; +import React from "react"; +import { TextInput, TextInputProps } from "react-native"; export function Input(props: TextInputProps) { const { style, ...otherProps } = props; const inputRef = React.useRef(null); - useFocusEffect( - React.useCallback(() => { - inputRef.current?.focus(); - }, []), - ); - return ( extends ViewProps { collectionId: string; queryFn: (params: any) => Promise; queryKey: string; - set: (value: string[]) => void; - values: string[]; + set: (value: T[]) => void; + values: T[]; title: string; + searchFilter: (item: T, query: string) => boolean; + renderItemLabel: (item: T) => React.ReactNode; + showSearch?: boolean; } -export const FilterButton: React.FC = ({ +export const FilterButton = ({ collectionId, queryFn, queryKey, set, values, title, + renderItemLabel, + searchFilter, + showSearch = true, ...props -}) => { - const [api] = useAtom(apiAtom); - const [user] = useAtom(userAtom); +}: FilterButtonProps) => { + const [open, setOpen] = useState(false); - const { data: filters } = useQuery({ + const { data: filters } = useQuery({ queryKey: [queryKey, collectionId], queryFn, staleTime: 0, @@ -36,52 +42,35 @@ export const FilterButton: React.FC = ({ if (filters?.length === 0) return null; return ( - - - - + setOpen(true)}> + 0 ? "bg-purple-600" : "bg-neutral-900"} `} - {...props} - > - {title} - - - - - - {filters?.map((g) => ( - { - if (next === "on") { - set([...values, g]); - } else { - set(values.filter((v) => v !== g)); - } - }} - key={g} - textValue={g} - > - - - ))} - - + {...props} + > + {title} + + + + + title={title} + open={open} + setOpen={setOpen} + data={filters} + values={values} + set={set} + renderItemLabel={renderItemLabel} + searchFilter={searchFilter} + showSearch={showSearch} + /> + ); }; diff --git a/components/filters/FilterSheet.tsx b/components/filters/FilterSheet.tsx new file mode 100644 index 00000000..7f839b99 --- /dev/null +++ b/components/filters/FilterSheet.tsx @@ -0,0 +1,190 @@ +import { + BottomSheetBackdrop, + BottomSheetBackdropProps, + BottomSheetFlatList, + BottomSheetModal, + BottomSheetScrollView, + BottomSheetView, +} from "@gorhom/bottom-sheet"; +import React, { + useCallback, + useEffect, + useMemo, + useRef, + useState, +} from "react"; + +import { Text } from "@/components/common/Text"; +import { StyleSheet, TouchableOpacity, View, ViewProps } from "react-native"; +import { Ionicons } from "@expo/vector-icons"; +import { Button } from "../Button"; +import { Input } from "../common/Input"; + +interface Props extends ViewProps { + open: boolean; + setOpen: (open: boolean) => void; + data?: T[] | null; + values: T[]; + set: (value: T[]) => void; + title: string; + searchFilter: (item: T, query: string) => boolean; + renderItemLabel: (item: T) => React.ReactNode; + showSearch?: boolean; +} + +const LIMIT = 100; + +export const FilterSheet = ({ + values, + data: _data, + open, + set, + setOpen, + title, + searchFilter, + renderItemLabel, + showSearch = true, + ...props +}: Props) => { + const bottomSheetModalRef = useRef(null); + const snapPoints = useMemo(() => ["80%"], []); + + const [data, setData] = useState([]); + const [offset, setOffset] = useState(0); + + const [search, setSearch] = useState(""); + + const filteredData = useMemo(() => { + if (!search) return _data; + const results = []; + for (let i = 0; i < (_data?.length || 0); i++) { + if (_data && searchFilter(_data[i], search)) { + results.push(_data[i]); + } + } + return results.slice(0, 100); + }, [search, _data, searchFilter]); + + useEffect(() => { + if (!_data || _data.length === 0) return; + const tmp = new Set(data); + for (let i = offset; i < Math.min(_data.length, offset + LIMIT); i++) { + tmp.add(_data[i]); + } + setData(Array.from(tmp)); + }, [offset, _data]); + + useEffect(() => { + if (open) bottomSheetModalRef.current?.present(); + else bottomSheetModalRef.current?.dismiss(); + }, [open]); + + const handleSheetChanges = useCallback((index: number) => { + if (index === -1) { + setOpen(false); + } + }, []); + + const renderData = useMemo(() => { + if (search.length > 0 && showSearch) return filteredData; + return data; + }, [search, filteredData, data]); + + const renderBackdrop = useCallback( + (props: BottomSheetBackdropProps) => ( + + ), + [] + ); + + return ( + + + + {title} + {_data?.length} items + {showSearch && ( + { + setSearch(text); + }} + returnKeyType="done" + /> + )} + + {renderData?.map((item, index) => ( + <> + { + set( + values.includes(item) + ? values.filter((i) => i !== item) + : [item] + ); + setTimeout(() => { + setOpen(false); + }, 250); + }} + key={index} + className=" bg-neutral-800 px-4 py-3 flex flex-row items-center justify-between" + > + {renderItemLabel(item)} + {values.includes(item) ? ( + + ) : ( + + )} + + + + ))} + + {data.length < (_data?.length || 0) && ( + + )} + + + + ); +}; diff --git a/components/filters/SortButton.tsx b/components/filters/_SortButton.tsx similarity index 100% rename from components/filters/SortButton.tsx rename to components/filters/_SortButton.tsx diff --git a/components/posters/AlbumCover.tsx b/components/posters/AlbumCover.tsx index c1c376e1..6a4ad770 100644 --- a/components/posters/AlbumCover.tsx +++ b/components/posters/AlbumCover.tsx @@ -21,7 +21,6 @@ const AlbumCover: React.FC = ({ item, id }) => { api, item, }); - console.log("Image A", u); return u; }, [item]); @@ -32,7 +31,6 @@ const AlbumCover: React.FC = ({ item, id }) => { quality: 85, width: 300, }); - console.log("Image B", u); return u; }, [item]); diff --git a/package.json b/package.json index 4355bd03..fff15664 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "@config-plugins/ffmpeg-kit-react-native": "^8.0.0", "@expo/react-native-action-sheet": "^4.1.0", "@expo/vector-icons": "^14.0.2", + "@gorhom/bottom-sheet": "^4", "@jellyfin/sdk": "^0.10.0", "@kesha-antonov/react-native-background-downloader": "^3.2.0", "@react-native-async-storage/async-storage": "1.23.1", diff --git a/utils/atoms/filters.ts b/utils/atoms/filters.ts index 870286b2..e9ab2e95 100644 --- a/utils/atoms/filters.ts +++ b/utils/atoms/filters.ts @@ -41,7 +41,7 @@ export const sortOrderOptions: { export const genreFilterAtom = atom([]); export const tagsFilterAtom = atom([]); export const yearFilterAtom = atom([]); -export const sortByAtom = atom<(typeof sortOptions)[number]>(sortOptions[0]); -export const sortOrderAtom = atom<(typeof sortOrderOptions)[number]>( +export const sortByAtom = atom<[typeof sortOptions][number]>([sortOptions[0]]); +export const sortOrderAtom = atom<[typeof sortOrderOptions][number]>([ sortOrderOptions[0], -); +]);