forked from Ninjalama/streamyfin_mirror
Compare commits
1 Commits
develop
...
fix/search
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bd10daf9ac |
@@ -331,7 +331,7 @@ export default function search() {
|
|||||||
<View className={l1 || l2 ? "opacity-0" : "opacity-100"}>
|
<View className={l1 || l2 ? "opacity-0" : "opacity-100"}>
|
||||||
<SearchItemWrapper
|
<SearchItemWrapper
|
||||||
header={t("search.movies")}
|
header={t("search.movies")}
|
||||||
ids={movies?.map((m) => m.Id!)}
|
items={movies}
|
||||||
renderItem={(item: BaseItemDto) => (
|
renderItem={(item: BaseItemDto) => (
|
||||||
<TouchableItemRouter
|
<TouchableItemRouter
|
||||||
key={item.Id}
|
key={item.Id}
|
||||||
@@ -349,7 +349,7 @@ export default function search() {
|
|||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
<SearchItemWrapper
|
<SearchItemWrapper
|
||||||
ids={series?.map((m) => m.Id!)}
|
items={series}
|
||||||
header={t("search.series")}
|
header={t("search.series")}
|
||||||
renderItem={(item: BaseItemDto) => (
|
renderItem={(item: BaseItemDto) => (
|
||||||
<TouchableItemRouter
|
<TouchableItemRouter
|
||||||
@@ -368,7 +368,7 @@ export default function search() {
|
|||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
<SearchItemWrapper
|
<SearchItemWrapper
|
||||||
ids={episodes?.map((m) => m.Id!)}
|
items={episodes}
|
||||||
header={t("search.episodes")}
|
header={t("search.episodes")}
|
||||||
renderItem={(item: BaseItemDto) => (
|
renderItem={(item: BaseItemDto) => (
|
||||||
<TouchableItemRouter
|
<TouchableItemRouter
|
||||||
@@ -382,7 +382,7 @@ export default function search() {
|
|||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
<SearchItemWrapper
|
<SearchItemWrapper
|
||||||
ids={collections?.map((m) => m.Id!)}
|
items={collections}
|
||||||
header={t("search.collections")}
|
header={t("search.collections")}
|
||||||
renderItem={(item: BaseItemDto) => (
|
renderItem={(item: BaseItemDto) => (
|
||||||
<TouchableItemRouter
|
<TouchableItemRouter
|
||||||
@@ -398,7 +398,7 @@ export default function search() {
|
|||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
<SearchItemWrapper
|
<SearchItemWrapper
|
||||||
ids={actors?.map((m) => m.Id!)}
|
items={actors}
|
||||||
header={t("search.actors")}
|
header={t("search.actors")}
|
||||||
renderItem={(item: BaseItemDto) => (
|
renderItem={(item: BaseItemDto) => (
|
||||||
<TouchableItemRouter
|
<TouchableItemRouter
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import type { PropsWithChildren } from "react";
|
|||||||
import { Text } from "../common/Text";
|
import { Text } from "../common/Text";
|
||||||
|
|
||||||
type SearchItemWrapperProps<T> = {
|
type SearchItemWrapperProps<T> = {
|
||||||
ids?: string[] | null;
|
|
||||||
items?: T[];
|
items?: T[];
|
||||||
renderItem: (item: any) => React.ReactNode;
|
renderItem: (item: any) => React.ReactNode;
|
||||||
header?: string;
|
header?: string;
|
||||||
@@ -17,7 +16,6 @@ type SearchItemWrapperProps<T> = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const SearchItemWrapper = <T,>({
|
export const SearchItemWrapper = <T,>({
|
||||||
ids,
|
|
||||||
items,
|
items,
|
||||||
renderItem,
|
renderItem,
|
||||||
header,
|
header,
|
||||||
@@ -26,33 +24,7 @@ export const SearchItemWrapper = <T,>({
|
|||||||
const [api] = useAtom(apiAtom);
|
const [api] = useAtom(apiAtom);
|
||||||
const [user] = useAtom(userAtom);
|
const [user] = useAtom(userAtom);
|
||||||
|
|
||||||
const { data, isLoading: l1 } = useQuery({
|
if (!items || items.length === 0) return null;
|
||||||
queryKey: ["items", ids],
|
|
||||||
queryFn: async () => {
|
|
||||||
if (!user?.Id || !api || !ids || ids.length === 0) {
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
|
|
||||||
const itemPromises = ids.map((id) =>
|
|
||||||
getUserItemData({
|
|
||||||
api,
|
|
||||||
userId: user.Id,
|
|
||||||
itemId: id,
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
|
|
||||||
const results = await Promise.all(itemPromises);
|
|
||||||
|
|
||||||
// Filter out null items
|
|
||||||
return results.filter(
|
|
||||||
(item) => item !== null,
|
|
||||||
) as unknown as BaseItemDto[];
|
|
||||||
},
|
|
||||||
enabled: !!ids && ids.length > 0 && !!api && !!user?.Id,
|
|
||||||
staleTime: Number.POSITIVE_INFINITY,
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!data && (!items || items.length === 0)) return null;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@@ -67,7 +39,7 @@ export const SearchItemWrapper = <T,>({
|
|||||||
keyExtractor={(_, index) => index.toString()}
|
keyExtractor={(_, index) => index.toString()}
|
||||||
estimatedItemSize={250}
|
estimatedItemSize={250}
|
||||||
/*@ts-ignore */
|
/*@ts-ignore */
|
||||||
data={data || items}
|
data={items}
|
||||||
onEndReachedThreshold={1}
|
onEndReachedThreshold={1}
|
||||||
onEndReached={onEndReached}
|
onEndReached={onEndReached}
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
|
|||||||
Reference in New Issue
Block a user