File size: 1,895 Bytes
848e268
 
cca515d
848e268
4f2c36e
63bd9dc
 
cca515d
848e268
63bd9dc
cca515d
848e268
 
 
5881efa
848e268
 
cca515d
5881efa
 
 
cca515d
 
 
63bd9dc
848e268
cca515d
 
5881efa
4f2c36e
5881efa
 
 
848e268
7e19cbb
848e268
 
5881efa
 
 
 
6f0b822
5881efa
 
4f2c36e
848e268
 
 
 
 
0a715e6
848e268
 
 
 
 
1338bf6
848e268
 
 
 
 
 
 
 
cca515d
 
 
 
4f2c36e
848e268
 
 
 
 
4f2c36e
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import { useState } from "react";
import { useQuery, useQueryClient } from "@tanstack/react-query";
import { useLocalStorage, useUpdateEffect } from "react-use";
import _ from "lodash";

import { useUser } from "@/utils/useUser";

export const useCollections = (category: string) => {
  const [loading, setLoading] = useState(false);
  const { user } = useUser();
  const [myGenerationsId] = useLocalStorage<any>('my-own-generations', []);

  const client = useQueryClient();
  
  const {
    data,
    isFetching,
    refetch,
      } = useQuery(
    ["collections"],
    async () => {
      const response = await fetch("/api/collections", {
        method: "POST",
        body: JSON.stringify({
          userId: category === 'my-own' ? user?.sub : undefined,
          page: 0,
        }),
      })
      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 response = await fetch("/api/collections", {
      method: "POST",
      body: JSON.stringify({
        userId: category === 'my-own' ? user?.sub : undefined,
        page: data?.pagination?.page,
      }),
    })
    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,
  }
};