File size: 2,200 Bytes
848e268
 
6233641
848e268
4f2c36e
63bd9dc
 
cca515d
848e268
03138b9
848e268
 
 
5881efa
848e268
 
cca515d
5881efa
 
 
17f8f56
 
 
 
 
6233641
03138b9
6233641
17f8f56
cca515d
17f8f56
5881efa
4f2c36e
5881efa
 
 
848e268
7e19cbb
848e268
 
5881efa
 
486f5c7
5881efa
 
6f0b822
5881efa
 
4f2c36e
848e268
 
17f8f56
 
6407b30
17f8f56
 
6233641
d15b3be
6233641
17f8f56
 
 
848e268
 
1338bf6
848e268
 
 
 
 
 
 
 
cca515d
 
486f5c7
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
78
79
80
81
82
83
84
85
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, loading: userLoading, token } = useUser();

  const client = useQueryClient();
  
  const {
    data,
    isFetching,
    refetch,
      } = useQuery(
    ["collections"],
    async () => {
      const queryParams = new URLSearchParams();
      queryParams.append('userId', category === 'my-own' ? user?.sub : undefined);
      queryParams.append('page', '0');

      const response = await fetch(`/api/collections?${queryParams.toString()}`, {
        headers: {
          ...(user?.sub ? { 'Authorization': token } : {})
        },
        method: "GET",
      })

      const data = await response.json()

      if (!response.ok) {
        throw new Error(data.message)
      }
      return {
        images: data?.collections,
        pagination: data?.pagination,
      };
    },
    {
      enabled: false,
      refetchOnMount: false,
      refetchOnWindowFocus: false,
      refetchOnReconnect: false,      
    }
  );

  const infiniteRefetch = async () => {
    setLoading(true);
    const queryParams = new URLSearchParams();
      queryParams.append('userId', category === 'my-own' ? user?.sub : undefined);
      queryParams.append('page', data?.pagination?.page + 1);

      const response = await fetch(`/api/collections?${queryParams.toString()}`, {
        headers: {
          ...(user?.sub ? { '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, userLoading]);

  return {
    images: data?.images,
    loading: isFetching,
    infiniteLoading: loading,
    infiniteRefetch,
    pagination: data?.pagination,
  }
};