DFiP_Budget_planing/web/src/utils/listNavigation.js

35 lines
1.2 KiB
JavaScript

export const readListVisit = (kind, id) => {
try {
return JSON.parse(sessionStorage.getItem(`list-visit:${kind}:${id ?? 'last'}`) || 'null');
} catch { return null; }
};
export const rememberListVisit = (kind, id, url) => {
const visit = { id: String(id), url };
try {
for (const key of [String(id), 'last']) sessionStorage.setItem(`list-visit:${kind}:${key}`, JSON.stringify(visit));
} catch { /* Navigation remains available when browser storage is disabled. */ }
};
export const getListReturnUrl = (kind, id) => {
const visit = readListVisit(kind, id);
const base = `/${kind}`;
return visit?.url === base || visit?.url?.startsWith(`${base}?`) ? visit.url : base;
};
export const positiveInteger = (value, fallback) => {
const number = Number(value);
return Number.isSafeInteger(number) && number > 0 ? number : fallback;
};
export const findItemPage = async ({ id, currentPage, pageSize, count, fetchPage, isCancelled = () => false }) => {
for (let page = 1; page <= Math.ceil(count / pageSize); page++) {
if (isCancelled()) return null;
if (page === currentPage) continue;
const result = await fetchPage(page);
if (isCancelled()) return null;
if (result.some((item) => String(item.id) === String(id))) return page;
}
return null;
};