Skip to content

Commit 530d6d4

Browse files
Enhancement: Make the /identity-service-logs UI infinite scroll (#837)
* made identity-service-logs page infinite scrollable * made identity-service-logs page infinite scrollable * made changes for feature flag --------- Co-authored-by: Amit Prakash <[email protected]>
1 parent 7533e96 commit 530d6d4

File tree

3 files changed

+60
-60
lines changed

3 files changed

+60
-60
lines changed

identity-service-logs/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ <h1>Identity Service Logs</h1>
4545
Developers Left: <span id="developersLeft" class="stats-value"></span>
4646
</div>
4747
</div>
48-
48+
<div class="wrapperDiv"></div>
4949
<p id="loader">Loading...</p>
50-
50+
<div id="page_bottom_element"></div>
5151
<footer id="footer">
5252
<p class="info-repo">
5353
The contents of this website are deployed from this

identity-service-logs/script.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ import {
33
getIsSuperUser,
44
fillData,
55
getUserCount,
6+
addIntersectionObserver,
67
} from './utils.js';
78

89
const { isSuperUser } = await getIsSuperUser();
10+
const params = new URLSearchParams(window.location.search);
911

10-
if (isSuperUser) {
12+
if (isSuperUser && params.has('dev') && params.get('dev') === 'true') {
1113
const {
1214
verifiedUsersCount,
1315
blockedUsersCount,
@@ -25,10 +27,11 @@ if (isSuperUser) {
2527
blockedDeveloperCount;
2628
document.getElementById('developersLeft').innerText =
2729
developersLeftToVerifyCount;
28-
const { identityLogs, next, prev } = await getIdentityLogs(
30+
const { identityLogs, next } = await getIdentityLogs(
2931
'/logs?dev=true&type=PROFILE_BLOCKED,PROFILE_VERIFIED,PROFILE_DIFF_REJECTED,PROFILE_DIFF_APPROVED,PROFILE_DIFF_STORED&size=10',
3032
);
31-
fillData(identityLogs, next, prev);
33+
fillData(identityLogs, next);
34+
addIntersectionObserver();
3235
} else {
3336
document.getElementById('loader').innerHTML = 'You are not authorized !';
3437
}

identity-service-logs/utils.js

Lines changed: 52 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -266,18 +266,54 @@ async function getUser(userId) {
266266
return user;
267267
}
268268

269-
async function fillData(identityLogs, next, prev) {
269+
let isLoading = false;
270+
let nextLink = null;
271+
272+
async function loadMoreLogs() {
273+
if (!nextLink || isLoading) {
274+
return;
275+
}
276+
const footer = document.querySelector('footer');
277+
278+
if (footer) {
279+
footer.style.display = 'none';
280+
}
281+
isLoading = true;
282+
283+
try {
284+
document.getElementById('loader').style.display = 'block';
285+
const { identityLogs, next } = await getIdentityLogs(nextLink);
286+
await fillData(identityLogs, next);
287+
} catch (error) {
288+
console.error('Error loading logs:', error);
289+
} finally {
290+
document.getElementById('loader').style.display = 'none';
291+
isLoading = false;
292+
293+
if (footer) {
294+
footer.style.display = 'block';
295+
}
296+
}
297+
}
298+
299+
const addIntersectionObserver = () => {
300+
const lastElementContainer = document.getElementById('page_bottom_element');
301+
const intersectionObserver = new IntersectionObserver(async (entries) => {
302+
if (entries[0].isIntersecting && !isLoading) {
303+
await loadMoreLogs();
304+
}
305+
});
306+
intersectionObserver.observe(lastElementContainer);
307+
};
308+
309+
async function fillData(identityLogs, next) {
270310
if (identityLogs === undefined || identityLogs.length === 0) {
271311
document.getElementById('loader').innerHTML =
272312
'No Identity Service Logs found !!!';
273313
} else {
274-
const wrapper = createCardComponent({
275-
tagName: 'div',
276-
className: 'wrapperDiv',
277-
});
278-
279-
const footerDiv = document.querySelector('#footer');
280-
document.body.insertBefore(wrapper, footerDiv);
314+
const wrapper = document.querySelector('.wrapperDiv');
315+
const loader = document.querySelector('#loader');
316+
document.body.insertBefore(wrapper, loader);
281317
document.getElementById('loader').style.display = 'none';
282318

283319
for (const identityLog of identityLogs) {
@@ -297,53 +333,14 @@ async function fillData(identityLogs, next, prev) {
297333
);
298334
}
299335
}
300-
301-
const buttonContainer = createCardComponent({
302-
tagName: 'div',
303-
className: 'buttonContainer',
304-
parent: wrapper,
305-
});
306-
307-
if (prev) {
308-
const prevButton = createCardComponent({
309-
tagName: 'button',
310-
className: 'navigation-button',
311-
parent: buttonContainer,
312-
innerText: 'Prev',
313-
});
314-
315-
prevButton.onclick = async () => {
316-
wrapper.remove();
317-
document.getElementById('loader').style.display = 'block';
318-
const {
319-
identityLogs,
320-
next,
321-
prev: prevLink,
322-
} = await getIdentityLogs(prev);
323-
fillData(identityLogs, next, prevLink);
324-
};
325-
}
326-
327-
if (next) {
328-
const nextButton = createCardComponent({
329-
tagName: 'button',
330-
className: 'navigation-button',
331-
parent: buttonContainer,
332-
innerText: 'Next',
333-
});
334-
335-
nextButton.onclick = async () => {
336-
wrapper.remove();
337-
document.getElementById('loader').style.display = 'block';
338-
const {
339-
identityLogs,
340-
next: nextLink,
341-
prev,
342-
} = await getIdentityLogs(next);
343-
fillData(identityLogs, nextLink, prev);
344-
};
345-
}
336+
nextLink = next;
346337
}
347338
}
348339

349-
export { getIdentityLogs, getIsSuperUser, fillData, getUserCount };
340+
export {
341+
getIdentityLogs,
342+
getIsSuperUser,
343+
fillData,
344+
getUserCount,
345+
addIntersectionObserver,
346+
};

0 commit comments

Comments
 (0)