1
1
const params = new URLSearchParams ( window . location . search ) ;
2
2
const userListElement = document . getElementById ( USER_LIST_ELEMENT ) ;
3
3
const loaderElement = document . getElementById ( LOADER_ELEMENT ) ;
4
+ const userloaderElement = document . getElementById ( USER_LOADER_ELEMENT ) ;
4
5
const tileViewBtn = document . getElementById ( TILE_VIEW_BTN ) ;
5
6
const tableViewBtn = document . getElementById ( TABLE_VIEW_BTN ) ;
6
7
const userSearchElement = document . getElementById ( USER_SEARCH_ELEMENT ) ;
@@ -15,7 +16,9 @@ const clearButton = document.getElementById(CLEAR_BUTTON);
15
16
16
17
let tileViewActive = false ;
17
18
let tableViewActive = true ;
19
+ let isLoading = false ;
18
20
let page = 0 ;
21
+ let run = true ;
19
22
20
23
const init = (
21
24
prevBtn ,
@@ -27,26 +30,23 @@ const init = (
27
30
paginationElement ,
28
31
loaderElement ,
29
32
) => {
30
- prevBtn . addEventListener ( 'click' , ( ) => {
31
- showUserDataList (
32
- -- page ,
33
- userListElement ,
34
- paginationElement ,
35
- loaderElement ,
36
- prevBtn ,
37
- nextBtn ,
38
- ) ;
39
- } ) ;
40
-
41
- nextBtn . addEventListener ( 'click' , ( ) => {
42
- showUserDataList (
43
- ++ page ,
44
- userListElement ,
45
- paginationElement ,
46
- loaderElement ,
47
- prevBtn ,
48
- nextBtn ,
49
- ) ;
33
+ window . addEventListener ( 'scroll' , async ( ) => {
34
+ console . log ( 'Page No is: ' + page ) ;
35
+ if (
36
+ window . innerHeight + window . scrollY >= document . body . offsetHeight - 100 &&
37
+ run
38
+ ) {
39
+ if ( ! run ) {
40
+ return ;
41
+ }
42
+ run = false ;
43
+ showUserDataList (
44
+ page ++ ,
45
+ userListElement ,
46
+ paginationElement ,
47
+ loaderElement ,
48
+ ) ;
49
+ }
50
50
} ) ;
51
51
52
52
tileViewBtn . addEventListener ( 'click' , ( ) => {
@@ -86,6 +86,8 @@ function showTileView(userListElement, tableViewBtn, tileViewBtn) {
86
86
tableViewBtn . classList . remove ( 'btn-active' ) ;
87
87
tileViewBtn . classList . add ( 'btn-active' ) ;
88
88
const listContainerElement = userListElement . lastChild ;
89
+ const headList = document . getElementById ( 'head_list' ) ;
90
+ headList . classList . add ( 'tile-webview' ) ;
89
91
listContainerElement . childNodes . forEach ( ( listElement ) => {
90
92
const imgElement = listElement . firstChild ;
91
93
imgElement . classList . add ( 'remove-element' ) ;
@@ -149,14 +151,7 @@ function generateUserList(
149
151
userListElement ,
150
152
paginationElement ,
151
153
loaderElement ,
152
- prevBtn ,
153
154
) {
154
- userListElement . innerHTML = '' ;
155
- if ( page <= 0 ) {
156
- prevBtn . classList . add ( 'btn-disabled' ) ;
157
- } else {
158
- prevBtn . classList . remove ( 'btn-disabled' ) ;
159
- }
160
155
if ( ! users || ! users . length ) {
161
156
showErrorMessage (
162
157
'No data found' ,
@@ -166,40 +161,39 @@ function generateUserList(
166
161
) ;
167
162
return ;
168
163
}
169
- const ulElement = document . createElement ( 'ul' ) ;
170
- users . forEach ( ( userData ) => {
171
- const listElement = document . createElement ( 'li' ) ;
172
- const imgElement = document . createElement ( 'img' ) ;
173
- imgElement . src = userData . picture ? userData . picture : DEFAULT_AVATAR ;
174
- imgElement . classList . add ( 'user-img-dimension' ) ;
175
- const pElement = document . createElement ( 'p' ) ;
176
- const node = document . createTextNode (
177
- `${ userData . first_name } ${ userData . last_name } ` ,
178
- ) ;
179
- pElement . appendChild ( node ) ;
180
- listElement . appendChild ( imgElement ) ;
181
- listElement . appendChild ( pElement ) ;
182
164
183
- if ( tileViewActive ) {
184
- let imgElement = listElement . firstChild ;
185
- listElement . classList . remove ( 'tile-width' ) ;
186
- imgElement . classList . add ( 'remove-element' ) ;
187
- }
188
- listElement . onclick = ( ) => {
189
- document . getElementById ( 'user-search' ) . value = '' ;
190
- window . location . href = `/users/details/index.html?username=${ userData . username } ` ;
191
- } ;
192
- ulElement . appendChild ( listElement ) ;
193
- } ) ;
194
- loaderElement . classList . add ( 'remove-element' ) ;
195
- if ( showPagination ) {
196
- paginationElement . classList . remove ( 'remove-element' ) ;
197
- paginationElement . classList . add ( 'pagination' ) ;
198
- } else {
199
- paginationElement . classList . add ( 'remove-element' ) ;
200
- paginationElement . classList . remove ( 'pagination' ) ;
165
+ const ulElement = document . getElementById ( 'head_list' ) ;
166
+
167
+ if ( users != null ) {
168
+ users . forEach ( ( userData ) => {
169
+ const listElement = document . createElement ( 'li' ) ;
170
+ const imgElement = document . createElement ( 'img' ) ;
171
+ imgElement . src = userData . picture ? userData . picture : DEFAULT_AVATAR ;
172
+ imgElement . classList . add ( 'user-img-dimension' ) ;
173
+ listElement . classList . add ( 'tile-webview' ) ;
174
+ const pElement = document . createElement ( 'p' ) ;
175
+ const node = document . createTextNode (
176
+ `${ userData . first_name } ${ userData . last_name } ` ,
177
+ ) ;
178
+ pElement . appendChild ( node ) ;
179
+ listElement . appendChild ( imgElement ) ;
180
+ listElement . appendChild ( pElement ) ;
181
+
182
+ if ( tileViewActive ) {
183
+ let imgElement = listElement . firstChild ;
184
+ listElement . classList . add ( 'tile-width' ) ;
185
+ imgElement . classList . add ( 'remove-element' ) ;
186
+ }
187
+ listElement . onclick = ( ) => {
188
+ document . getElementById ( 'user-search' ) . value = '' ;
189
+ window . location . href = `/users/details/index.html?username=${ userData . username } ` ;
190
+ } ;
191
+ ulElement . appendChild ( listElement ) ;
192
+ } ) ;
193
+ loaderElement . classList . add ( 'remove-element' ) ;
194
+ userListElement . appendChild ( ulElement ) ;
195
+ run = true ;
201
196
}
202
- userListElement . appendChild ( ulElement ) ;
203
197
}
204
198
205
199
async function fetchUsersData ( searchInput ) {
@@ -333,17 +327,17 @@ const showUserDataList = async (
333
327
userListElement ,
334
328
paginationElement ,
335
329
loaderElement ,
336
- prevBtn ,
337
- nextBtn ,
338
330
) => {
339
331
try {
332
+ if ( isLoading ) return ;
333
+ if ( page != 0 ) {
334
+ isLoading = true ;
335
+ userloaderElement . style . display = 'block' ;
336
+ }
337
+
340
338
const userData = await getUsersData ( page ) ;
341
- if ( userData . length ) {
342
- if ( userData . length < USER_FETCH_COUNT ) {
343
- nextBtn . classList . add ( 'btn-disabled' ) ;
344
- } else {
345
- nextBtn . classList . remove ( 'btn-disabled' ) ;
346
- }
339
+
340
+ if ( userData && userData . length ) {
347
341
let usersDataList = userData . filter (
348
342
( user ) => user . first_name && ! user . roles ?. archived ,
349
343
) ;
@@ -359,7 +353,6 @@ const showUserDataList = async (
359
353
userListElement ,
360
354
paginationElement ,
361
355
loaderElement ,
362
- prevBtn ,
363
356
) ;
364
357
}
365
358
} catch ( err ) {
@@ -370,6 +363,9 @@ const showUserDataList = async (
370
363
paginationElement ,
371
364
loaderElement ,
372
365
) ;
366
+ } finally {
367
+ userloaderElement . style . display = 'none' ;
368
+ isLoading = false ;
373
369
}
374
370
} ;
375
371
0 commit comments