Spaces:
Sleeping
Sleeping
| import { ApplicationStatus, WorkflowStage } from "@/data/dummyData"; | |
| const LOCAL_KEY = "fo_workflow_overrides"; | |
| export interface FoWorkflowOverride { | |
| currentStage?: WorkflowStage; | |
| status?: ApplicationStatus; | |
| assignedFOI?: string; | |
| assignedFO?: string; | |
| foVisitNotes?: string; | |
| } | |
| export type EntityType = "hatchery" | "farm"; | |
| interface OverridesMap { | |
| [compositeId: string]: FoWorkflowOverride; | |
| } | |
| function getKey(entityType: EntityType, id: string) { | |
| return `${entityType}:${id}`; | |
| } | |
| function readOverrides(): OverridesMap { | |
| if (typeof window === "undefined") return {}; | |
| try { | |
| const raw = localStorage.getItem(LOCAL_KEY); | |
| if (!raw) return {}; | |
| const parsed = JSON.parse(raw); | |
| if (!parsed || typeof parsed !== "object") return {}; | |
| return parsed as OverridesMap; | |
| } catch { | |
| return {}; | |
| } | |
| } | |
| function writeOverrides(map: OverridesMap) { | |
| if (typeof window === "undefined") return; | |
| try { | |
| localStorage.setItem(LOCAL_KEY, JSON.stringify(map)); | |
| } catch { | |
| // ignore | |
| } | |
| } | |
| export function updateFoWorkflowOverride( | |
| entityType: EntityType, | |
| id: string, | |
| patch: FoWorkflowOverride, | |
| ): FoWorkflowOverride { | |
| const map = readOverrides(); | |
| const key = getKey(entityType, id); | |
| const existing = map[key] || {}; | |
| const merged: FoWorkflowOverride = { ...existing, ...patch }; | |
| map[key] = merged; | |
| writeOverrides(map); | |
| return merged; | |
| } | |
| export function getFoWorkflowOverride( | |
| entityType: EntityType, | |
| id: string, | |
| ): FoWorkflowOverride | undefined { | |
| const map = readOverrides(); | |
| return map[getKey(entityType, id)]; | |
| } | |
| interface HasFoFields { | |
| id: string; | |
| entityType: EntityType; | |
| currentStage: string; | |
| status: string; | |
| assignedFOI?: string; | |
| assignedFO?: string; | |
| } | |
| export function applyFoWorkflowOverrides<T extends HasFoFields>(rows: T[]): T[] { | |
| const map = readOverrides(); | |
| return rows.map((row) => { | |
| const override = map[getKey(row.entityType, row.id)]; | |
| if (!override) return row; | |
| return { | |
| ...row, | |
| currentStage: override.currentStage ?? row.currentStage, | |
| status: override.status ?? row.status, | |
| assignedFOI: override.assignedFOI ?? row.assignedFOI, | |
| assignedFO: override.assignedFO ?? row.assignedFO, | |
| }; | |
| }); | |
| } | |