Files
edr-platform/apps/edr-freight-web/backoffice/src/complaints/utils/complaintVerificationStorage.ts
natib21 e6e44e773b fix ui
2026-07-10 11:25:59 +00:00

110 lines
2.7 KiB
TypeScript

import type { ComplaintVerificationSession } from "../types/complaint.types";
const STORAGE_KEY = "complaint-verification";
const COMPLAINT_VERIFICATION_IDLE_TIMEOUT_MS = 10 * 60 * 1000;
export function storeComplaintVerification(
session: ComplaintVerificationSession,
): void {
sessionStorage.setItem(STORAGE_KEY, JSON.stringify(session));
}
export function getComplaintVerification(): ComplaintVerificationSession | null {
const raw = sessionStorage.getItem(STORAGE_KEY);
if (!raw) return null;
try {
const session = JSON.parse(raw) as ComplaintVerificationSession;
if (!session.verified) {
return null;
}
const method = session.method ?? "fayda";
if (method === "fayda" && !session.citizen) {
return null;
}
if (method === "tin" && !session.organization?.tin) {
return null;
}
return { ...session, method };
} catch {
clearComplaintVerification();
return null;
}
}
export function clearComplaintVerification(): void {
sessionStorage.removeItem(STORAGE_KEY);
}
export function hasComplaintVerification(): boolean {
return getComplaintVerification() !== null;
}
export function isComplaintAuthContext(pathname = ""): boolean {
return (
pathname.startsWith("/complaints") ||
pathname === "/complaint-form" ||
pathname === "/follow-complaint" ||
pathname === "/callback"
);
}
export function setupComplaintVerificationIdleCleanup(
timeoutMs = COMPLAINT_VERIFICATION_IDLE_TIMEOUT_MS,
): () => void {
let timeoutId: number | null = null;
const scheduleCleanup = () => {
if (timeoutId) {
window.clearTimeout(timeoutId);
}
timeoutId = window.setTimeout(() => {
clearComplaintVerification();
}, timeoutMs);
};
const handleActivity = () => {
if (!sessionStorage.getItem(STORAGE_KEY)) {
if (timeoutId) {
window.clearTimeout(timeoutId);
timeoutId = null;
}
return;
}
scheduleCleanup();
};
const events: (keyof WindowEventMap)[] = [
"mousemove",
"mousedown",
"keydown",
"scroll",
"touchstart",
"click",
"focus",
];
events.forEach((eventName) => {
window.addEventListener(eventName, handleActivity, { passive: true });
});
document.addEventListener("visibilitychange", handleActivity);
handleActivity();
return () => {
if (timeoutId) {
window.clearTimeout(timeoutId);
timeoutId = null;
}
events.forEach((eventName) => {
window.removeEventListener(eventName, handleActivity);
});
document.removeEventListener("visibilitychange", handleActivity);
};
}