Skip to content

Commit 7e327b6

Browse files
committed
feat(web): persist state of resources page
1 parent 3c79adb commit 7e327b6

1 file changed

Lines changed: 56 additions & 15 deletions

File tree

web/main/resources.ejs

Lines changed: 56 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,39 @@
177177
178178
const convErrorType = (x) => x === 'error' ? 'danger' : x;
179179
180+
//============================================== Page State
181+
let collapsedGroups = new Set();
182+
try {
183+
const storedCollapsedGroups = window.localStorage.resourcesPageCollapsedGroups;
184+
if (storedCollapsedGroups) {
185+
const parsedCollapsedGroups = JSON.parse(storedCollapsedGroups);
186+
if (Array.isArray(parsedCollapsedGroups)) {
187+
collapsedGroups = new Set(parsedCollapsedGroups);
188+
} else {
189+
throw new Error('Invalid storedCollapsedGroups');
190+
}
191+
} else {
192+
window.localStorage.resourcesPageCollapsedGroups = '[]';
193+
}
194+
} catch (error) {
195+
console.warn('Error parsing storedCollapsedGroups:', error);
196+
window.localStorage.resourcesPageCollapsedGroups = '[]';
197+
}
198+
const saveCollapsedGroups = () => {
199+
window.localStorage.resourcesPageCollapsedGroups = JSON.stringify([...collapsedGroups.values()]);
200+
}
201+
202+
203+
$('#defResCheckbox').click(() => {
204+
window.localStorage.resourcesPageShowDefault = document.getElementById('defResCheckbox').checked;
205+
refreshResourceList();
206+
});
207+
208+
$('#stoppedResCheckbox').click(() => {
209+
window.localStorage.resourcesPageShowStopped = document.getElementById('stoppedResCheckbox').checked;
210+
refreshResourceList();
211+
});
212+
180213
181214
//============================================== Refresh List
182215
$('#btnRefresh').click(() => {
@@ -231,6 +264,7 @@
231264
//============================================== Search function
232265
function findResource() {
233266
const inputEl = document.getElementById("resourceInput");
267+
localStorage.setItem("resourcesPageFilter", inputEl.value ?? '');
234268
const filter = inputEl.value.toUpperCase();
235269
236270
resGroupsJS.forEach(folder => {
@@ -254,17 +288,6 @@
254288
}
255289
}
256290
257-
//============================================== Hide defaults
258-
$('#defResCheckbox').click(() => {
259-
window.localStorage.resourcesPageShowDefault = document.getElementById('defResCheckbox').checked;
260-
refreshResourceList();
261-
});
262-
263-
$('#stoppedResCheckbox').click(() => {
264-
window.localStorage.resourcesPageShowStopped = document.getElementById('stoppedResCheckbox').checked;
265-
refreshResourceList();
266-
});
267-
268291
//============================================== Expand/Collapse All
269292
let isExpandButton = false;
270293
const btnExpandCollapse = document.getElementById('btnExpandCollapse');
@@ -282,10 +305,10 @@
282305
});
283306
if (expandedCount === resGroupsJS.length) {
284307
isExpandButton = false;
285-
btnExpandCollapse.innerHTML = '<i class="icon-size-actual"/> Collapse All';
308+
btnExpandCollapse.innerHTML = '<i class="icon-size-actual"></i> Collapse All';
286309
} else {
287310
isExpandButton = true;
288-
btnExpandCollapse.innerHTML = '<i class="icon-size-fullscreen"/> Expand All';
311+
btnExpandCollapse.innerHTML = '<i class="icon-size-fullscreen"></i> Expand All';
289312
}
290313
}
291314
$('#btnExpandCollapse').click(() => {
@@ -341,10 +364,16 @@
341364
}
342365
});
343366
367+
const card = $(`#resList-card-${folder.divName}`);
344368
if (folder.resources.length === hidden) {
345-
$(`#resList-card-${folder.divName}`).hide();
369+
card.hide();
346370
} else {
347-
$(`#resList-card-${folder.divName}`).show();
371+
card.show();
372+
}
373+
if (collapsedGroups.has(folder.divName)) {
374+
toggleResGroup(card[0], false, false);
375+
} else {
376+
toggleResGroup(card[0], false, true);
348377
}
349378
});
350379
}
@@ -356,18 +385,22 @@
356385
if (show === undefined) {
357386
show = tbody.classList.contains('collapse');
358387
}
388+
const groupDivName = groupCardElement.id.split('-').pop();
359389
if (show) {
360390
tbody.classList.remove('collapse');
361391
icon.classList.remove('icon-arrow-down');
362392
icon.classList.add('icon-arrow-up');
363393
if (single) {
364394
groupCardElement.scrollIntoView({ behavior: 'smooth', block: 'start' });
365395
}
396+
collapsedGroups.delete(groupDivName);
366397
} else {
367398
tbody.classList.add('collapse');
368399
icon.classList.add('icon-arrow-down');
369400
icon.classList.remove('icon-arrow-up');
401+
collapsedGroups.add(groupDivName);
370402
}
403+
saveCollapsedGroups();
371404
}
372405
373406
$(() => {
@@ -376,6 +409,11 @@
376409
} else {
377410
window.localStorage.resourcesPageShowDefault = false;
378411
}
412+
let hasFilter = false;
413+
if (typeof window.localStorage.resourcesPageFilter === 'string' && window.localStorage.resourcesPageFilter.length) {
414+
document.getElementById("resourceInput").value = window.localStorage.resourcesPageFilter;
415+
hasFilter = true;
416+
}
379417
380418
document.getElementById('stoppedResCheckbox').checked = window.localStorage.resourcesPageShowStopped === 'true';
381419
@@ -391,5 +429,8 @@
391429
392430
refreshResourceList();
393431
updateExpandCollapseBtn();
432+
if(hasFilter){
433+
findResource();
434+
}
394435
});
395436
</script>

0 commit comments

Comments
 (0)