Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 3604 | Rev 3607 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
3604 stevensc 1
import { useEffect, useState, useCallback } from 'react';
3511 stevensc 2
 
3604 stevensc 3
import { useApi } from './useApi';
4
import { getMessages } from '@inmail/services';
5
import { useInfinityScroll } from './useInfinityScroll';
3511 stevensc 6
 
3603 stevensc 7
/* const paginationResponseExample = {
8
  success: true,
9
  data: [
10
    {
11
      uuid: 'b18afb55-d40e-4fd9-95a6-324a7f45e57f',
12
      sender_name: 'Cesa Managment Solution',
13
      sender_image:
14
        'https://dev-services.leaderslinked.com/storage/97e43a0a-5a85-4021-8bff-167d60e2a0f2',
15
      sender_profile: '/profile/view/97e43a0a-5a85-4021-8bff-167d60e2a0f2',
16
      receiver_name: 'Santiago Olivera',
17
      receiver_image:
18
        'https://dev-services.leaderslinked.com/storage/97e43a0a-5a85-4021-8bff-167d60e2a0f2',
19
      receiver_profile: '/profile/view/e85129fa-18eb-4149-8640-fea9ae916cdc',
20
      side: 'right',
21
      message: '',
22
      type: 'image',
23
      filename:
24
        'https://dev-services.leaderslinked.com/storage/b18afb55-d40e-4fd9-95a6-324a7f45e57f',
25
      date: 'hace 1 año',
26
      url_abuse_report:
27
        'https://dev-services.leaderslinked.com/helpers/abuse-report/message/b18afb55-d40e-4fd9-95a6-324a7f45e57f'
28
    },
29
    {
30
      uuid: 'c3b3c887-9f88-4a36-a7c8-c417f5da80ff',
31
      sender_name: 'Cesa Managment Solution',
32
      sender_image:
33
        'https://dev-services.leaderslinked.com/storage/97e43a0a-5a85-4021-8bff-167d60e2a0f2',
34
      sender_profile: '/profile/view/97e43a0a-5a85-4021-8bff-167d60e2a0f2',
35
      receiver_name: 'Santiago Olivera',
36
      receiver_image:
37
        'https://dev-services.leaderslinked.com/storage/97e43a0a-5a85-4021-8bff-167d60e2a0f2',
38
      receiver_profile: '/profile/view/e85129fa-18eb-4149-8640-fea9ae916cdc',
39
      side: 'right',
40
      message: 'Buenas tardes',
41
      type: 'text',
42
      filename: '',
43
      date: 'hace 1 año',
44
      url_abuse_report:
45
        'https://dev-services.leaderslinked.com/helpers/abuse-report/message/c3b3c887-9f88-4a36-a7c8-c417f5da80ff'
46
    },
47
    {
48
      uuid: '59120c84-335f-424c-8990-db51ae7bd673',
49
      sender_name: 'Santiago Olivera',
50
      sender_image:
51
        'https://dev-services.leaderslinked.com/storage/e85129fa-18eb-4149-8640-fea9ae916cdc',
52
      sender_profile: '/profile/view/e85129fa-18eb-4149-8640-fea9ae916cdc',
53
      receiver_name: 'Cesa Managment Solution',
54
      receiver_image:
55
        'https://dev-services.leaderslinked.com/storage/97e43a0a-5a85-4021-8bff-167d60e2a0f2',
56
      receiver_profile: '/profile/view/97e43a0a-5a85-4021-8bff-167d60e2a0f2',
57
      side: 'left',
58
      message: '',
59
      type: 'image',
60
      filename:
61
        'https://dev-services.leaderslinked.com/storage/59120c84-335f-424c-8990-db51ae7bd673',
62
      date: 'hace 1 año',
63
      url_abuse_report: ''
64
    },
65
    {
66
      uuid: '71c1356d-b5dc-413a-8f8e-ed087f99b6e3',
67
      sender_name: 'Santiago Olivera',
68
      sender_image:
69
        'https://dev-services.leaderslinked.com/storage/e85129fa-18eb-4149-8640-fea9ae916cdc',
70
      sender_profile: '/profile/view/e85129fa-18eb-4149-8640-fea9ae916cdc',
71
      receiver_name: 'Cesa Managment Solution',
72
      receiver_image:
73
        'https://dev-services.leaderslinked.com/storage/97e43a0a-5a85-4021-8bff-167d60e2a0f2',
74
      receiver_profile: '/profile/view/97e43a0a-5a85-4021-8bff-167d60e2a0f2',
75
      side: 'left',
76
      message: 'buenas tardes',
77
      type: 'text',
78
      filename: '',
79
      date: 'hace 1 año',
80
      url_abuse_report: ''
81
    },
82
    {
83
      uuid: 'c484b564-3d69-42bf-b6c4-12dfa6230614',
84
      sender_name: 'Santiago Olivera',
85
      sender_image:
86
        'https://dev-services.leaderslinked.com/storage/e85129fa-18eb-4149-8640-fea9ae916cdc',
87
      sender_profile: '/profile/view/e85129fa-18eb-4149-8640-fea9ae916cdc',
88
      receiver_name: 'Cesa Managment Solution',
89
      receiver_image:
90
        'https://dev-services.leaderslinked.com/storage/97e43a0a-5a85-4021-8bff-167d60e2a0f2',
91
      receiver_profile: '/profile/view/97e43a0a-5a85-4021-8bff-167d60e2a0f2',
92
      side: 'left',
93
      message: 'Test',
94
      type: 'text',
95
      filename: '',
96
      date: 'hace 1 año',
97
      url_abuse_report: ''
98
    },
99
    {
100
      uuid: 'f29723fd-dc2a-4b06-8c8e-e0e0cfe36cd1',
101
      sender_name: 'Cesa Managment Solution',
102
      sender_image:
103
        'https://dev-services.leaderslinked.com/storage/97e43a0a-5a85-4021-8bff-167d60e2a0f2',
104
      sender_profile: '/profile/view/97e43a0a-5a85-4021-8bff-167d60e2a0f2',
105
      receiver_name: 'Santiago Olivera',
106
      receiver_image:
107
        'https://dev-services.leaderslinked.com/storage/97e43a0a-5a85-4021-8bff-167d60e2a0f2',
108
      receiver_profile: '/profile/view/e85129fa-18eb-4149-8640-fea9ae916cdc',
109
      side: 'right',
110
      message:
111
        'buenas tardes\r\n\r\nbuenas tardesbuenas tardes\r\n\r\nbuenas tardesbuenas tardes\r\n\r\nbuenas tardesbuenas tardesbuenas tardes',
112
      type: 'document',
113
      filename:
114
        'https://dev-services.leaderslinked.com/storage/f29723fd-dc2a-4b06-8c8e-e0e0cfe36cd1',
115
      date: 'hace 1 año',
116
      url_abuse_report:
117
        'https://dev-services.leaderslinked.com/helpers/abuse-report/message/f29723fd-dc2a-4b06-8c8e-e0e0cfe36cd1'
118
    },
119
    {
120
      uuid: '86453fcf-ac3b-4228-9007-9dbf100976ef',
121
      sender_name: 'Cesa Managment Solution',
122
      sender_image:
123
        'https://dev-services.leaderslinked.com/storage/97e43a0a-5a85-4021-8bff-167d60e2a0f2',
124
      sender_profile: '/profile/view/97e43a0a-5a85-4021-8bff-167d60e2a0f2',
125
      receiver_name: 'Santiago Olivera',
126
      receiver_image:
127
        'https://dev-services.leaderslinked.com/storage/97e43a0a-5a85-4021-8bff-167d60e2a0f2',
128
      receiver_profile: '/profile/view/e85129fa-18eb-4149-8640-fea9ae916cdc',
129
      side: 'right',
130
      message:
131
        'hola,hola,hola,hola,hola,hola,hola,\r\nhola,hola,hola,\r\n\r\nhola,hola,\r\nhola,hola,hola,\r\n\r\nhola,hola,hola,',
132
      type: 'image',
133
      filename:
134
        'https://dev-services.leaderslinked.com/storage/86453fcf-ac3b-4228-9007-9dbf100976ef',
135
      date: 'hace 1 año',
136
      url_abuse_report:
137
        'https://dev-services.leaderslinked.com/helpers/abuse-report/message/86453fcf-ac3b-4228-9007-9dbf100976ef'
138
    }
139
  ],
140
  pagination: {
141
    pageCount: 1,
142
    itemCountPerPage: 10,
143
    first: 1,
144
    current: 1,
145
    last: 1,
146
    pagesInRange: {
147
      1: 1
148
    },
149
    firstPageInRange: 1,
150
    lastPageInRange: 1,
151
    currentItemCount: 7,
152
    totalItemCount: 7,
153
    firstItemNumber: 1,
154
    lastItemNumber: 7
155
  }
156
}; */
157
 
