35 lines
1.2 KiB
JavaScript
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;
|
|
};
|