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 |
}
|