Files
flvx/vite-frontend/src/utils/order-storage.ts

58 lines
1.1 KiB
TypeScript

const parseOrderIds = (rawValue: string | null): number[] | null => {
if (!rawValue) {
return null;
}
try {
const parsed = JSON.parse(rawValue);
if (!Array.isArray(parsed)) {
return null;
}
return parsed
.map((id) => Number(id))
.filter((id) => Number.isInteger(id) && id >= 0);
} catch {
return null;
}
};
export const loadStoredOrder = (
storageKey: string,
sourceIds: number[],
): number[] => {
const parsed = parseOrderIds(localStorage.getItem(storageKey));
if (!parsed || parsed.length === 0) {
return sourceIds;
}
const idSet = new Set(sourceIds);
const validIds: number[] = [];
parsed.forEach((id) => {
if (idSet.has(id) && !validIds.includes(id)) {
validIds.push(id);
}
});
if (validIds.length === 0) {
return sourceIds;
}
sourceIds.forEach((id) => {
if (!validIds.includes(id)) {
validIds.push(id);
}
});
return validIds;
};
export const saveOrder = (storageKey: string, ids: number[]): void => {
try {
localStorage.setItem(storageKey, JSON.stringify(ids));
} catch {}
};