import { Text } from "@/components/common/Text"; import { apiAtom, userAtom } from "@/providers/JellyfinProvider"; import { Ionicons } from "@expo/vector-icons"; import { useQuery } from "@tanstack/react-query"; import { useAtom } from "jotai"; import { useState } from "react"; import { TouchableOpacity, View, ViewProps } from "react-native"; import { FilterSheet } from "./FilterSheet"; interface FilterButtonProps extends ViewProps { collectionId: string; queryFn: (params: any) => Promise; queryKey: 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 = ({ collectionId, queryFn, queryKey, set, values, title, renderItemLabel, searchFilter, showSearch = true, ...props }: FilterButtonProps) => { const [open, setOpen] = useState(false); const { data: filters } = useQuery({ queryKey: [queryKey, collectionId], queryFn, staleTime: 0, }); if (filters?.length === 0) return null; return ( <> setOpen(true)}> 0 ? "bg-purple-600" : "bg-neutral-900"} `} {...props} > {title} title={title} open={open} setOpen={setOpen} data={filters} values={values} set={set} renderItemLabel={renderItemLabel} searchFilter={searchFilter} showSearch={showSearch} /> ); };