|
3 | 3 | import React, { createContext, useContext, useEffect, useMemo, useState } from "react"; |
4 | 4 | import { Inspection } from "@/types/inspection"; |
5 | 5 | import { apiUrl, authHeaders } from "@/lib/api"; |
| 6 | +import { |
| 7 | + TRANSFORMER_REMOVED_EVENT, |
| 8 | + TransformerRemovedDetail, |
| 9 | +} from "@/lib/events"; |
6 | 10 |
|
7 | 11 | const parseMaybeJson = (value: unknown): unknown => { |
8 | 12 | if (typeof value !== "string") return value; |
@@ -144,6 +148,31 @@ export function InspectionsProvider({ children }: { children: React.ReactNode }) |
144 | 148 |
|
145 | 149 | // Do not refetch on route change to avoid unnecessary reloads |
146 | 150 |
|
| 151 | + useEffect(() => { |
| 152 | + if (typeof window === "undefined") return; |
| 153 | + const onTransformerRemoved = (event: Event) => { |
| 154 | + const detail = (event as CustomEvent<TransformerRemovedDetail>).detail; |
| 155 | + if (!detail) return; |
| 156 | + const removedId = detail.id ?? undefined; |
| 157 | + const removedNumber = detail.transformerNumber ?? undefined; |
| 158 | + if (!removedId && !removedNumber) return; |
| 159 | + setInspections((prev) => |
| 160 | + prev.filter((inspection) => { |
| 161 | + const nestedTransformer = (inspection as unknown as { transformer?: { id?: string | null; transformerNumber?: string | null } }).transformer; |
| 162 | + const matchesId = removedId && ((inspection as unknown as { transformerId?: string | null }).transformerId === removedId || nestedTransformer?.id === removedId); |
| 163 | + const matchesNumber = |
| 164 | + removedNumber && |
| 165 | + ((inspection.transformerNumber && inspection.transformerNumber === removedNumber) || nestedTransformer?.transformerNumber === removedNumber); |
| 166 | + return !(matchesId || matchesNumber); |
| 167 | + }) |
| 168 | + ); |
| 169 | + }; |
| 170 | + window.addEventListener(TRANSFORMER_REMOVED_EVENT, onTransformerRemoved as EventListener); |
| 171 | + return () => { |
| 172 | + window.removeEventListener(TRANSFORMER_REMOVED_EVENT, onTransformerRemoved as EventListener); |
| 173 | + }; |
| 174 | + }, []); |
| 175 | + |
147 | 176 | const fetchInspectionById = async (id: string): Promise<Inspection | null> => { |
148 | 177 | try { |
149 | 178 | const res = await fetch(`/api/inspections/${id}`, { |
|
0 commit comments