3604 stevensc 158
export function usePagination(url) {
3529 stevensc 159
  const [items, setItems] = useState([]);
3604 stevensc 160
  const [page, setPage] = useState(1);
161
  const [totalPages, setTotalPages] = useState(1);
3511 stevensc 162
 
3604 stevensc 163
  const { data, error, execute, loading } = useApi(getMessages);
164
  const { lastElementRef } = useInfinityScroll({
165
    isLoading: loading,
166
    hasMore: page < totalPages,
167
    onIntersect: nextPage
3529 stevensc 168
  });
3511 stevensc 169
 
3599 stevensc 170
  const nextPage = useCallback(() => {
3606 stevensc 171
    console.log('Intersecting');
3604 stevensc 172
    if (page < totalPages && !loading) {
3606 stevensc 173
      console.log('Cambio de pagina');
3599 stevensc 174
      setPage((prevPage) => prevPage + 1);
175
    }
3604 stevensc 176
  }, [page, totalPages, loading]);
3511 stevensc 177
 
3599 stevensc 178
  const resetPagination = useCallback(() => {
179
    setItems([]);
3604 stevensc 180
    setPage(1);
181
    setTotalPages(1);
182
  }, []);
3599 stevensc 183
 
3603 stevensc 184
  useEffect(() => {
3604 stevensc 185
    if (url) {
3606 stevensc 186
      console.log('Fetching data:', `${url}?page=${page}`);
3604 stevensc 187
      execute(`${url}?page=${page}`);
188
    }
189
  }, [page, url]);
3599 stevensc 190
 
3529 stevensc 191
  useEffect(() => {
3604 stevensc 192
    resetPagination();
193
  }, [url]);
3603 stevensc 194
 
195
  useEffect(() => {
3529 stevensc 196
    if (data) {
3599 stevensc 197
      setItems((prevItems) => {
3603 stevensc 198
        if (page > 1) {
3604 stevensc 199
          return [...prevItems, ...data.current.items];
3599 stevensc 200
        } else {
3604 stevensc 201
          return data.current.items;
3599 stevensc 202
        }
203
      });
204
 
3604 stevensc 205
      setTotalPages(data.total.pages);
3529 stevensc 206
    }
3603 stevensc 207
  }, [data, page]);
3529 stevensc 208
 
3511 stevensc 209
  return {
3529 stevensc 210
    items,
3604 stevensc 211
    loading,
212
    error,
213
    lastElementRef,
214
    execute,
3511 stevensc 215
    nextPage,
3604 stevensc 216
    resetPagination
3511 stevensc 217
  };
218
}