enzostvs's picture
enzostvs HF Staff
navigate between images + manage my generations
5033071
raw
history blame
2.15 kB
import { useState } from "react";
import { useQuery, useQueryClient } from "@tanstack/react-query";
import { useUpdateEffect } from "react-use";
import _ from "lodash";
import { useUser } from "@/utils/useUser";
export const useCollections = (category: string) => {
const [loading, setLoading] = useState(false);
const { user, token } = useUser();
const client = useQueryClient();
const {
data,
isFetching,
refetch,
} = useQuery(
["collections"],
async () => {
const queryParams = new URLSearchParams();
if (category === 'my-own') {
queryParams.append('userId', user?.sub);
}
queryParams.append('page', '0');
const response = await fetch(`/api/collections?${queryParams.toString()}`, {
headers: {
...(token ? { 'Authorization': token } : {})
},
method: "GET",
})
const data = await response.json()
if (!response.ok) {
throw new Error(data.message)
}
return {
images: data?.collections,
pagination: data?.pagination,
};
},
{
refetchOnMount: false,
refetchOnWindowFocus: false,
refetchOnReconnect: false,
}
);
const infiniteRefetch = async () => {
setLoading(true);
const queryParams = new URLSearchParams();
if (category === 'my-own') {
queryParams.append('userId', user?.sub);
}
queryParams.append('page', data?.pagination?.page + 1);
const response = await fetch(`/api/collections?${queryParams.toString()}`, {
headers: {
...(token ? { 'Authorization': token } : {})
},
method: "GET",
})
const d = await response.json()
if (d.ok) {
const images = _.concat(data?.images, d?.collections);
client.setQueryData(["collections"], {
images,
pagination: d?.pagination,
});
}
setLoading(false);
};
useUpdateEffect(() => {
refetch()
}, [category]);
return {
images: data?.images,
loading: isFetching,
infiniteLoading: loading,
infiniteRefetch,
pagination: data?.pagination,
}
};