mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-30 09:58:12 +00:00
fix ui
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
export const COMPLAINT_SUBMIT_PATH =
|
||||
"/external-portal/portal-outgoing/submit-letter";
|
||||
|
||||
export const COMPLAINT_RECORDS_PATH = "/external-portal/portal-outgoing";
|
||||
@@ -0,0 +1,109 @@
|
||||
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);
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user