@ssgc/alert-console 2.2.2 → 2.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/utils/alerts.ts","../src/config/tenants.ts","../src/adapters/http/alerts.adapter.ts","../src/adapters/http/rules.adapter.ts","../node_modules/dayjs/dayjs.min.js","../src/utils/preferences.ts","../src/adapters/http/alerts.adapter.schools.ts","../src/adapters/http/rules.adapter.schools.ts","../src/providers/ApiProvider.tsx","../src/components/Alerts/alertsTable.helpers.ts","../src/components/Alerts/Filters/FilterSelect.tsx","../src/components/Alerts/Filters/PrioritySelect.tsx","../src/components/Alerts/Filters/AnomalyTypeSelect.tsx","../src/components/Alerts/Filters/SpaceSelect.tsx","../src/components/Alerts/Filters/ActionTakenSelect.tsx","../src/components/DataTable/DataTable.tsx","../src/components/Alerts/AlertsTable.tsx","../node_modules/@tanstack/query-core/build/modern/subscribable.js","../node_modules/@tanstack/query-core/build/modern/timeoutManager.js","../node_modules/@tanstack/query-core/build/modern/utils.js","../node_modules/@tanstack/query-core/build/modern/focusManager.js","../node_modules/@tanstack/query-core/build/modern/thenable.js","../node_modules/@tanstack/query-core/build/modern/notifyManager.js","../node_modules/@tanstack/query-core/build/modern/onlineManager.js","../node_modules/@tanstack/query-core/build/modern/retryer.js","../node_modules/@tanstack/query-core/build/modern/removable.js","../node_modules/@tanstack/query-core/build/modern/query.js","../node_modules/@tanstack/query-core/build/modern/queryObserver.js","../node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../node_modules/@tanstack/query-core/build/modern/mutation.js","../node_modules/@tanstack/query-core/build/modern/mutationCache.js","../node_modules/@tanstack/query-core/build/modern/mutationObserver.js","../node_modules/@tanstack/query-core/build/modern/queryCache.js","../node_modules/@tanstack/query-core/build/modern/queryClient.js","../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js","../node_modules/@tanstack/react-query/build/modern/IsRestoringProvider.js","../node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.js","../node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js","../node_modules/@tanstack/react-query/build/modern/suspense.js","../node_modules/@tanstack/react-query/build/modern/useBaseQuery.js","../node_modules/@tanstack/react-query/build/modern/useQuery.js","../node_modules/@tanstack/react-query/build/modern/useMutation.js","../src/hooks/useUpdateAlertStatus.ts","../src/utils/dateTimeUtils.ts","../src/components/Archived/ArchivedTable.tsx","../src/components/Clock/AnalogClock.tsx","../src/components/Clock/Clock.tsx","../src/components/Settings/AdminSettingsSection.tsx","../src/components/Settings/EscalationRowSection.tsx","../src/components/Settings/EscalationTableSection.tsx","../src/components/Settings/AlertAssignment.tsx","../src/components/Settings/SettingsPanel.tsx","../src/components/Settings/MyPreferencesPanel.tsx","../src/components/Settings/SettingsTabs.tsx","../src/assets/completed.png","../src/assets/pending.png","../src/components/AlertModal/TrackIncident.tsx","../src/components/AlertModal/TrackIncidentWrapper.tsx","../src/utils/media.ts","../src/components/AlertModal/AlertModal.tsx","../src/hooks/useAlertStatusList.ts","../src/components/AlertConsole/AlertConsole.tsx","../src/hooks/useAlerts.ts","../src/AlertConsoleWidget.tsx","../src/hooks/useAlertsReport.ts","../src/index.ts"],"sourcesContent":["import type { Alert } from \"../types/alerts.types\";\nimport palette from \"../constants/colorPalette.json\" with { type: \"json\" };\n\nexport function formatElapsedMinutes(isoTimestamp: string): string {\n const created = new Date(isoTimestamp).getTime();\n const now = Date.now();\n const diffMs = Math.max(0, now - created);\n const diffMin = diffMs / (60 * 1000);\n return diffMin.toFixed(2);\n}\n\nexport function percentFromElapsed(isoTimestamp: string): number {\n const elapsed = parseFloat(formatElapsedMinutes(isoTimestamp));\n const cycle = 60;\n return Math.min(100, Math.round(((elapsed % cycle) / cycle) * 100));\n}\n\nexport const PRIORITY_HEX: Record<Alert[\"priority\"], string> = {\n Critical: palette.critical,\n High: palette.high,\n Medium: palette.medium,\n Low: palette.low,\n};\n\nexport function getPriorityHexColor(priority: Alert[\"priority\"]): string {\n return PRIORITY_HEX[priority] || PRIORITY_HEX.Low;\n}\n\n/**\n * parses a time string in the format \"hh:mm:ss\" or \"hh:mm:ss.SSS\" into seconds\n * returns 0 for invalid inputs\n */\nexport function parseHmsToSeconds(timeStr: string): number {\n if (!timeStr || typeof timeStr !== \"string\") return 0;\n const parts = timeStr.trim().split(\":\");\n if (parts.length !== 3) return 0; //check for hh:mm:ss\n const [hh, mm, ss] = parts;\n const hours = Number.parseInt(hh, 10);\n const minutes = Number.parseInt(mm, 10);\n const seconds = Number.parseFloat(ss || \"0\");\n const safeHours = Number.isFinite(hours) ? hours : 0;\n const safeMinutes = Number.isFinite(minutes) ? minutes : 0;\n const safeSeconds = Number.isFinite(seconds) ? seconds : 0;\n return safeHours * 3600 + safeMinutes * 60 + safeSeconds; //convert to secs\n}\n\n/**\n * Extracts third-party IDs from an alert record.\n * Accepts various possible shapes (string, array, alt field names), returns unique numeric IDs.\n */\nexport function parseThirdPartyIds(record: Alert): number[] {\n const raw =\n (record as any).thirdPartyIds ??\n (record as any).ThirdPartyIds ??\n (record as any).thirdPartyId ??\n (record as any).ThirdPartyId ??\n \"\";\n const asString = Array.isArray(raw) ? raw.join(\",\") : String(raw ?? \"\");\n if (!asString || !asString.trim()) return [];\n const ids = asString\n .split(\",\")\n .map((s) => parseInt(String(s).trim(), 10))\n .filter((n) => Number.isFinite(n));\n const seen = new Set<number>();\n const unique: number[] = [];\n ids.forEach((n) => {\n if (!seen.has(n)) {\n seen.add(n);\n unique.push(n);\n }\n });\n return unique;\n}\n\n\n","export type TenantId = \"snl\" | \"schools\";\n\ntype TenantDomainConfig = {\n alerts: string;\n rules: string;\n};\n\n//read Vite envs directly\nconst SNL_ALERTS =\n import.meta.env.VITE_SNL_ALERTS_END_POINT || import.meta.env.VITE_SNL_API_END_POINT || \"\";\n// For SNL, rules and alerts use the same domain\nconst SNL_RULES = SNL_ALERTS;\n const SCHOOLS_ALERTS =\n import.meta.env.VITE_SCHOOLS_ALERTS_END_POINT || import.meta.env.VITE_SCHOOLS_API_END_POINT || \"\";\nconst SCHOOLS_RULES =\n import.meta.env.VITE_SCHOOLS_RULES_END_POINT || import.meta.env.VITE_SCHOOLS_API_END_POINT || \"\";\n\nexport const tenantDomains: Record<TenantId, TenantDomainConfig> = {\n snl: {\n alerts: SNL_ALERTS,\n rules: SNL_RULES,\n },\n schools: {\n alerts: SCHOOLS_ALERTS,\n rules: SCHOOLS_RULES,\n }\n};\n\nexport const DEFAULT_AUTH_TOKEN = import.meta.env.VITE_AUTH_TOKEN || \"\";\n\n\n","import type { AlertsPort, AlertStatusListItem, UpdateAlertStatusPayload, AdminSettings, SetAdminSettingsPayload, PreferenceSettings, SetPreferenceSettingsPayload } from \"../../ports/alerts.port\";\nimport type { Alert } from \"../../types/alerts.types\";\nimport type { AlertReport, AlertsReportQuery } from \"../../types/reports.types\";\n\ntype AdapterCfg = { baseUrl: string; headers?: Record<string, string> };\n\nfunction joinUrl(base: string, path: string): string {\n const trimmedBase = (base || \"\").replace(/\\/+$/, \"\");\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n return `${trimmedBase}${normalizedPath}`;\n}\n\nfunction getAuthHeader(): Record<string, string> {\n try {\n const token = localStorage.getItem(\"authToken\");\n return token ? { Authorization: `Bearer ${token}` } : {};\n } catch {\n return {};\n }\n}\n\nfunction buildUrlWithParams(baseUrl: string, params?: Record<string, any>): string {\n if (!params) return baseUrl;\n const url = new URL(baseUrl);\n Object.entries(params).forEach(([k, v]) => {\n if (v !== undefined && v !== null && String(v).length > 0) {\n url.searchParams.set(k, String(v));\n }\n });\n return url.toString();\n}\n\nasync function doRequest<T>(url: string, init: RequestInit): Promise<T> {\n const mergedHeaders: Record<string, string> = {\n ...(init.headers as Record<string, string> | undefined),\n ...getAuthHeader(),\n };\n const res = await fetch(url, { ...init, headers: mergedHeaders });\n if (res.status === 401) {\n window.location.href = \"/login\";\n throw new Error(\"Unauthorized\");\n }\n if (res.status === 204) return {} as T;\n const text = await res.text();\n let data: any = {};\n if (text) {\n try {\n data = JSON.parse(text);\n } catch {\n // non-JSON fallback\n data = { ok: res.ok, status: res.status, raw: text };\n }\n }\n if (!res.ok) {\n const message = data?.errorMessage || data?.message || `HTTP ${res.status}`;\n throw new Error(message);\n }\n return data as T;\n}\n\nexport function createAlertsAdapter(config: AdapterCfg): AlertsPort {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...(config.headers || {}),\n };\n\n return {\n async listAlerts(): Promise<Alert[]> {\n const url = joinUrl(config.baseUrl, \"/api/Alert\");\n const data = await doRequest<any>(url, {\n method: \"GET\",\n headers,\n });\n return Array.isArray(data) ? (data as Alert[]) : [];\n },\n async getAlertStatusList(): Promise<AlertStatusListItem[]> {\n const url = joinUrl(config.baseUrl, \"/api/Alert/AlertStatusList\");\n const data = await doRequest<any>(url, {\n method: \"GET\",\n headers,\n });\n if (Array.isArray(data)) return data as AlertStatusListItem[];\n if (data && typeof data === \"object\" && Array.isArray((data as any).data)) {\n return (data as any).data as AlertStatusListItem[];\n }\n return [];\n },\n async getAlertsReport(query: AlertsReportQuery): Promise<AlertReport[]> {\n const base = joinUrl(config.baseUrl, \"/Alerts/GetAlertsReport\");\n const url = buildUrlWithParams(base, query as any);\n const data = await doRequest<any>(url, {\n method: \"GET\",\n headers,\n });\n return Array.isArray(data) ? (data as AlertReport[]) : [];\n },\n async updateAlertStatus(payload: UpdateAlertStatusPayload): Promise<any> {\n const url = joinUrl(config.baseUrl, \"/api/Alert/status\");\n return doRequest<any>(url, {\n method: \"PUT\",\n headers,\n body: JSON.stringify(payload ?? {}),\n });\n },\n async getAdminSettings(): Promise<AdminSettings | null> {\n const url = joinUrl(config.baseUrl, \"/api/Alert/GetAdminSettings\");\n const data = await doRequest<any>(url, {\n method: \"GET\",\n headers,\n });\n if (data && typeof data === \"object\") {\n if (\"data\" in data) return (data as any).data as AdminSettings;\n if (\"userId\" in data) return data as AdminSettings;\n }\n return null;\n },\n async setAdminSettings(payload: SetAdminSettingsPayload): Promise<any> {\n const url = joinUrl(config.baseUrl, \"/api/Alert/SetAdminSettings\");\n const body = {\n userId: 0,\n isAdminSetting: true,\n sortBy: payload?.sortBy ?? \"\",\n groupBy: payload?.groupBy ?? null,\n };\n return doRequest<any>(url, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n });\n },\n async getPreferenceSettings(): Promise<PreferenceSettings | null> {\n const url = joinUrl(config.baseUrl, \"/api/Alert/GetPreferenceSettings\");\n const data = await doRequest<any>(url, {\n method: \"GET\",\n headers,\n });\n if (data && typeof data === \"object\") {\n if (\"data\" in data) return (data as any).data as PreferenceSettings;\n if (\"anomalyIds\" in data) return data as PreferenceSettings;\n }\n return null;\n },\n async setPreferenceSettings(payload: SetPreferenceSettingsPayload): Promise<any> {\n const url = joinUrl(config.baseUrl, \"/api/Alert/SetPreferenceSettings\");\n const raw = await doRequest<any>(url, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload ?? {}),\n });\n const isSuccess = raw?.responseStatus ?? true;\n const message = raw?.data ?? raw?.message ?? \"Preferences updated successfully.\";\n return {\n responseStatus: isSuccess,\n errorMessage: isSuccess ? \"\" : (raw?.errorMessage ?? raw?.message ?? \"\"),\n statusCode: 200,\n data: message,\n };\n },\n async getAlertNotifications(alertId: string | number): Promise<any[]> {\n const base = joinUrl(config.baseUrl, \"/api/Alert/GetNotifications\");\n const url = buildUrlWithParams(base, { alertId });\n const data = await doRequest<any>(url, {\n method: \"GET\",\n headers,\n });\n if (Array.isArray(data)) return data as any[];\n if (data && typeof data === \"object\" && Array.isArray((data as any).data)) {\n return (data as any).data as any[];\n }\n return [];\n },\n async notifyFamilyMembers(alertId: string | number): Promise<any> {\n const base = joinUrl(config.baseUrl, \"/api/Alert/NotificationToFamilyMembers\");\n const url = buildUrlWithParams(base, { alertId });\n return doRequest<any>(url, {\n method: \"POST\",\n headers,\n });\n },\n async sendSMSorEmailNotifications(alertId: string | number, isEmail: boolean, isSMS: boolean): Promise<any> {\n const base = joinUrl(config.baseUrl, \"/api/Alert/SendSMSorEmailNotifications\");\n const url = buildUrlWithParams(base, { alertId, isEmail, isSMS });\n return doRequest<any>(url, {\n method: \"POST\",\n headers,\n });\n },\n };\n}\n\n\n","import type { RulesPort, SetEscalationSettingsPayload, RulesLookups } from \"../../ports/rules.port\";\n\ntype AdapterCfg = { baseUrl: string; headers?: Record<string, string> };\n\nfunction joinUrl(base: string, path: string): string {\n const trimmedBase = (base || \"\").replace(/\\/+$/, \"\");\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n return `${trimmedBase}${normalizedPath}`;\n}\n\nfunction getAuthHeader(): Record<string, string> {\n try {\n const token = localStorage.getItem(\"authToken\");\n return token ? { Authorization: `Bearer ${token}` } : {};\n } catch {\n return {};\n }\n}\n\nasync function doRequest<T>(url: string, init: RequestInit): Promise<T> {\n const mergedHeaders: Record<string, string> = {\n ...(init.headers as Record<string, string> | undefined),\n ...getAuthHeader(),\n };\n const res = await fetch(url, { ...init, headers: mergedHeaders });\n if (res.status === 401) {\n window.location.href = \"/login\";\n throw new Error(\"Unauthorized\");\n }\n if (res.status === 204) return {} as T;\n const text = await res.text();\n let data: any = {};\n if (text) {\n try {\n data = JSON.parse(text);\n } catch {\n data = { ok: res.ok, status: res.status, raw: text };\n }\n }\n if (!res.ok) {\n const message = data?.errorMessage || data?.message || `HTTP ${res.status}`;\n throw new Error(message);\n }\n return data as T;\n}\n\nexport function createRulesAdapter(cfg: AdapterCfg): RulesPort {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...(cfg.headers || {}),\n };\n const url = joinUrl(cfg.baseUrl, \"/api/Rules\");\n const lookupsUrl = joinUrl(cfg.baseUrl, \"/api/Rules/lookups\");\n return {\n async getRules() {\n const data = await doRequest<any>(url, { method: \"GET\", headers });\n return Array.isArray(data) ? (data as any[]) : [];\n },\n async setEscalationSettings(payload: SetEscalationSettingsPayload) {\n return doRequest<any>(url, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload ?? {}),\n });\n },\n async getLookups() {\n return doRequest<RulesLookups>(lookupsUrl, { method: \"GET\", headers });\n },\n async updateRule(recordId: number, payload: any) {\n const putUrl = `${url}/${recordId}`;\n return doRequest<any>(putUrl, {\n method: \"PUT\",\n headers,\n body: JSON.stringify(payload ?? {}),\n });\n },\n };\n}\n\n\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","import dayjs, { type Dayjs } from \"dayjs\";\n// Preference and settings related helpers\n\nexport function normalizeSortBy(input?: string | null): \"By Severity\" | \"By Created Date\" | \"By Updated Date\" {\n if (!input) return \"By Severity\";\n const s = input.trim().toLowerCase();\n if (s.includes(\"created\")) return \"By Created Date\";\n if (s.includes(\"updated\") || s.includes(\"modified\")) return \"By Updated Date\";\n return \"By Severity\";\n}\n\nexport function normalizeGroupBy(input?: string | null): \"By severity\" | \"By Rules\" {\n if (!input) return \"By severity\";\n const s = input.trim().toLowerCase();\n if (s.includes(\"rule\")) return \"By Rules\";\n return \"By severity\";\n}\n\n// Map API sort string to the UI secondary sort key\nexport function mapApiSortToSecondary(sortBy?: string | null): string | undefined {\n if (!sortBy) return undefined;\n const s = String(sortBy).toLowerCase();\n if (s.includes(\"created\")) return \"created\";\n if (s.includes(\"updated\") || s.includes(\"modified\")) return \"updated\";\n return undefined;\n}\n\n// Given \"HH:mm:ss\" start/end, produce a \"HH-HH\" option key; if options provided, return only if present\nexport function mapApiDndToOption(\n start?: string,\n end?: string,\n options?: Array<{ label: string; value: string }>\n): string | undefined {\n const s = (start || \"\").split(\":\")[0];\n const e = (end || \"\").split(\":\")[0];\n if (!s || !e) return undefined;\n const key = `${s}-${e}`;\n if (Array.isArray(options) && options.length > 0) {\n const exists = options.find(o => o.value === key);\n return exists ? key : undefined;\n }\n return key;\n}\n\n// .NET ticks helpers (1 tick = 100ns; 1s = 10,000,000 ticks)\nexport function hoursToTicks(hours: number): number {\n return Math.round(hours * 3600 * 10_000_000);\n}\n\nexport function dndOptionToTicks(option?: string): { start: number; end: number } {\n if (!option) return { start: 0, end: 0 };\n const [s, e] = option.split(\"-\").map(v => parseInt(v, 10));\n if (Number.isFinite(s) && Number.isFinite(e)) {\n return { start: hoursToTicks(s), end: hoursToTicks(e) };\n }\n return { start: 0, end: 0 };\n}\n\n// Parse \"HH:mm:ss\" safely\nexport function parseHms(input?: string): { hours: number; minutes: number; seconds: number } {\n if (!input || typeof input !== \"string\") return { hours: 0, minutes: 0, seconds: 0 };\n const parts = input.split(\":\").map((p) => parseInt(p, 10));\n const hours = Number.isFinite(parts[0]) ? parts[0] : 0;\n const minutes = Number.isFinite(parts[1]) ? parts[1] : 0;\n const seconds = Number.isFinite(parts[2]) ? parts[2] : 0;\n return { hours, minutes, seconds };\n}\n\nexport function hmsToDayjs(input?: string): Dayjs {\n const { hours, minutes, seconds } = parseHms(input);\n return dayjs().hour(hours).minute(minutes).second(seconds).millisecond(0);\n}\n\nexport function dayjsToTicks(value?: Dayjs | null): number {\n if (!value) return 0;\n const hours = value.hour();\n const minutes = value.minute();\n const seconds = value.second();\n const totalSeconds = hours * 3600 + minutes * 60 + seconds;\n return totalSeconds * 10_000_000; // 10,000,000 ticks per second\n}\n\nexport function formatDayjsToHms(value?: Dayjs | null): string {\n if (!value) return \"00:00:00\";\n const pad = (n: number) => String(n).padStart(2, \"0\");\n return `${pad(value.hour())}:${pad(value.minute())}:${pad(value.second())}`;\n}\n\n\n","import type {\n\tAlertsPort,\n\tAlertStatusListItem,\n\tUpdateAlertStatusPayload,\n\tAdminSettings,\n\tSetAdminSettingsPayload,\n\tPreferenceSettings,\n\tSetPreferenceSettingsPayload,\n} from \"../../ports/alerts.port\";\nimport type { Alert } from \"../../types/alerts.types\";\nimport type { AlertReport, AlertsReportQuery } from \"../../types/reports.types\";\nimport { parseHms } from \"../../utils/preferences\";\n\ntype AdapterCfg = { baseUrl: string; headers?: Record<string, string> };\n\nfunction joinUrl(base: string, path: string): string {\n\tconst trimmedBase = (base || \"\").replace(/\\/+$/, \"\");\n\tconst normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${trimmedBase}${normalizedPath}`;\n}\n\nfunction getAuthHeader(): Record<string, string> {\n\ttry {\n\t\tconst token = localStorage.getItem(\"authToken\");\n\t\treturn token ? { Authorization: `Bearer ${token}` } : {};\n\t} catch {\n\t\treturn {};\n\t}\n}\n\nfunction buildUrlWithParams(baseUrl: string, params?: Record<string, any>): string {\n\tif (!params) return baseUrl;\n\tconst url = new URL(baseUrl);\n\tObject.entries(params).forEach(([k, v]) => {\n\t\tif (v !== undefined && v !== null && String(v).length > 0) {\n\t\t\turl.searchParams.set(k, String(v));\n\t\t}\n\t});\n\treturn url.toString();\n}\n\nasync function doRequest<T>(url: string, init: RequestInit): Promise<T> {\n\tconst mergedHeaders: Record<string, string> = {\n\t\t...(init.headers as Record<string, string> | undefined),\n\t\t...getAuthHeader(),\n\t};\n\tconst res = await fetch(url, { ...init, headers: mergedHeaders });\n\tif (res.status === 401) {\n\t\twindow.location.href = \"/login\";\n\t\tthrow new Error(\"Unauthorized\");\n\t}\n\tif (res.status === 204) return {} as T;\n\tconst text = await res.text();\n\tlet data: any = {};\n\tif (text) {\n\t\ttry {\n\t\t\tdata = JSON.parse(text);\n\t\t} catch {\n\t\t\tdata = { ok: res.ok, status: res.status, raw: text };\n\t\t}\n\t}\n\tif (!res.ok) {\n\t\tconst message = data?.Message || `HTTP ${res.status}`;\n\t\tthrow new Error(message);\n\t}\n\treturn data as T;\n}\n\n// helpers for response normalization\nconst firstDefined = <T,>(...values: T[]) =>\n\tvalues.find((v) => v !== undefined && v !== null);\n\nfunction mapSchoolsAlert(api: any): Alert {\n\treturn {\n\t\t// important: do not fall back to `id` here; only AlertId/alertId are considered the Alert ID\n\t\tid: String(firstDefined(api?.AlertId, api?.alertId) ?? \"\"),\n\t\tpriority: firstDefined(api?.Priority, api?.priority, \"Low\"),\n\t\ttimestamp: firstDefined(api?.Timestamp, api?.timestamp, \"\"),\n\t\tstatusType: firstDefined(api?.Status, api?.statusType, \"\"),\n\t\tdescription: firstDefined(api?.Description, api?.description, \"\"),\n\t\teventName: firstDefined(api?.EventName, api?.eventName),\n\t\truleName: firstDefined(api?.RuleName, api?.ruleName),\n\t\tspaceName: firstDefined(api?.SpaceName, api?.spaceName),\n\t\tassignTeam: firstDefined(api?.AssignTeam, api?.assignTeam),\n\t\tcameraName: firstDefined(api?.CameraName, api?.cameraName),\n\t\ttype: firstDefined(api?.Type, api?.type),\n\t\tmediaDetails: firstDefined(api?.MediaDetails, api?.mediaDetails),\n\t\tadditionalMedia: firstDefined(api?.AdditionalMedia, api?.additionalMedia),\n\t\ttimeElapsed: firstDefined(api?.TimeElapsed, api?.timeElapsed),\n\t\ttimeRemaining: firstDefined(api?.TimeRemaining, api?.timeRemaining),\n\t\tanomalyName: firstDefined(api?.AnomalyName, api?.anomalyName),\n\t\talertDetails: firstDefined(api?.AlertDetails, api?.alertDetails),\n\t\tstatusHistory: firstDefined(api?.StatusHistory, api?.statusHistory),\n\t};\n}\n\nexport function createSchoolsAlertsAdapter(config: AdapterCfg): AlertsPort {\n\tconst headers: Record<string, string> = {\n\t\t\"Content-Type\": \"application/json\",\n\t\t...(config.headers || {}),\n\t};\n\n\treturn {\n\t\tasync listAlerts(): Promise<Alert[]> {\n\t\t\t// need to update the customerId default values\n\t\t\tconst url = joinUrl(config.baseUrl, \"/api/detectionpolicy/alerts?customerId=99e5c8b5-b9d4-4d35-8885-7f121c532664\");\n\t\t\tconst data = await doRequest<any>(url, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders,\n\t\t\t});\n\t\t\tif (!Array.isArray(data?.Items)) return [];\n\t\t\treturn (data?.Items as any[]).map(mapSchoolsAlert);\n\t\t},\n\t\tasync getAlertStatusList(): Promise<AlertStatusListItem[]> {\n\t\t\tconst url = joinUrl(config.baseUrl, \"/api/detectionpolicy/alerts/StatusList\");\n\t\t\tconst data = await doRequest<any>(url, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders,\n\t\t\t});\n\t\t\treturn Array.isArray(data) ? (data as AlertStatusListItem[]) : [];\n\t\t},\n\t\tasync getAlertsReport(query: AlertsReportQuery): Promise<AlertReport[]> {\n\t\t\tconst base = joinUrl(config.baseUrl, \"/api/detectionpolicy/alerts/GetAlertsReport\");\n\t\t\tconst url = buildUrlWithParams(base, query as any);\n\t\t\tconst data = await doRequest<any>(url, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders,\n\t\t\t});\n\t\t\treturn Array.isArray(data) ? (data as AlertReport[]) : [];\n\t\t},\n\t\tasync updateAlertStatus(payload: UpdateAlertStatusPayload): Promise<any> {\n\t\t\t// Schools API expects: { AlertId, Status, Notes }\n\t\t\tconst url = joinUrl(config.baseUrl, \"/api/detectionpolicy/alerts/Log\");\n\t\t\tconst body = {\n\t\t\t\tAlertId: (payload as any).alertId ?? (payload as any).alertUniqueId ?? (payload as any).AlertId,\n\t\t\t\tStatus: (payload as any).status ?? (payload as any).Status ?? \"\",\n\t\t\t\tNotes: (payload as any).notes ?? (payload as any).Notes ?? \"\",\n\t\t\t};\n\t\t\treturn doRequest<any>(url, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders,\n\t\t\t\tbody: JSON.stringify(body),\n\t\t\t});\n\t\t},\n\t\tasync getAdminSettings(): Promise<AdminSettings | null> {\n\t\t\tconst url = joinUrl(config.baseUrl, \"/api/detectionpolicy/alerts/GetAdminSettings\");\n\t\t\tconst data = await doRequest<any>(url, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders,\n\t\t\t});\n\t\t\tif (data && typeof data === \"object\") {\n\t\t\t\tif (\"data\" in data) return (data as any).data as AdminSettings;\n\t\t\t\tif (\"userId\" in data) return data as AdminSettings;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tasync setAdminSettings(payload: SetAdminSettingsPayload): Promise<any> {\n\t\t\tconst url = joinUrl(config.baseUrl, \"/api/detectionpolicy/alerts/SetAdminSettings\");\n\t\t\tconst body = {\n\t\t\t\tuserId: 0,\n\t\t\t\tisAdminSetting: true,\n\t\t\t\tsortBy: payload?.sortBy ?? \"\",\n\t\t\t};\n\t\t\treturn doRequest<any>(url, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders,\n\t\t\t\tbody: JSON.stringify(body),\n\t\t\t});\n\t\t},\n\t\tasync getPreferenceSettings(): Promise<PreferenceSettings | null> {\n\t\t\tconst url = joinUrl(config.baseUrl, \"/api/detectionpolicy/alerts/GetPreferenceSettings\");\n\t\t\tconst data = await doRequest<any>(url, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders,\n\t\t\t});\n\t\t\tif (data && typeof data === \"object\") {\n\t\t\t\tif (\"data\" in data) return (data as any).data as PreferenceSettings;\n\t\t\t\tif (\"anomalyIds\" in data) return data as PreferenceSettings;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tasync setPreferenceSettings(payload: SetPreferenceSettingsPayload): Promise<any> {\n\t\t\tconst url = joinUrl(config.baseUrl, \"/api/detectionpolicy/alerts/SetPreferenceSettings\");\n\t\t\tconst toTicks = (hms?: string): number => {\n\t\t\t\tconst { hours, minutes, seconds } = parseHms(hms);\n\t\t\t\tconst totalSeconds = hours * 3600 + minutes * 60 + seconds;\n\t\t\t\treturn totalSeconds * 10_000_000;\n\t\t\t};\n\t\t\tconst body = {\n\t\t\t\tSettings: {\n\t\t\t\t\tUserId: 0,\n\t\t\t\t\tAnomalyIds: Array.isArray(payload?.anomalyIds) ? payload.anomalyIds.map((x) => String(x)) : [],\n\t\t\t\t\tDoNotDisturbStart: { Ticks: toTicks(payload?.doNotDisturbStart) },\n\t\t\t\t\tDoNotDisturbEnd: { Ticks: toTicks(payload?.doNotDisturbEnd) },\n\t\t\t\t\tInApp: !!payload?.inApp,\n\t\t\t\t\tSMS: !!payload?.sms,\n\t\t\t\t\tEmail: !!payload?.email,\n\t\t\t\t\tSortBy: payload?.sortBy ?? \"\",\n\t\t\t\t},\n\t\t\t};\n\t\t\tconst raw = await doRequest<any>(url, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders,\n\t\t\t\tbody: JSON.stringify(body),\n\t\t\t});\n\t\t\tconst isSuccess = (raw as any)?.responseStatus ?? true;\n\t\t\tconst message = (raw as any)?.data ?? (raw as any)?.message ?? \"Preferences updated successfully.\";\n\t\t\treturn {\n\t\t\t\tresponseStatus: isSuccess,\n\t\t\t\terrorMessage: isSuccess ? \"\" : ((raw as any)?.errorMessage ?? (raw as any)?.Message ?? (raw as any)?.message ?? \"\"),\n\t\t\t\tstatusCode: 200,\n\t\t\t\tdata: message,\n\t\t\t};\n\t\t},\n\t\tasync getAlertNotifications(alertId: string | number): Promise<any[]> {\n\t\t\tconst base = joinUrl(config.baseUrl, \"/api/detectionpolicy/alerts/GetNotifications\");\n\t\t\tconst url = buildUrlWithParams(base, { alertId });\n\t\t\tconst data = await doRequest<any>(url, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders,\n\t\t\t});\n\t\t\tif (Array.isArray(data)) return data as any[];\n\t\t\tif (data && typeof data === \"object\" && Array.isArray((data as any).data)) {\n\t\t\t\treturn (data as any).data as any[];\n\t\t\t}\n\t\t\treturn [];\n\t\t},\n\t};\n}\n\nexport default createSchoolsAlertsAdapter;\n\n\n","import type { RulesPort, SetEscalationSettingsPayload, RulesLookups } from \"../../ports/rules.port\";\n\ntype AdapterCfg = { baseUrl: string; headers?: Record<string, string> };\n\nfunction getAuthHeader(): Record<string, string> {\n\ttry {\n\t\tconst token = localStorage.getItem(\"authToken\");\n\t\treturn token ? { Authorization: `Bearer ${token}` } : {};\n\t} catch {\n\t\treturn {};\n\t}\n}\n\nasync function doRequest<T>(url: string, init: RequestInit): Promise<T> {\n\tconst mergedHeaders: Record<string, string> = {\n\t\t...(init.headers as Record<string, string> | undefined),\n\t\t...getAuthHeader(),\n\t};\n\tconst res = await fetch(url, { ...init, headers: mergedHeaders });\n\tif (res.status === 401) {\n\t\twindow.location.href = \"/login\";\n\t\tthrow new Error(\"Unauthorized\");\n\t}\n\tif (res.status === 204) return {} as T;\n\tconst text = await res.text();\n\tlet data: any = {};\n\tif (text) {\n\t\ttry {\n\t\t\tdata = JSON.parse(text);\n\t\t} catch {\n\t\t\tdata = { ok: res.ok, status: res.status, raw: text };\n\t\t}\n\t}\n\tif (!res.ok) {\n\t\tconst message = data?.errorMessage || data?.message || `HTTP ${res.status}`;\n\t\tthrow new Error(message);\n\t}\n\treturn data as T;\n}\n\nexport function createSchoolsRulesAdapter(cfg: AdapterCfg): RulesPort {\n\tconst headers: Record<string, string> = {\n\t\t\"Content-Type\": \"application/json\",\n\t\t...(cfg.headers || {}),\n\t};\n\tconst url = new URL(\"/api/detectionpolicy/rules\", cfg.baseUrl).toString();\n\treturn {\n\t\tasync getRules() {\n\t\t\tconst data = await doRequest<any>(url, { method: \"GET\", headers });\n\t\t\treturn Array.isArray(data) ? (data as any[]) : [];\n\t\t},\n\t\tasync setEscalationSettings(payload: SetEscalationSettingsPayload) {\n\t\t\treturn doRequest<any>(url, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders,\n\t\t\t\tbody: JSON.stringify(payload ?? {}),\n\t\t\t});\n\t\t},\n\t\tasync getLookups() {\n\t\t\tconst makeUrl = (path: string) => new URL(path, cfg.baseUrl).toString();\n\t\t\tconst requests = [\n\t\t\t\tdoRequest<any[]>(makeUrl(\"/api/detectionpolicy/lookups/actiontypes\"), { method: \"GET\", headers }),\n\t\t\t\tdoRequest<any[]>(makeUrl(\"/api/detectionpolicy/lookups/anomalies\"), { method: \"GET\", headers }),\n\t\t\t\tdoRequest<any[]>(makeUrl(\"/api/detectionpolicy/lookups/thirdparty\"), { method: \"GET\", headers }),\n\t\t\t\tdoRequest<any[]>(makeUrl(\"/api/detectionpolicy/lookups/severity\"), { method: \"GET\", headers }),\n\t\t\t\tdoRequest<any[]>(makeUrl(\"/api/detectionpolicy/lookups/scheduletypes\"), { method: \"GET\", headers }),\n\t\t\t] as const;\n\n\t\t\tconst [\n\t\t\t\tactionTypesRes,\n\t\t\t\tanomaliesRes,\n\t\t\t\tthirdPartyRes,\n\t\t\t\tseveritiesRes,\n\t\t\t\tscheduleTypesRes,\n\t\t\t] = await Promise.allSettled(requests);\n\n\t\t\tconst getArray = (res: PromiseSettledResult<any[]>): any[] =>\n\t\t\t\tres.status === \"fulfilled\" && Array.isArray(res.value) ? res.value : [];\n\n\t\t\tconst rawActionTypes = getArray(actionTypesRes);\n\t\t\tconst rawAnomalies = getArray(anomaliesRes);\n\t\t\tconst rawThirdParties = getArray(thirdPartyRes);\n\t\t\tconst rawSeverities = getArray(severitiesRes);\n\t\t\tconst rawScheduleTypes = getArray(scheduleTypesRes);\n\n\t\t\tconst actionTypes = rawActionTypes\n\t\t\t\t.map((actions: any) => ({\n\t\t\t\t\tactionTypeId:\n\t\t\t\t\t\tNumber(actions?.ActionTypeId),\n\t\t\t\t\tname: actions?.DisplayName ?? actions?.Name ?? \"\",\n\t\t\t\t}))\n\n\t\t\tconst anomalies = rawAnomalies\n\t\t\t\t.map((anomalies: any) => ({\n\t\t\t\t\trecordId: anomalies?.AnomalyId,\n\t\t\t\t\tanomalyName: anomalies?.DisplayName ?? anomalies?.Name ?? \"\",\n\t\t\t\t}))\n\n\t\t\tconst thirdParties = rawThirdParties\n\t\t\t\t.map((tp: any) => ({\n\t\t\t\t\tthirdPartyId:\n\t\t\t\t\t\tNumber(tp?.ThirdPartyId),\n\t\t\t\t\tthirdPartyName: tp?.ThirdPartyName ?? tp?.Name ?? \"\",\n\t\t\t\t}))\n\n\t\t\tconst lookups: any = {\n\t\t\t\tactionTypes,\n\t\t\t\tanomalies,\n\t\t\t\tthirdParties,\n\t\t\t};\n\n\t\t\tif (rawSeverities.length) {\n\t\t\t\tlookups.severities = rawSeverities;\n\t\t\t}\n\t\t\tif (rawScheduleTypes.length) {\n\t\t\t\tlookups.scheduleTypes = rawScheduleTypes;\n\t\t\t}\n\n\t\t\treturn lookups as RulesLookups;\n\t\t},\n\t\tasync updateRule(recordId: number, payload: any) {\n\t\t\tconst putUrl = `${url}/${recordId}`;\n\t\t\treturn doRequest<any>(putUrl, {\n\t\t\t\tmethod: \"PUT\",\n\t\t\t\theaders,\n\t\t\t\tbody: JSON.stringify(payload ?? {}),\n\t\t\t});\n\t\t},\n\t};\n}\n\nexport default createSchoolsRulesAdapter;\n\n\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport { tenantDomains, type TenantId } from \"../config/tenants\";\nimport { createAlertsAdapter as createSnlAlertsAdapter } from \"../adapters/http/alerts.adapter\";\nimport { createRulesAdapter as createSnlRulesAdapter } from \"../adapters/http/rules.adapter\";\nimport { createSchoolsAlertsAdapter } from \"../adapters/http/alerts.adapter.schools\";\nimport { createSchoolsRulesAdapter } from \"../adapters/http/rules.adapter.schools\";\nimport type { AlertsPort } from \"../ports/alerts.port\";\nimport type { RulesPort } from \"../ports/rules.port\";\n\ntype ApiContextValue = {\n config: {\n tenant: TenantId;\n alertsBaseUrl: string;\n rulesBaseUrl: string;\n headers?: Record<string, string>;\n };\n alerts: AlertsPort;\n rules: RulesPort;\n};\n\nconst ApiContext = createContext<ApiContextValue | null>(null);\n\nexport function ApiProvider({\n tenant = \"snl\",\n override,\n children,\n}: {\n tenant?: TenantId;\n override?: Partial<{\n alertsBaseUrl: string;\n rulesBaseUrl: string;\n headers: Record<string, string>;\n }>;\n children: React.ReactNode;\n}) {\n const config = useMemo(() => {\n const alertsBaseUrl =\n (override?.alertsBaseUrl && override.alertsBaseUrl.trim()) ||\n tenantDomains[tenant]?.alerts ||\n \"\";\n let rulesBaseUrl =\n (override?.rulesBaseUrl && override.rulesBaseUrl.trim()) ||\n tenantDomains[tenant]?.rules ||\n \"\";\n if (tenant === \"snl\") {\n rulesBaseUrl = alertsBaseUrl;\n }\n const headers = override?.headers;\n return { tenant, alertsBaseUrl, rulesBaseUrl, headers };\n }, [\n tenant,\n override?.alertsBaseUrl,\n override?.rulesBaseUrl,\n JSON.stringify(override?.headers || {}),\n ]);\n const value = useMemo<ApiContextValue>(() => {\n const alertsAdapter =\n config.tenant === \"schools\"\n ? createSchoolsAlertsAdapter({ baseUrl: config.alertsBaseUrl, headers: config.headers })\n : createSnlAlertsAdapter({ baseUrl: config.alertsBaseUrl, headers: config.headers });\n const rulesAdapter =\n config.tenant === \"schools\"\n ? createSchoolsRulesAdapter({ baseUrl: config.rulesBaseUrl, headers: config.headers })\n : createSnlRulesAdapter({ baseUrl: config.alertsBaseUrl, headers: config.headers });\n return { config, alerts: alertsAdapter, rules: rulesAdapter };\n }, [config]);\n\n return <ApiContext.Provider value={value}>{children}</ApiContext.Provider>;\n}\n\nexport function useApi() {\n const context = useContext(ApiContext);\n if (!context) throw new Error(\"useApi must be used inside ApiProvider\");\n return context;\n}\n\n\n","import type { Alert } from \"../../types/alerts.types\";\nimport type { OptionItem } from \"./Filters/FilterSelect\";\n\n// Priority background colors for table rows\nexport const PRIORITY_ROW_BG_CLASS: Record<Alert[\"priority\"], string> = {\n Critical: \"#FFE2E2\",\n High: \"#FF95004D\",\n Medium: \"#FEF9C2\",\n Low: \"#E0EDFF\",\n};\n\n// Priority border/text colors\nexport const PRIORITY_BORDER_TEXT_CLASS: Record<Alert[\"priority\"], string> = {\n Critical: \"#FF3B30\",\n High: \"#FFB86A\",\n Medium: \"#FFCC00\",\n Low: \"#007AFF\",\n};\n\n// 3rd party IDs for email and sms\nexport const THIRD_PARTY_EMAIL_ID = 6;\nexport const THIRD_PARTY_SMS_ID = 7;\n\ninterface NotificationButtonState {\n isDisabled: boolean;\n buttonText: string;\n tooltipTitle: string;\n}\n\n/**\n * Get the button state for email/sms notification buttons\n */\nexport function getNotificationButtonState(\n thirdPartyId: number,\n record: Alert,\n defaultTitle: string\n): NotificationButtonState {\n const isEmailButton = thirdPartyId === THIRD_PARTY_EMAIL_ID;\n const isSmsButton = thirdPartyId === THIRD_PARTY_SMS_ID;\n const isEmailSent = (record as any).isEmailSent;\n const isSmsSent = (record as any).isSMSSent;\n\n const isDisabled = (isEmailButton && isEmailSent) || (isSmsButton && isSmsSent);\n\n const buttonText = isEmailButton\n ? \"Send Email\"\n : isSmsButton\n ? \"Send SMS\"\n : defaultTitle;\n\n const tooltipTitle =\n isEmailButton && isEmailSent\n ? \"Email already sent\"\n : isSmsButton && isSmsSent\n ? \"SMS already sent\"\n : `Click to ${buttonText.toLowerCase()}`;\n\n return { isDisabled, buttonText, tooltipTitle };\n}\n\n/**\n * Compute unique anomaly types from alert data\n */\nexport function computeAnomalyOptions(data: Alert[]): OptionItem[] {\n const set = new Set<string>();\n (data || []).forEach((item) => {\n const name = (item as any).anomalyName;\n if (typeof name === \"string\" && name.trim().length > 0) {\n set.add(name.trim());\n }\n });\n const opts = Array.from(set).map((name) => ({ label: name, value: name }));\n return [{ label: \"All Types\", value: \"All\" }, ...opts];\n}\n\n/**\n * Compute unique spaces from alert data\n */\nexport function computeSpaceOptions(data: Alert[]): OptionItem[] {\n const set = new Set<string>();\n (data || []).forEach((item) => {\n const name = (item as any).spaceName;\n if (typeof name === \"string\" && name.trim().length > 0) {\n set.add(name.trim());\n }\n });\n const opts = Array.from(set).map((name) => ({ label: name, value: name }));\n return [{ label: \"All\", value: \"All\" }, ...opts];\n}\n\n/**\n * Get the button loading key for tracking loading state\n */\nexport function getButtonLoadingKey(recordId: number | string, isEmail: boolean): string {\n return `${recordId}-${isEmail ? \"email\" : \"sms\"}`;\n}\n\n/**\n * Check if a button is an email or SMS button\n */\nexport function isNotificationButton(thirdPartyId: number): boolean {\n return thirdPartyId === THIRD_PARTY_EMAIL_ID || thirdPartyId === THIRD_PARTY_SMS_ID;\n}\n","import { Select } from \"antd\";\n\nexport interface OptionItem {\n label: string;\n value: string;\n}\n\ninterface FilterSelectProps {\n value: string;\n onChange: (value: string) => void;\n options: OptionItem[];\n className?: string;\n dropdownWidth?: number; //dropdowns showing squeeezed to the left when the text is too long\n}\n\nexport default function FilterSelect({ value, onChange, options, className, dropdownWidth }: FilterSelectProps) {\n return (\n <Select\n className={className}\n options={options}\n value={value}\n onChange={onChange}\n dropdownMatchSelectWidth={dropdownWidth ?? 260}\n />\n );\n}\n\n\n","import FilterSelect from \"./FilterSelect\";\nimport type { OptionItem } from \"./FilterSelect\";\n\nconst defaultOptions: OptionItem[] = [\n { label: \"All levels\", value: \"All\" },\n { label: \"Critical\", value: \"Critical\" },\n { label: \"High\", value: \"High\" },\n { label: \"Medium\", value: \"Medium\" },\n { label: \"Low\", value: \"Low\" },\n];\n\ninterface PrioritySelectProps {\n value: string;\n onChange: (value: string) => void;\n options?: OptionItem[];\n}\n\nexport default function PrioritySelect({ value, onChange, options }: PrioritySelectProps) {\n return <FilterSelect className=\"w-[140px]\" value={value} onChange={onChange} options={options || defaultOptions} />;\n}\n\n\n","import FilterSelect from \"./FilterSelect\";\nimport type { OptionItem } from \"./FilterSelect\";\n\nconst defaultOptions: OptionItem[] = [\n { label: \"All Types\", value: \"All\" },\n { label: \"Weapon Detection\", value: \"Weapon\" },\n { label: \"Unauthorized Access\", value: \"Unauthorized\" },\n { label: \"Aggressive Behavior\", value: \"Aggressive\" },\n];\n\ninterface AnomalyTypeSelectProps {\n value: string;\n onChange: (value: string) => void;\n options?: OptionItem[];\n}\n\nexport default function AnomalyTypeSelect({ value, onChange, options }: AnomalyTypeSelectProps) {\n return <FilterSelect className=\"w-[220px]\" dropdownWidth={280} value={value} onChange={onChange} options={options || defaultOptions} />;\n}\n\n\n","import FilterSelect from \"./FilterSelect\";\nimport type { OptionItem } from \"./FilterSelect\";\n\ninterface SpaceSelectProps {\n value: string;\n onChange: (value: string) => void;\n options?: OptionItem[];\n}\n\nexport default function SpaceSelect({ value, onChange, options }: SpaceSelectProps) {\n return <FilterSelect className=\"w-[100px]\" value={value} onChange={onChange} options={options || []} />;\n}\n\n\n","import FilterSelect from \"./FilterSelect\";\nimport type { OptionItem } from \"./FilterSelect\";\n\nconst options: OptionItem[] = [\n { label: \"All\", value: \"All\" },\n { label: \"SOS\", value: \"SOS\" },\n { label: \"911\", value: \"911\" },\n { label: \"Aegix\", value: \"Aegix\" },\n { label: \"Eli\", value: \"Eli\" },\n { label: \"Skydio\", value: \"Skydio\" },\n];\n\ninterface ActionTakenSelectProps {\n value: string;\n onChange: (value: string) => void;\n options?: OptionItem[];\n}\n\nexport default function ActionTakenSelect({ value, onChange, options: override }: ActionTakenSelectProps) {\n return <FilterSelect className=\"w-[130px]\" value={value} onChange={onChange} options={override || options} />;\n}\n\n\n","import { Table } from \"antd\";\nimport type { ColumnsType, TableProps } from \"antd/es/table\";\nimport type { ReactNode } from \"react\";\n\nexport interface DataTableProps<T extends object> {\n columns: ColumnsType<T>;\n data: T[];\n loading?: boolean;\n pageSize?: number;\n rowKey?: string | ((record: T) => string);\n toolbar?: ReactNode;\n tableProps?: Partial<TableProps<T>>;\n}\n\nexport default function DataTable<T extends object>({\n columns,\n data,\n loading = false,\n pageSize = 10,\n rowKey = \"id\",\n toolbar,\n tableProps,\n}: DataTableProps<T>) {\n return (\n <div>\n {toolbar}\n <Table<T>\n rowKey={rowKey as any}\n dataSource={data}\n columns={columns}\n loading={loading}\n pagination={{\n pageSize,\n showSizeChanger: true,\n showTotal: (total) => `Total: ${total}`,\n }}\n bordered\n {...(tableProps as any)}\n />\n </div>\n );\n}\n\n\n","import { useEffect, useMemo, useState } from \"react\";\nimport { Input, Tag, Space, Progress, Button, Tooltip, Row, Col } from \"antd\";\nimport type { ColumnsType } from \"antd/es/table\";\nimport type { ReactNode } from \"react\";\nimport type { Alert } from \"../../types/alerts.types\";\nimport { getPriorityHexColor, parseHmsToSeconds, parseThirdPartyIds } from \"../../utils/alerts\";\nimport type { OptionItem } from \"./Filters/FilterSelect\";\nimport { MailOutlined, MessageOutlined } from \"@ant-design/icons\";\nimport { useApi } from \"../../providers/ApiProvider\";\nimport {\n PRIORITY_ROW_BG_CLASS,\n PRIORITY_BORDER_TEXT_CLASS,\n THIRD_PARTY_EMAIL_ID,\n THIRD_PARTY_SMS_ID,\n getNotificationButtonState,\n computeAnomalyOptions,\n computeSpaceOptions,\n getButtonLoadingKey,\n isNotificationButton,\n} from \"./alertsTable.helpers\";\n\ninterface AlertsTableProps {\n data: Alert[];\n loading?: boolean;\n pageSize?: number;\n columns?: ColumnsType<Alert>;\n severityOptions?: OptionItem[];\n anomalyOptions?: OptionItem[];\n spaceOptions?: OptionItem[];\n renderActions?: (record: Alert) => ReactNode;\n onAlertIdClick?: (record: Alert, opts?: { tab?: \"details\" | \"track\" }) => void;\n onRefetch?: () => void;\n excludeCompleted?: boolean;\n}\n\nimport PrioritySelect from \"./Filters/PrioritySelect\";\nimport AnomalyTypeSelect from \"./Filters/AnomalyTypeSelect\";\nimport SpaceSelect from \"./Filters/SpaceSelect\";\nimport ActionTakenSelect from \"./Filters/ActionTakenSelect\";\nimport DataTable from \"../DataTable/DataTable\";\nimport { toast } from \"react-toastify\";\n\nfunction AlertsTable({ data, loading = false, pageSize = 10, columns: externalColumns, severityOptions, spaceOptions, renderActions, onAlertIdClick, onRefetch, excludeCompleted = true }: AlertsTableProps) {\n const [severity, setSeverity] = useState<string>(\"All\");\n const [anomalyType, setAnomalyType] = useState<string>(\"All\");\n const [space, setSpace] = useState<string>(\"All\");\n const [actionTaken, setActionTaken] = useState<string>(\"All\");\n const [search, setSearch] = useState<string>(\"\");\n const [actionOptions, setActionOptions] = useState<OptionItem[]>([{ label: \"All\", value: \"All\" }]);\n const [loadingButtons, setLoadingButtons] = useState<Set<string>>(new Set());\n const { rules, alerts } = useApi();\n\n // map thirdPartyId -> icon\n const thirdPartyAssetMap: Record<\n number,\n { title: string; kind: \"img\" | \"icon\"; src?: string; icon?: ReactNode; alt?: string }\n > = {\n 6: { title: \"Email\", kind: \"icon\", icon: <MailOutlined /> },\n 7: { title: \"SMS\", kind: \"icon\", icon: <MessageOutlined /> },\n };\n\n\n\n const computedAnomalyOptions = useMemo(() => computeAnomalyOptions(data), [data]);\n\n const computedSpaceOptions = useMemo(() => computeSpaceOptions(data), [data]);\n\n // Fetch third parties for Action Taken dropdown from lookups\n useEffect(() => {\n let mounted = true;\n (async () => {\n try {\n const lookups = await rules.getLookups();\n const tp = Array.isArray(lookups.thirdParties) ? lookups.thirdParties : [];\n const opts: OptionItem[] = tp.map((t) => ({\n label: t.thirdPartyName,\n value: String(t.thirdPartyId),\n }));\n if (mounted) {\n setActionOptions([{ label: \"All\", value: \"All\" }, ...opts]);\n }\n } catch(e) {\n console.error(\"Error loading third party options\", e);\n }\n })();\n return () => {\n mounted = false;\n };\n }, [rules]);\n\n const hasAnyThirdPartyIds = useMemo(\n () => (data || []).some((d) => parseThirdPartyIds(d).length > 0),\n [data]\n );\n\n const filteredData = useMemo(() => {\n return (data || []).filter((item) => {\n const matchesSeverity = severity === \"All\" || item.priority === severity;\n const textSearch = `${item.id} ${item.description} ${item.statusType}`.toLowerCase();\n const matchesSearch = !search || textSearch.includes(search.toLowerCase());\n const matchesAnomaly =\n anomalyType === \"All\" ||\n ((item as any).anomalyName || \"\").toLowerCase() === anomalyType.toLowerCase();\n const matchesSpace =\n space === \"All\" ||\n (((item as any).spaceName || \"\").toLowerCase() === space.toLowerCase());\n const matchesAction =\n !hasAnyThirdPartyIds ||\n actionTaken === \"All\" ||\n parseThirdPartyIds(item).includes(Number(actionTaken));\n const matchesCompleted = !excludeCompleted || String(item.statusType || \"\").toLowerCase() !== \"completed\";\n return (\n matchesSeverity &&\n matchesSearch &&\n matchesAnomaly &&\n matchesSpace &&\n matchesAction &&\n matchesCompleted\n );\n });\n }, [data, severity, search, anomalyType, space, actionTaken, hasAnyThirdPartyIds, excludeCompleted]);\n\n const anomalyOptionsToUse = computedAnomalyOptions;\n const spaceOptionsToUse = spaceOptions && spaceOptions.length ? spaceOptions : computedSpaceOptions;\n\n const defaultColumns: ColumnsType<Alert> = [\n {\n title: \"Severity\",\n dataIndex: \"priority\",\n key: \"priority\",\n width: 120,\n render: (value: Alert[\"priority\"]) => (\n <Tag className=\"px-[10px] py-[2px]\" style={{ border: `2px solid ${PRIORITY_BORDER_TEXT_CLASS[value]}`, backgroundColor: PRIORITY_ROW_BG_CLASS[value] }}>\n {value}\n </Tag>\n ),\n },\n {\n title: \"Tracker\",\n key: \"tracker\",\n width: 140,\n render: (_: any, record) => {\n return (\n <a\n onClick={(e) => {\n e.preventDefault();\n onAlertIdClick?.(record, { tab: \"track\" });\n }}\n className=\"text-blue-600 hover:underline\"\n >\n Tracker\n </a>\n );\n },\n },\n {\n title: \"Call to action/Human in the loop\",\n key: \"actions\",\n width: 320,\n render: (_: any, record) => {\n if (renderActions) return <>{renderActions(record)}</>;\n const ids = parseThirdPartyIds(record);\n // If no thirdPartyIds present render nothing\n if (!ids.length) return null;\n\n const handleSendNotification = async (isEmail: boolean, isSMS: boolean) => {\n const buttonKey = getButtonLoadingKey(record.id, isEmail);\n setLoadingButtons((prev) => new Set(prev).add(buttonKey));\n try {\n const response = await alerts.sendSMSorEmailNotifications?.(record.id, isEmail, isSMS);\n if (response?.responseStatus) {\n toast.success(response.data || (isEmail ? \"Email sent successfully\" : \"SMS sent successfully\"));\n onRefetch?.();\n } else {\n toast.error(response?.data || response?.errorMessage || \"Failed to send notification\");\n }\n } catch (error: any) {\n toast.error(error?.message || \"Failed to send notification\");\n } finally {\n setLoadingButtons((prev) => {\n const next = new Set(prev);\n next.delete(buttonKey);\n return next;\n });\n }\n };\n\n return (\n <Space size=\"middle\">\n {ids.map((id) => {\n const map = thirdPartyAssetMap[id];\n if (!map) return null;\n\n const isEmailButton = id === THIRD_PARTY_EMAIL_ID;\n const isSmsButton = id === THIRD_PARTY_SMS_ID;\n const { isDisabled, buttonText, tooltipTitle } = getNotificationButtonState(id, record, map.title);\n\n // Check if this button is currently loading\n const buttonKey = getButtonLoadingKey(record.id, isEmailButton);\n const isLoading = isNotificationButton(id) && loadingButtons.has(buttonKey);\n\n // onClick handler for email and sms buttons \n const handleClick = () => {\n handleSendNotification(isEmailButton, isSmsButton);\n };\n\n return (\n <Tooltip key={id} title={tooltipTitle}>\n <Button\n size=\"small\"\n disabled={isDisabled}\n loading={isLoading}\n onClick={isNotificationButton(id) ? handleClick : undefined}\n icon={\n !isLoading && (map.kind === \"img\" && map.src ? (\n <img src={map.src} alt={map.alt || map.title} />\n ) : (\n map.icon\n ))\n }\n className=\"flex flex-col items-center justify-center gap-1\"\n style={{ height: 'fit-content' }}\n >\n {buttonText}\n </Button>\n </Tooltip>\n );\n })}\n </Space>\n );\n },\n },\n {\n title: \"Alert Timestamp\",\n dataIndex: \"timestamp\",\n key: \"timestamp\",\n width: 220,\n render: (_ts: string, record: Alert) => {\n const elapsedStr = record?.timeElapsed;\n const remainingStr = record?.timeRemaining;\n const elapsedSec = elapsedStr ? parseHmsToSeconds(elapsedStr) : 0;\n const remainingSec = remainingStr ? parseHmsToSeconds(remainingStr) : 0;\n const percent = Math.round((elapsedSec / (elapsedSec + remainingSec)) * 100);\n return (\n <div>\n <div className=\"flex items-center gap-2\">\n <span className=\"w-[70px]\">Elapsed:</span>\n <span className=\"font-medium\">{elapsedStr ?? \"-\"}</span>\n </div>\n <Progress percent={percent} showInfo={false} size=\"small\" strokeColor={getPriorityHexColor(record.priority)} />\n <div className=\"flex items-center gap-2\">\n <span className=\"w-[70px]\">Remaining</span>\n <span className=\"font-medium\">{remainingStr ?? \"-\"}</span>\n </div>\n </div>\n );\n },\n },\n {\n title: \"Status\",\n dataIndex: \"statusType\",\n key: \"statusType\",\n width: 140,\n },\n {\n title: \"Description\",\n dataIndex: \"description\",\n key: \"description\",\n render: (text: string, record) => (\n <div>\n <a\n onClick={(e) => {\n e.preventDefault();\n onAlertIdClick?.(record);\n }}\n className=\"inline-block mb-1 text-blue-600\"\n >\n {(record as any).alertNumber}\n </a>\n <div className=\"text-black/65\">{text}</div>\n </div>\n ),\n },\n ];\n\n const columnsToUse = externalColumns && externalColumns.length ? externalColumns : defaultColumns;\n\n return (\n <div>\n <DataTable<Alert>\n rowKey=\"id\"\n data={filteredData}\n columns={columnsToUse}\n loading={loading}\n pageSize={pageSize}\n // tableProps={{\n // rowClassName: (record) => `${PRIORITY_ROW_BG_CLASS[(record as Alert).priority]}`,\n // }}\n toolbar={(\n <Row gutter={[12, 12]} className=\"mb-3\" align=\"middle\">\n <Col flex=\"none\">\n <div className=\"flex items-center gap-2\">\n <span>Severity</span>\n <PrioritySelect value={severity} onChange={setSeverity} options={severityOptions} />\n </div>\n </Col>\n <Col flex=\"none\">\n <div className=\"flex items-center gap-2\">\n <span>Anomaly type</span>\n <AnomalyTypeSelect value={anomalyType} onChange={setAnomalyType} options={anomalyOptionsToUse} />\n </div>\n </Col>\n <Col flex=\"none\">\n <div className=\"flex items-center gap-2\">\n <span>Space</span>\n <SpaceSelect value={space} onChange={setSpace} options={spaceOptionsToUse} />\n </div>\n </Col>\n <Col flex=\"none\">\n <div className=\"flex items-center gap-2\">\n <span>Action Taken</span>\n <ActionTakenSelect value={actionTaken} onChange={setActionTaken} options={actionOptions} />\n </div>\n </Col>\n <Col flex=\"auto\" />\n <Col flex=\"none\">\n <Input.Search\n allowClear\n placeholder=\"Search\"\n onSearch={setSearch}\n onChange={(e) => setSearch(e.target.value)}\n className=\"w-[260px] \"\n enterButton\n />\n </Col>\n </Row>\n )}\n />\n </div>\n );\n}\n\nexport default AlertsTable;\n","// src/subscribable.ts\nvar Subscribable = class {\n constructor() {\n this.listeners = /* @__PURE__ */ new Set();\n this.subscribe = this.subscribe.bind(this);\n }\n subscribe(listener) {\n this.listeners.add(listener);\n this.onSubscribe();\n return () => {\n this.listeners.delete(listener);\n this.onUnsubscribe();\n };\n }\n hasListeners() {\n return this.listeners.size > 0;\n }\n onSubscribe() {\n }\n onUnsubscribe() {\n }\n};\nexport {\n Subscribable\n};\n//# sourceMappingURL=subscribable.js.map","// src/timeoutManager.ts\nvar defaultTimeoutProvider = {\n // We need the wrapper function syntax below instead of direct references to\n // global setTimeout etc.\n //\n // BAD: `setTimeout: setTimeout`\n // GOOD: `setTimeout: (cb, delay) => setTimeout(cb, delay)`\n //\n // If we use direct references here, then anything that wants to spy on or\n // replace the global setTimeout (like tests) won't work since we'll already\n // have a hard reference to the original implementation at the time when this\n // file was imported.\n setTimeout: (callback, delay) => setTimeout(callback, delay),\n clearTimeout: (timeoutId) => clearTimeout(timeoutId),\n setInterval: (callback, delay) => setInterval(callback, delay),\n clearInterval: (intervalId) => clearInterval(intervalId)\n};\nvar TimeoutManager = class {\n // We cannot have TimeoutManager<T> as we must instantiate it with a concrete\n // type at app boot; and if we leave that type, then any new timer provider\n // would need to support ReturnType<typeof setTimeout>, which is infeasible.\n //\n // We settle for type safety for the TimeoutProvider type, and accept that\n // this class is unsafe internally to allow for extension.\n #provider = defaultTimeoutProvider;\n #providerCalled = false;\n setTimeoutProvider(provider) {\n if (process.env.NODE_ENV !== \"production\") {\n if (this.#providerCalled && provider !== this.#provider) {\n console.error(\n `[timeoutManager]: Switching provider after calls to previous provider might result in unexpected behavior.`,\n { previous: this.#provider, provider }\n );\n }\n }\n this.#provider = provider;\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = false;\n }\n }\n setTimeout(callback, delay) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = true;\n }\n return this.#provider.setTimeout(callback, delay);\n }\n clearTimeout(timeoutId) {\n this.#provider.clearTimeout(timeoutId);\n }\n setInterval(callback, delay) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = true;\n }\n return this.#provider.setInterval(callback, delay);\n }\n clearInterval(intervalId) {\n this.#provider.clearInterval(intervalId);\n }\n};\nvar timeoutManager = new TimeoutManager();\nfunction systemSetTimeoutZero(callback) {\n setTimeout(callback, 0);\n}\nexport {\n TimeoutManager,\n defaultTimeoutProvider,\n systemSetTimeoutZero,\n timeoutManager\n};\n//# sourceMappingURL=timeoutManager.js.map","// src/utils.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar isServer = typeof window === \"undefined\" || \"Deno\" in globalThis;\nfunction noop() {\n}\nfunction functionalUpdate(updater, input) {\n return typeof updater === \"function\" ? updater(input) : updater;\n}\nfunction isValidTimeout(value) {\n return typeof value === \"number\" && value >= 0 && value !== Infinity;\n}\nfunction timeUntilStale(updatedAt, staleTime) {\n return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0);\n}\nfunction resolveStaleTime(staleTime, query) {\n return typeof staleTime === \"function\" ? staleTime(query) : staleTime;\n}\nfunction resolveEnabled(enabled, query) {\n return typeof enabled === \"function\" ? enabled(query) : enabled;\n}\nfunction matchQuery(filters, query) {\n const {\n type = \"all\",\n exact,\n fetchStatus,\n predicate,\n queryKey,\n stale\n } = filters;\n if (queryKey) {\n if (exact) {\n if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n return false;\n }\n } else if (!partialMatchKey(query.queryKey, queryKey)) {\n return false;\n }\n }\n if (type !== \"all\") {\n const isActive = query.isActive();\n if (type === \"active\" && !isActive) {\n return false;\n }\n if (type === \"inactive\" && isActive) {\n return false;\n }\n }\n if (typeof stale === \"boolean\" && query.isStale() !== stale) {\n return false;\n }\n if (fetchStatus && fetchStatus !== query.state.fetchStatus) {\n return false;\n }\n if (predicate && !predicate(query)) {\n return false;\n }\n return true;\n}\nfunction matchMutation(filters, mutation) {\n const { exact, status, predicate, mutationKey } = filters;\n if (mutationKey) {\n if (!mutation.options.mutationKey) {\n return false;\n }\n if (exact) {\n if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) {\n return false;\n }\n } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n return false;\n }\n }\n if (status && mutation.state.status !== status) {\n return false;\n }\n if (predicate && !predicate(mutation)) {\n return false;\n }\n return true;\n}\nfunction hashQueryKeyByOptions(queryKey, options) {\n const hashFn = options?.queryKeyHashFn || hashKey;\n return hashFn(queryKey);\n}\nfunction hashKey(queryKey) {\n return JSON.stringify(\n queryKey,\n (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {\n result[key] = val[key];\n return result;\n }, {}) : val\n );\n}\nfunction partialMatchKey(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (a && b && typeof a === \"object\" && typeof b === \"object\") {\n return Object.keys(b).every((key) => partialMatchKey(a[key], b[key]));\n }\n return false;\n}\nvar hasOwn = Object.prototype.hasOwnProperty;\nfunction replaceEqualDeep(a, b) {\n if (a === b) {\n return a;\n }\n const array = isPlainArray(a) && isPlainArray(b);\n if (!array && !(isPlainObject(a) && isPlainObject(b))) return b;\n const aItems = array ? a : Object.keys(a);\n const aSize = aItems.length;\n const bItems = array ? b : Object.keys(b);\n const bSize = bItems.length;\n const copy = array ? new Array(bSize) : {};\n let equalItems = 0;\n for (let i = 0; i < bSize; i++) {\n const key = array ? i : bItems[i];\n const aItem = a[key];\n const bItem = b[key];\n if (aItem === bItem) {\n copy[key] = aItem;\n if (array ? i < aSize : hasOwn.call(a, key)) equalItems++;\n continue;\n }\n if (aItem === null || bItem === null || typeof aItem !== \"object\" || typeof bItem !== \"object\") {\n copy[key] = bItem;\n continue;\n }\n const v = replaceEqualDeep(aItem, bItem);\n copy[key] = v;\n if (v === aItem) equalItems++;\n }\n return aSize === bSize && equalItems === aSize ? a : copy;\n}\nfunction shallowEqualObjects(a, b) {\n if (!b || Object.keys(a).length !== Object.keys(b).length) {\n return false;\n }\n for (const key in a) {\n if (a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n}\nfunction isPlainArray(value) {\n return Array.isArray(value) && value.length === Object.keys(value).length;\n}\nfunction isPlainObject(o) {\n if (!hasObjectPrototype(o)) {\n return false;\n }\n const ctor = o.constructor;\n if (ctor === void 0) {\n return true;\n }\n const prot = ctor.prototype;\n if (!hasObjectPrototype(prot)) {\n return false;\n }\n if (!prot.hasOwnProperty(\"isPrototypeOf\")) {\n return false;\n }\n if (Object.getPrototypeOf(o) !== Object.prototype) {\n return false;\n }\n return true;\n}\nfunction hasObjectPrototype(o) {\n return Object.prototype.toString.call(o) === \"[object Object]\";\n}\nfunction sleep(timeout) {\n return new Promise((resolve) => {\n timeoutManager.setTimeout(resolve, timeout);\n });\n}\nfunction replaceData(prevData, data, options) {\n if (typeof options.structuralSharing === \"function\") {\n return options.structuralSharing(prevData, data);\n } else if (options.structuralSharing !== false) {\n if (process.env.NODE_ENV !== \"production\") {\n try {\n return replaceEqualDeep(prevData, data);\n } catch (error) {\n console.error(\n `Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${options.queryHash}]: ${error}`\n );\n throw error;\n }\n }\n return replaceEqualDeep(prevData, data);\n }\n return data;\n}\nfunction keepPreviousData(previousData) {\n return previousData;\n}\nfunction addToEnd(items, item, max = 0) {\n const newItems = [...items, item];\n return max && newItems.length > max ? newItems.slice(1) : newItems;\n}\nfunction addToStart(items, item, max = 0) {\n const newItems = [item, ...items];\n return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n}\nvar skipToken = Symbol();\nfunction ensureQueryFn(options, fetchOptions) {\n if (process.env.NODE_ENV !== \"production\") {\n if (options.queryFn === skipToken) {\n console.error(\n `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`\n );\n }\n }\n if (!options.queryFn && fetchOptions?.initialPromise) {\n return () => fetchOptions.initialPromise;\n }\n if (!options.queryFn || options.queryFn === skipToken) {\n return () => Promise.reject(new Error(`Missing queryFn: '${options.queryHash}'`));\n }\n return options.queryFn;\n}\nfunction shouldThrowError(throwOnError, params) {\n if (typeof throwOnError === \"function\") {\n return throwOnError(...params);\n }\n return !!throwOnError;\n}\nfunction addConsumeAwareSignal(object, getSignal, onCancelled) {\n let consumed = false;\n let signal;\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n signal ??= getSignal();\n if (consumed) {\n return signal;\n }\n consumed = true;\n if (signal.aborted) {\n onCancelled();\n } else {\n signal.addEventListener(\"abort\", onCancelled, { once: true });\n }\n return signal;\n }\n });\n return object;\n}\nexport {\n addConsumeAwareSignal,\n addToEnd,\n addToStart,\n ensureQueryFn,\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n isPlainArray,\n isPlainObject,\n isServer,\n isValidTimeout,\n keepPreviousData,\n matchMutation,\n matchQuery,\n noop,\n partialMatchKey,\n replaceData,\n replaceEqualDeep,\n resolveEnabled,\n resolveStaleTime,\n shallowEqualObjects,\n shouldThrowError,\n skipToken,\n sleep,\n timeUntilStale\n};\n//# sourceMappingURL=utils.js.map","// src/focusManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nimport { isServer } from \"./utils.js\";\nvar FocusManager = class extends Subscribable {\n #focused;\n #cleanup;\n #setup;\n constructor() {\n super();\n this.#setup = (onFocus) => {\n if (!isServer && window.addEventListener) {\n const listener = () => onFocus();\n window.addEventListener(\"visibilitychange\", listener, false);\n return () => {\n window.removeEventListener(\"visibilitychange\", listener);\n };\n }\n return;\n };\n }\n onSubscribe() {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.();\n this.#cleanup = void 0;\n }\n }\n setEventListener(setup) {\n this.#setup = setup;\n this.#cleanup?.();\n this.#cleanup = setup((focused) => {\n if (typeof focused === \"boolean\") {\n this.setFocused(focused);\n } else {\n this.onFocus();\n }\n });\n }\n setFocused(focused) {\n const changed = this.#focused !== focused;\n if (changed) {\n this.#focused = focused;\n this.onFocus();\n }\n }\n onFocus() {\n const isFocused = this.isFocused();\n this.listeners.forEach((listener) => {\n listener(isFocused);\n });\n }\n isFocused() {\n if (typeof this.#focused === \"boolean\") {\n return this.#focused;\n }\n return globalThis.document?.visibilityState !== \"hidden\";\n }\n};\nvar focusManager = new FocusManager();\nexport {\n FocusManager,\n focusManager\n};\n//# sourceMappingURL=focusManager.js.map","// src/thenable.ts\nimport { noop } from \"./utils.js\";\nfunction pendingThenable() {\n let resolve;\n let reject;\n const thenable = new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n thenable.status = \"pending\";\n thenable.catch(() => {\n });\n function finalize(data) {\n Object.assign(thenable, data);\n delete thenable.resolve;\n delete thenable.reject;\n }\n thenable.resolve = (value) => {\n finalize({\n status: \"fulfilled\",\n value\n });\n resolve(value);\n };\n thenable.reject = (reason) => {\n finalize({\n status: \"rejected\",\n reason\n });\n reject(reason);\n };\n return thenable;\n}\nfunction tryResolveSync(promise) {\n let data;\n promise.then((result) => {\n data = result;\n return result;\n }, noop)?.catch(noop);\n if (data !== void 0) {\n return { data };\n }\n return void 0;\n}\nexport {\n pendingThenable,\n tryResolveSync\n};\n//# sourceMappingURL=thenable.js.map","// src/notifyManager.ts\nimport { systemSetTimeoutZero } from \"./timeoutManager.js\";\nvar defaultScheduler = systemSetTimeoutZero;\nfunction createNotifyManager() {\n let queue = [];\n let transactions = 0;\n let notifyFn = (callback) => {\n callback();\n };\n let batchNotifyFn = (callback) => {\n callback();\n };\n let scheduleFn = defaultScheduler;\n const schedule = (callback) => {\n if (transactions) {\n queue.push(callback);\n } else {\n scheduleFn(() => {\n notifyFn(callback);\n });\n }\n };\n const flush = () => {\n const originalQueue = queue;\n queue = [];\n if (originalQueue.length) {\n scheduleFn(() => {\n batchNotifyFn(() => {\n originalQueue.forEach((callback) => {\n notifyFn(callback);\n });\n });\n });\n }\n };\n return {\n batch: (callback) => {\n let result;\n transactions++;\n try {\n result = callback();\n } finally {\n transactions--;\n if (!transactions) {\n flush();\n }\n }\n return result;\n },\n /**\n * All calls to the wrapped function will be batched.\n */\n batchCalls: (callback) => {\n return (...args) => {\n schedule(() => {\n callback(...args);\n });\n };\n },\n schedule,\n /**\n * Use this method to set a custom notify function.\n * This can be used to for example wrap notifications with `React.act` while running tests.\n */\n setNotifyFunction: (fn) => {\n notifyFn = fn;\n },\n /**\n * Use this method to set a custom function to batch notifications together into a single tick.\n * By default React Query will use the batch function provided by ReactDOM or React Native.\n */\n setBatchNotifyFunction: (fn) => {\n batchNotifyFn = fn;\n },\n setScheduler: (fn) => {\n scheduleFn = fn;\n }\n };\n}\nvar notifyManager = createNotifyManager();\nexport {\n createNotifyManager,\n defaultScheduler,\n notifyManager\n};\n//# sourceMappingURL=notifyManager.js.map","// src/onlineManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nimport { isServer } from \"./utils.js\";\nvar OnlineManager = class extends Subscribable {\n #online = true;\n #cleanup;\n #setup;\n constructor() {\n super();\n this.#setup = (onOnline) => {\n if (!isServer && window.addEventListener) {\n const onlineListener = () => onOnline(true);\n const offlineListener = () => onOnline(false);\n window.addEventListener(\"online\", onlineListener, false);\n window.addEventListener(\"offline\", offlineListener, false);\n return () => {\n window.removeEventListener(\"online\", onlineListener);\n window.removeEventListener(\"offline\", offlineListener);\n };\n }\n return;\n };\n }\n onSubscribe() {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.();\n this.#cleanup = void 0;\n }\n }\n setEventListener(setup) {\n this.#setup = setup;\n this.#cleanup?.();\n this.#cleanup = setup(this.setOnline.bind(this));\n }\n setOnline(online) {\n const changed = this.#online !== online;\n if (changed) {\n this.#online = online;\n this.listeners.forEach((listener) => {\n listener(online);\n });\n }\n }\n isOnline() {\n return this.#online;\n }\n};\nvar onlineManager = new OnlineManager();\nexport {\n OnlineManager,\n onlineManager\n};\n//# sourceMappingURL=onlineManager.js.map","// src/retryer.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport { isServer, sleep } from \"./utils.js\";\nfunction defaultRetryDelay(failureCount) {\n return Math.min(1e3 * 2 ** failureCount, 3e4);\n}\nfunction canFetch(networkMode) {\n return (networkMode ?? \"online\") === \"online\" ? onlineManager.isOnline() : true;\n}\nvar CancelledError = class extends Error {\n constructor(options) {\n super(\"CancelledError\");\n this.revert = options?.revert;\n this.silent = options?.silent;\n }\n};\nfunction isCancelledError(value) {\n return value instanceof CancelledError;\n}\nfunction createRetryer(config) {\n let isRetryCancelled = false;\n let failureCount = 0;\n let continueFn;\n const thenable = pendingThenable();\n const isResolved = () => thenable.status !== \"pending\";\n const cancel = (cancelOptions) => {\n if (!isResolved()) {\n const error = new CancelledError(cancelOptions);\n reject(error);\n config.onCancel?.(error);\n }\n };\n const cancelRetry = () => {\n isRetryCancelled = true;\n };\n const continueRetry = () => {\n isRetryCancelled = false;\n };\n const canContinue = () => focusManager.isFocused() && (config.networkMode === \"always\" || onlineManager.isOnline()) && config.canRun();\n const canStart = () => canFetch(config.networkMode) && config.canRun();\n const resolve = (value) => {\n if (!isResolved()) {\n continueFn?.();\n thenable.resolve(value);\n }\n };\n const reject = (value) => {\n if (!isResolved()) {\n continueFn?.();\n thenable.reject(value);\n }\n };\n const pause = () => {\n return new Promise((continueResolve) => {\n continueFn = (value) => {\n if (isResolved() || canContinue()) {\n continueResolve(value);\n }\n };\n config.onPause?.();\n }).then(() => {\n continueFn = void 0;\n if (!isResolved()) {\n config.onContinue?.();\n }\n });\n };\n const run = () => {\n if (isResolved()) {\n return;\n }\n let promiseOrValue;\n const initialPromise = failureCount === 0 ? config.initialPromise : void 0;\n try {\n promiseOrValue = initialPromise ?? config.fn();\n } catch (error) {\n promiseOrValue = Promise.reject(error);\n }\n Promise.resolve(promiseOrValue).then(resolve).catch((error) => {\n if (isResolved()) {\n return;\n }\n const retry = config.retry ?? (isServer ? 0 : 3);\n const retryDelay = config.retryDelay ?? defaultRetryDelay;\n const delay = typeof retryDelay === \"function\" ? retryDelay(failureCount, error) : retryDelay;\n const shouldRetry = retry === true || typeof retry === \"number\" && failureCount < retry || typeof retry === \"function\" && retry(failureCount, error);\n if (isRetryCancelled || !shouldRetry) {\n reject(error);\n return;\n }\n failureCount++;\n config.onFail?.(failureCount, error);\n sleep(delay).then(() => {\n return canContinue() ? void 0 : pause();\n }).then(() => {\n if (isRetryCancelled) {\n reject(error);\n } else {\n run();\n }\n });\n });\n };\n return {\n promise: thenable,\n status: () => thenable.status,\n cancel,\n continue: () => {\n continueFn?.();\n return thenable;\n },\n cancelRetry,\n continueRetry,\n canStart,\n start: () => {\n if (canStart()) {\n run();\n } else {\n pause().then(run);\n }\n return thenable;\n }\n };\n}\nexport {\n CancelledError,\n canFetch,\n createRetryer,\n isCancelledError\n};\n//# sourceMappingURL=retryer.js.map","// src/removable.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nimport { isServer, isValidTimeout } from \"./utils.js\";\nvar Removable = class {\n #gcTimeout;\n destroy() {\n this.clearGcTimeout();\n }\n scheduleGc() {\n this.clearGcTimeout();\n if (isValidTimeout(this.gcTime)) {\n this.#gcTimeout = timeoutManager.setTimeout(() => {\n this.optionalRemove();\n }, this.gcTime);\n }\n }\n updateGcTime(newGcTime) {\n this.gcTime = Math.max(\n this.gcTime || 0,\n newGcTime ?? (isServer ? Infinity : 5 * 60 * 1e3)\n );\n }\n clearGcTimeout() {\n if (this.#gcTimeout) {\n timeoutManager.clearTimeout(this.#gcTimeout);\n this.#gcTimeout = void 0;\n }\n }\n};\nexport {\n Removable\n};\n//# sourceMappingURL=removable.js.map","// src/query.ts\nimport {\n ensureQueryFn,\n noop,\n replaceData,\n resolveEnabled,\n resolveStaleTime,\n skipToken,\n timeUntilStale\n} from \"./utils.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { CancelledError, canFetch, createRetryer } from \"./retryer.js\";\nimport { Removable } from \"./removable.js\";\nvar Query = class extends Removable {\n #initialState;\n #revertState;\n #cache;\n #client;\n #retryer;\n #defaultOptions;\n #abortSignalConsumed;\n constructor(config) {\n super();\n this.#abortSignalConsumed = false;\n this.#defaultOptions = config.defaultOptions;\n this.setOptions(config.options);\n this.observers = [];\n this.#client = config.client;\n this.#cache = this.#client.getQueryCache();\n this.queryKey = config.queryKey;\n this.queryHash = config.queryHash;\n this.#initialState = getDefaultState(this.options);\n this.state = config.state ?? this.#initialState;\n this.scheduleGc();\n }\n get meta() {\n return this.options.meta;\n }\n get promise() {\n return this.#retryer?.promise;\n }\n setOptions(options) {\n this.options = { ...this.#defaultOptions, ...options };\n this.updateGcTime(this.options.gcTime);\n if (this.state && this.state.data === void 0) {\n const defaultState = getDefaultState(this.options);\n if (defaultState.data !== void 0) {\n this.setState(\n successState(defaultState.data, defaultState.dataUpdatedAt)\n );\n this.#initialState = defaultState;\n }\n }\n }\n optionalRemove() {\n if (!this.observers.length && this.state.fetchStatus === \"idle\") {\n this.#cache.remove(this);\n }\n }\n setData(newData, options) {\n const data = replaceData(this.state.data, newData, this.options);\n this.#dispatch({\n data,\n type: \"success\",\n dataUpdatedAt: options?.updatedAt,\n manual: options?.manual\n });\n return data;\n }\n setState(state, setStateOptions) {\n this.#dispatch({ type: \"setState\", state, setStateOptions });\n }\n cancel(options) {\n const promise = this.#retryer?.promise;\n this.#retryer?.cancel(options);\n return promise ? promise.then(noop).catch(noop) : Promise.resolve();\n }\n destroy() {\n super.destroy();\n this.cancel({ silent: true });\n }\n reset() {\n this.destroy();\n this.setState(this.#initialState);\n }\n isActive() {\n return this.observers.some(\n (observer) => resolveEnabled(observer.options.enabled, this) !== false\n );\n }\n isDisabled() {\n if (this.getObserversCount() > 0) {\n return !this.isActive();\n }\n return this.options.queryFn === skipToken || this.state.dataUpdateCount + this.state.errorUpdateCount === 0;\n }\n isStatic() {\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => resolveStaleTime(observer.options.staleTime, this) === \"static\"\n );\n }\n return false;\n }\n isStale() {\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => observer.getCurrentResult().isStale\n );\n }\n return this.state.data === void 0 || this.state.isInvalidated;\n }\n isStaleByTime(staleTime = 0) {\n if (this.state.data === void 0) {\n return true;\n }\n if (staleTime === \"static\") {\n return false;\n }\n if (this.state.isInvalidated) {\n return true;\n }\n return !timeUntilStale(this.state.dataUpdatedAt, staleTime);\n }\n onFocus() {\n const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus());\n observer?.refetch({ cancelRefetch: false });\n this.#retryer?.continue();\n }\n onOnline() {\n const observer = this.observers.find((x) => x.shouldFetchOnReconnect());\n observer?.refetch({ cancelRefetch: false });\n this.#retryer?.continue();\n }\n addObserver(observer) {\n if (!this.observers.includes(observer)) {\n this.observers.push(observer);\n this.clearGcTimeout();\n this.#cache.notify({ type: \"observerAdded\", query: this, observer });\n }\n }\n removeObserver(observer) {\n if (this.observers.includes(observer)) {\n this.observers = this.observers.filter((x) => x !== observer);\n if (!this.observers.length) {\n if (this.#retryer) {\n if (this.#abortSignalConsumed) {\n this.#retryer.cancel({ revert: true });\n } else {\n this.#retryer.cancelRetry();\n }\n }\n this.scheduleGc();\n }\n this.#cache.notify({ type: \"observerRemoved\", query: this, observer });\n }\n }\n getObserversCount() {\n return this.observers.length;\n }\n invalidate() {\n if (!this.state.isInvalidated) {\n this.#dispatch({ type: \"invalidate\" });\n }\n }\n async fetch(options, fetchOptions) {\n if (this.state.fetchStatus !== \"idle\" && // If the promise in the retyer is already rejected, we have to definitely\n // re-start the fetch; there is a chance that the query is still in a\n // pending state when that happens\n this.#retryer?.status() !== \"rejected\") {\n if (this.state.data !== void 0 && fetchOptions?.cancelRefetch) {\n this.cancel({ silent: true });\n } else if (this.#retryer) {\n this.#retryer.continueRetry();\n return this.#retryer.promise;\n }\n }\n if (options) {\n this.setOptions(options);\n }\n if (!this.options.queryFn) {\n const observer = this.observers.find((x) => x.options.queryFn);\n if (observer) {\n this.setOptions(observer.options);\n }\n }\n if (process.env.NODE_ENV !== \"production\") {\n if (!Array.isArray(this.options.queryKey)) {\n console.error(\n `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`\n );\n }\n }\n const abortController = new AbortController();\n const addSignalProperty = (object) => {\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n this.#abortSignalConsumed = true;\n return abortController.signal;\n }\n });\n };\n const fetchFn = () => {\n const queryFn = ensureQueryFn(this.options, fetchOptions);\n const createQueryFnContext = () => {\n const queryFnContext2 = {\n client: this.#client,\n queryKey: this.queryKey,\n meta: this.meta\n };\n addSignalProperty(queryFnContext2);\n return queryFnContext2;\n };\n const queryFnContext = createQueryFnContext();\n this.#abortSignalConsumed = false;\n if (this.options.persister) {\n return this.options.persister(\n queryFn,\n queryFnContext,\n this\n );\n }\n return queryFn(queryFnContext);\n };\n const createFetchContext = () => {\n const context2 = {\n fetchOptions,\n options: this.options,\n queryKey: this.queryKey,\n client: this.#client,\n state: this.state,\n fetchFn\n };\n addSignalProperty(context2);\n return context2;\n };\n const context = createFetchContext();\n this.options.behavior?.onFetch(context, this);\n this.#revertState = this.state;\n if (this.state.fetchStatus === \"idle\" || this.state.fetchMeta !== context.fetchOptions?.meta) {\n this.#dispatch({ type: \"fetch\", meta: context.fetchOptions?.meta });\n }\n this.#retryer = createRetryer({\n initialPromise: fetchOptions?.initialPromise,\n fn: context.fetchFn,\n onCancel: (error) => {\n if (error instanceof CancelledError && error.revert) {\n this.setState({\n ...this.#revertState,\n fetchStatus: \"idle\"\n });\n }\n abortController.abort();\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: \"failed\", failureCount, error });\n },\n onPause: () => {\n this.#dispatch({ type: \"pause\" });\n },\n onContinue: () => {\n this.#dispatch({ type: \"continue\" });\n },\n retry: context.options.retry,\n retryDelay: context.options.retryDelay,\n networkMode: context.options.networkMode,\n canRun: () => true\n });\n try {\n const data = await this.#retryer.start();\n if (data === void 0) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\n `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`\n );\n }\n throw new Error(`${this.queryHash} data is undefined`);\n }\n this.setData(data);\n this.#cache.config.onSuccess?.(data, this);\n this.#cache.config.onSettled?.(\n data,\n this.state.error,\n this\n );\n return data;\n } catch (error) {\n if (error instanceof CancelledError) {\n if (error.silent) {\n return this.#retryer.promise;\n } else if (error.revert) {\n if (this.state.data === void 0) {\n throw error;\n }\n return this.state.data;\n }\n }\n this.#dispatch({\n type: \"error\",\n error\n });\n this.#cache.config.onError?.(\n error,\n this\n );\n this.#cache.config.onSettled?.(\n this.state.data,\n error,\n this\n );\n throw error;\n } finally {\n this.scheduleGc();\n }\n }\n #dispatch(action) {\n const reducer = (state) => {\n switch (action.type) {\n case \"failed\":\n return {\n ...state,\n fetchFailureCount: action.failureCount,\n fetchFailureReason: action.error\n };\n case \"pause\":\n return {\n ...state,\n fetchStatus: \"paused\"\n };\n case \"continue\":\n return {\n ...state,\n fetchStatus: \"fetching\"\n };\n case \"fetch\":\n return {\n ...state,\n ...fetchState(state.data, this.options),\n fetchMeta: action.meta ?? null\n };\n case \"success\":\n const newState = {\n ...state,\n ...successState(action.data, action.dataUpdatedAt),\n dataUpdateCount: state.dataUpdateCount + 1,\n ...!action.manual && {\n fetchStatus: \"idle\",\n fetchFailureCount: 0,\n fetchFailureReason: null\n }\n };\n this.#revertState = action.manual ? newState : void 0;\n return newState;\n case \"error\":\n const error = action.error;\n return {\n ...state,\n error,\n errorUpdateCount: state.errorUpdateCount + 1,\n errorUpdatedAt: Date.now(),\n fetchFailureCount: state.fetchFailureCount + 1,\n fetchFailureReason: error,\n fetchStatus: \"idle\",\n status: \"error\",\n // flag existing data as invalidated if we get a background error\n // note that \"no data\" always means stale so we can set unconditionally here\n isInvalidated: true\n };\n case \"invalidate\":\n return {\n ...state,\n isInvalidated: true\n };\n case \"setState\":\n return {\n ...state,\n ...action.state\n };\n }\n };\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.observers.forEach((observer) => {\n observer.onQueryUpdate();\n });\n this.#cache.notify({ query: this, type: \"updated\", action });\n });\n }\n};\nfunction fetchState(data, options) {\n return {\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchStatus: canFetch(options.networkMode) ? \"fetching\" : \"paused\",\n ...data === void 0 && {\n error: null,\n status: \"pending\"\n }\n };\n}\nfunction successState(data, dataUpdatedAt) {\n return {\n data,\n dataUpdatedAt: dataUpdatedAt ?? Date.now(),\n error: null,\n isInvalidated: false,\n status: \"success\"\n };\n}\nfunction getDefaultState(options) {\n const data = typeof options.initialData === \"function\" ? options.initialData() : options.initialData;\n const hasData = data !== void 0;\n const initialDataUpdatedAt = hasData ? typeof options.initialDataUpdatedAt === \"function\" ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0;\n return {\n data,\n dataUpdateCount: 0,\n dataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: hasData ? \"success\" : \"pending\",\n fetchStatus: \"idle\"\n };\n}\nexport {\n Query,\n fetchState\n};\n//# sourceMappingURL=query.js.map","// src/queryObserver.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { fetchState } from \"./query.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport {\n isServer,\n isValidTimeout,\n noop,\n replaceData,\n resolveEnabled,\n resolveStaleTime,\n shallowEqualObjects,\n timeUntilStale\n} from \"./utils.js\";\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar QueryObserver = class extends Subscribable {\n constructor(client, options) {\n super();\n this.options = options;\n this.#client = client;\n this.#selectError = null;\n this.#currentThenable = pendingThenable();\n this.bindMethods();\n this.setOptions(options);\n }\n #client;\n #currentQuery = void 0;\n #currentQueryInitialState = void 0;\n #currentResult = void 0;\n #currentResultState;\n #currentResultOptions;\n #currentThenable;\n #selectError;\n #selectFn;\n #selectResult;\n // This property keeps track of the last query with defined data.\n // It will be used to pass the previous data and query to the placeholder function between renders.\n #lastQueryWithDefinedData;\n #staleTimeoutId;\n #refetchIntervalId;\n #currentRefetchInterval;\n #trackedProps = /* @__PURE__ */ new Set();\n bindMethods() {\n this.refetch = this.refetch.bind(this);\n }\n onSubscribe() {\n if (this.listeners.size === 1) {\n this.#currentQuery.addObserver(this);\n if (shouldFetchOnMount(this.#currentQuery, this.options)) {\n this.#executeFetch();\n } else {\n this.updateResult();\n }\n this.#updateTimers();\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.destroy();\n }\n }\n shouldFetchOnReconnect() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnReconnect\n );\n }\n shouldFetchOnWindowFocus() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnWindowFocus\n );\n }\n destroy() {\n this.listeners = /* @__PURE__ */ new Set();\n this.#clearStaleTimeout();\n this.#clearRefetchInterval();\n this.#currentQuery.removeObserver(this);\n }\n setOptions(options) {\n const prevOptions = this.options;\n const prevQuery = this.#currentQuery;\n this.options = this.#client.defaultQueryOptions(options);\n if (this.options.enabled !== void 0 && typeof this.options.enabled !== \"boolean\" && typeof this.options.enabled !== \"function\" && typeof resolveEnabled(this.options.enabled, this.#currentQuery) !== \"boolean\") {\n throw new Error(\n \"Expected enabled to be a boolean or a callback that returns a boolean\"\n );\n }\n this.#updateQuery();\n this.#currentQuery.setOptions(this.options);\n if (prevOptions._defaulted && !shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getQueryCache().notify({\n type: \"observerOptionsUpdated\",\n query: this.#currentQuery,\n observer: this\n });\n }\n const mounted = this.hasListeners();\n if (mounted && shouldFetchOptionally(\n this.#currentQuery,\n prevQuery,\n this.options,\n prevOptions\n )) {\n this.#executeFetch();\n }\n this.updateResult();\n if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || resolveStaleTime(this.options.staleTime, this.#currentQuery) !== resolveStaleTime(prevOptions.staleTime, this.#currentQuery))) {\n this.#updateStaleTimeout();\n }\n const nextRefetchInterval = this.#computeRefetchInterval();\n if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || nextRefetchInterval !== this.#currentRefetchInterval)) {\n this.#updateRefetchInterval(nextRefetchInterval);\n }\n }\n getOptimisticResult(options) {\n const query = this.#client.getQueryCache().build(this.#client, options);\n const result = this.createResult(query, options);\n if (shouldAssignObserverCurrentProperties(this, result)) {\n this.#currentResult = result;\n this.#currentResultOptions = this.options;\n this.#currentResultState = this.#currentQuery.state;\n }\n return result;\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n trackResult(result, onPropTracked) {\n return new Proxy(result, {\n get: (target, key) => {\n this.trackProp(key);\n onPropTracked?.(key);\n if (key === \"promise\") {\n this.trackProp(\"data\");\n if (!this.options.experimental_prefetchInRender && this.#currentThenable.status === \"pending\") {\n this.#currentThenable.reject(\n new Error(\n \"experimental_prefetchInRender feature flag is not enabled\"\n )\n );\n }\n }\n return Reflect.get(target, key);\n }\n });\n }\n trackProp(key) {\n this.#trackedProps.add(key);\n }\n getCurrentQuery() {\n return this.#currentQuery;\n }\n refetch({ ...options } = {}) {\n return this.fetch({\n ...options\n });\n }\n fetchOptimistic(options) {\n const defaultedOptions = this.#client.defaultQueryOptions(options);\n const query = this.#client.getQueryCache().build(this.#client, defaultedOptions);\n return query.fetch().then(() => this.createResult(query, defaultedOptions));\n }\n fetch(fetchOptions) {\n return this.#executeFetch({\n ...fetchOptions,\n cancelRefetch: fetchOptions.cancelRefetch ?? true\n }).then(() => {\n this.updateResult();\n return this.#currentResult;\n });\n }\n #executeFetch(fetchOptions) {\n this.#updateQuery();\n let promise = this.#currentQuery.fetch(\n this.options,\n fetchOptions\n );\n if (!fetchOptions?.throwOnError) {\n promise = promise.catch(noop);\n }\n return promise;\n }\n #updateStaleTimeout() {\n this.#clearStaleTimeout();\n const staleTime = resolveStaleTime(\n this.options.staleTime,\n this.#currentQuery\n );\n if (isServer || this.#currentResult.isStale || !isValidTimeout(staleTime)) {\n return;\n }\n const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime);\n const timeout = time + 1;\n this.#staleTimeoutId = timeoutManager.setTimeout(() => {\n if (!this.#currentResult.isStale) {\n this.updateResult();\n }\n }, timeout);\n }\n #computeRefetchInterval() {\n return (typeof this.options.refetchInterval === \"function\" ? this.options.refetchInterval(this.#currentQuery) : this.options.refetchInterval) ?? false;\n }\n #updateRefetchInterval(nextInterval) {\n this.#clearRefetchInterval();\n this.#currentRefetchInterval = nextInterval;\n if (isServer || resolveEnabled(this.options.enabled, this.#currentQuery) === false || !isValidTimeout(this.#currentRefetchInterval) || this.#currentRefetchInterval === 0) {\n return;\n }\n this.#refetchIntervalId = timeoutManager.setInterval(() => {\n if (this.options.refetchIntervalInBackground || focusManager.isFocused()) {\n this.#executeFetch();\n }\n }, this.#currentRefetchInterval);\n }\n #updateTimers() {\n this.#updateStaleTimeout();\n this.#updateRefetchInterval(this.#computeRefetchInterval());\n }\n #clearStaleTimeout() {\n if (this.#staleTimeoutId) {\n timeoutManager.clearTimeout(this.#staleTimeoutId);\n this.#staleTimeoutId = void 0;\n }\n }\n #clearRefetchInterval() {\n if (this.#refetchIntervalId) {\n timeoutManager.clearInterval(this.#refetchIntervalId);\n this.#refetchIntervalId = void 0;\n }\n }\n createResult(query, options) {\n const prevQuery = this.#currentQuery;\n const prevOptions = this.options;\n const prevResult = this.#currentResult;\n const prevResultState = this.#currentResultState;\n const prevResultOptions = this.#currentResultOptions;\n const queryChange = query !== prevQuery;\n const queryInitialState = queryChange ? query.state : this.#currentQueryInitialState;\n const { state } = query;\n let newState = { ...state };\n let isPlaceholderData = false;\n let data;\n if (options._optimisticResults) {\n const mounted = this.hasListeners();\n const fetchOnMount = !mounted && shouldFetchOnMount(query, options);\n const fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions);\n if (fetchOnMount || fetchOptionally) {\n newState = {\n ...newState,\n ...fetchState(state.data, query.options)\n };\n }\n if (options._optimisticResults === \"isRestoring\") {\n newState.fetchStatus = \"idle\";\n }\n }\n let { error, errorUpdatedAt, status } = newState;\n data = newState.data;\n let skipSelect = false;\n if (options.placeholderData !== void 0 && data === void 0 && status === \"pending\") {\n let placeholderData;\n if (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) {\n placeholderData = prevResult.data;\n skipSelect = true;\n } else {\n placeholderData = typeof options.placeholderData === \"function\" ? options.placeholderData(\n this.#lastQueryWithDefinedData?.state.data,\n this.#lastQueryWithDefinedData\n ) : options.placeholderData;\n }\n if (placeholderData !== void 0) {\n status = \"success\";\n data = replaceData(\n prevResult?.data,\n placeholderData,\n options\n );\n isPlaceholderData = true;\n }\n }\n if (options.select && data !== void 0 && !skipSelect) {\n if (prevResult && data === prevResultState?.data && options.select === this.#selectFn) {\n data = this.#selectResult;\n } else {\n try {\n this.#selectFn = options.select;\n data = options.select(data);\n data = replaceData(prevResult?.data, data, options);\n this.#selectResult = data;\n this.#selectError = null;\n } catch (selectError) {\n this.#selectError = selectError;\n }\n }\n }\n if (this.#selectError) {\n error = this.#selectError;\n data = this.#selectResult;\n errorUpdatedAt = Date.now();\n status = \"error\";\n }\n const isFetching = newState.fetchStatus === \"fetching\";\n const isPending = status === \"pending\";\n const isError = status === \"error\";\n const isLoading = isPending && isFetching;\n const hasData = data !== void 0;\n const result = {\n status,\n fetchStatus: newState.fetchStatus,\n isPending,\n isSuccess: status === \"success\",\n isError,\n isInitialLoading: isLoading,\n isLoading,\n data,\n dataUpdatedAt: newState.dataUpdatedAt,\n error,\n errorUpdatedAt,\n failureCount: newState.fetchFailureCount,\n failureReason: newState.fetchFailureReason,\n errorUpdateCount: newState.errorUpdateCount,\n isFetched: newState.dataUpdateCount > 0 || newState.errorUpdateCount > 0,\n isFetchedAfterMount: newState.dataUpdateCount > queryInitialState.dataUpdateCount || newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n isFetching,\n isRefetching: isFetching && !isPending,\n isLoadingError: isError && !hasData,\n isPaused: newState.fetchStatus === \"paused\",\n isPlaceholderData,\n isRefetchError: isError && hasData,\n isStale: isStale(query, options),\n refetch: this.refetch,\n promise: this.#currentThenable,\n isEnabled: resolveEnabled(options.enabled, query) !== false\n };\n const nextResult = result;\n if (this.options.experimental_prefetchInRender) {\n const finalizeThenableIfPossible = (thenable) => {\n if (nextResult.status === \"error\") {\n thenable.reject(nextResult.error);\n } else if (nextResult.data !== void 0) {\n thenable.resolve(nextResult.data);\n }\n };\n const recreateThenable = () => {\n const pending = this.#currentThenable = nextResult.promise = pendingThenable();\n finalizeThenableIfPossible(pending);\n };\n const prevThenable = this.#currentThenable;\n switch (prevThenable.status) {\n case \"pending\":\n if (query.queryHash === prevQuery.queryHash) {\n finalizeThenableIfPossible(prevThenable);\n }\n break;\n case \"fulfilled\":\n if (nextResult.status === \"error\" || nextResult.data !== prevThenable.value) {\n recreateThenable();\n }\n break;\n case \"rejected\":\n if (nextResult.status !== \"error\" || nextResult.error !== prevThenable.reason) {\n recreateThenable();\n }\n break;\n }\n }\n return nextResult;\n }\n updateResult() {\n const prevResult = this.#currentResult;\n const nextResult = this.createResult(this.#currentQuery, this.options);\n this.#currentResultState = this.#currentQuery.state;\n this.#currentResultOptions = this.options;\n if (this.#currentResultState.data !== void 0) {\n this.#lastQueryWithDefinedData = this.#currentQuery;\n }\n if (shallowEqualObjects(nextResult, prevResult)) {\n return;\n }\n this.#currentResult = nextResult;\n const shouldNotifyListeners = () => {\n if (!prevResult) {\n return true;\n }\n const { notifyOnChangeProps } = this.options;\n const notifyOnChangePropsValue = typeof notifyOnChangeProps === \"function\" ? notifyOnChangeProps() : notifyOnChangeProps;\n if (notifyOnChangePropsValue === \"all\" || !notifyOnChangePropsValue && !this.#trackedProps.size) {\n return true;\n }\n const includedProps = new Set(\n notifyOnChangePropsValue ?? this.#trackedProps\n );\n if (this.options.throwOnError) {\n includedProps.add(\"error\");\n }\n return Object.keys(this.#currentResult).some((key) => {\n const typedKey = key;\n const changed = this.#currentResult[typedKey] !== prevResult[typedKey];\n return changed && includedProps.has(typedKey);\n });\n };\n this.#notify({ listeners: shouldNotifyListeners() });\n }\n #updateQuery() {\n const query = this.#client.getQueryCache().build(this.#client, this.options);\n if (query === this.#currentQuery) {\n return;\n }\n const prevQuery = this.#currentQuery;\n this.#currentQuery = query;\n this.#currentQueryInitialState = query.state;\n if (this.hasListeners()) {\n prevQuery?.removeObserver(this);\n query.addObserver(this);\n }\n }\n onQueryUpdate() {\n this.updateResult();\n if (this.hasListeners()) {\n this.#updateTimers();\n }\n }\n #notify(notifyOptions) {\n notifyManager.batch(() => {\n if (notifyOptions.listeners) {\n this.listeners.forEach((listener) => {\n listener(this.#currentResult);\n });\n }\n this.#client.getQueryCache().notify({\n query: this.#currentQuery,\n type: \"observerResultsUpdated\"\n });\n });\n }\n};\nfunction shouldLoadOnMount(query, options) {\n return resolveEnabled(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === \"error\" && options.retryOnMount === false);\n}\nfunction shouldFetchOnMount(query, options) {\n return shouldLoadOnMount(query, options) || query.state.data !== void 0 && shouldFetchOn(query, options, options.refetchOnMount);\n}\nfunction shouldFetchOn(query, options, field) {\n if (resolveEnabled(options.enabled, query) !== false && resolveStaleTime(options.staleTime, query) !== \"static\") {\n const value = typeof field === \"function\" ? field(query) : field;\n return value === \"always\" || value !== false && isStale(query, options);\n }\n return false;\n}\nfunction shouldFetchOptionally(query, prevQuery, options, prevOptions) {\n return (query !== prevQuery || resolveEnabled(prevOptions.enabled, query) === false) && (!options.suspense || query.state.status !== \"error\") && isStale(query, options);\n}\nfunction isStale(query, options) {\n return resolveEnabled(options.enabled, query) !== false && query.isStaleByTime(resolveStaleTime(options.staleTime, query));\n}\nfunction shouldAssignObserverCurrentProperties(observer, optimisticResult) {\n if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n return true;\n }\n return false;\n}\nexport {\n QueryObserver\n};\n//# sourceMappingURL=queryObserver.js.map","// src/infiniteQueryBehavior.ts\nimport {\n addConsumeAwareSignal,\n addToEnd,\n addToStart,\n ensureQueryFn\n} from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n return {\n onFetch: (context, query) => {\n const options = context.options;\n const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n const oldPages = context.state.data?.pages || [];\n const oldPageParams = context.state.data?.pageParams || [];\n let result = { pages: [], pageParams: [] };\n let currentPage = 0;\n const fetchFn = async () => {\n let cancelled = false;\n const addSignalProperty = (object) => {\n addConsumeAwareSignal(\n object,\n () => context.signal,\n () => cancelled = true\n );\n };\n const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n const fetchPage = async (data, param, previous) => {\n if (cancelled) {\n return Promise.reject();\n }\n if (param == null && data.pages.length) {\n return Promise.resolve(data);\n }\n const createQueryFnContext = () => {\n const queryFnContext2 = {\n client: context.client,\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? \"backward\" : \"forward\",\n meta: context.options.meta\n };\n addSignalProperty(queryFnContext2);\n return queryFnContext2;\n };\n const queryFnContext = createQueryFnContext();\n const page = await queryFn(queryFnContext);\n const { maxPages } = context.options;\n const addTo = previous ? addToStart : addToEnd;\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages)\n };\n };\n if (direction && oldPages.length) {\n const previous = direction === \"backward\";\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams\n };\n const param = pageParamFn(options, oldData);\n result = await fetchPage(oldData, param, previous);\n } else {\n const remainingPages = pages ?? oldPages.length;\n do {\n const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n if (currentPage > 0 && param == null) {\n break;\n }\n result = await fetchPage(result, param);\n currentPage++;\n } while (currentPage < remainingPages);\n }\n return result;\n };\n if (context.options.persister) {\n context.fetchFn = () => {\n return context.options.persister?.(\n fetchFn,\n {\n client: context.client,\n queryKey: context.queryKey,\n meta: context.options.meta,\n signal: context.signal\n },\n query\n );\n };\n } else {\n context.fetchFn = fetchFn;\n }\n }\n };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n const lastIndex = pages.length - 1;\n return pages.length > 0 ? options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams\n ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n if (!data) return false;\n return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n if (!data || !options.getPreviousPageParam) return false;\n return getPreviousPageParam(options, data) != null;\n}\nexport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map","// src/mutation.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Removable } from \"./removable.js\";\nimport { createRetryer } from \"./retryer.js\";\nvar Mutation = class extends Removable {\n #client;\n #observers;\n #mutationCache;\n #retryer;\n constructor(config) {\n super();\n this.#client = config.client;\n this.mutationId = config.mutationId;\n this.#mutationCache = config.mutationCache;\n this.#observers = [];\n this.state = config.state || getDefaultState();\n this.setOptions(config.options);\n this.scheduleGc();\n }\n setOptions(options) {\n this.options = options;\n this.updateGcTime(this.options.gcTime);\n }\n get meta() {\n return this.options.meta;\n }\n addObserver(observer) {\n if (!this.#observers.includes(observer)) {\n this.#observers.push(observer);\n this.clearGcTimeout();\n this.#mutationCache.notify({\n type: \"observerAdded\",\n mutation: this,\n observer\n });\n }\n }\n removeObserver(observer) {\n this.#observers = this.#observers.filter((x) => x !== observer);\n this.scheduleGc();\n this.#mutationCache.notify({\n type: \"observerRemoved\",\n mutation: this,\n observer\n });\n }\n optionalRemove() {\n if (!this.#observers.length) {\n if (this.state.status === \"pending\") {\n this.scheduleGc();\n } else {\n this.#mutationCache.remove(this);\n }\n }\n }\n continue() {\n return this.#retryer?.continue() ?? // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n this.execute(this.state.variables);\n }\n async execute(variables) {\n const onContinue = () => {\n this.#dispatch({ type: \"continue\" });\n };\n const mutationFnContext = {\n client: this.#client,\n meta: this.options.meta,\n mutationKey: this.options.mutationKey\n };\n this.#retryer = createRetryer({\n fn: () => {\n if (!this.options.mutationFn) {\n return Promise.reject(new Error(\"No mutationFn found\"));\n }\n return this.options.mutationFn(variables, mutationFnContext);\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: \"failed\", failureCount, error });\n },\n onPause: () => {\n this.#dispatch({ type: \"pause\" });\n },\n onContinue,\n retry: this.options.retry ?? 0,\n retryDelay: this.options.retryDelay,\n networkMode: this.options.networkMode,\n canRun: () => this.#mutationCache.canRun(this)\n });\n const restored = this.state.status === \"pending\";\n const isPaused = !this.#retryer.canStart();\n try {\n if (restored) {\n onContinue();\n } else {\n this.#dispatch({ type: \"pending\", variables, isPaused });\n await this.#mutationCache.config.onMutate?.(\n variables,\n this,\n mutationFnContext\n );\n const context = await this.options.onMutate?.(\n variables,\n mutationFnContext\n );\n if (context !== this.state.context) {\n this.#dispatch({\n type: \"pending\",\n context,\n variables,\n isPaused\n });\n }\n }\n const data = await this.#retryer.start();\n await this.#mutationCache.config.onSuccess?.(\n data,\n variables,\n this.state.context,\n this,\n mutationFnContext\n );\n await this.options.onSuccess?.(\n data,\n variables,\n this.state.context,\n mutationFnContext\n );\n await this.#mutationCache.config.onSettled?.(\n data,\n null,\n this.state.variables,\n this.state.context,\n this,\n mutationFnContext\n );\n await this.options.onSettled?.(\n data,\n null,\n variables,\n this.state.context,\n mutationFnContext\n );\n this.#dispatch({ type: \"success\", data });\n return data;\n } catch (error) {\n try {\n await this.#mutationCache.config.onError?.(\n error,\n variables,\n this.state.context,\n this,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n await this.options.onError?.(\n error,\n variables,\n this.state.context,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n await this.#mutationCache.config.onSettled?.(\n void 0,\n error,\n this.state.variables,\n this.state.context,\n this,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n await this.options.onSettled?.(\n void 0,\n error,\n variables,\n this.state.context,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n this.#dispatch({ type: \"error\", error });\n throw error;\n } finally {\n this.#mutationCache.runNext(this);\n }\n }\n #dispatch(action) {\n const reducer = (state) => {\n switch (action.type) {\n case \"failed\":\n return {\n ...state,\n failureCount: action.failureCount,\n failureReason: action.error\n };\n case \"pause\":\n return {\n ...state,\n isPaused: true\n };\n case \"continue\":\n return {\n ...state,\n isPaused: false\n };\n case \"pending\":\n return {\n ...state,\n context: action.context,\n data: void 0,\n failureCount: 0,\n failureReason: null,\n error: null,\n isPaused: action.isPaused,\n status: \"pending\",\n variables: action.variables,\n submittedAt: Date.now()\n };\n case \"success\":\n return {\n ...state,\n data: action.data,\n failureCount: 0,\n failureReason: null,\n error: null,\n status: \"success\",\n isPaused: false\n };\n case \"error\":\n return {\n ...state,\n data: void 0,\n error: action.error,\n failureCount: state.failureCount + 1,\n failureReason: action.error,\n isPaused: false,\n status: \"error\"\n };\n }\n };\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.#observers.forEach((observer) => {\n observer.onMutationUpdate(action);\n });\n this.#mutationCache.notify({\n mutation: this,\n type: \"updated\",\n action\n });\n });\n }\n};\nfunction getDefaultState() {\n return {\n context: void 0,\n data: void 0,\n error: null,\n failureCount: 0,\n failureReason: null,\n isPaused: false,\n status: \"idle\",\n variables: void 0,\n submittedAt: 0\n };\n}\nexport {\n Mutation,\n getDefaultState\n};\n//# sourceMappingURL=mutation.js.map","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#mutations = /* @__PURE__ */ new Set();\n this.#scopes = /* @__PURE__ */ new Map();\n this.#mutationId = 0;\n }\n #mutations;\n #scopes;\n #mutationId;\n build(client, options, state) {\n const mutation = new Mutation({\n client,\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state\n });\n this.add(mutation);\n return mutation;\n }\n add(mutation) {\n this.#mutations.add(mutation);\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n scopedMutations.push(mutation);\n } else {\n this.#scopes.set(scope, [mutation]);\n }\n }\n this.notify({ type: \"added\", mutation });\n }\n remove(mutation) {\n if (this.#mutations.delete(mutation)) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n if (scopedMutations.length > 1) {\n const index = scopedMutations.indexOf(mutation);\n if (index !== -1) {\n scopedMutations.splice(index, 1);\n }\n } else if (scopedMutations[0] === mutation) {\n this.#scopes.delete(scope);\n }\n }\n }\n }\n this.notify({ type: \"removed\", mutation });\n }\n canRun(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const mutationsWithSameScope = this.#scopes.get(scope);\n const firstPendingMutation = mutationsWithSameScope?.find(\n (m) => m.state.status === \"pending\"\n );\n return !firstPendingMutation || firstPendingMutation === mutation;\n } else {\n return true;\n }\n }\n runNext(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const foundMutation = this.#scopes.get(scope)?.find((m) => m !== mutation && m.state.isPaused);\n return foundMutation?.continue() ?? Promise.resolve();\n } else {\n return Promise.resolve();\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.#mutations.forEach((mutation) => {\n this.notify({ type: \"removed\", mutation });\n });\n this.#mutations.clear();\n this.#scopes.clear();\n });\n }\n getAll() {\n return Array.from(this.#mutations);\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (mutation) => matchMutation(defaultedFilters, mutation)\n );\n }\n findAll(filters = {}) {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n resumePausedMutations() {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n return notifyManager.batch(\n () => Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop))\n )\n );\n }\n};\nfunction scopeFor(mutation) {\n return mutation.options.scope?.id;\n}\nexport {\n MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/mutationObserver.ts\nimport { getDefaultState } from \"./mutation.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { hashKey, shallowEqualObjects } from \"./utils.js\";\nvar MutationObserver = class extends Subscribable {\n #client;\n #currentResult = void 0;\n #currentMutation;\n #mutateOptions;\n constructor(client, options) {\n super();\n this.#client = client;\n this.setOptions(options);\n this.bindMethods();\n this.#updateResult();\n }\n bindMethods() {\n this.mutate = this.mutate.bind(this);\n this.reset = this.reset.bind(this);\n }\n setOptions(options) {\n const prevOptions = this.options;\n this.options = this.#client.defaultMutationOptions(options);\n if (!shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getMutationCache().notify({\n type: \"observerOptionsUpdated\",\n mutation: this.#currentMutation,\n observer: this\n });\n }\n if (prevOptions?.mutationKey && this.options.mutationKey && hashKey(prevOptions.mutationKey) !== hashKey(this.options.mutationKey)) {\n this.reset();\n } else if (this.#currentMutation?.state.status === \"pending\") {\n this.#currentMutation.setOptions(this.options);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#currentMutation?.removeObserver(this);\n }\n }\n onMutationUpdate(action) {\n this.#updateResult();\n this.#notify(action);\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n reset() {\n this.#currentMutation?.removeObserver(this);\n this.#currentMutation = void 0;\n this.#updateResult();\n this.#notify();\n }\n mutate(variables, options) {\n this.#mutateOptions = options;\n this.#currentMutation?.removeObserver(this);\n this.#currentMutation = this.#client.getMutationCache().build(this.#client, this.options);\n this.#currentMutation.addObserver(this);\n return this.#currentMutation.execute(variables);\n }\n #updateResult() {\n const state = this.#currentMutation?.state ?? getDefaultState();\n this.#currentResult = {\n ...state,\n isPending: state.status === \"pending\",\n isSuccess: state.status === \"success\",\n isError: state.status === \"error\",\n isIdle: state.status === \"idle\",\n mutate: this.mutate,\n reset: this.reset\n };\n }\n #notify(action) {\n notifyManager.batch(() => {\n if (this.#mutateOptions && this.hasListeners()) {\n const variables = this.#currentResult.variables;\n const onMutateResult = this.#currentResult.context;\n const context = {\n client: this.#client,\n meta: this.options.meta,\n mutationKey: this.options.mutationKey\n };\n if (action?.type === \"success\") {\n try {\n this.#mutateOptions.onSuccess?.(\n action.data,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n this.#mutateOptions.onSettled?.(\n action.data,\n null,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n } else if (action?.type === \"error\") {\n try {\n this.#mutateOptions.onError?.(\n action.error,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n this.#mutateOptions.onSettled?.(\n void 0,\n action.error,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n }\n }\n this.listeners.forEach((listener) => {\n listener(this.#currentResult);\n });\n });\n }\n};\nexport {\n MutationObserver\n};\n//# sourceMappingURL=mutationObserver.js.map","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#queries = /* @__PURE__ */ new Map();\n }\n #queries;\n build(client, options, state) {\n const queryKey = options.queryKey;\n const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n let query = this.get(queryHash);\n if (!query) {\n query = new Query({\n client,\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey)\n });\n this.add(query);\n }\n return query;\n }\n add(query) {\n if (!this.#queries.has(query.queryHash)) {\n this.#queries.set(query.queryHash, query);\n this.notify({\n type: \"added\",\n query\n });\n }\n }\n remove(query) {\n const queryInMap = this.#queries.get(query.queryHash);\n if (queryInMap) {\n query.destroy();\n if (queryInMap === query) {\n this.#queries.delete(query.queryHash);\n }\n this.notify({ type: \"removed\", query });\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n this.remove(query);\n });\n });\n }\n get(queryHash) {\n return this.#queries.get(queryHash);\n }\n getAll() {\n return [...this.#queries.values()];\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (query) => matchQuery(defaultedFilters, query)\n );\n }\n findAll(filters = {}) {\n const queries = this.getAll();\n return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n onFocus() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onFocus();\n });\n });\n }\n onOnline() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onOnline();\n });\n });\n }\n};\nexport {\n QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/queryClient.ts\nimport {\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n noop,\n partialMatchKey,\n resolveStaleTime,\n skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar QueryClient = class {\n #queryCache;\n #mutationCache;\n #defaultOptions;\n #queryDefaults;\n #mutationDefaults;\n #mountCount;\n #unsubscribeFocus;\n #unsubscribeOnline;\n constructor(config = {}) {\n this.#queryCache = config.queryCache || new QueryCache();\n this.#mutationCache = config.mutationCache || new MutationCache();\n this.#defaultOptions = config.defaultOptions || {};\n this.#queryDefaults = /* @__PURE__ */ new Map();\n this.#mutationDefaults = /* @__PURE__ */ new Map();\n this.#mountCount = 0;\n }\n mount() {\n this.#mountCount++;\n if (this.#mountCount !== 1) return;\n this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n if (focused) {\n await this.resumePausedMutations();\n this.#queryCache.onFocus();\n }\n });\n this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n if (online) {\n await this.resumePausedMutations();\n this.#queryCache.onOnline();\n }\n });\n }\n unmount() {\n this.#mountCount--;\n if (this.#mountCount !== 0) return;\n this.#unsubscribeFocus?.();\n this.#unsubscribeFocus = void 0;\n this.#unsubscribeOnline?.();\n this.#unsubscribeOnline = void 0;\n }\n isFetching(filters) {\n return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n }\n isMutating(filters) {\n return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n }\n /**\n * Imperative (non-reactive) way to retrieve data for a QueryKey.\n * Should only be used in callbacks or functions where reading the latest data is necessary, e.g. for optimistic updates.\n *\n * Hint: Do not use this function inside a component, because it won't receive updates.\n * Use `useQuery` to create a `QueryObserver` that subscribes to changes.\n */\n getQueryData(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(options.queryHash)?.state.data;\n }\n ensureQueryData(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n const query = this.#queryCache.build(this, defaultedOptions);\n const cachedData = query.state.data;\n if (cachedData === void 0) {\n return this.fetchQuery(options);\n }\n if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n void this.prefetchQuery(defaultedOptions);\n }\n return Promise.resolve(cachedData);\n }\n getQueriesData(filters) {\n return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n const data = state.data;\n return [queryKey, data];\n });\n }\n setQueryData(queryKey, updater, options) {\n const defaultedOptions = this.defaultQueryOptions({ queryKey });\n const query = this.#queryCache.get(\n defaultedOptions.queryHash\n );\n const prevData = query?.state.data;\n const data = functionalUpdate(updater, prevData);\n if (data === void 0) {\n return void 0;\n }\n return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n }\n setQueriesData(filters, updater, options) {\n return notifyManager.batch(\n () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n queryKey,\n this.setQueryData(queryKey, updater, options)\n ])\n );\n }\n getQueryState(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(\n options.queryHash\n )?.state;\n }\n removeQueries(filters) {\n const queryCache = this.#queryCache;\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n queryCache.remove(query);\n });\n });\n }\n resetQueries(filters, options) {\n const queryCache = this.#queryCache;\n return notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n query.reset();\n });\n return this.refetchQueries(\n {\n type: \"active\",\n ...filters\n },\n options\n );\n });\n }\n cancelQueries(filters, cancelOptions = {}) {\n const defaultedCancelOptions = { revert: true, ...cancelOptions };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n );\n return Promise.all(promises).then(noop).catch(noop);\n }\n invalidateQueries(filters, options = {}) {\n return notifyManager.batch(() => {\n this.#queryCache.findAll(filters).forEach((query) => {\n query.invalidate();\n });\n if (filters?.refetchType === \"none\") {\n return Promise.resolve();\n }\n return this.refetchQueries(\n {\n ...filters,\n type: filters?.refetchType ?? filters?.type ?? \"active\"\n },\n options\n );\n });\n }\n refetchQueries(filters, options = {}) {\n const fetchOptions = {\n ...options,\n cancelRefetch: options.cancelRefetch ?? true\n };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled() && !query.isStatic()).map((query) => {\n let promise = query.fetch(void 0, fetchOptions);\n if (!fetchOptions.throwOnError) {\n promise = promise.catch(noop);\n }\n return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n })\n );\n return Promise.all(promises).then(noop);\n }\n fetchQuery(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n if (defaultedOptions.retry === void 0) {\n defaultedOptions.retry = false;\n }\n const query = this.#queryCache.build(this, defaultedOptions);\n return query.isStaleByTime(\n resolveStaleTime(defaultedOptions.staleTime, query)\n ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n }\n prefetchQuery(options) {\n return this.fetchQuery(options).then(noop).catch(noop);\n }\n fetchInfiniteQuery(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.fetchQuery(options);\n }\n prefetchInfiniteQuery(options) {\n return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n }\n ensureInfiniteQueryData(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.ensureQueryData(options);\n }\n resumePausedMutations() {\n if (onlineManager.isOnline()) {\n return this.#mutationCache.resumePausedMutations();\n }\n return Promise.resolve();\n }\n getQueryCache() {\n return this.#queryCache;\n }\n getMutationCache() {\n return this.#mutationCache;\n }\n getDefaultOptions() {\n return this.#defaultOptions;\n }\n setDefaultOptions(options) {\n this.#defaultOptions = options;\n }\n setQueryDefaults(queryKey, options) {\n this.#queryDefaults.set(hashKey(queryKey), {\n queryKey,\n defaultOptions: options\n });\n }\n getQueryDefaults(queryKey) {\n const defaults = [...this.#queryDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n setMutationDefaults(mutationKey, options) {\n this.#mutationDefaults.set(hashKey(mutationKey), {\n mutationKey,\n defaultOptions: options\n });\n }\n getMutationDefaults(mutationKey) {\n const defaults = [...this.#mutationDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n defaultQueryOptions(options) {\n if (options._defaulted) {\n return options;\n }\n const defaultedOptions = {\n ...this.#defaultOptions.queries,\n ...this.getQueryDefaults(options.queryKey),\n ...options,\n _defaulted: true\n };\n if (!defaultedOptions.queryHash) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(\n defaultedOptions.queryKey,\n defaultedOptions\n );\n }\n if (defaultedOptions.refetchOnReconnect === void 0) {\n defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n }\n if (defaultedOptions.throwOnError === void 0) {\n defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n }\n if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n defaultedOptions.networkMode = \"offlineFirst\";\n }\n if (defaultedOptions.queryFn === skipToken) {\n defaultedOptions.enabled = false;\n }\n return defaultedOptions;\n }\n defaultMutationOptions(options) {\n if (options?._defaulted) {\n return options;\n }\n return {\n ...this.#defaultOptions.mutations,\n ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n ...options,\n _defaulted: true\n };\n }\n clear() {\n this.#queryCache.clear();\n this.#mutationCache.clear();\n }\n};\nexport {\n QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","\"use client\";\n\n// src/QueryClientProvider.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar QueryClientContext = React.createContext(\n void 0\n);\nvar useQueryClient = (queryClient) => {\n const client = React.useContext(QueryClientContext);\n if (queryClient) {\n return queryClient;\n }\n if (!client) {\n throw new Error(\"No QueryClient set, use QueryClientProvider to set one\");\n }\n return client;\n};\nvar QueryClientProvider = ({\n client,\n children\n}) => {\n React.useEffect(() => {\n client.mount();\n return () => {\n client.unmount();\n };\n }, [client]);\n return /* @__PURE__ */ jsx(QueryClientContext.Provider, { value: client, children });\n};\nexport {\n QueryClientContext,\n QueryClientProvider,\n useQueryClient\n};\n//# sourceMappingURL=QueryClientProvider.js.map","\"use client\";\n\n// src/IsRestoringProvider.ts\nimport * as React from \"react\";\nvar IsRestoringContext = React.createContext(false);\nvar useIsRestoring = () => React.useContext(IsRestoringContext);\nvar IsRestoringProvider = IsRestoringContext.Provider;\nexport {\n IsRestoringProvider,\n useIsRestoring\n};\n//# sourceMappingURL=IsRestoringProvider.js.map","\"use client\";\n\n// src/QueryErrorResetBoundary.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createValue() {\n let isReset = false;\n return {\n clearReset: () => {\n isReset = false;\n },\n reset: () => {\n isReset = true;\n },\n isReset: () => {\n return isReset;\n }\n };\n}\nvar QueryErrorResetBoundaryContext = React.createContext(createValue());\nvar useQueryErrorResetBoundary = () => React.useContext(QueryErrorResetBoundaryContext);\nvar QueryErrorResetBoundary = ({\n children\n}) => {\n const [value] = React.useState(() => createValue());\n return /* @__PURE__ */ jsx(QueryErrorResetBoundaryContext.Provider, { value, children: typeof children === \"function\" ? children(value) : children });\n};\nexport {\n QueryErrorResetBoundary,\n useQueryErrorResetBoundary\n};\n//# sourceMappingURL=QueryErrorResetBoundary.js.map","\"use client\";\n\n// src/errorBoundaryUtils.ts\nimport * as React from \"react\";\nimport { shouldThrowError } from \"@tanstack/query-core\";\nvar ensurePreventErrorBoundaryRetry = (options, errorResetBoundary, query) => {\n const throwOnError = query?.state.error && typeof options.throwOnError === \"function\" ? shouldThrowError(options.throwOnError, [query.state.error, query]) : options.throwOnError;\n if (options.suspense || options.experimental_prefetchInRender || throwOnError) {\n if (!errorResetBoundary.isReset()) {\n options.retryOnMount = false;\n }\n }\n};\nvar useClearResetErrorBoundary = (errorResetBoundary) => {\n React.useEffect(() => {\n errorResetBoundary.clearReset();\n }, [errorResetBoundary]);\n};\nvar getHasError = ({\n result,\n errorResetBoundary,\n throwOnError,\n query,\n suspense\n}) => {\n return result.isError && !errorResetBoundary.isReset() && !result.isFetching && query && (suspense && result.data === void 0 || shouldThrowError(throwOnError, [result.error, query]));\n};\nexport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n};\n//# sourceMappingURL=errorBoundaryUtils.js.map","// src/suspense.ts\nvar defaultThrowOnError = (_error, query) => query.state.data === void 0;\nvar ensureSuspenseTimers = (defaultedOptions) => {\n if (defaultedOptions.suspense) {\n const MIN_SUSPENSE_TIME_MS = 1e3;\n const clamp = (value) => value === \"static\" ? value : Math.max(value ?? MIN_SUSPENSE_TIME_MS, MIN_SUSPENSE_TIME_MS);\n const originalStaleTime = defaultedOptions.staleTime;\n defaultedOptions.staleTime = typeof originalStaleTime === \"function\" ? (...args) => clamp(originalStaleTime(...args)) : clamp(originalStaleTime);\n if (typeof defaultedOptions.gcTime === \"number\") {\n defaultedOptions.gcTime = Math.max(\n defaultedOptions.gcTime,\n MIN_SUSPENSE_TIME_MS\n );\n }\n }\n};\nvar willFetch = (result, isRestoring) => result.isLoading && result.isFetching && !isRestoring;\nvar shouldSuspend = (defaultedOptions, result) => defaultedOptions?.suspense && result.isPending;\nvar fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).catch(() => {\n errorResetBoundary.clearReset();\n});\nexport {\n defaultThrowOnError,\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n};\n//# sourceMappingURL=suspense.js.map","\"use client\";\n\n// src/useBaseQuery.ts\nimport * as React from \"react\";\nimport { isServer, noop, notifyManager } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport { useQueryErrorResetBoundary } from \"./QueryErrorResetBoundary.js\";\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n} from \"./errorBoundaryUtils.js\";\nimport { useIsRestoring } from \"./IsRestoringProvider.js\";\nimport {\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n} from \"./suspense.js\";\nfunction useBaseQuery(options, Observer, queryClient) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n throw new Error(\n 'Bad argument type. Starting with v5, only the \"Object\" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object'\n );\n }\n }\n const isRestoring = useIsRestoring();\n const errorResetBoundary = useQueryErrorResetBoundary();\n const client = useQueryClient(queryClient);\n const defaultedOptions = client.defaultQueryOptions(options);\n client.getDefaultOptions().queries?._experimental_beforeQuery?.(\n defaultedOptions\n );\n const query = client.getQueryCache().get(defaultedOptions.queryHash);\n if (process.env.NODE_ENV !== \"production\") {\n if (!defaultedOptions.queryFn) {\n console.error(\n `[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`\n );\n }\n }\n defaultedOptions._optimisticResults = isRestoring ? \"isRestoring\" : \"optimistic\";\n ensureSuspenseTimers(defaultedOptions);\n ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary, query);\n useClearResetErrorBoundary(errorResetBoundary);\n const isNewCacheEntry = !client.getQueryCache().get(defaultedOptions.queryHash);\n const [observer] = React.useState(\n () => new Observer(\n client,\n defaultedOptions\n )\n );\n const result = observer.getOptimisticResult(defaultedOptions);\n const shouldSubscribe = !isRestoring && options.subscribed !== false;\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => {\n const unsubscribe = shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop;\n observer.updateResult();\n return unsubscribe;\n },\n [observer, shouldSubscribe]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n React.useEffect(() => {\n observer.setOptions(defaultedOptions);\n }, [defaultedOptions, observer]);\n if (shouldSuspend(defaultedOptions, result)) {\n throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary);\n }\n if (getHasError({\n result,\n errorResetBoundary,\n throwOnError: defaultedOptions.throwOnError,\n query,\n suspense: defaultedOptions.suspense\n })) {\n throw result.error;\n }\n ;\n client.getDefaultOptions().queries?._experimental_afterQuery?.(\n defaultedOptions,\n result\n );\n if (defaultedOptions.experimental_prefetchInRender && !isServer && willFetch(result, isRestoring)) {\n const promise = isNewCacheEntry ? (\n // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted\n fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n ) : (\n // subscribe to the \"cache promise\" so that we can finalize the currentThenable once data comes in\n query?.promise\n );\n promise?.catch(noop).finally(() => {\n observer.updateResult();\n });\n }\n return !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result;\n}\nexport {\n useBaseQuery\n};\n//# sourceMappingURL=useBaseQuery.js.map","\"use client\";\n\n// src/useQuery.ts\nimport { QueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useQuery(options, queryClient) {\n return useBaseQuery(options, QueryObserver, queryClient);\n}\nexport {\n useQuery\n};\n//# sourceMappingURL=useQuery.js.map","\"use client\";\n\n// src/useMutation.ts\nimport * as React from \"react\";\nimport {\n MutationObserver,\n noop,\n notifyManager,\n shouldThrowError\n} from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nfunction useMutation(options, queryClient) {\n const client = useQueryClient(queryClient);\n const [observer] = React.useState(\n () => new MutationObserver(\n client,\n options\n )\n );\n React.useEffect(() => {\n observer.setOptions(options);\n }, [observer, options]);\n const result = React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => observer.subscribe(notifyManager.batchCalls(onStoreChange)),\n [observer]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n const mutate = React.useCallback(\n (variables, mutateOptions) => {\n observer.mutate(variables, mutateOptions).catch(noop);\n },\n [observer]\n );\n if (result.error && shouldThrowError(observer.options.throwOnError, [result.error])) {\n throw result.error;\n }\n return { ...result, mutate, mutateAsync: result.mutate };\n}\nexport {\n useMutation\n};\n//# sourceMappingURL=useMutation.js.map","import { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useApi } from \"../providers/ApiProvider\";\nimport type { UpdateAlertStatusPayload } from \"../ports/alerts.port\";\n\nexport function useUpdateAlertStatus() {\n const { alerts } = useApi();\n const qClient = useQueryClient();\n return useMutation({\n mutationFn: (payload: UpdateAlertStatusPayload) => alerts.updateAlertStatus(payload),\n onSuccess: () => {\n qClient.invalidateQueries({ queryKey: [\"alerts\", \"list\"] });\n qClient.invalidateQueries({ queryKey: [\"alerts\", \"report\"] });\n },\n });\n}\n\n\n","export function getTimeString(date: Date, timeZone: string): string {\n return date.toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true,\n timeZone,\n });\n}\n\nexport function getAbbrAndOffset(date: Date, timeZone: string): { abbr?: string; offset?: string } {\n try {\n const parts = new Intl.DateTimeFormat(\"en-US\", { timeZone, timeZoneName: \"short\" }).formatToParts(date);\n const tzPart = parts.find((p) => p.type === \"timeZoneName\");\n const abbr = tzPart?.value;\n\n let offset: string | undefined;\n try {\n const offParts = new Intl.DateTimeFormat(\"en-US\", { timeZone, timeZoneName: \"shortOffset\" as any }).formatToParts(date);\n const offPart = offParts.find((p) => p.type === \"timeZoneName\");\n if (offPart?.value && offPart.value.startsWith(\"GMT\")) {\n offset = offPart.value.replace(\"GMT\", \"\");\n }\n } catch { }\n\n return { abbr, offset };\n } catch {\n return {};\n }\n}\n\n/**\n * format a date-like value into MM/DD/YYYY HH:MM:SS (24h) format\n */\nexport function formatTimestamp(value: unknown): string {\n if (!value) return \"-\";\n try {\n const d = new Date(value as any);\n const pad = (n: number) => String(n).padStart(2, \"0\");\n const MM = pad(d.getMonth() + 1);\n const DD = pad(d.getDate());\n const YYYY = d.getFullYear();\n const HH = pad(d.getHours());\n const mm = pad(d.getMinutes());\n const ss = pad(d.getSeconds());\n return `${MM}/${DD}/${YYYY} ${HH}:${mm}:${ss}`;\n } catch {\n return \"-\";\n }\n}\n\n/**\n * Formats a date-like value to a localized string with 2-digit parts (en-US).\n * Example: 12/31/2025, 11:59:59 PM\n */\nexport function formatDisplayTimestamp(ts: unknown): string {\n if (!ts) return \"-\";\n try {\n const date = new Date(ts as any);\n return date.toLocaleString(\"en-US\", {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n });\n } catch {\n return \"-\";\n }\n}","import type { ColumnsType } from \"antd/es/table\";\nimport type { ReactNode } from \"react\";\nimport AlertsTable from \"../Alerts/AlertsTable\";\nimport type { Alert } from \"../../types/alerts.types\";\nimport type { OptionItem } from \"../Alerts/Filters/FilterSelect\";\nimport { Button, Dropdown, Tag } from \"antd\";\nimport { MoreOutlined } from \"@ant-design/icons\";\nimport { useUpdateAlertStatus } from \"../../hooks/useUpdateAlertStatus\";\nimport { formatTimestamp } from \"../../utils/dateTimeUtils\";\nimport { toast } from \"react-toastify\";\n\n// Match AlertsTable.tsx border colors for severity\nconst PRIORITY_BORDER_TEXT_CLASS: Record<Alert[\"priority\"], string> = {\n Critical: \"#FF3B30\",\n High: \"#FFB86A\",\n Medium: \"#FFCC00\",\n Low: \"#007AFF\",\n};\n\nconst PRIORITY_ROW_BG_CLASS: Record<string, string> = {\n Critical:\"#FFE2E2\",\n High:\"#FF95004D\",\n Medium:\"#FEF9C2\",\n Low:\"#E0EDFF\",\n};\n\ninterface ArchivedTableProps {\n alerts: Alert[];\n loading?: boolean;\n columns?: ColumnsType<Alert>;\n pageSize?: number;\n completedStatus?: string; // default: \"Completed\"\n severityOptions?: OptionItem[];\n anomalyOptions?: OptionItem[];\n spaceOptions?: OptionItem[];\n renderActions?: (record: Alert) => ReactNode;\n onAlertIdClick?: (record: Alert) => void;\n}\n\nexport default function ArchivedTable({\n alerts,\n loading = false,\n pageSize = 10,\n completedStatus = \"Completed\",\n severityOptions,\n anomalyOptions,\n spaceOptions,\n onAlertIdClick,\n}: ArchivedTableProps) {\n const updateStatus = useUpdateAlertStatus();\n\n const handleReopen = async (record: Alert) => {\n try {\n const response = await updateStatus.mutateAsync({\n alertUniqueId: (record as any).alertId ?? (record as any).id,\n alertId: (record as any).id,\n status: \"Reopen\",\n notes: \"Reopened\",\n modifiedBy: 0,\n } as any);\n if ((response as any)?.responseStatus) {\n const successMsg = (response as any)?.data || \"Alert reopened successfully.\";\n toast.success(successMsg);\n } else {\n const errMsg = (response as any)?.errorMessage || \"Failed to reopen alert\";\n toast.error(errMsg);\n }\n } catch {\n toast.error(\"Failed to reopen alert. Please try again.\");\n }\n };\n\n const archivedColumns: ColumnsType<Alert> = [\n {\n title: \"Severity\",\n dataIndex: \"priority\",\n key: \"priority\",\n width: 120,\n render: (value: Alert[\"priority\"]) => (\n <Tag\n className=\"px-[10px] py-[2px]\"\n style={{ \n border: `2px solid ${PRIORITY_BORDER_TEXT_CLASS[value]}`,\n backgroundColor: PRIORITY_ROW_BG_CLASS[String(value)]\n }}\n >\n {value}\n </Tag>\n ),\n },\n {\n title: \"Timestamp\",\n dataIndex: \"timestamp\",\n key: \"timestamp\",\n width: 200,\n render: (ts: string) => formatTimestamp(ts),\n },\n {\n title: \"Status\",\n dataIndex: \"statusType\",\n key: \"statusType\",\n width: 140,\n },\n {\n title: \"Description\",\n dataIndex: \"description\",\n key: \"description\",\n render: (text: string, record) => (\n <div>\n <a\n onClick={(e) => {\n e.preventDefault();\n onAlertIdClick?.(record);\n }}\n className=\"inline-block mb-1 text-blue-600\"\n >\n {(record as any).alertNumber}\n </a>\n <div className=\"text-black/65\">{text}</div>\n </div>\n ),\n },\n {\n title: \"\",\n key: \"menu\",\n width: 60,\n align: \"right\",\n render: (_: any, record) => {\n return (\n <Dropdown\n trigger={[\"click\"]}\n menu={{\n items: [\n { key: \"reopen\", label: \"Reopen\" },\n ],\n onClick: ({ key }) => {\n if (key === \"reopen\") handleReopen(record);\n },\n }}\n >\n <Button type=\"text\" icon={<MoreOutlined />} />\n </Dropdown>\n );\n },\n },\n ];\n\n const filtered = (alerts || []).filter(\n (a) => (a.statusType || \"\").toLowerCase() === completedStatus.toLowerCase()\n );\n\n return (\n <AlertsTable\n data={filtered}\n loading={loading}\n pageSize={pageSize}\n columns={archivedColumns}\n severityOptions={severityOptions}\n anomalyOptions={anomalyOptions}\n spaceOptions={spaceOptions}\n // Actions/Tracker removed for archived view; use menu column instead\n renderActions={undefined}\n onAlertIdClick={onAlertIdClick}\n excludeCompleted={false}\n />\n );\n}\n\n\n","import { useMemo } from \"react\";\n\ninterface AnalogClockProps {\n size?: number;\n time: Date;\n timeZone?: string;\n}\n\nexport default function AnalogClockUSA({\n size = 120,\n time,\n timeZone = \"America/New_York\",\n}: AnalogClockProps) {\n // Properly extract hours, minutes, seconds for the specified timezone\n const { hours, minutes, seconds } = useMemo(() => {\n const formatter = new Intl.DateTimeFormat(\"en-US\", {\n timeZone,\n hour: \"numeric\",\n minute: \"numeric\",\n second: \"numeric\",\n hour12: false,\n });\n\n const parts = formatter.formatToParts(time);\n return {\n hours: parseInt(parts.find((p) => p.type === \"hour\")?.value || \"0\", 10),\n minutes: parseInt(parts.find((p) => p.type === \"minute\")?.value || \"0\", 10),\n seconds: parseInt(parts.find((p) => p.type === \"second\")?.value || \"0\", 10),\n };\n }, [time, timeZone]);\n\n const secondAngle = seconds * 6;\n const minuteAngle = minutes * 6 + seconds * 0.1;\n const hourAngle = (hours % 12) * 30 + minutes * 0.5;\n\n const center = size / 2;\n\n return (\n <div\n className=\"relative rounded-full border border-gray-300 bg-white\"\n style={{ width: size, height: size }}\n role=\"img\"\n aria-label=\"Analog Clock\"\n >\n {/* Hour markers */}\n {[...Array(12)].map((_, i) => {\n const angle = i * 30;\n const markerLength = 6;\n const outerRadius = center - 4;\n const innerRadius = outerRadius - markerLength;\n const rad = (angle - 90) * (Math.PI / 180);\n const x1 = center + innerRadius * Math.cos(rad);\n const y1 = center + innerRadius * Math.sin(rad);\n const x2 = center + outerRadius * Math.cos(rad);\n const y2 = center + outerRadius * Math.sin(rad);\n return (\n <svg\n key={i}\n className=\"absolute inset-0\"\n width={size}\n height={size}\n >\n <line\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n stroke=\"#9CA3AF\"\n strokeWidth={i % 3 === 0 ? 2 : 1}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n })}\n\n {/* Hour hand */}\n <svg\n className=\"absolute inset-0\"\n width={size}\n height={size}\n style={{ transform: `rotate(${hourAngle}deg)` }}\n >\n <line\n x1={center}\n y1={center}\n x2={center}\n y2={center - size * 0.25}\n stroke=\"#1F2937\"\n strokeWidth={4}\n strokeLinecap=\"round\"\n />\n </svg>\n\n {/* Minute hand */}\n <svg\n className=\"absolute inset-0\"\n width={size}\n height={size}\n style={{ transform: `rotate(${minuteAngle}deg)` }}\n >\n <line\n x1={center}\n y1={center}\n x2={center}\n y2={center - size * 0.35}\n stroke=\"#374151\"\n strokeWidth={3}\n strokeLinecap=\"round\"\n />\n </svg>\n\n {/* Second hand */}\n <svg\n className=\"absolute inset-0\"\n width={size}\n height={size}\n style={{ transform: `rotate(${secondAngle}deg)` }}\n >\n <line\n x1={center}\n y1={center + size * 0.08}\n x2={center}\n y2={center - size * 0.38}\n stroke=\"#EF4444\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n\n {/* Center dot */}\n <div\n className=\"absolute bg-gray-900 rounded-full\"\n style={{\n width: 8,\n height: 8,\n left: center - 4,\n top: center - 4,\n }}\n />\n </div>\n );\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport { getAbbrAndOffset, getTimeString } from \"../../utils/dateTimeUtils\";\nimport AnalogClock from \"./AnalogClock\";\n\ninterface ClockProps {\n label?: string;\n timeZone?: string;\n updateIntervalMs?: number;\n className?: string;\n}\n\n\n\nexport default function Clock({ label = \"USA\", timeZone = \"America/New_York\", updateIntervalMs = 1000, className }: ClockProps) {\n const [now, setNow] = useState<Date>(new Date());\n\n useEffect(() => {\n const id = setInterval(() => setNow(new Date()), updateIntervalMs);\n return () => clearInterval(id);\n }, [updateIntervalMs]);\n\n const timeString = useMemo(() => getTimeString(now, timeZone), [now, timeZone]);\n const { abbr, offset } = useMemo(() => getAbbrAndOffset(now, timeZone), [now, timeZone]);\n\n return (\n <div className={`flex items-center gap-3 ${className || \"\"}`}>\n <AnalogClock time={now} timeZone={timeZone} size={80} />\n <div className=\"flex flex-col items-baseline gap-1\">\n <div className=\"flex items-center gap-2 text-sm text-gray-600\">\n <span className=\"uppercase\">{label}</span>\n {abbr && <span className=\"px-1.5 py-0.5 rounded-md border text-[10px] leading-none text-gray-600 bg-gray-50\">{abbr}</span>}\n {offset && <span className=\"text-xs text-gray-500\">{offset}</span>}\n </div>\n <div className=\"text-2xl font-semibold text-gray-700 tracking-wide\">{timeString}</div>\n </div>\n </div>\n );\n}\n\n\n","import { Row, Col, Select, Typography, Space, Button } from \"antd\";\nimport type { GroupBy, SortBy } from \"./settings.types\";\n\nconst { Text } = Typography;\n\ninterface AdminSettingsSectionProps {\n sortBy: SortBy;\n groupBy: GroupBy;\n onChange: (patch: Partial<{ sortBy: SortBy; groupBy: GroupBy }>) => void;\n showActions?: boolean;\n onSave?: () => void;\n onClear?: () => void;\n saving?: boolean;\n}\n\nexport default function AdminSettingsSection({ sortBy, onChange, showActions, onSave, onClear, saving }: AdminSettingsSectionProps) {\n return (\n <Row gutter={[16, 16]} align=\"middle\">\n <Col xs={24} md={8} lg={5}>\n <Space className=\"w-full items-center\" direction=\"horizontal\" size={12}>\n <Text className=\"text-gray-600\">Sort by:</Text>\n <Select\n placeholder=\"By Severity\"\n value={sortBy}\n onChange={(v: SortBy) => onChange({ sortBy: v })}\n options={[\n { label: \"By Severity\", value: \"By Severity\" },\n { label: \"By Created Date\", value: \"By Created Date\" },\n ]}\n className=\"w-full\"\n style={{ minWidth: '200px' }}\n />\n </Space>\n </Col>\n <Col xs={24} md={8} style={{ alignSelf: 'end' }}>\n {showActions ? (\n <Space className=\"w-full\" direction=\"horizontal\" size={8} >\n <Button onClick={onClear} disabled={saving}>Clear</Button>\n <Button type=\"primary\" onClick={onSave} loading={saving}>Save</Button>\n </Space>\n ) : null}\n </Col>\n </Row>\n );\n}\n\n\n","import { Select, Typography, Button, Checkbox, Spin, Row, Col } from \"antd\";\nimport { useEffect, useState } from \"react\";\nimport { useApi } from \"../../providers/ApiProvider\";\nimport type { EscBasis } from \"./settings.types\";\n\nconst { Text } = Typography;\n\ninterface Option<T> { label: string; value: T }\n\ninterface EscalationRowSectionProps {\n escBasis: EscBasis;\n setEscBasis: (v: EscBasis) => void;\n selectedSeverity?: number;\n setSelectedSeverity: (id: number) => void;\n selectedRule?: string;\n setSelectedRule: (id: string) => void;\n severityOptions: Option<number>[];\n ruleOptions: Option<string>[];\n minsOptions: Option<number>[];\n roleOptions: Option<number>[];\n l1mins?: number; setL1mins: (v: number) => void; l1role?: number; setL1role: (v?: number) => void;\n l2mins?: number; setL2mins: (v: number) => void; l2role?: number; setL2role: (v?: number) => void;\n l3mins?: number; setL3mins: (v: number) => void; l3role?: number; setL3role: (v?: number) => void;\n actions: string[]; setActions: (v: string[]) => void;\n thirdPartyIds: number[]; setThirdPartyIds: (v: number[]) => void;\n humanLoop: boolean; setHumanLoop: (v: boolean) => void;\n onClear: () => void;\n onSave: () => void;\n saving?: boolean;\n onActionTypesLoaded?: (items: { actionTypeId: number; name: string }[]) => void;\n}\n\nexport default function EscalationRowSection(props: EscalationRowSectionProps) {\n const {\n // escBasis, setEscBasis,\n // selectedSeverity, setSelectedSeverity,\n selectedRule, setSelectedRule,\n ruleOptions, minsOptions, roleOptions,\n l1mins, setL1mins, l1role, setL1role,\n l2mins, setL2mins, l2role, setL2role,\n l3mins, setL3mins, l3role, setL3role,\n actions, setActions, thirdPartyIds, setThirdPartyIds, humanLoop, setHumanLoop,\n onClear, onSave, saving, onActionTypesLoaded,\n } = props;\n\n const { rules: rulesApi } = useApi();\n const [actionOptionsState, setActionOptionsState] = useState<{ label: string; value: string }[]>([]);\n const [thirdPartyOptionsState, setThirdPartyOptionsState] = useState<{ label: string; value: number }[]>([]);\n const [loadingLookups, setLoadingLookups] = useState<boolean>(false);\n\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n setLoadingLookups(true);\n const lookups = await rulesApi.getLookups();\n if (cancelled || !lookups || !Array.isArray(lookups.actionTypes)) return;\n const mapped = lookups.actionTypes.map(at => ({ label: at.name, value: String(at.actionTypeId) }));\n setActionOptionsState(mapped);\n if (onActionTypesLoaded) {\n onActionTypesLoaded(lookups.actionTypes);\n }\n const tp = Array.isArray(lookups.thirdParties)\n ? lookups.thirdParties.map(tp => ({ label: tp.thirdPartyName, value: tp.thirdPartyId }))\n : [];\n setThirdPartyOptionsState(tp);\n } catch (e) {\n console.error(\"Error loading lookups\", e);\n } finally {\n if (!cancelled) setLoadingLookups(false);\n }\n })();\n return () => { cancelled = true; };\n }, []);\n\n // logic to check if there is any input\n const hasAnyInput =\n typeof l1mins === \"number\" ||\n typeof l1role === \"number\" ||\n typeof l2mins === \"number\" ||\n typeof l2role === \"number\" ||\n typeof l3mins === \"number\" ||\n typeof l3role === \"number\" ||\n (Array.isArray(actions) && actions.length > 0) ||\n (Array.isArray(thirdPartyIds) && thirdPartyIds.length > 0) ||\n !!humanLoop;\n const canSave = !!selectedRule && hasAnyInput && !saving;\n\n return (\n <Spin spinning={!!saving || loadingLookups}>\n {/* Row1*/}\n <Row gutter={[16, 16]} align=\"bottom\">\n <Col xs={24} sm={12} md={8} lg={4}>\n <div>\n <Text className=\"text-gray-700 font-medium block mb-1\">Rules</Text>\n <Select\n placeholder=\"Rules\"\n value={selectedRule}\n onChange={setSelectedRule}\n options={ruleOptions}\n className=\"w-full\"\n />\n </div>\n </Col>\n\n <Col xs={24} sm={12} md={8} lg={4}>\n <div>\n <Row gutter={8}>\n <Col span={10}>\n <Text className=\"text-gray-700 font-medium block mb-1\">Level 1 (mins)</Text>\n </Col>\n <Col span={14}>\n <Text className=\"text-gray-700 font-medium block mb-1\">Escalate to</Text>\n </Col>\n </Row>\n <Row gutter={8}>\n <Col span={10}>\n <Select\n className=\"w-full\"\n placeholder=\"Mins\"\n value={l1mins}\n onChange={setL1mins as any}\n options={minsOptions}\n />\n </Col>\n <Col span={14}>\n <Select\n placeholder=\"Escalate to\"\n className=\"w-full\"\n value={l1role}\n onChange={setL1role}\n options={roleOptions}\n />\n </Col>\n </Row>\n </div>\n </Col>\n\n <Col xs={24} sm={12} md={8} lg={4}>\n <div>\n <Row gutter={8}>\n <Col span={10}>\n <Text className=\"text-gray-700 font-medium block mb-1\">Level 2 (mins)</Text>\n </Col>\n <Col span={14}>\n <Text className=\"text-gray-700 font-medium block mb-1\">Escalate to</Text>\n </Col>\n </Row>\n <Row gutter={8}>\n <Col span={10}>\n <Select\n className=\"w-full\"\n placeholder=\"Mins\"\n value={l2mins}\n onChange={setL2mins as any}\n options={minsOptions}\n />\n </Col>\n <Col span={14}>\n <Select\n placeholder=\"Escalate to\"\n className=\"w-full\"\n value={l2role}\n onChange={setL2role}\n options={roleOptions}\n />\n </Col>\n </Row>\n </div>\n </Col>\n\n <Col xs={24} sm={12} md={8} lg={4}>\n <div>\n <Row gutter={8}>\n <Col span={10}>\n <Text className=\"text-gray-700 font-medium block mb-1\">Level 3 (mins)</Text>\n </Col>\n <Col span={14}>\n <Text className=\"text-gray-700 font-medium block mb-1\">Escalate to</Text>\n </Col>\n </Row>\n <Row gutter={8}>\n <Col span={10}>\n <Select\n className=\"w-full\"\n placeholder=\"Mins\"\n value={l3mins}\n onChange={setL3mins as any}\n options={minsOptions}\n />\n </Col>\n <Col span={14}>\n <Select\n placeholder=\"Escalate to\"\n className=\"w-full\"\n value={l3role}\n onChange={setL3role}\n options={roleOptions}\n />\n </Col>\n </Row>\n </div>\n </Col>\n\n <Col xs={24} sm={12} md={8} lg={5}>\n <div>\n <Text className=\"text-gray-700 font-medium block mb-1\">Pick Actions</Text>\n <Select\n mode=\"multiple\"\n placeholder=\"Select response actions\"\n className=\"w-full\"\n value={actions}\n onChange={setActions}\n options={actionOptionsState}\n />\n </div>\n </Col>\n\n <Col xs={24} sm={12} md={8} lg={3}>\n <div className=\"flex items-end h-full\">\n <Checkbox checked={humanLoop} onChange={(e) => setHumanLoop(e.target.checked)}>\n Human-In-The-Loop\n </Checkbox>\n </div>\n </Col>\n </Row>\n \n {/* Row2*/}\n <Row gutter={[16, 16]} align=\"bottom\" className=\"mt-4\">\n <Col xs={24} sm={12} md={8} lg={5}>\n <div>\n <Text className=\"text-gray-700 font-medium block mb-1\">Third Party App</Text>\n <Select\n mode=\"multiple\"\n placeholder=\"Third Party app\"\n className=\"w-full\"\n value={thirdPartyIds}\n onChange={setThirdPartyIds}\n options={thirdPartyOptionsState}\n />\n </div>\n </Col>\n\n <Col xs={24} sm={12} md={8}>\n <div className=\"flex items-center gap-2\">\n <Button onClick={onClear}>Clear</Button>\n <Button type=\"primary\" onClick={onSave} loading={!!saving} disabled={!canSave}>\n Save\n </Button>\n </div>\n </Col>\n </Row>\n </Spin>\n );\n}\n\n\n","import { Button, Table } from \"antd\";\nimport type { EscalationEntry, UserRoleItem } from \"./settings.types\";\nimport { EditOutlined } from \"@ant-design/icons\";\n\ninterface Props {\n entries: EscalationEntry[];\n userRoles: UserRoleItem[];\n onEdit: (id: string) => void;\n loading?: boolean;\n}\n\nexport default function EscalationTableSection({ entries, userRoles, onEdit, loading }: Props) {\n const roleMap = new Map(userRoles.map(r => [r.userRoleId, r.userRoleName] as const));\n const getRoleNames = (ids: number[]): string => ids.map(id => roleMap.get(id) || String(id)).join(\", \");\n\n return (\n <Table\n rowKey=\"id\"\n dataSource={entries}\n pagination={false}\n loading={loading}\n columns={[\n { title: \"Rule\", dataIndex: \"ruleOrSeverityLabel\", key: \"rule\" },\n {\n title: \"Level 1\",\n key: \"l1\",\n render: (_: any, row: EscalationEntry) => (\n <span>\n {row.l1.minutes ? `Action taken in (${row.l1.minutes} Mins)` : \"No Action taken in 0 Min\"}\n {row.l1.roles?.length ? `, Escalate to (${getRoleNames(row.l1.roles)})` : \"\"}\n </span>\n ),\n },\n {\n title: \"Level 2\",\n key: \"l2\",\n render: (_: any, row: EscalationEntry) => (\n <span>\n {row.l2.minutes ? `Action taken in (${row.l2.minutes} Mins)` : \"No Action taken in 0 Min\"}\n {row.l2.roles?.length ? `, Escalate to (${getRoleNames(row.l2.roles)})` : \"\"}\n </span>\n ),\n },\n {\n title: \"Level 3\",\n key: \"l3\",\n render: (_: any, row: EscalationEntry) => (\n <span>\n {row.l3.minutes ? `Action taken in (${row.l3.minutes} Mins)` : \"No Action taken in 0 Min\"}\n {row.l3.roles?.length ? `, Escalate to (${getRoleNames(row.l3.roles)})` : \"\"}\n </span>\n ),\n },\n {\n title: \"Pick Actions\",\n key: \"actionsCol\",\n render: (_: any, row: EscalationEntry) => (row.actions && row.actions.length ? row.actions.join(\", \") : \"-\"),\n },\n {\n title: \"Notify\",\n key: \"notify\",\n render: (_: any, row: EscalationEntry) => (row.notify && row.notify.length ? row.notify.join(\", \") : \"-\"),\n },\n {\n title: \"Human-In-The-Loop\",\n key: \"humanLoop\",\n render: (_: any, row: EscalationEntry) => (row.humanLoop ? \"Yes\" : \"No\"),\n },\n {\n title: \"Actions\",\n key: \"ops\",\n render: (_: any, row: EscalationEntry) => (\n <Button type=\"text\" onClick={() => onEdit(row.id)}><EditOutlined /></Button>\n ),\n },\n ]}\n />\n );\n}\n\n\n","import { useEffect, useMemo, useState } from \"react\";\nimport { Table, Select, Typography, Button, Space } from \"antd\";\nimport type { UserRoleItem, RuleItem } from \"./settings.types\";\nimport type { ApiRuleItem } from \"../../ports/rules.port\";\nimport { useApi } from \"../../providers/ApiProvider\";\nimport { toast } from \"react-toastify\";\n\nconst { Title } = Typography;\n\ninterface Props {\n userRoles: UserRoleItem[];\n rules: RuleItem[];\n rawRules?: ApiRuleItem[];\n}\n\ninterface RowData {\n key: string;\n ruleName: string;\n ruleDesc?: string;\n}\n\nexport default function AlertAssignment({ userRoles, rules, rawRules }: Props) {\n const { rules: rulesApi } = useApi();\n const [loading, setLoading] = useState(false);\n const [latestRawRules, setLatestRawRules] = useState<ApiRuleItem[] | undefined>(rawRules);\n const [assignments, setAssignments] = useState<Record<string, number[]>>({});\n const roleOptions = useMemo(() => userRoles.map(r => ({ label: r.userRoleName, value: r.userRoleId })), [userRoles]);\n\n const rows = useMemo<RowData[]>(\n () =>\n (rules || []).map((r, idx) => ({\n key: r.RuleId || r.Name || String(idx),\n ruleName: r.Name || \"-\",\n ruleDesc: r.Description || \"\",\n })),\n [rules]\n );\n\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n setLoading(true);\n const fresh = await rulesApi.getRules();\n if (!cancelled) {\n setLatestRawRules(Array.isArray(fresh) ? fresh : []);\n setAssignments({});\n }\n } catch (e) {\n if (!cancelled && Array.isArray(rawRules)) {\n setLatestRawRules(rawRules);\n }\n } finally {\n if (!cancelled) setLoading(false);\n }\n })();\n return () => { cancelled = true; };\n }, []);\n\n // Fallback: if we have no latestRawRules\n useEffect(() => {\n if (!latestRawRules && Array.isArray(rawRules)) {\n setLatestRawRules(rawRules);\n }\n }, [rawRules]);\n\n const initialAssignments = useMemo<Record<string, number[]>>(() => {\n if (!Array.isArray(latestRawRules) || !latestRawRules.length) return {};\n const map: Record<string, number[]> = {};\n for (const row of rows) {\n const match: any = (latestRawRules as any[]).find((r: any) =>\n r?.ruleId === row.key ||\n r?.ruleName === row.key ||\n r?.RuleId === row.key ||\n r?.ruleName === row.ruleName || // fallback by name\n r?.Name === row.ruleName\n );\n const ids: number[] = Array.isArray(match?.userRoleIds) ? match.userRoleIds : [];\n if (ids.length) {\n map[row.key] = ids;\n }\n }\n return map;\n }, [latestRawRules, rows]);\n\n const handleClear = () => {\n setAssignments({});\n };\n\n const handleSave = async () => {\n try {\n if (!latestRawRules || !Array.isArray(latestRawRules) || Object.keys(assignments).length === 0) {\n toast.info(\"No changes to save\");\n return;\n }\n setLoading(true);\n const updates = Object.entries(assignments).map(async ([ruleId, userRoleIds]) => {\n const original: any = latestRawRules.find((r: any) =>\n r?.ruleId === ruleId || r?.ruleName === ruleId || r?.RuleId === ruleId\n );\n const recordId: number | undefined = typeof original?.recordId === \"number\" ? original.recordId : undefined;\n if (!original || typeof recordId !== \"number\") {\n throw new Error(`Unable to find recordId for rule ${ruleId}`);\n }\n const selectedIds: number[] = Array.isArray(userRoleIds) ? userRoleIds : [];\n const selectedRoles = selectedIds.map(id => {\n const match = userRoles.find(r => r.userRoleId === id);\n return {\n id,\n name: match?.userRoleName ?? String(id),\n };\n });\n const payload = {\n ...original,\n ruleId, // ensure ruleId matches the selected rule\n userRoleIds: selectedIds,\n userRoles: selectedRoles,\n actions: [\n {\n actionTypeId: 4,\n actionTypeUniqueId: \"bc0973d4-9be0-4efb-8545-c9112ba06c1f\",\n name: \"Audible Warning\",\n notificationType: \"Alarm\",\n category: \"Hardware\",\n description: \"Test\",\n isSystemDefined: true,\n isActive: true,\n displayOrder: 0,\n },\n ],\n };\n return rulesApi.updateRule(recordId, payload);\n });\n await Promise.all(updates);\n toast.success(\"Alert assignment saved\");\n try {\n const refreshed = await rulesApi.getRules();\n setLatestRawRules(Array.isArray(refreshed) ? refreshed : []);\n // Clear local pending edits so UI reflects server truth first\n setAssignments({});\n } catch (e) {\n console.error(\"Failed to refresh rules after save\", e);\n }\n } catch (e) {\n console.error(\"Failed to save alert assignment\", e);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <div className=\"w-full\">\n <div className=\"flex items-center justify-between\">\n <Title level={4} className=\"!mb-4\">Alert Assignment</Title>\n \n </div>\n {/* <Spin spinning={loading}> */}\n <Table\n rowKey=\"key\"\n dataSource={rows}\n loading={loading}\n pagination={false}\n columns={[\n { title: \"Rule Name\", dataIndex: \"ruleName\", key: \"ruleName\" },\n { title: \"Description\", dataIndex: \"ruleDesc\", key: \"ruleDesc\" },\n {\n title: \"Alert Notification To\",\n key: \"assign\",\n render: (_: any, row: RowData) => (\n <Select\n mode=\"multiple\"\n placeholder=\"Dropdown with Multi select\"\n className=\"w-full\"\n value={assignments[row.key] ?? initialAssignments[row.key] ?? []}\n onChange={(vals) => setAssignments(prev => ({ ...prev, [row.key]: vals }))}\n options={roleOptions}\n />\n ),\n },\n ]}\n />\n <Space className=\"mt-4\">\n <Button onClick={handleClear} disabled={loading}>Clear</Button>\n <Button\n type=\"primary\"\n onClick={handleSave}\n loading={loading}\n disabled={loading || Object.keys(assignments).length === 0}\n >\n Save\n </Button>\n </Space>\n {/* </Spin> */}\n </div>\n );\n}\n\n\n","import { useMemo, useState, useEffect } from \"react\";\nimport { Typography, Divider, Spin } from \"antd\";\nimport AdminSettingsSection from \"./AdminSettingsSection\";\nimport EscalationRowSection from \"./EscalationRowSection\";\nimport EscalationTableSection from \"./EscalationTableSection\";\nimport AlertAssignment from \"./AlertAssignment\";\nimport { toast } from \"react-toastify\";\nimport { useApi } from \"../../providers/ApiProvider\";\nimport type { ApiRuleItem } from \"../../ports/rules.port\";\nimport { normalizeSortBy } from \"../../utils/preferences\";\n\nconst { Title } = Typography;\n\nexport interface SeverityItem {\n SeverityId: number;\n Code: string;\n DisplayName: string;\n SortOrder: number;\n IsActive: boolean;\n}\n\nexport interface RuleItem {\n RuleId: string;\n Name: string;\n Description: string;\n SeverityId: number;\n}\n\nexport interface UserRoleItem {\n userRoleId: number;\n userRoleName: string;\n}\n\nexport interface SettingsPanelProps {\n severities: SeverityItem[];\n rules: RuleItem[];\n userRoles: UserRoleItem[];\n rawRules?: ApiRuleItem[];\n onSave?: (value: unknown) => void;\n}\n\n//dropdowns labels for admin settings and escalation sttings \ntype SortBy = \"By Severity\" | \"By Created Date\" | \"By Updated Date\";\ntype GroupBy = \"By severity\" | \"By Rules\";\ntype EscBasis = \"severity\" | \"rules\";\n\nexport default function SettingsPanel({ severities, rules, userRoles, rawRules, onSave }: SettingsPanelProps) {\n const { rules: rulesApi, alerts: alertsApi } = useApi();\n const [sortBy, setSortBy] = useState<SortBy>(\"By Severity\");\n const [groupBy, setGroupBy] = useState<GroupBy>(\"By severity\");\n const [savedSortBy, setSavedSortBy] = useState<SortBy>(\"By Severity\");\n const [adminDirty, setAdminDirty] = useState<boolean>(false);\n const [savingAdmin, setSavingAdmin] = useState<boolean>(false);\n const [loadingSettings, setLoadingSettings] = useState<boolean>(false);\n const [settingsError, setSettingsError] = useState<string | null>(null);\n const [escBasis, setEscBasis] = useState<EscBasis>(\"rules\");\n const [selectedSeverity, setSelectedSeverity] = useState<number | undefined>();\n const [selectedRule, setSelectedRule] = useState<string | undefined>();\n\n const [l1mins, setL1mins] = useState<number | undefined>();\n const [l1role, setL1role] = useState<number | undefined>();\n const [l2mins, setL2mins] = useState<number | undefined>();\n const [l2role, setL2role] = useState<number | undefined>();\n const [l3mins, setL3mins] = useState<number | undefined>();\n const [l3role, setL3role] = useState<number | undefined>();\n const [actions, setActions] = useState<string[]>([]);\n const [thirdPartyIds, setThirdPartyIds] = useState<number[]>([]);\n const [humanLoop, setHumanLoop] = useState<boolean>(false);\n const [actionTypeIdToName, setActionTypeIdToName] = useState<Record<number, string>>({});\n const [thirdPartyIdToName, setThirdPartyIdToName] = useState<Record<number, string>>({});\n const [userRolesFromLookups, setUserRolesFromLookups] = useState<UserRoleItem[]>(userRoles || []);\n const [entries, setEntries] = useState<Array<{\n id: string;\n ruleOrSeverityLabel: string;\n l1: { minutes?: number; roles: number[] };\n l2: { minutes?: number; roles: number[] };\n l3: { minutes?: number; roles: number[] };\n actions: string[];\n }>>([]);\n const [savingEscalation, setSavingEscalation] = useState<boolean>(false);\n const [loadingEntries, setLoadingEntries] = useState<boolean>(false);\n // local state for fresh rules data after save\n const [localRules, setLocalRules] = useState<any[]>(rawRules || []);\n\n // sync local rules when rawRules changes\n useEffect(() => {\n if (rawRules && rawRules.length) {\n setLocalRules(rawRules);\n }\n }, [rawRules]);\n\n // Initialize table rows from fetched rules' escalationSettings\n useEffect(() => {\n if (!localRules || !localRules.length) return;\n const mapsReady =\n Object.keys(actionTypeIdToName).length > 0 ||\n Object.keys(thirdPartyIdToName).length > 0;\n if (entries.length && !mapsReady) return; // keep any user added entries until lookups exist\n const next = localRules.map((r, idx) => {\n const label =\n rules.find(x => x.RuleId === (r.ruleId || r.ruleName))?.Name ||\n r.ruleName ||\n (r as any).Name ||\n \"-\";\n const escalation_settings: any = (r as any).escalationSettings || {};\n const l1role = typeof escalation_settings.level1UserRoleId === \"number\" && escalation_settings.level1UserRoleId > 0 ? [escalation_settings.level1UserRoleId] : [];\n const l2role = typeof escalation_settings.level2UserRoleId === \"number\" && escalation_settings.level2UserRoleId > 0 ? [escalation_settings.level2UserRoleId] : [];\n const l3role = typeof escalation_settings.level3UserRoleId === \"number\" && escalation_settings.level3UserRoleId > 0 ? [escalation_settings.level3UserRoleId] : [];\n const actionIds: number[] = Array.isArray(escalation_settings.escalationSettingsActionTypeIds)\n ? escalation_settings.escalationSettingsActionTypeIds\n : [];\n const actionNames: string[] = actionIds.map((id) => actionTypeIdToName[id] || String(id));\n const tpIds: number[] = Array.isArray(escalation_settings.thirdPartyId)\n ? escalation_settings.thirdPartyId\n : [];\n const notifyNames: string[] = tpIds.map((id: number) => thirdPartyIdToName[id] || String(id));\n const humanLoopFlag: boolean | null = typeof escalation_settings.humanLoop === \"boolean\"\n ? escalation_settings.humanLoop\n : null;\n return {\n id: String(r.ruleId || r.ruleName || idx),\n ruleOrSeverityLabel: label,\n l1: { minutes: escalation_settings.level1PostAssistTime ?? undefined, roles: l1role },\n l2: { minutes: escalation_settings.level2PostAssistTime ?? undefined, roles: l2role },\n l3: { minutes: escalation_settings.level3PostAssistTime ?? undefined, roles: l3role },\n actions: actionNames,\n notify: notifyNames,\n humanLoop: humanLoopFlag,\n };\n });\n setEntries(next);\n }, [localRules, rules, actionTypeIdToName, thirdPartyIdToName]);\n\n const severityOptions = useMemo(\n () => severities.map(s => ({ label: s.DisplayName, value: s.SeverityId })),\n [severities]\n );\n const ruleOptions = useMemo(\n () => rules.map(r => ({ label: r.Name, value: r.RuleId })),\n [rules]\n );\n const roleOptions = useMemo(\n () => userRolesFromLookups.map(r => ({ label: r.userRoleName, value: r.userRoleId })),\n [userRolesFromLookups]\n );\n const minsOptions = useMemo(() => (\n [1, 3, 5, 10, 15, 20, 30, 45, 60].map(v => ({ label: `${v}`, value: v }))\n ), []);\n\n // Fetch Admin Settings on mount\n useEffect(() => {\n let cancelled = false;\n async function load() {\n try {\n setLoadingSettings(true);\n setSettingsError(null);\n const data = await alertsApi.getAdminSettings();\n if (!cancelled && data) {\n const srtBy = normalizeSortBy(data.sortBy);\n setSortBy(srtBy);\n setSavedSortBy(srtBy);\n setAdminDirty(false);\n }\n } catch (error: unknown) {\n if (!cancelled) {\n const message = error instanceof Error ? error.message : \"Failed to load admin settings\";\n setSettingsError(message);\n }\n } finally {\n if (!cancelled) setLoadingSettings(false);\n }\n }\n load();\n return () => {\n cancelled = true;\n };\n }, []);\n\n // Prefill escalation settings when a rule is selected (basis: rules)\n useEffect(() => {\n if (!selectedRule) return;\n \n // Helper to convert role ID to number, treating 0 and invalid values as undefined\n const toRoleId = (val: unknown): number | undefined => {\n const num = Number(val);\n return !isNaN(num) && num > 0 ? num : undefined;\n };\n const toMins = (val: unknown): number | undefined => {\n const num = Number(val);\n return !isNaN(num) && num > 0 ? num : undefined;\n };\n \n // Use localRules (which has fresh data after save) instead of rawRules prop\n const found: any = (localRules || []).find((r: any) =>\n r?.ruleId === selectedRule || r?.ruleName === selectedRule || r?.RuleId === selectedRule\n );\n const es = found?.escalationSettings;\n \n if (es && typeof es === \"object\") {\n setL1mins(toMins(es.level1PostAssistTime));\n setL1role(toRoleId(es.level1UserRoleId));\n setL2mins(toMins(es.level2PostAssistTime));\n setL2role(toRoleId(es.level2UserRoleId));\n setL3mins(toMins(es.level3PostAssistTime));\n setL3role(toRoleId(es.level3UserRoleId));\n const actionIds: number[] = Array.isArray(es.escalationSettingsActionTypeIds)\n ? es.escalationSettingsActionTypeIds\n : [];\n setActions(actionIds.map((id: number) => String(id)));\n setThirdPartyIds(Array.isArray(es.thirdPartyId) ? es.thirdPartyId : []);\n setHumanLoop(!!es.humanLoop);\n }\n }, [escBasis, selectedRule, localRules]);\n\n // Helper: refetch rules and rebuild escalation table entries\n const refetchEntries = async () => {\n try {\n setLoadingEntries(true);\n const latest = await rulesApi.getRules();\n const list: any[] = Array.isArray(latest) ? latest : (Array.isArray((latest as any)?.data) ? (latest as any).data : []);\n // Update localRules with fresh data from API\n setLocalRules(list);\n const next = list.map((r: any, idx: number) => {\n const label =\n rules.find(x => x.RuleId === (r.ruleId || r.ruleName))?.Name ||\n r.ruleName ||\n (r as any).Name ||\n \"-\";\n const escalation_settings: any = (r as any).escalationSettings || {};\n const l1role = typeof escalation_settings.level1UserRoleId === \"number\" && escalation_settings.level1UserRoleId > 0 ? [escalation_settings.level1UserRoleId] : [];\n const l2role = typeof escalation_settings.level2UserRoleId === \"number\" && escalation_settings.level2UserRoleId > 0 ? [escalation_settings.level2UserRoleId] : [];\n const l3role = typeof escalation_settings.level3UserRoleId === \"number\" && escalation_settings.level3UserRoleId > 0 ? [escalation_settings.level3UserRoleId] : [];\n const actionIds: number[] = Array.isArray(escalation_settings.escalationSettingsActionTypeIds)\n ? escalation_settings.escalationSettingsActionTypeIds\n : [];\n const actionNames: string[] = actionIds.map((id) => actionTypeIdToName[id] || String(id));\n const tpIds: number[] = Array.isArray(escalation_settings.thirdPartyId)\n ? escalation_settings.thirdPartyId\n : [];\n const notifyNames: string[] = tpIds.map((id: number) => thirdPartyIdToName[id] || String(id));\n const humanLoopFlag: boolean | null = typeof escalation_settings.humanLoop === \"boolean\"\n ? escalation_settings.humanLoop\n : null;\n return {\n id: String(r.ruleId || r.ruleName || idx),\n ruleOrSeverityLabel: label,\n l1: { minutes: escalation_settings.level1PostAssistTime ?? undefined, roles: l1role },\n l2: { minutes: escalation_settings.level2PostAssistTime ?? undefined, roles: l2role },\n l3: { minutes: escalation_settings.level3PostAssistTime ?? undefined, roles: l3role },\n actions: actionNames,\n notify: notifyNames,\n humanLoop: humanLoopFlag,\n };\n });\n setEntries(next);\n } catch (e) {\n console.error(\"Failed to refetch entries\", e);\n } finally {\n setLoadingEntries(false);\n }\n };\n\n // Fetch lookups for third parties once to build id->name mapping\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n const lookups = await rulesApi.getLookups();\n if (cancelled || !lookups) return;\n const map: Record<number, string> = {};\n if (Array.isArray(lookups.thirdParties)) {\n for (const tp of lookups.thirdParties) {\n if (typeof tp.thirdPartyId === \"number\") {\n map[tp.thirdPartyId] = tp.thirdPartyName;\n }\n }\n }\n setThirdPartyIdToName(map);\n const roles = Array.isArray((lookups as any).userRoles)\n ? (lookups as any).userRoles.map((ur: any) => ({\n userRoleId: ur.userRoleId ?? ur.id,\n userRoleName: ur.userRoleName ?? ur.name,\n }))\n : [];\n if (!cancelled) {\n setUserRolesFromLookups(roles.length ? roles : (userRoles || []));\n }\n } catch (e) {\n console.error(\"Error loading lookups\", e);\n }\n })();\n return () => { cancelled = true; }\n }, []);\n\n const handleAdminSave = async () => {\n setSavingAdmin(true);\n try {\n const resp = await alertsApi.setAdminSettings({ sortBy, groupBy: \"string\" }); //once BE removes the field, it will be removed\n if ((resp as any)?.responseStatus && (resp as any)?.data) {\n toast.success((resp as any).data);\n }\n setSavedSortBy(sortBy);\n setAdminDirty(false);\n } catch (e) {\n console.error(\"Error saving admin settings\", e);\n } finally {\n setSavingAdmin(false);\n }\n };\n\n const handleAdminCancel = () => {\n setSortBy(savedSortBy);\n setAdminDirty(false);\n };\n\n\n const handleSave = async () => {\n setSavingEscalation(true);\n const escalationPayload = {\n ruleId: selectedRule,\n levels: [\n { minutes: l1mins, role: l1role },\n { minutes: l2mins, role: l2role },\n { minutes: l3mins, role: l3role },\n ],\n actions,\n thirdPartyIds,\n humanLoop,\n };\n onSave?.(escalationPayload);\n try {\n if (selectedRule) {\n const actionTypeIds = Array.isArray(actions)\n ? actions\n .map((a) => Number(a))\n : [];\n const original: any = (localRules || []).find((r: any) =>\n r?.ruleId === selectedRule || r?.ruleName === selectedRule || r?.RuleId === selectedRule\n );\n const recordId: number | undefined =\n typeof original?.recordId === \"number\" ? original.recordId : undefined;\n if (!original || typeof recordId !== \"number\") {\n toast.error(\"Unable to find rule recordId for update\");\n return;\n }\n const updatedRecord = {\n ...original,\n actions: [ //this will definitely be remoed\n {\n \"actionTypeId\": 4,\n \"actionTypeUniqueId\": \"bc0973d4-9be0-4efb-8545-c9112ba06c1f\",\n \"name\": \"Audible Warning\",\n \"notificationType\": \"Alarm\",\n \"category\": \"Hardware\",\n \"description\": \"Test\",\n \"isSystemDefined\": true,\n \"isActive\": true,\n \"displayOrder\": 0\n }\n ],\n escalationSettings: {\n level1UserRoleId: l1role ?? 0,\n level1PostAssistTime: l1mins ?? 0,\n level2UserRoleId: l2role ?? 0,\n level2PostAssistTime: l2mins ?? 0,\n level3UserRoleId: l3role ?? 0,\n level3PostAssistTime: l3mins ?? 0,\n escalationSettingsActionTypeIds: actionTypeIds,\n thirdPartyId: Array.isArray(thirdPartyIds) ? thirdPartyIds : [],\n humanLoop,\n },\n };\n const resp = await rulesApi.updateRule(recordId, updatedRecord);\n if ((resp as any)?.responseStatus || (resp as any)?.ok || (resp as any)) {\n toast.success(\"Escalation settings saved\");\n await refetchEntries();\n setSelectedRule(undefined);\n setL1mins(undefined); setL1role(undefined);\n setL2mins(undefined); setL2role(undefined);\n setL3mins(undefined); setL3role(undefined);\n setActions([]);\n setThirdPartyIds([]);\n setHumanLoop(false);\n return; // skip local optimistic append\n }\n }\n } catch (e) {\n console.error(\"Error saving escalation settings\", e);\n }\n finally {\n setSavingEscalation(false);\n }\n\n // local append after save\n const ruleOrSeverityLabel = (rules.find(r => r.RuleId === selectedRule)?.Name || \"-\");\n setEntries(prev => [\n ...prev,\n {\n id: `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n ruleOrSeverityLabel,\n l1: { minutes: l1mins, roles: l1role ? [l1role] : [] },\n l2: { minutes: l2mins, roles: l2role ? [l2role] : [] },\n l3: { minutes: l3mins, roles: l3role ? [l3role] : [] },\n actions: (Array.isArray(actions) ? actions : []).map((a) => {\n const id = Number(a);\n return actionTypeIdToName[id] || String(a);\n }),\n notify: (Array.isArray(thirdPartyIds) ? thirdPartyIds : []).map((id) => thirdPartyIdToName[id] || String(id)),\n humanLoop: !!humanLoop,\n },\n ]);\n };\n\n const handleClear = () => {\n setSortBy(\"By Severity\");\n setGroupBy(\"By severity\");\n setEscBasis(\"rules\");\n setSelectedSeverity(undefined);\n setSelectedRule(undefined);\n setL1mins(undefined); setL1role(undefined);\n setL2mins(undefined); setL2role(undefined);\n setL3mins(undefined); setL3role(undefined);\n setActions([]);\n setThirdPartyIds([]);\n setHumanLoop(false);\n };\n\n return (\n <div className=\"w-full\">\n <div className=\"mb-6\">\n <Title level={4} className=\"!mb-2\">Admin Settings</Title>\n <Spin spinning={loadingSettings}>\n {settingsError ? (\n <div className=\"text-sm text-red-600 mb-2\">Failed to load settings: {settingsError}</div>\n ) : null}\n <AdminSettingsSection\n sortBy={sortBy}\n groupBy={groupBy}\n onChange={(patch) => {\n if (patch.sortBy) {\n setSortBy(patch.sortBy);\n setAdminDirty(true);\n }\n if (patch.groupBy) {\n setGroupBy(patch.groupBy);\n setAdminDirty(true);\n }\n }}\n showActions={adminDirty}\n onSave={handleAdminSave}\n onClear={handleAdminCancel}\n saving={savingAdmin}\n />\n </Spin>\n </div>\n\n <Divider className=\"my-6\" />\n\n <div>\n <Title level={4} className=\"!mb-4\">Escalation Settings</Title>\n <EscalationRowSection\n escBasis={escBasis}\n setEscBasis={setEscBasis}\n selectedSeverity={selectedSeverity}\n setSelectedSeverity={setSelectedSeverity as any}\n selectedRule={selectedRule}\n setSelectedRule={setSelectedRule as any}\n severityOptions={severityOptions}\n ruleOptions={ruleOptions}\n minsOptions={minsOptions}\n roleOptions={roleOptions}\n l1mins={l1mins}\n setL1mins={setL1mins as any}\n l1role={l1role}\n setL1role={setL1role}\n l2mins={l2mins}\n setL2mins={setL2mins as any}\n l2role={l2role}\n setL2role={setL2role}\n l3mins={l3mins}\n setL3mins={setL3mins as any}\n l3role={l3role}\n setL3role={setL3role}\n actions={actions}\n setActions={setActions}\n thirdPartyIds={thirdPartyIds}\n setThirdPartyIds={setThirdPartyIds}\n humanLoop={humanLoop}\n setHumanLoop={setHumanLoop}\n onClear={handleClear}\n onSave={handleSave}\n saving={savingEscalation}\n onActionTypesLoaded={(items) => {\n const map: Record<number, string> = {};\n for (const it of items) {\n if (typeof it.actionTypeId === \"number\") {\n map[it.actionTypeId] = it.name;\n }\n }\n setActionTypeIdToName(map);\n }}\n />\n </div>\n\n <Divider className=\"my-6\" />\n\n <EscalationTableSection\n entries={entries}\n userRoles={userRolesFromLookups}\n loading={loadingEntries}\n onEdit={(id) => {\n setEscBasis(\"rules\");\n const row = entries.find(e => e.id === id);\n const matchedRule =\n rules.find(r => r.RuleId === id) ||\n (row ? rules.find(r => r.Name === row.ruleOrSeverityLabel) : undefined);\n setSelectedRule(matchedRule ? matchedRule.RuleId : id);\n }}\n />\n\n <Divider className=\"my-6\" />\n <AlertAssignment userRoles={userRolesFromLookups} rules={rules} rawRules={rawRules} />\n <Divider />\n </div>\n );\n}\n\n\n","import { useState, useEffect } from \"react\";\nimport { Typography, Row, Col, Select, Checkbox, Divider, Space, Button, TimePicker, Spin } from \"antd\";\nimport type { RuleItem, SeverityItem } from \"./settings.types\";\nimport { normalizeSortBy, hmsToDayjs } from \"../../utils/preferences\";\nimport type { Dayjs } from \"dayjs\";\nimport { useApi } from \"../../providers/ApiProvider\";\nimport { toast } from \"react-toastify\";\n\nconst { Title, Text } = Typography;\n\ninterface Props {\n severities: SeverityItem[];\n rules: RuleItem[];\n onSave?: (value: unknown) => void;\n onCancel?: () => void;\n}\n\nexport default function MyPreferencesPanel({ severities: _severities, rules: _rules, onSave, onCancel }: Props) {\n const { rules: rulesApi, alerts: alertsApi } = useApi();\n const sortOptions = [\n { label: \"By Severity\", value: \"By Severity\" },\n { label: \"By Created Date\", value: \"By Created Date\" },\n ];\n\n const [sortBy, setSortBy] = useState<string>(\"By Severity\");\n const [subscribedRuleIds, setSubscribedRuleIds] = useState<Set<string>>(new Set());\n const [dndFrom, setDndFrom] = useState<Dayjs | null>(null);\n const [dndTo, setDndTo] = useState<Dayjs | null>(null);\n const [channels, setChannels] = useState<{ inApp: boolean; sms: boolean; email: boolean }>({ inApp: false, sms: false, email: false });\n const [anomalies, setAnomalies] = useState<Array<{ recordId: number; anomalyName: string }>>([]);\n const [loadingAnomalies, setLoadingAnomalies] = useState<boolean>(true);\n const [isSaving, setIsSaving] = useState<boolean>(false);\n\n // Load preference settings\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n const pref = await alertsApi.getPreferenceSettings();\n if (cancelled || !pref) return;\n setChannels({\n inApp: !!pref.inApp, //convert to bool - as the resp is str\n sms: !!pref.sms,\n email: !!pref.email,\n });\n const normalized = normalizeSortBy(pref.sortBy);\n setSortBy(normalized === \"By Created Date\" ? \"By Created Date\" : \"By Severity\");\n setDndFrom(hmsToDayjs(pref.doNotDisturbStart));\n setDndTo(hmsToDayjs(pref.doNotDisturbEnd));\n if (Array.isArray(pref.anomalyIds)) {\n // store as strings to match checkbox Set<string>\n setSubscribedRuleIds(new Set(pref.anomalyIds.map(x => String(x))));\n }\n } catch(e) {\n console.error(\"Error in loading my preferences: \",e);\n }\n })();\n return () => { cancelled = true; };\n }, []);\n\n // Load anomalies lookups\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n setLoadingAnomalies(true);\n const lookups = await rulesApi.getLookups();\n if (cancelled || !lookups) return;\n const list = Array.isArray((lookups as any).anomalies) ? (lookups as any).anomalies : [];\n setAnomalies(list);\n } catch (e) {\n console.error(\"Failed to load anomalies lookups\", e);\n } finally {\n if (!cancelled) setLoadingAnomalies(false);\n }\n })();\n return () => { cancelled = true; };\n }, []);\n\n const toggleRule = (ruleId: string) => {\n setSubscribedRuleIds(prev => {\n const copy = new Set(prev);\n if (copy.has(ruleId)) copy.delete(ruleId); else copy.add(ruleId);\n return copy;\n });\n };\n\n const handleSave = async () => {\n onSave?.({\n sortBy,\n subscribedRuleIds: Array.from(subscribedRuleIds),\n dnd: {\n from: dndFrom,\n to: dndTo,\n },\n channels,\n });\n try {\n setIsSaving(true);\n const start = dndFrom ? (dndFrom as any).format?.(\"HH:mm:ss\") ?? \"00:00:00\" : \"00:00:00\";\n const end = dndTo ? (dndTo as any).format?.(\"HH:mm:ss\") ?? \"00:00:00\" : \"00:00:00\";\n const anomalyIds = Array.from(subscribedRuleIds)\n .map(x => Number(x))\n .filter(n => Number.isFinite(n)) as number[];\n const resp: any = await alertsApi.setPreferenceSettings({\n anomalyIds,\n doNotDisturbStart: start,\n doNotDisturbEnd: end,\n inApp: !!channels.inApp,\n sms: !!channels.sms,\n email: !!channels.email,\n sortBy,\n });\n if (resp?.responseStatus) {\n toast.success(resp?.data || \"Preferences updated successfully.\");\n }\n } catch(e) {\n console.error(\"Error in saving my preferences: \",e);\n } finally {\n setIsSaving(false);\n }\n };\n\n return (\n <div className=\"w-full\">\n <Row gutter={[16, 16]} align=\"middle\" className=\"mb-4\">\n <Col xs={24} md={8}>\n <Space direction=\"horizontal\" size={12} className=\"w-full items-center\">\n <Text className=\"text-gray-600\">Sort By:</Text>\n <Select className=\"w-[240px]\" value={sortBy} options={sortOptions} onChange={setSortBy} />\n </Space>\n </Col>\n </Row>\n\n <div className=\"mb-4\">\n <Title level={5} className=\"!mb-2\">Anomalies</Title>\n {loadingAnomalies ? (\n <div className=\"py-4\">\n <Spin />\n </div>\n ) : (\n <Space direction=\"vertical\" size={10} className=\"w-full\">\n {(Array.isArray(anomalies) ? anomalies : []).map((a) => {\n const id = String(a.recordId);\n const name = a.anomalyName;\n return (\n <Checkbox key={id} checked={subscribedRuleIds.has(id)} onChange={() => toggleRule(id)}>\n {name}\n </Checkbox>\n );\n })}\n </Space>\n )}\n </div>\n\n <div className=\"mb-4\">\n <Title level={5} className=\"!mb-2\">Notification Timing & Channels</Title>\n <Row gutter={[16, 16]} align=\"middle\" className=\"mb-3\">\n <Col xs={24} md={12}>\n <Space direction=\"horizontal\" size={12} className=\"w-full items-center\">\n <Text>Do Not Disturb mode:</Text>\n <Space size={12} className=\"w-full\">\n <Space direction=\"horizontal\" size={8} className=\"items-center\">\n <Text>From</Text>\n <TimePicker value={dndFrom as any} onChange={(v) => setDndFrom(v)} format=\"HH:mm\" />\n </Space>\n <Space direction=\"horizontal\" size={8} className=\"items-center\">\n <Text>To</Text>\n <TimePicker value={dndTo as any} onChange={(v) => setDndTo(v)} format=\"HH:mm\" />\n </Space>\n </Space>\n </Space>\n </Col>\n </Row>\n <Row gutter={[24, 12]}>\n <Col>\n <Checkbox checked={channels.inApp} onChange={(e) => setChannels({ ...channels, inApp: e.target.checked })}>In-app</Checkbox>\n </Col>\n <Col>\n <Checkbox checked={channels.sms} onChange={(e) => setChannels({ ...channels, sms: e.target.checked })}>SMS</Checkbox>\n </Col>\n <Col>\n <Checkbox checked={channels.email} onChange={(e) => setChannels({ ...channels, email: e.target.checked })}>Email</Checkbox>\n </Col>\n </Row>\n </div>\n\n <Divider />\n\n <Space className=\"gap-3\">\n <Button onClick={onCancel} disabled={isSaving}>Cancel</Button>\n <Button type=\"primary\" onClick={handleSave} loading={isSaving}>Save</Button>\n </Space>\n </div>\n );\n}\n\n\n","import { useState } from \"react\";\nimport type { SeverityItem, RuleItem, UserRoleItem } from \"./settings.types\";\nimport type { ApiRuleItem } from \"../../ports/rules.port\";\nimport SettingsPanel from \"./SettingsPanel\";\nimport MyPreferencesPanel from \"./MyPreferencesPanel\";\n\ninterface SettingsTabsProps {\n severities: SeverityItem[];\n rules: RuleItem[];\n userRoles: UserRoleItem[];\n rawRules?: ApiRuleItem[];\n}\n\nexport default function SettingsTabs({ severities, rules, userRoles, rawRules }: SettingsTabsProps) {\n const [active, setActive] = useState<\"global\" | \"prefs\">(\"global\");\n\n return (\n <div className=\"w-full\">\n <div className=\"inline-flex rounded-xl overflow-hidden border border-gray-200 mb-4\">\n <button\n // type=\"button\"\n onClick={() => setActive(\"global\")}\n className={`px-5 py-2 text-base font-medium outline-none ${\n active === \"global\" ? \" bg-black text-white\" : \" bg-white text-black\"\n }`}\n style={{ border: \"0\" }}\n >\n Global Settings\n </button>\n <button\n // type=\"button\"\n onClick={() => setActive(\"prefs\")}\n className={`px-5 py-2 text-base font-medium outline-none ${\n active === \"prefs\" ? \"bg-black text-white\" : \"bg-white\"\n }`}\n >\n My Preferences\n </button>\n </div>\n\n {active === \"global\" ? (\n <SettingsPanel severities={severities} rules={rules} userRoles={userRoles} rawRules={rawRules} />\n ) : (\n <MyPreferencesPanel severities={severities} rules={rules} />\n )}\n </div>\n );\n}\n\n\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAIZSURBVHgBnZW/b9NAFMe/z3H6i1ZNJUBFQsL/QQkLCFBtRhhKF1ibhBmpXbtgFlYqsTG0gRGWwgAjMb8EYmjYGN0pCCrVVaX+SBxf37PiqHWcOu5Xsux79+6j77vz3RH66IbdsDTQPCFngmBwqMCPBwVXoe204Fd/2ZfrSWMpHrDshtGCvsY9FlKkFNYD+Es/7EtuX+itp1sLnLrScTWoPMYsfnty/lUPtAOs4syiUgQOoWHJpG9kdBiX11Z+UaZCk1YT+vOzACuzYxgf7hZbyBGvhTi9af+7SkQbyKi7M8N4ZJ5D+eU2dg9UN07KvyNOS8io6UkNFXMMj1/vnACKAuTmNXZpIqME+LF+iIbX7ukjkClODWTQw+ujuGYMYfXzXnICbxSBDrxAUvYDhkrZp6ggUC8+sDI7mpj9YmESb3/uJ5Z9TJ5A3eORvzsBpgs6lufGT2TKPNY3fbxh6Knis0FTSjnx+LP3u5DJicDi/t7MCFadPaRJQTl02/5vKcKnpITluYkwrWjksebs48Pvg3SoUkXtq32hxt+1pITI8Zc/zcGACN59ty/WdWnklV5ukZ+49wU8MUJIF3mBGlqUr3Dv1+wpl20v9UuP75pElyrgc3XK7UJFbLvK4DJiv9ggDmWcjO9G4imWvW00yV/hjvtpOFnpQOVLkcO+0EhyevGrROG1ol1hREFc8ZGxyddIje+v9c4i9+gI5z7MozLxclgAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAKeSURBVHgBjVVdbtpAEJ5ZmygPfTBSaVWpUt0bwFuURgJOUG5QeoLACbw+QeAEwA3SGxgJokh9CDeI+xSpTRU/Imw8nbFZx6QQGAl5d2fm229+dkDYI2f6oaUAOwhWExBcPnL4FwFBSLCexpCMf+qPi12++PKgpR/cGOwRa1pwQIjgOoWkf6s/hOVzVd588R+/xWjf5YAY8Y0+ErQrZFfnXg3lK3uGm7A+RISOxfbit5NprqBxxgBoeEIVHehqtI9lSz+5McaaITaA2J17bycFaBayMOS8IaT+zHuv4Ui58P9oAvB4Ga0paUgqbFGswL5idIcIx3P9DCiXrQB7iJawcTiCkMMIUlj7Jo8zr6Yv/EfRXXIqRnzUxnP9u46Id8Q5Sslq3+pqWErHAPKqvxROC/ZMuJwKJ8bkPouUkrYUqgt5IgMDKAxfAYT8nAZnmR2A5J47YSjrFKyOYpZN2SiIJ8YjRqVfASyAFVg9s2F2gXwRsClMXdnYcFpq5PyiQ8KEilaywc79+aEow2i7fdCF46SIpuTvCGi2kWSXjCM4QqS4Zl3yjwQ0UySwrBfGRJNjQKW4ZrmEpL45CxUDTGWdgmoZgxOoDA6zxYgr7ZudhWk3x6Sp4kl0nZmgujQhcH5Cvqy/Hxi5hdL+dgsWxR2rma4FkLeDw+PMM243+t2YB0jDDI9nMBquyWqI3tjmLYguQfqDzxebty/DIcnePr9jfePVfDhSzv2/Hs8LAY3kMmFfTCl+rl3uu1GWF6Jx+X3vkpa+58jeeNyXvY3Pd8N+a0hvgK9ge3hMTmG5CPTnSICWcFpXaDfZUcAck99yOnZM/id3hcmAFV/hgEilU6p0TcH2gpZYS98xc/kXUJ8YImPFzfeLh0cgXbMp8n/yD3ySPZSK0MWKAAAAAElFTkSuQmCC\"","import { Card, Tabs, Steps } from \"antd\";\nimport type { TrackIncidentData, TrackIncidentTimelineItem, NotificationGroup, NotificationRecipient } from \"../../types/trackIncident.types\";\nimport completedPng from '../../assets/completed.png';\nimport pendingPng from '../../assets/pending.png';\n// \n\ntype Props = {\n data: TrackIncidentData;\n};\n\nfunction renderTimelineItem(item: TrackIncidentTimelineItem) {\n const icon =\n (item.status || '').toLowerCase() === 'completed'\n ? <img src={completedPng} alt=\"completed\" style={{ width: 20, height: 20 }} />\n : <img src={pendingPng} alt=\"pending\" style={{ width: 20, height: 20 }} />;\n return {\n title: (\n <div className=\"flex flex-col gap-0 min-w-0\">\n <div className=\"flex flex-col\">\n <span className=\"block text-sm break-words mb-1 overflow-visible whitespace-normal\"><b>{item.title}</b></span>\n {item.description ? <span className=\"text-gray-500 text-xs\">{item.description}</span> : null}\n </div>\n {item.timestamp ? <span className='text-gray-500 text-xs'>{item.timestamp}</span> : null}\n </div>\n ),\n icon,\n description: null as any,\n };\n}\n\nexport default function TrackIncident({ data }: Readonly<Props>) {\n return (\n <div className=\"w-full\">\n <Tabs\n type=\"card\"\n items={[\n {\n key: \"action\",\n label: \"Action Taken\",\n children: (\n <div className=\"w-full\">\n <Card className=\"mb-4 rounded-md p-4\" bordered>\n <div className=\"grid grid-cols-4 gap-6 text-xs\">\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-gray-500\">Alert ID</span>\n <span className=\"text-black\">{data.summary.alertNumber}</span>\n </div>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-gray-500\">Incident ID</span>\n <span className=\"text-black\">{data.summary.incidentId}</span>\n </div>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-gray-500\">Severity</span>\n <span className=\"text-black\">{data.summary.severity}</span>\n </div>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-gray-500\">Location</span>\n <span className=\"text-black\">{data.summary.location}</span>\n </div>\n </div>\n </Card>\n <Card className=\"rounded-md p-4\" bordered>\n <div className=\"flex items-center justify-between\">\n <h4 className=\"text-sm text-black font-medium\">Response Timeline/ Audit trail/log</h4>\n </div>\n <div className=\"mt-2\">\n <Steps\n direction=\"vertical\"\n size=\"small\"\n current={1}\n items={(data.timeline || []).map(renderTimelineItem)}\n />\n </div>\n </Card>\n </div>\n ),\n },\n {\n key: \"notification\",\n label: \"Notification Sent\",\n children: (\n <div className=\"grid grid-cols-2 gap-4\">\n {(data.notifications || []).map((group: NotificationGroup, idx) => (\n <Card key={idx} className=\"rounded-md p-4\" bordered>\n <div className=\"flex items-start justify-between\">\n <div className=\"flex flex-col\">\n <h4 className=\"text-sm text-black font-medium\">{group.channelLabel}</h4>\n <span className=\"text-xs text-gray-500 mt-1\">{group.sentAt}</span>\n </div>\n <span className=\"text-[11px] px-2 py-1 rounded-full bg-green-50 text-green-700 border border-green-200\">{group.delivered}/{group.total} Delivered</span>\n </div>\n <div className=\"mt-4 text-xs\">\n <div className=\"text-black\"> {group.messageTitle}</div>\n {group.messageBody ? <div className=\"text-gray-600\">{group.messageBody}</div> : null}\n </div>\n <div className=\"mt-4\">\n <div className=\"text-xs text-black font-medium\">Recipients ({group.total})</div>\n <div className=\"mt-2 flex flex-col gap-3 text-xs\">\n {(group.recipients || []).map((r: NotificationRecipient, rIdx) => (\n <div key={rIdx} className=\"flex items-center justify-between\">\n <div className=\"flex flex-col\">\n <span className=\"text-black\">{r.name}</span>\n <span className=\"text-gray-500\">{r.role} . {r.phone}</span>\n </div>\n <span className={`text-[11px] px-3 py-[2px] rounded ${r.status === 'Delivered' ? 'bg-green-50 text-green-700 border border-green-200' : 'bg-red-50 text-red-700 border border-red-200'}`}>\n {r.status}\n </span>\n </div>\n ))}\n </div>\n </div>\n </Card>\n ))}\n {!data.notifications?.length ? <span className=\"text-gray-500 text-xs\">No notifications.</span> : null}\n </div>\n ),\n },\n // {\n // key: \"rapidsos\",\n // label: \"RapidSOS\",\n // children: (\n // <Card className=\"rounded-md\" bordered>\n // <div className=\"flex flex-col gap-2 text-xs\">\n // {(data.rapidSOS || []).map((r, idx) => (\n // <div key={idx} className=\"flex justify-between gap-2 border-b border-gray-100 pb-2\">\n // <span className=\"text-black\">{r.event}</span>\n // <span className=\"text-gray-500\">{r.details || ''}</span>\n // <span className=\"text-gray-500\">{r.timestamp}</span>\n // </div>\n // ))}\n // {!data.rapidSOS?.length ? <span className=\"text-gray-500\">No RapidSOS records.</span> : null}\n // </div>\n // </Card>\n // ),\n // },\n ]}\n />\n </div>\n );\n}\n\n\n","import React from 'react';\nimport TrackIncident from './TrackIncident';\nimport type { TrackIncidentData, TimelineState, TrackIncidentTimelineItem } from '../../types/trackIncident.types';\nimport { formatDisplayTimestamp } from '../../utils/dateTimeUtils';\n\n// Props for the TrackIncidentWrapper component\nexport interface TrackIncidentWrapperProps {\n alertId?: string | number;\n id?: string | number;\n priority?: string;\n spaceName?: string;\n alertNumber?: string | number;\n statusHistory?: any[];\n notifGroups?: TrackIncidentData['notifications'];\n}\n\n// Wrapper component that computes TrackIncidentData from raw props\nconst TrackIncidentWrapper: React.FC<TrackIncidentWrapperProps> = ({\n alertId,\n id,\n priority,\n spaceName,\n alertNumber,\n statusHistory,\n notifGroups,\n}) => {\n const summary = {\n alertId: alertId ?? String(id ?? ''),\n incidentId: '-',\n severity: priority || '',\n location: spaceName || '',\n alertNumber: alertNumber ?? '',\n };\n\n const timeline: TrackIncidentTimelineItem[] = statusHistory?.length\n ? statusHistory.map((subject: any) => {\n const computedStatus: TimelineState =\n ((subject?.status || subject?.eventStatus || '').toLowerCase() === 'completed')\n ? 'Completed'\n : 'Inprogress';\n const timestampValue = (() => {\n if (subject?.createdDate) return formatDisplayTimestamp(subject.createdDate);\n if (subject?.timestamp) return formatDisplayTimestamp(subject.timestamp);\n return '';\n })();\n return {\n status: computedStatus,\n title: subject?.status || subject?.eventStatus || 'Status Update',\n description: subject?.description || subject?.actionNotes || '',\n timestamp: timestampValue,\n };\n })\n : [];\n\n const data: TrackIncidentData = {\n summary,\n timeline,\n notifications: notifGroups ?? [],\n };\n\n return <TrackIncident data={data} />;\n};\n\nexport default TrackIncidentWrapper;\n","export function isLikelyVideoUrl(url: unknown): boolean {\n if (!url || typeof url !== \"string\") return false;\n const lower = url.split(\"?\")[0].toLowerCase();\n return (\n lower.endsWith(\".mp4\") ||\n lower.endsWith(\".webm\") ||\n lower.endsWith(\".ogg\") ||\n lower.endsWith(\".m3u8\")\n );\n}\n\nexport function isVideoMedia(media: any): boolean {\n const typeStr = (media?.mediaType || media?.type || \"\").toString().toLowerCase();\n if (typeStr === \"video\" || typeStr === \"mp4\") return true;\n return isLikelyVideoUrl(media?.mediaUrl || media);\n}\n\nexport function normalizeMedia(mediaDetails: unknown): any[] {\n const md: any = mediaDetails as any;\n if (!md) return [];\n if (Array.isArray(md)) return md;\n return [md];\n}\n\n\n","import { Button, Modal, Carousel, Tag, Tabs, Select } from 'antd';\nimport React, { useRef, useState, useEffect } from 'react';\nimport { LeftOutlined, RightOutlined } from '@ant-design/icons';\nimport { toast } from 'react-toastify';\nimport type { AlertModalProps, AlertData } from '../../types/alertModal.types';\nimport TrackIncidentWrapper from './TrackIncidentWrapper';\nimport type { TrackIncidentData, DeliveryStatus } from '../../types/trackIncident.types';\nimport { useUpdateAlertStatus } from '../../hooks/useUpdateAlertStatus';\n\nimport { formatDisplayTimestamp } from '../../utils/dateTimeUtils';\nimport { isVideoMedia, normalizeMedia } from '../../utils/media';\nimport { useApi } from '../../providers/ApiProvider';\n\n// Match AlertsTable.tsx border colors for severity\nconst PRIORITY_BORDER_COLOR: Record<string, string> = {\n Critical: '#FF3B30',\n High: '#FFB86A',\n Medium: '#FFCC00',\n Low: '#007AFF',\n};\n\nconst PRIORITY_ROW_BG_CLASS: Record<string, string> = {\n Critical: \"#FFE2E2\",\n High: \"#FF95004D\",\n Medium: \"#FEF9C2\",\n Low: \"#E0EDFF\",\n};\n\nconst AlertModal: React.FC<AlertModalProps> = ({ isModalOpen, handleModalClose, selectedRow, fetchAlertLogs, alertStatusList = [], alertStatusLoading = false, initialTab = 'details' }) => {\n const [selectedAction, setSelectedAction] = useState<string | number | undefined>();\n const [notes, setNotes] = useState<string>('');\n const [saving, setSaving] = useState<boolean>(false);\n const mediaCarouselRef = useRef<any>(null);\n const [activeTab, setActiveTab] = useState<'details' | 'track'>('details');\n const [notifGroups, setNotifGroups] = useState<TrackIncidentData['notifications']>(undefined);\n const [notifying, setNotifying] = useState<boolean>(false);\n const updateStatus = useUpdateAlertStatus();\n const { alerts, config } = useApi();\n const isSchools = (config as any)?.tenant === 'schools';\n\n const alertData: AlertData = selectedRow?.originalData || {};\n const {\n eventName,\n alertId,\n timestamp,\n description,\n spaceName,\n assignTeam,\n priority,\n statusType,\n id,\n alertDetails,\n statusHistory,\n mediaDetails,\n alertNumber,\n } = alertData;\n const shouldShowNotify = !isSchools && typeof (alertData as any)?.anomalyName === 'string' &&\n String((alertData as any)?.anomalyName || '').toLowerCase().includes('elopement');\n\n const mapDeliveryStatus = (rawStatus?: any): DeliveryStatus => {\n const statusLower = String(rawStatus || '').toLowerCase();\n if (statusLower === 'delivered') return 'Delivered';\n if (statusLower === 'failed') return 'Failed';\n return 'Queued';\n };\n\n const mapRowToRecipient = (r: any) => ({\n name: r?.receipientName || r?.recipientName || '-',\n role: r?.receipientRoleName || '',\n phone: r?.receipentPhoneNumber || r?.recipientPhoneNumber || r?.receipientEmail || r?.recipientEmail || '',\n status: mapDeliveryStatus(r?.messageStatus),\n });\n\n const buildNotificationGroup = (type: string, rows: any[]) => {\n const recipients = rows.map(mapRowToRecipient);\n const delivered = recipients.filter((r) => r.status === 'Delivered').length;\n const latest = rows\n .map((r: any) => r?.sentAt)\n .filter(Boolean)\n .sort((a: any, b: any) => new Date(b).getTime() - new Date(a).getTime())[0];\n const first = rows[0] || {};\n const messageTitle = [first?.severityName, first?.anomalyName].filter(Boolean).join(' - ') || `${type} Notification`;\n return {\n channelLabel: `${type} Notification`,\n sentAt: latest || '',\n messageTitle,\n messageBody: '',\n total: recipients.length,\n delivered,\n recipients,\n };\n };\n\n const processNotifications = (raw: any[]) => {\n const groupsMap = new Map<string, any[]>();\n (raw || []).forEach((row: any) => {\n const key = String(row?.notificationType || 'Unknown');\n const list = groupsMap.get(key) || [];\n list.push(row);\n groupsMap.set(key, list);\n });\n return Array.from(groupsMap.entries()).map(([type, rows]) => buildNotificationGroup(type, rows));\n };\n\n const fetchNotifications = async (alertId: string | number) => {\n try {\n const raw = await alerts.getAlertNotifications(alertId as any);\n const groups = processNotifications(raw);\n setNotifGroups(groups);\n } catch {\n setNotifGroups(undefined);\n }\n };\n\n //fetch notifications when selected alert changes or Track tab becomes active\n useEffect(() => {\n if (activeTab !== 'track' || !id) return;\n let cancelled = false;\n fetchNotifications(id).then(() => {\n if (cancelled) setNotifGroups(undefined);\n });\n return () => { cancelled = true; };\n }, [activeTab, id]);\n\n // whenever the modal opens or initialTab changes, set the active tab\n useEffect(() => {\n if (isModalOpen) {\n setActiveTab(initialTab);\n }\n }, [isModalOpen, initialTab]);\n\n const statusOptions: { value: string | number; label: string }[] =\n (alertStatusList || []).map((s: any) => ({\n value: s.value,\n label: s.statusName\n }));\n\n\n const handleSaveChanges = async () => {\n\n try {\n setSaving(true);\n\n const payload = {\n alertUniqueId: alertId as any,\n alertId: id as any,\n status: selectedAction ? String(selectedAction) : undefined,\n notes: notes.trim(),\n modifiedBy: 0\n };\n\n const response = await updateStatus.mutateAsync(payload as any);\n if ((response)?.responseStatus) {\n const successMsg = (response)?.data || 'Alert updated successfully.';\n toast.success(successMsg, {\n autoClose: 1500,\n onClose: () => {\n fetchAlertLogs();\n handleModalClose();\n }\n });\n setSelectedAction(undefined);\n setNotes('');\n } else {\n const errMsg = (response)?.errorMessage || 'Failed to update alert status';\n toast.error(errMsg);\n }\n } catch (error) {\n console.error('Error updating alert status:', error);\n toast.error('Failed to update alert status. Please try again.');\n } finally {\n setSaving(false);\n }\n };\n\n const handleNotifyFamily = async () => {\n try {\n if (!id) {\n toast.error('Alert ID is missing.');\n return;\n }\n setNotifying(true);\n const targetId = id;\n if (!alerts.notifyFamilyMembers) {\n toast.error('Notify Family is not supported.');\n return;\n }\n const resp: any = await alerts.notifyFamilyMembers(targetId as any);\n if (resp?.responseStatus) {\n const msg = resp?.data || 'Alert Notifications sent to Family Members.';\n toast.success(msg);\n } else {\n const err = resp?.errorMessage || 'Failed to send notifications.';\n toast.error(err);\n }\n } catch (e) {\n console.error('Error notifying family members:', e);\n toast.error('Failed to send notifications. Please try again.');\n } finally {\n setNotifying(false);\n }\n };\n return (\n <Modal\n // title=\"Alert Detail\"\n open={isModalOpen}\n onCancel={handleModalClose}\n width={1000}\n styles={{\n body: {\n maxHeight: '70vh',\n overflowY: 'auto',\n }\n }}\n footer={\n activeTab === 'details'\n ? (\n <div className=\"flex flex-row gap-2 justify-start\">\n <Button onClick={handleModalClose} className='bg-[#6C757D] text-white'>Cancel</Button>\n <Button\n type=\"primary\"\n onClick={handleSaveChanges}\n loading={saving}\n >\n {saving ? 'Saving...' : 'Save Changes'}\n </Button>\n </div>\n )\n : null\n }\n >\n {selectedRow && (\n <Tabs\n activeKey={activeTab}\n onChange={(key) => setActiveTab(key as 'details' | 'track')}\n items={[\n {\n key: 'details',\n label: 'Alert Detail',\n children: (\n <div className='grid grid-cols-2 gap-2'>\n <div className='flex flex-col gap-2'>\n <div className='text-sm font-bold'>{eventName || 'Alert Event'}</div>\n {alertDetails?.firstName ? <div className='text-sm text-gray-500'>\n Resident ID/Name: {alertDetails?.firstName} {alertDetails?.lastName || \"\"} &nbsp; {alertDetails?.residentId || \"\"}\n </div> : null}\n <div className='text-sm text-gray-500'>\n Timestamp: {formatDisplayTimestamp(timestamp)}\n </div>\n <div className=\"font-sm text-gray-500\">\n <b className='text-black text-sm/6'>Description:</b> {description || 'No description available'}\n </div>\n {spaceName && (\n <div className=\"font-sm text-gray-500\">\n Space: {spaceName}\n </div>\n )}\n {assignTeam && (\n <div className=\"font-sm text-gray-500\">\n Assigned to: {assignTeam}\n </div>\n )}\n <div className='flex gap-2 justify-start mt-3'>\n <Tag\n className=\"font-sm text-gray-500 rounded-[8px] py-2 px-3\"\n style={{\n border: `2px solid ${PRIORITY_BORDER_COLOR[String(priority)] || '#DFE4EA'}`,\n backgroundColor: PRIORITY_ROW_BG_CLASS[String(priority)]\n }}\n >\n Severity: {priority || 'N/A'}\n </Tag>\n {/* <Tag className=\"font-sm text-gray-500 rounded-[8px] py-2 px-3\">\n Shared With: {type || 'N/A'}\n </Tag> */}\n <Tag\n className=\"font-sm text-gray-500 rounded-[8px] py-2 px-3\"\n style={\n String(statusType || '').toLowerCase() === 'completed'\n ? { background: '#E7F6EC', border: '0.68px solid var(--Green, #34C759)' }\n : { background: '#E0EDFF', border: '1px solid var(--Grays-Gray-4, #D1D1D6)' }\n }\n >\n Status: {statusType || 'N/A'}\n </Tag>\n </div>\n {/* </div> */}\n <div className=\"w-full flex flex-col justify-start items-start mt-2 font-bold\">\n <div className=\"w-full mt-4\">\n <div className=\"flex flex-col gap-2\">\n\n <Select\n placeholder=\"Change Status\"\n className=\"w-full text-gray-500\"\n onChange={(value) => setSelectedAction(value)}\n value={selectedAction}\n options={statusOptions}\n loading={alertStatusLoading}\n />\n </div>\n <div className=\"flex flex-col gap-2 mt-3\">\n <label htmlFor=\"action-details-input\" className=\"text-xs text-gray-500 font-medium\">Action Taken (Comments)</label>\n <textarea\n id=\"action-details-input\"\n placeholder=\"Enter details...\"\n className=\"w-full text-gray-500 h-20 border border-grey-500 rounded-md p-2\"\n value={notes}\n onChange={(e) => setNotes(e.target.value)}\n />\n\n </div>\n {shouldShowNotify && (\n <div className='border border-[#DFE4EA] rounded-md px-4 py-2 flex flex-row justify-between items-center mt-4 mb-8'>\n <label htmlFor='notify-family-button' className='text-xs font-medium'>Alert notification will be sent to all Family Members.</label>\n <Button\n loading={notifying}\n onClick={handleNotifyFamily}\n disabled={notifying}\n className='bg-black text-white rounded-md px-4 py-2 text-xs disabled:opacity-60 disabled:cursor-not-allowed'\n >\n Notify Family\n </Button>\n </div>\n )}\n </div>\n </div>\n </div>\n <div className='flex flex-col gap-4'>\n <div className=\"w-full mt-1\">\n <div className=\"w-full flex items-center justify-between\">\n <h3 className='text-black font-bold text-sm'>Camera Footage</h3>\n {normalizeMedia(mediaDetails).length ? (\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => mediaCarouselRef.current?.prev?.()}\n className=\"w-6 h-6 flex items-center justify-center rounded-full bg-gray-200 hover:bg-gray-300 text-gray-600\"\n aria-label=\"Previous media\"\n >\n <LeftOutlined style={{ fontSize: 12 }} />\n </button>\n <button\n type=\"button\"\n onClick={() => mediaCarouselRef.current?.next?.()}\n className=\"w-6 h-6 flex items-center justify-center rounded-full bg-gray-200 hover:bg-gray-300 text-gray-600\"\n aria-label=\"Next media\"\n >\n <RightOutlined style={{ fontSize: 12 }} />\n </button>\n </div>\n ) : null}\n </div>\n {normalizeMedia(mediaDetails).length ? (\n <div className=\"w-full\">\n <Carousel ref={mediaCarouselRef} dots className=\"w-full\">\n {normalizeMedia(mediaDetails).map((media: any, index: number) => (\n <div key={index} className=\"flex justify-center items-center\">\n {isVideoMedia(media) ? (\n <video\n width=\"240\"\n height=\"200\"\n controls\n className='max-w-full max-h-[90vh] object-contain rounded-lg shadow-lg'\n >\n <source src={media.mediaUrl || media} />\n Your browser does not support the video tag.\n </video>\n ) : (\n <img\n src={media.mediaUrl || media}\n alt={media.caption || `media-${index}`}\n className='max-w-full max-h-[90vh] object-contain rounded-lg shadow-lg'\n />\n )}\n {media.caption && (\n <p className=\"text-xs text-gray-500 mt-1\">{media.caption}</p>\n )}\n </div>\n ))}\n </Carousel>\n </div>\n ) : null}\n </div>\n </div>\n </div>\n )\n },\n {\n key: 'track',\n label: 'Track Incident',\n children: (\n <TrackIncidentWrapper\n alertId={alertId}\n id={id}\n priority={priority}\n spaceName={spaceName}\n alertNumber={alertNumber}\n statusHistory={statusHistory}\n notifGroups={notifGroups}\n />\n )\n }\n ]}\n />\n )}\n </Modal>\n );\n};\n\nexport default AlertModal;\n\n\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useApi } from \"../providers/ApiProvider\";\nimport type { AlertStatusListItem } from \"../ports/alerts.port\";\n\nexport function useAlertStatusList() {\n const { alerts } = useApi();\n const query = useQuery<AlertStatusListItem[], Error>({\n queryKey: [\"alerts\", \"statusList\"],\n queryFn: () => alerts.getAlertStatusList(),\n staleTime: 5 * 60_000,\n });\n return {\n list: query.data ?? [],\n loading: query.isLoading,\n error: query.error,\n refetch: query.refetch,\n };\n}\n\n\n","import { Tabs } from \"antd\";\nimport AlertsTable from \"../Alerts/AlertsTable\";\nimport type { Alert } from \"../../types/alerts.types\";\nimport ArchivedTable from \"../Archived/ArchivedTable\";\nimport Clock from \"../Clock/Clock\";\nimport settingsDummy from \"../../data/settingsDummy.json\";\nimport SettingsTabs from \"../Settings/SettingsTabs\";\nimport { useEffect, useState } from \"react\";\nimport AlertModal from \"../AlertModal/AlertModal\";\nimport { useAlertStatusList } from \"../../hooks/useAlertStatusList\";\nimport type { AlertConsoleProps } from \"../../types/alertConsole.types\";\nimport type { ApiRuleItem } from \"../../ports/rules.port\";\nimport type { RuleItem, UserRoleItem } from \"../Settings/settings.types\";\nimport { useApi } from \"../../providers/ApiProvider\";\n\nexport default function AlertConsole({ alerts, loading = false, columns, onRefetch }: AlertConsoleProps) {\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [selectedAlert, setSelectedAlert] = useState<Alert | null>(null);\n const [initialAlertTab, setInitialAlertTab] = useState<\"details\" | \"track\">(\"details\");\n const { list: alertStatusList, loading: alertStatusLoading } = useAlertStatusList();\n\n function handleOpenAlert(record: Alert, opts?: { tab?: \"details\" | \"track\" }) {\n setSelectedAlert(record);\n setInitialAlertTab(opts?.tab ?? \"details\");\n setIsModalOpen(true);\n }\n\n function handleCloseModal() {\n setIsModalOpen(false);\n }\n\n const selectedRow = selectedAlert\n ? {\n originalData: {\n // include the full selected alert so alll modal fieldsare present\n ...selectedAlert,\n // ensure alertId is available even if backend uses id\n alertId: (selectedAlert as any).alertId ?? selectedAlert.id,\n mediaDetails: (selectedAlert as any).mediaDetails,\n } as any,\n }\n : null;\n\n return (\n <div className=\"p-6 flex flex-col items-start justify-start min-h-screen w-full overflow-auto\">\n <div className=\"w-1/2 flex items-center justify-between mb-4\">\n <h1 className=\"text-xl font-bold text-black\">Alert Console</h1>\n <Clock label=\"USA\" timeZone=\"America/New_York\" />\n </div>\n <Tabs\n defaultActiveKey=\"active\"\n className=\"w-full\"\n tabBarStyle={{ fontSize: 'medium' }}\n onChange={(activeKey) => {\n if (activeKey === \"active\") {\n onRefetch?.();\n }\n }}\n items={[\n {\n key: \"active\",\n label: \"Active\",\n children: (\n <AlertsTable data={alerts} loading={loading} pageSize={10} columns={columns || []} onAlertIdClick={handleOpenAlert} onRefetch={onRefetch} />\n ),\n },\n {\n key: \"archived\",\n label: \"Archived\",\n children: (\n <ArchivedTable alerts={alerts} loading={loading} columns={columns || []} onAlertIdClick={handleOpenAlert} />\n ),\n },\n {\n key: \"settings\",\n label: \"Settings\",\n children: (\n <SettingsDataWrapper />\n ),\n },\n // {\n // key: \"reports\",\n // label: \"Reports\",\n // children: <ReportsPanel />,\n // },\n ]}\n />\n <AlertModal\n isModalOpen={isModalOpen}\n handleModalClose={handleCloseModal}\n selectedRow={selectedRow as any}\n fetchAlertLogs={() => {}}\n alertStatusList={alertStatusList}\n alertStatusLoading={alertStatusLoading}\n initialTab={initialAlertTab}\n />\n </div>\n );\n}\n\nfunction SettingsDataWrapper() {\n const [rules, setRules] = useState<RuleItem[]>([]);\n const [userRoles, setUserRoles] = useState<UserRoleItem[]>([]);\n const [rawRules, setRawRules] = useState<ApiRuleItem[]>([]);\n const { rules: rulesApi } = useApi();\n\n useEffect(() => {\n let mounted = true;\n (async () => {\n try {\n const data = await rulesApi.getRules();\n if (!mounted) return;\n setRawRules(Array.isArray(data) ? data : []);\n const mappedRules: RuleItem[] = (data || []).map((r: ApiRuleItem, idx) => ({\n RuleId: r.ruleId || r.ruleName || String(idx),\n Name: r.ruleName || (r as any).Name || \"-\",\n Description: r.ruleDesc || (r as any).Description || \"\",\n SeverityId: 0,\n }));\n setRules(mappedRules.length ? mappedRules : (settingsDummy.rules as any));\n\n try {\n const lookups = await rulesApi.getLookups();\n const roles = Array.isArray((lookups as any)?.userRoles)\n ? (lookups as any).userRoles.map((ur: any) => ({\n userRoleId: ur.userRoleId ?? ur.id,\n userRoleName: ur.userRoleName ?? ur.name,\n }))\n : [];\n setUserRoles(roles.length ? roles : (settingsDummy.userRoles as any));\n } catch {\n setUserRoles(settingsDummy.userRoles as any);\n }\n } catch {\n setRules(settingsDummy.rules as any);\n setUserRoles(settingsDummy.userRoles as any);\n }\n })();\n return () => { mounted = false; };\n }, []);\n\n return (\n <SettingsTabs\n severities={settingsDummy.severities as any}\n rules={rules}\n userRoles={userRoles}\n rawRules={rawRules}\n />\n );\n}\n\n\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useApi } from \"../providers/ApiProvider\";\nimport type { Alert } from \"../types/alerts.types\";\n\nexport function useAlerts() {\n const { alerts } = useApi();\n const query = useQuery<Alert[], Error>({\n queryKey: [\"alerts\", \"list\"],\n queryFn: () => alerts.listAlerts(),\n staleTime: 30_000,\n });\n return {\n alerts: query.data ?? [],\n loading: query.isLoading,\n error: query.error,\n refetch: query.refetch,\n };\n}\n\n\n","import { useMemo, useState } from \"react\";\nimport AlertConsole from \"./components/AlertConsole/AlertConsole\";\nimport type { Alert } from \"./types/alerts.types\";\nimport type { ColumnsType } from \"antd/es/table\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { ApiProvider } from \"./providers/ApiProvider\";\nimport type { TenantId } from \"./config/tenants\";\nimport { useAlerts } from \"./hooks/useAlerts\";\n\nexport type AlertConsoleWidgetProps = {\n tenant: TenantId;\n apiDomain: string;\n rulesDomain?: string;\n headers?: Record<string, string>;\n alerts?: Alert[];\n loading?: boolean;\n columns?: ColumnsType<Alert>;\n};\n\nfunction ConnectedAlertConsole(props: { columns?: ColumnsType<Alert> }) {\n const { alerts, loading, refetch } = useAlerts();\n return <AlertConsole alerts={alerts} loading={loading} columns={props.columns} onRefetch={refetch} />;\n}\n\nexport default function AlertConsoleWidget({\n tenant,\n apiDomain,\n rulesDomain,\n headers,\n alerts,\n loading,\n columns,\n}: AlertConsoleWidgetProps) {\n const [queryClient] = useState(() => new QueryClient());\n const override = useMemo(\n () => ({\n alertsBaseUrl: apiDomain,\n rulesBaseUrl: rulesDomain || apiDomain,\n headers: headers || undefined,\n }),\n [apiDomain, rulesDomain, headers]\n );\n\n return (\n <QueryClientProvider client={queryClient}>\n <ApiProvider tenant={tenant} override={override}>\n {Array.isArray(alerts) ? (\n <AlertConsole alerts={alerts} loading={!!loading} columns={columns} />\n ) : (\n <ConnectedAlertConsole columns={columns} />\n )}\n </ApiProvider>\n </QueryClientProvider>\n );\n}\n\n\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useApi } from \"../providers/ApiProvider\";\nimport type { AlertsReportQuery, AlertReport } from \"../types/reports.types\";\n\nexport function useAlertsReport(params: AlertsReportQuery) {\n const { alerts } = useApi();\n const query = useQuery<AlertReport[], Error>({\n queryKey: [\"alerts\", \"report\", params],\n queryFn: () => alerts.getAlertsReport(params),\n staleTime: 60_000,\n });\n return {\n data: query.data ?? [],\n loading: query.isLoading,\n error: query.error,\n refetch: query.refetch,\n };\n}\n\n\n","export { default as AlertConsoleWidget } from \"./AlertConsoleWidget\";\nexport { default as AlertConsole } from \"./components/AlertConsole/AlertConsole\";\nexport { ApiProvider, useApi } from \"./providers/ApiProvider\";\nexport type { TenantId } from \"./config/tenants\";\nexport type { AlertConsoleWidgetProps } from \"./AlertConsoleWidget\";\nexport type { AlertConsoleProps } from \"./types/alertConsole.types\";\nexport type { Alert } from \"./types/alerts.types\";\n\nexport { default as AlertsTable } from \"./components/Alerts/AlertsTable\";\nexport { default as DataTable } from \"./components/DataTable/DataTable\";\nexport type { OptionItem } from \"./components/Alerts/Filters/FilterSelect\";\nexport { default as ArchivedTable } from \"./components/Archived/ArchivedTable\";\nexport { default as Clock } from \"./components/Clock/Clock\";\nexport { default as SettingsPanel } from \"./components/Settings/SettingsPanel\";\nexport { default as AlertAssignment } from \"./components/Settings/AlertAssignment\";\nexport { default as MyPreferencesPanel } from \"./components/Settings/MyPreferencesPanel\";\nexport { default as SettingsTabs } from \"./components/Settings/SettingsTabs\";\nexport { useAlerts } from \"./hooks/useAlerts\";\nexport { useAlertsReport } from \"./hooks/useAlertsReport\";\nexport { useAlertStatusList } from \"./hooks/useAlertStatusList\";\nexport { useUpdateAlertStatus } from \"./hooks/useUpdateAlertStatus\";\n\nimport type { ColumnsType } from \"antd/es/table\";\nimport type { Alert } from \"./types/alerts.types\";\n\nexport const exampleAlertColumns: ColumnsType<Alert> = [\n { title: \"ID\", dataIndex: \"id\", key: \"id\", width: 120 },\n { title: \"Priority\", dataIndex: \"priority\", key: \"priority\", width: 120 },\n { title: \"Timestamp\", dataIndex: \"timestamp\", key: \"timestamp\", width: 220 },\n { title: \"Status\", dataIndex: \"statusType\", key: \"statusType\", width: 140 },\n { title: \"Description\", dataIndex: \"description\", key: \"description\" },\n];\n"],"names":["PRIORITY_HEX","palette","getPriorityHexColor","priority","parseHmsToSeconds","timeStr","parts","hh","mm","ss","hours","minutes","seconds","safeHours","safeMinutes","safeSeconds","parseThirdPartyIds","record","raw","asString","ids","s","n","seen","unique","SNL_ALERTS","SNL_RULES","SCHOOLS_ALERTS","SCHOOLS_RULES","tenantDomains","joinUrl","base","path","trimmedBase","normalizedPath","getAuthHeader","token","buildUrlWithParams","baseUrl","params","url","k","v","doRequest","init","mergedHeaders","res","text","data","message","createAlertsAdapter","config","headers","query","payload","body","isSuccess","alertId","isEmail","isSMS","createRulesAdapter","cfg","lookupsUrl","recordId","putUrl","t","e","module","this","r","i","u","a","o","c","f","h","d","l","$","y","M","m","g","D","p","S","_","w","O","b","normalizeSortBy","input","parseHms","hmsToDayjs","dayjs","firstDefined","values","mapSchoolsAlert","api","createSchoolsAlertsAdapter","toTicks","hms","x","createSchoolsRulesAdapter","makeUrl","requests","actionTypesRes","anomaliesRes","thirdPartyRes","severitiesRes","scheduleTypesRes","getArray","rawActionTypes","rawAnomalies","rawThirdParties","rawSeverities","rawScheduleTypes","actionTypes","actions","anomalies","thirdParties","tp","lookups","ApiContext","createContext","ApiProvider","tenant","override","children","useMemo","alertsBaseUrl","rulesBaseUrl","value","alertsAdapter","createSnlAlertsAdapter","rulesAdapter","createSnlRulesAdapter","jsx","useApi","context","useContext","PRIORITY_ROW_BG_CLASS","PRIORITY_BORDER_TEXT_CLASS","THIRD_PARTY_EMAIL_ID","THIRD_PARTY_SMS_ID","getNotificationButtonState","thirdPartyId","defaultTitle","isEmailButton","isSmsButton","isEmailSent","isSmsSent","isDisabled","buttonText","tooltipTitle","computeAnomalyOptions","set","item","name","opts","computeSpaceOptions","getButtonLoadingKey","isNotificationButton","FilterSelect","onChange","options","className","dropdownWidth","Select","defaultOptions","PrioritySelect","AnomalyTypeSelect","SpaceSelect","ActionTakenSelect","DataTable","columns","loading","pageSize","rowKey","toolbar","tableProps","Table","total","AlertsTable","externalColumns","severityOptions","spaceOptions","renderActions","onAlertIdClick","onRefetch","excludeCompleted","severity","setSeverity","useState","anomalyType","setAnomalyType","space","setSpace","actionTaken","setActionTaken","search","setSearch","actionOptions","setActionOptions","loadingButtons","setLoadingButtons","rules","alerts","thirdPartyAssetMap","MailOutlined","MessageOutlined","computedAnomalyOptions","computedSpaceOptions","useEffect","mounted","hasAnyThirdPartyIds","filteredData","matchesSeverity","textSearch","matchesSearch","matchesAnomaly","matchesSpace","matchesAction","matchesCompleted","anomalyOptionsToUse","spaceOptionsToUse","defaultColumns","Tag","Fragment","handleSendNotification","buttonKey","prev","response","toast","error","next","Space","id","map","isLoading","handleClick","Tooltip","Button","_ts","elapsedStr","remainingStr","elapsedSec","remainingSec","percent","jsxs","Progress","columnsToUse","Row","Col","Input","Subscribable","listener","defaultTimeoutProvider","callback","delay","timeoutId","intervalId","TimeoutManager","#provider","#providerCalled","provider","timeoutManager","systemSetTimeoutZero","isServer","noop","functionalUpdate","updater","isValidTimeout","timeUntilStale","updatedAt","staleTime","resolveStaleTime","resolveEnabled","enabled","matchQuery","filters","type","exact","fetchStatus","predicate","queryKey","stale","hashQueryKeyByOptions","partialMatchKey","isActive","matchMutation","mutation","status","mutationKey","hashKey","val","isPlainObject","result","key","hasOwn","replaceEqualDeep","array","isPlainArray","aSize","bItems","bSize","copy","equalItems","aItem","bItem","shallowEqualObjects","hasObjectPrototype","ctor","prot","sleep","timeout","resolve","replaceData","prevData","addToEnd","items","max","newItems","addToStart","skipToken","ensureQueryFn","fetchOptions","shouldThrowError","throwOnError","addConsumeAwareSignal","object","getSignal","onCancelled","consumed","signal","FocusManager","#focused","#cleanup","#setup","onFocus","setup","focused","isFocused","focusManager","pendingThenable","reject","thenable","_resolve","_reject","finalize","reason","defaultScheduler","createNotifyManager","queue","transactions","notifyFn","batchNotifyFn","scheduleFn","schedule","flush","originalQueue","args","fn","notifyManager","OnlineManager","#online","onOnline","onlineListener","offlineListener","online","onlineManager","defaultRetryDelay","failureCount","canFetch","networkMode","CancelledError","createRetryer","isRetryCancelled","continueFn","isResolved","cancel","cancelOptions","cancelRetry","continueRetry","canContinue","canStart","pause","continueResolve","run","promiseOrValue","initialPromise","retry","retryDelay","shouldRetry","Removable","#gcTimeout","newGcTime","Query","#initialState","#revertState","#cache","#client","#retryer","#defaultOptions","#abortSignalConsumed","getDefaultState","defaultState","successState","newData","#dispatch","state","setStateOptions","promise","observer","abortController","addSignalProperty","fetchFn","queryFn","queryFnContext","queryFnContext2","context2","action","reducer","fetchState","newState","dataUpdatedAt","hasData","initialDataUpdatedAt","QueryObserver","client","#selectError","#currentThenable","#currentQuery","#currentQueryInitialState","#currentResult","#currentResultState","#currentResultOptions","#selectFn","#selectResult","#lastQueryWithDefinedData","#staleTimeoutId","#refetchIntervalId","#currentRefetchInterval","#trackedProps","shouldFetchOnMount","#executeFetch","#updateTimers","shouldFetchOn","#clearStaleTimeout","#clearRefetchInterval","prevOptions","prevQuery","#updateQuery","shouldFetchOptionally","#updateStaleTimeout","nextRefetchInterval","#computeRefetchInterval","#updateRefetchInterval","shouldAssignObserverCurrentProperties","onPropTracked","target","defaultedOptions","nextInterval","prevResult","prevResultState","prevResultOptions","queryInitialState","isPlaceholderData","fetchOnMount","fetchOptionally","errorUpdatedAt","skipSelect","placeholderData","selectError","isFetching","isPending","isError","nextResult","isStale","finalizeThenableIfPossible","recreateThenable","pending","prevThenable","shouldNotifyListeners","notifyOnChangeProps","notifyOnChangePropsValue","includedProps","typedKey","#notify","notifyOptions","shouldLoadOnMount","field","optimisticResult","infiniteQueryBehavior","pages","direction","oldPages","oldPageParams","currentPage","cancelled","fetchPage","param","previous","page","maxPages","addTo","pageParamFn","getPreviousPageParam","getNextPageParam","oldData","remainingPages","pageParams","lastIndex","Mutation","#observers","#mutationCache","variables","onContinue","mutationFnContext","restored","isPaused","MutationCache","#mutations","#scopes","#mutationId","scope","scopeFor","scopedMutations","index","firstPendingMutation","defaultedFilters","event","pausedMutations","MutationObserver","#currentMutation","#mutateOptions","#updateResult","onMutateResult","QueryCache","#queries","queryHash","queryInMap","queries","QueryClient","#queryCache","#queryDefaults","#mutationDefaults","#mountCount","#unsubscribeFocus","#unsubscribeOnline","cachedData","queryCache","defaultedCancelOptions","promises","defaults","queryDefault","QueryClientContext","React","useQueryClient","queryClient","QueryClientProvider","IsRestoringContext","useIsRestoring","createValue","isReset","QueryErrorResetBoundaryContext","useQueryErrorResetBoundary","ensurePreventErrorBoundaryRetry","errorResetBoundary","useClearResetErrorBoundary","getHasError","suspense","ensureSuspenseTimers","clamp","originalStaleTime","willFetch","isRestoring","shouldSuspend","fetchOptimistic","useBaseQuery","Observer","isNewCacheEntry","shouldSubscribe","onStoreChange","unsubscribe","useQuery","useMutation","mutate","mutateOptions","useUpdateAlertStatus","qClient","getTimeString","date","timeZone","getAbbrAndOffset","abbr","offset","offPart","formatTimestamp","pad","MM","DD","YYYY","HH","formatDisplayTimestamp","ts","ArchivedTable","completedStatus","anomalyOptions","updateStatus","handleReopen","successMsg","errMsg","archivedColumns","Dropdown","MoreOutlined","filtered","AnalogClockUSA","size","time","secondAngle","minuteAngle","hourAngle","center","angle","markerLength","outerRadius","innerRadius","rad","x1","y1","x2","y2","Clock","label","updateIntervalMs","now","setNow","timeString","AnalogClock","Text","Typography","AdminSettingsSection","sortBy","showActions","onSave","onClear","saving","EscalationRowSection","props","selectedRule","setSelectedRule","ruleOptions","minsOptions","roleOptions","l1mins","setL1mins","l1role","setL1role","l2mins","setL2mins","l2role","setL2role","l3mins","setL3mins","l3role","setL3role","setActions","thirdPartyIds","setThirdPartyIds","humanLoop","setHumanLoop","onActionTypesLoaded","rulesApi","actionOptionsState","setActionOptionsState","thirdPartyOptionsState","setThirdPartyOptionsState","loadingLookups","setLoadingLookups","mapped","at","hasAnyInput","canSave","Spin","Checkbox","EscalationTableSection","entries","userRoles","onEdit","roleMap","getRoleNames","row","EditOutlined","Title","AlertAssignment","rawRules","setLoading","latestRawRules","setLatestRawRules","assignments","setAssignments","rows","idx","fresh","initialAssignments","match","handleClear","handleSave","updates","ruleId","userRoleIds","original","selectedIds","selectedRoles","refreshed","vals","SettingsPanel","severities","alertsApi","setSortBy","groupBy","setGroupBy","savedSortBy","setSavedSortBy","adminDirty","setAdminDirty","savingAdmin","setSavingAdmin","loadingSettings","setLoadingSettings","settingsError","setSettingsError","escBasis","setEscBasis","selectedSeverity","setSelectedSeverity","actionTypeIdToName","setActionTypeIdToName","thirdPartyIdToName","setThirdPartyIdToName","userRolesFromLookups","setUserRolesFromLookups","setEntries","savingEscalation","setSavingEscalation","loadingEntries","setLoadingEntries","localRules","setLocalRules","mapsReady","escalation_settings","actionNames","notifyNames","humanLoopFlag","load","srtBy","toRoleId","num","toMins","es","actionIds","refetchEntries","latest","list","roles","ur","handleAdminSave","resp","handleAdminCancel","actionTypeIds","updatedRecord","ruleOrSeverityLabel","patch","Divider","it","matchedRule","MyPreferencesPanel","_severities","_rules","onCancel","sortOptions","subscribedRuleIds","setSubscribedRuleIds","dndFrom","setDndFrom","dndTo","setDndTo","channels","setChannels","setAnomalies","loadingAnomalies","setLoadingAnomalies","isSaving","setIsSaving","pref","normalized","toggleRule","start","end","anomalyIds","TimePicker","SettingsTabs","active","setActive","completedPng","pendingPng","renderTimelineItem","icon","TrackIncident","Tabs","Card","Steps","group","rIdx","TrackIncidentWrapper","spaceName","alertNumber","statusHistory","notifGroups","summary","timeline","subject","computedStatus","timestampValue","isLikelyVideoUrl","lower","isVideoMedia","media","typeStr","normalizeMedia","mediaDetails","md","PRIORITY_BORDER_COLOR","AlertModal","isModalOpen","handleModalClose","selectedRow","fetchAlertLogs","alertStatusList","alertStatusLoading","initialTab","selectedAction","setSelectedAction","notes","setNotes","setSaving","mediaCarouselRef","useRef","activeTab","setActiveTab","setNotifGroups","notifying","setNotifying","isSchools","alertData","eventName","timestamp","description","assignTeam","statusType","alertDetails","shouldShowNotify","mapDeliveryStatus","rawStatus","statusLower","mapRowToRecipient","buildNotificationGroup","recipients","delivered","first","messageTitle","processNotifications","groupsMap","fetchNotifications","groups","statusOptions","handleSaveChanges","handleNotifyFamily","targetId","msg","err","Modal","LeftOutlined","RightOutlined","Carousel","useAlertStatusList","AlertConsole","setIsModalOpen","selectedAlert","setSelectedAlert","initialAlertTab","setInitialAlertTab","handleOpenAlert","handleCloseModal","activeKey","SettingsDataWrapper","setRules","setUserRoles","setRawRules","mappedRules","settingsDummy","useAlerts","ConnectedAlertConsole","refetch","AlertConsoleWidget","apiDomain","rulesDomain","useAlertsReport","exampleAlertColumns"],"mappings":"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","x_google_ignoreList":[4,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41]}
1
+ {"version":3,"file":"index.cjs","sources":["../src/utils/alerts.ts","../src/config/tenants.ts","../src/adapters/http/alerts.adapter.ts","../src/adapters/http/rules.adapter.ts","../node_modules/dayjs/dayjs.min.js","../src/utils/preferences.ts","../src/adapters/http/alerts.adapter.schools.ts","../src/adapters/http/rules.adapter.schools.ts","../src/providers/ApiProvider.tsx","../src/components/Alerts/alertsTable.helpers.ts","../src/components/Alerts/Filters/FilterSelect.tsx","../src/components/Alerts/Filters/PrioritySelect.tsx","../src/components/Alerts/Filters/AnomalyTypeSelect.tsx","../src/components/Alerts/Filters/SpaceSelect.tsx","../src/components/Alerts/Filters/ActionTakenSelect.tsx","../src/components/DataTable/DataTable.tsx","../src/components/Alerts/AlertsTable.tsx","../node_modules/@tanstack/query-core/build/modern/subscribable.js","../node_modules/@tanstack/query-core/build/modern/timeoutManager.js","../node_modules/@tanstack/query-core/build/modern/utils.js","../node_modules/@tanstack/query-core/build/modern/focusManager.js","../node_modules/@tanstack/query-core/build/modern/thenable.js","../node_modules/@tanstack/query-core/build/modern/notifyManager.js","../node_modules/@tanstack/query-core/build/modern/onlineManager.js","../node_modules/@tanstack/query-core/build/modern/retryer.js","../node_modules/@tanstack/query-core/build/modern/removable.js","../node_modules/@tanstack/query-core/build/modern/query.js","../node_modules/@tanstack/query-core/build/modern/queryObserver.js","../node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../node_modules/@tanstack/query-core/build/modern/mutation.js","../node_modules/@tanstack/query-core/build/modern/mutationCache.js","../node_modules/@tanstack/query-core/build/modern/mutationObserver.js","../node_modules/@tanstack/query-core/build/modern/queryCache.js","../node_modules/@tanstack/query-core/build/modern/queryClient.js","../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js","../node_modules/@tanstack/react-query/build/modern/IsRestoringProvider.js","../node_modules/@tanstack/react-query/build/modern/QueryErrorResetBoundary.js","../node_modules/@tanstack/react-query/build/modern/errorBoundaryUtils.js","../node_modules/@tanstack/react-query/build/modern/suspense.js","../node_modules/@tanstack/react-query/build/modern/useBaseQuery.js","../node_modules/@tanstack/react-query/build/modern/useQuery.js","../node_modules/@tanstack/react-query/build/modern/useMutation.js","../src/hooks/useUpdateAlertStatus.ts","../src/utils/dateTimeUtils.ts","../src/components/Archived/ArchivedTable.tsx","../src/components/Clock/AnalogClock.tsx","../src/components/Clock/Clock.tsx","../src/components/Settings/AdminSettingsSection.tsx","../src/components/Settings/EscalationRowSection.tsx","../src/components/Settings/EscalationTableSection.tsx","../src/components/Settings/AlertAssignment.tsx","../src/components/Settings/SettingsPanel.tsx","../src/components/Settings/MyPreferencesPanel.tsx","../src/components/Settings/SettingsTabs.tsx","../src/assets/completed.png","../src/assets/pending.png","../src/components/AlertModal/TrackIncident.tsx","../src/components/AlertModal/TrackIncidentWrapper.tsx","../src/utils/media.ts","../src/components/AlertModal/AlertModal.tsx","../src/hooks/useAlertStatusList.ts","../src/components/AlertConsole/AlertConsole.tsx","../src/hooks/useAlerts.ts","../src/AlertConsoleWidget.tsx","../src/hooks/useAlertsReport.ts","../src/index.ts"],"sourcesContent":["import type { Alert } from \"../types/alerts.types\";\nimport palette from \"../constants/colorPalette.json\" with { type: \"json\" };\n\nexport function formatElapsedMinutes(isoTimestamp: string): string {\n const created = new Date(isoTimestamp).getTime();\n const now = Date.now();\n const diffMs = Math.max(0, now - created);\n const diffMin = diffMs / (60 * 1000);\n return diffMin.toFixed(2);\n}\n\nexport function percentFromElapsed(isoTimestamp: string): number {\n const elapsed = parseFloat(formatElapsedMinutes(isoTimestamp));\n const cycle = 60;\n return Math.min(100, Math.round(((elapsed % cycle) / cycle) * 100));\n}\n\nexport const PRIORITY_HEX: Record<Alert[\"priority\"], string> = {\n Critical: palette.critical,\n High: palette.high,\n Medium: palette.medium,\n Low: palette.low,\n};\n\nexport function getPriorityHexColor(priority: Alert[\"priority\"]): string {\n return PRIORITY_HEX[priority] || PRIORITY_HEX.Low;\n}\n\n/**\n * parses a time string in the format \"hh:mm:ss\" or \"hh:mm:ss.SSS\" into seconds\n * returns 0 for invalid inputs\n */\nexport function parseHmsToSeconds(timeStr: string): number {\n if (!timeStr || typeof timeStr !== \"string\") return 0;\n const parts = timeStr.trim().split(\":\");\n if (parts.length !== 3) return 0; //check for hh:mm:ss\n const [hh, mm, ss] = parts;\n const hours = Number.parseInt(hh, 10);\n const minutes = Number.parseInt(mm, 10);\n const seconds = Number.parseFloat(ss || \"0\");\n const safeHours = Number.isFinite(hours) ? hours : 0;\n const safeMinutes = Number.isFinite(minutes) ? minutes : 0;\n const safeSeconds = Number.isFinite(seconds) ? seconds : 0;\n return safeHours * 3600 + safeMinutes * 60 + safeSeconds; //convert to secs\n}\n\n/**\n * Extracts third-party IDs from an alert record.\n * Accepts various possible shapes (string, array, alt field names), returns unique numeric IDs.\n */\nexport function parseThirdPartyIds(record: Alert): number[] {\n const raw =\n (record as any).thirdPartyIds ??\n (record as any).ThirdPartyIds ??\n (record as any).thirdPartyId ??\n (record as any).ThirdPartyId ??\n \"\";\n const asString = Array.isArray(raw) ? raw.join(\",\") : String(raw ?? \"\");\n if (!asString || !asString.trim()) return [];\n const ids = asString\n .split(\",\")\n .map((s) => parseInt(String(s).trim(), 10))\n .filter((n) => Number.isFinite(n));\n const seen = new Set<number>();\n const unique: number[] = [];\n ids.forEach((n) => {\n if (!seen.has(n)) {\n seen.add(n);\n unique.push(n);\n }\n });\n return unique;\n}\n\n\n","export type TenantId = \"snl\" | \"schools\";\n\ntype TenantDomainConfig = {\n alerts: string;\n rules: string;\n};\n\n//read Vite envs directly\nconst SNL_ALERTS =\n import.meta.env.VITE_SNL_ALERTS_END_POINT || import.meta.env.VITE_SNL_API_END_POINT || \"\";\n// For SNL, rules and alerts use the same domain\nconst SNL_RULES = SNL_ALERTS;\n const SCHOOLS_ALERTS =\n import.meta.env.VITE_SCHOOLS_ALERTS_END_POINT || import.meta.env.VITE_SCHOOLS_API_END_POINT || \"\";\nconst SCHOOLS_RULES =\n import.meta.env.VITE_SCHOOLS_RULES_END_POINT || import.meta.env.VITE_SCHOOLS_API_END_POINT || \"\";\n\nexport const tenantDomains: Record<TenantId, TenantDomainConfig> = {\n snl: {\n alerts: SNL_ALERTS,\n rules: SNL_RULES,\n },\n schools: {\n alerts: SCHOOLS_ALERTS,\n rules: SCHOOLS_RULES,\n }\n};\n\nexport const DEFAULT_AUTH_TOKEN = import.meta.env.VITE_AUTH_TOKEN || \"\";\n\n\n","import type { AlertsPort, AlertStatusListItem, UpdateAlertStatusPayload, AdminSettings, SetAdminSettingsPayload, PreferenceSettings, SetPreferenceSettingsPayload } from \"../../ports/alerts.port\";\nimport type { Alert } from \"../../types/alerts.types\";\nimport type { AlertReport, AlertsReportQuery } from \"../../types/reports.types\";\n\ntype AdapterCfg = { baseUrl: string; headers?: Record<string, string> };\n\nfunction joinUrl(base: string, path: string): string {\n const trimmedBase = (base || \"\").replace(/\\/+$/, \"\");\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n return `${trimmedBase}${normalizedPath}`;\n}\n\nfunction getAuthHeader(): Record<string, string> {\n try {\n const token = localStorage.getItem(\"authToken\");\n return token ? { Authorization: `Bearer ${token}` } : {};\n } catch {\n return {};\n }\n}\n\nfunction buildUrlWithParams(baseUrl: string, params?: Record<string, any>): string {\n if (!params) return baseUrl;\n const url = new URL(baseUrl);\n Object.entries(params).forEach(([k, v]) => {\n if (v !== undefined && v !== null && String(v).length > 0) {\n url.searchParams.set(k, String(v));\n }\n });\n return url.toString();\n}\n\nasync function doRequest<T>(url: string, init: RequestInit): Promise<T> {\n const mergedHeaders: Record<string, string> = {\n ...(init.headers as Record<string, string> | undefined),\n ...getAuthHeader(),\n };\n const res = await fetch(url, { ...init, headers: mergedHeaders });\n if (res.status === 401) {\n window.location.href = \"/login\";\n throw new Error(\"Unauthorized\");\n }\n if (res.status === 204) return {} as T;\n const text = await res.text();\n let data: any = {};\n if (text) {\n try {\n data = JSON.parse(text);\n } catch {\n // non-JSON fallback\n data = { ok: res.ok, status: res.status, raw: text };\n }\n }\n if (!res.ok) {\n const message = data?.errorMessage || data?.message || `HTTP ${res.status}`;\n throw new Error(message);\n }\n return data as T;\n}\n\nexport function createAlertsAdapter(config: AdapterCfg): AlertsPort {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...(config.headers || {}),\n };\n\n return {\n async listAlerts(): Promise<Alert[]> {\n const url = joinUrl(config.baseUrl, \"/api/Alert\");\n const data = await doRequest<any>(url, {\n method: \"GET\",\n headers,\n });\n return Array.isArray(data) ? (data as Alert[]) : [];\n },\n async getAlertStatusList(): Promise<AlertStatusListItem[]> {\n const url = joinUrl(config.baseUrl, \"/api/Alert/AlertStatusList\");\n const data = await doRequest<any>(url, {\n method: \"GET\",\n headers,\n });\n if (Array.isArray(data)) return data as AlertStatusListItem[];\n if (data && typeof data === \"object\" && Array.isArray((data as any).data)) {\n return (data as any).data as AlertStatusListItem[];\n }\n return [];\n },\n async getAlertsReport(query: AlertsReportQuery): Promise<AlertReport[]> {\n const base = joinUrl(config.baseUrl, \"/Alerts/GetAlertsReport\");\n const url = buildUrlWithParams(base, query as any);\n const data = await doRequest<any>(url, {\n method: \"GET\",\n headers,\n });\n return Array.isArray(data) ? (data as AlertReport[]) : [];\n },\n async updateAlertStatus(payload: UpdateAlertStatusPayload): Promise<any> {\n const url = joinUrl(config.baseUrl, \"/api/Alert/status\");\n return doRequest<any>(url, {\n method: \"PUT\",\n headers,\n body: JSON.stringify(payload ?? {}),\n });\n },\n async getAdminSettings(): Promise<AdminSettings | null> {\n const url = joinUrl(config.baseUrl, \"/api/Alert/GetAdminSettings\");\n const data = await doRequest<any>(url, {\n method: \"GET\",\n headers,\n });\n if (data && typeof data === \"object\") {\n if (\"data\" in data) return (data as any).data as AdminSettings;\n if (\"userId\" in data) return data as AdminSettings;\n }\n return null;\n },\n async setAdminSettings(payload: SetAdminSettingsPayload): Promise<any> {\n const url = joinUrl(config.baseUrl, \"/api/Alert/SetAdminSettings\");\n const body = {\n userId: 0,\n isAdminSetting: true,\n sortBy: payload?.sortBy ?? \"\",\n groupBy: payload?.groupBy ?? null,\n };\n return doRequest<any>(url, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n });\n },\n async getPreferenceSettings(): Promise<PreferenceSettings | null> {\n const url = joinUrl(config.baseUrl, \"/api/Alert/GetPreferenceSettings\");\n const data = await doRequest<any>(url, {\n method: \"GET\",\n headers,\n });\n if (data && typeof data === \"object\") {\n if (\"data\" in data) return (data as any).data as PreferenceSettings;\n if (\"anomalyIds\" in data) return data as PreferenceSettings;\n }\n return null;\n },\n async setPreferenceSettings(payload: SetPreferenceSettingsPayload): Promise<any> {\n const url = joinUrl(config.baseUrl, \"/api/Alert/SetPreferenceSettings\");\n const raw = await doRequest<any>(url, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload ?? {}),\n });\n const isSuccess = raw?.responseStatus ?? true;\n const message = raw?.data ?? raw?.message ?? \"Preferences updated successfully.\";\n return {\n responseStatus: isSuccess,\n errorMessage: isSuccess ? \"\" : (raw?.errorMessage ?? raw?.message ?? \"\"),\n statusCode: 200,\n data: message,\n };\n },\n async getAlertNotifications(alertId: string | number): Promise<any[]> {\n const base = joinUrl(config.baseUrl, \"/api/Alert/GetNotifications\");\n const url = buildUrlWithParams(base, { alertId });\n const data = await doRequest<any>(url, {\n method: \"GET\",\n headers,\n });\n if (Array.isArray(data)) return data as any[];\n if (data && typeof data === \"object\" && Array.isArray((data as any).data)) {\n return (data as any).data as any[];\n }\n return [];\n },\n async notifyFamilyMembers(alertId: string | number): Promise<any> {\n const base = joinUrl(config.baseUrl, \"/api/Alert/NotificationToFamilyMembers\");\n const url = buildUrlWithParams(base, { alertId });\n return doRequest<any>(url, {\n method: \"POST\",\n headers,\n });\n },\n async sendSMSorEmailNotifications(alertId: string | number, isEmail: boolean, isSMS: boolean): Promise<any> {\n const base = joinUrl(config.baseUrl, \"/api/Alert/SendSMSorEmailNotifications\");\n const url = buildUrlWithParams(base, { alertId, isEmail, isSMS });\n return doRequest<any>(url, {\n method: \"POST\",\n headers,\n });\n },\n };\n}\n\n\n","import type { RulesPort, SetEscalationSettingsPayload, RulesLookups } from \"../../ports/rules.port\";\n\ntype AdapterCfg = { baseUrl: string; headers?: Record<string, string> };\n\nfunction joinUrl(base: string, path: string): string {\n const trimmedBase = (base || \"\").replace(/\\/+$/, \"\");\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n return `${trimmedBase}${normalizedPath}`;\n}\n\nfunction getAuthHeader(): Record<string, string> {\n try {\n const token = localStorage.getItem(\"authToken\");\n return token ? { Authorization: `Bearer ${token}` } : {};\n } catch {\n return {};\n }\n}\n\nasync function doRequest<T>(url: string, init: RequestInit): Promise<T> {\n const mergedHeaders: Record<string, string> = {\n ...(init.headers as Record<string, string> | undefined),\n ...getAuthHeader(),\n };\n const res = await fetch(url, { ...init, headers: mergedHeaders });\n if (res.status === 401) {\n window.location.href = \"/login\";\n throw new Error(\"Unauthorized\");\n }\n if (res.status === 204) return {} as T;\n const text = await res.text();\n let data: any = {};\n if (text) {\n try {\n data = JSON.parse(text);\n } catch {\n data = { ok: res.ok, status: res.status, raw: text };\n }\n }\n if (!res.ok) {\n const message = data?.errorMessage || data?.message || `HTTP ${res.status}`;\n throw new Error(message);\n }\n return data as T;\n}\n\nexport function createRulesAdapter(cfg: AdapterCfg): RulesPort {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...(cfg.headers || {}),\n };\n const url = joinUrl(cfg.baseUrl, \"/api/Rules\");\n const lookupsUrl = joinUrl(cfg.baseUrl, \"/api/Rules/lookups\");\n return {\n async getRules() {\n const data = await doRequest<any>(url, { method: \"GET\", headers });\n return Array.isArray(data) ? (data as any[]) : [];\n },\n async setEscalationSettings(payload: SetEscalationSettingsPayload) {\n return doRequest<any>(url, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload ?? {}),\n });\n },\n async getLookups() {\n return doRequest<RulesLookups>(lookupsUrl, { method: \"GET\", headers });\n },\n async updateRule(recordId: number, payload: any) {\n const putUrl = `${url}/${recordId}`;\n return doRequest<any>(putUrl, {\n method: \"PUT\",\n headers,\n body: JSON.stringify(payload ?? {}),\n });\n },\n };\n}\n\n\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","import dayjs, { type Dayjs } from \"dayjs\";\n// Preference and settings related helpers\n\nexport function normalizeSortBy(input?: string | null): \"By Severity\" | \"By Created Date\" | \"By Updated Date\" {\n if (!input) return \"By Severity\";\n const s = input.trim().toLowerCase();\n if (s.includes(\"created\")) return \"By Created Date\";\n if (s.includes(\"updated\") || s.includes(\"modified\")) return \"By Updated Date\";\n return \"By Severity\";\n}\n\nexport function normalizeGroupBy(input?: string | null): \"By severity\" | \"By Rules\" {\n if (!input) return \"By severity\";\n const s = input.trim().toLowerCase();\n if (s.includes(\"rule\")) return \"By Rules\";\n return \"By severity\";\n}\n\n// Map API sort string to the UI secondary sort key\nexport function mapApiSortToSecondary(sortBy?: string | null): string | undefined {\n if (!sortBy) return undefined;\n const s = String(sortBy).toLowerCase();\n if (s.includes(\"created\")) return \"created\";\n if (s.includes(\"updated\") || s.includes(\"modified\")) return \"updated\";\n return undefined;\n}\n\n// Given \"HH:mm:ss\" start/end, produce a \"HH-HH\" option key; if options provided, return only if present\nexport function mapApiDndToOption(\n start?: string,\n end?: string,\n options?: Array<{ label: string; value: string }>\n): string | undefined {\n const s = (start || \"\").split(\":\")[0];\n const e = (end || \"\").split(\":\")[0];\n if (!s || !e) return undefined;\n const key = `${s}-${e}`;\n if (Array.isArray(options) && options.length > 0) {\n const exists = options.find(o => o.value === key);\n return exists ? key : undefined;\n }\n return key;\n}\n\n// .NET ticks helpers (1 tick = 100ns; 1s = 10,000,000 ticks)\nexport function hoursToTicks(hours: number): number {\n return Math.round(hours * 3600 * 10_000_000);\n}\n\nexport function dndOptionToTicks(option?: string): { start: number; end: number } {\n if (!option) return { start: 0, end: 0 };\n const [s, e] = option.split(\"-\").map(v => parseInt(v, 10));\n if (Number.isFinite(s) && Number.isFinite(e)) {\n return { start: hoursToTicks(s), end: hoursToTicks(e) };\n }\n return { start: 0, end: 0 };\n}\n\n// Parse \"HH:mm:ss\" safely\nexport function parseHms(input?: string): { hours: number; minutes: number; seconds: number } {\n if (!input || typeof input !== \"string\") return { hours: 0, minutes: 0, seconds: 0 };\n const parts = input.split(\":\").map((p) => parseInt(p, 10));\n const hours = Number.isFinite(parts[0]) ? parts[0] : 0;\n const minutes = Number.isFinite(parts[1]) ? parts[1] : 0;\n const seconds = Number.isFinite(parts[2]) ? parts[2] : 0;\n return { hours, minutes, seconds };\n}\n\nexport function hmsToDayjs(input?: string): Dayjs {\n const { hours, minutes, seconds } = parseHms(input);\n return dayjs().hour(hours).minute(minutes).second(seconds).millisecond(0);\n}\n\nexport function dayjsToTicks(value?: Dayjs | null): number {\n if (!value) return 0;\n const hours = value.hour();\n const minutes = value.minute();\n const seconds = value.second();\n const totalSeconds = hours * 3600 + minutes * 60 + seconds;\n return totalSeconds * 10_000_000; // 10,000,000 ticks per second\n}\n\nexport function formatDayjsToHms(value?: Dayjs | null): string {\n if (!value) return \"00:00:00\";\n const pad = (n: number) => String(n).padStart(2, \"0\");\n return `${pad(value.hour())}:${pad(value.minute())}:${pad(value.second())}`;\n}\n\n\n","import type {\n\tAlertsPort,\n\tAlertStatusListItem,\n\tUpdateAlertStatusPayload,\n\tAdminSettings,\n\tSetAdminSettingsPayload,\n\tPreferenceSettings,\n\tSetPreferenceSettingsPayload,\n} from \"../../ports/alerts.port\";\nimport type { Alert } from \"../../types/alerts.types\";\nimport type { AlertReport, AlertsReportQuery } from \"../../types/reports.types\";\nimport { parseHms } from \"../../utils/preferences\";\n\ntype AdapterCfg = { baseUrl: string; headers?: Record<string, string> };\n\nfunction joinUrl(base: string, path: string): string {\n\tconst trimmedBase = (base || \"\").replace(/\\/+$/, \"\");\n\tconst normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n\treturn `${trimmedBase}${normalizedPath}`;\n}\n\nfunction getAuthHeader(): Record<string, string> {\n\ttry {\n\t\tconst token = localStorage.getItem(\"authToken\");\n\t\treturn token ? { Authorization: `Bearer ${token}` } : {};\n\t} catch {\n\t\treturn {};\n\t}\n}\n\nfunction buildUrlWithParams(baseUrl: string, params?: Record<string, any>): string {\n\tif (!params) return baseUrl;\n\tconst url = new URL(baseUrl);\n\tObject.entries(params).forEach(([k, v]) => {\n\t\tif (v !== undefined && v !== null && String(v).length > 0) {\n\t\t\turl.searchParams.set(k, String(v));\n\t\t}\n\t});\n\treturn url.toString();\n}\n\nasync function doRequest<T>(url: string, init: RequestInit): Promise<T> {\n\tconst mergedHeaders: Record<string, string> = {\n\t\t...(init.headers as Record<string, string> | undefined),\n\t\t...getAuthHeader(),\n\t};\n\tconst res = await fetch(url, { ...init, headers: mergedHeaders });\n\tif (res.status === 401) {\n\t\twindow.location.href = \"/login\";\n\t\tthrow new Error(\"Unauthorized\");\n\t}\n\tif (res.status === 204) return {} as T;\n\tconst text = await res.text();\n\tlet data: any = {};\n\tif (text) {\n\t\ttry {\n\t\t\tdata = JSON.parse(text);\n\t\t} catch {\n\t\t\tdata = { ok: res.ok, status: res.status, raw: text };\n\t\t}\n\t}\n\tif (!res.ok) {\n\t\tconst message = data?.Message || `HTTP ${res.status}`;\n\t\tthrow new Error(message);\n\t}\n\treturn data as T;\n}\n\n// helpers for response normalization\nconst firstDefined = <T,>(...values: T[]) =>\n\tvalues.find((v) => v !== undefined && v !== null);\n\nfunction mapSchoolsAlert(api: any): Alert {\n\treturn {\n\t\t// important: do not fall back to `id` here; only AlertId/alertId are considered the Alert ID\n\t\tid: String(firstDefined(api?.AlertId, api?.alertId) ?? \"\"),\n\t\tpriority: firstDefined(api?.Priority, api?.priority, \"Low\"),\n\t\ttimestamp: firstDefined(api?.Timestamp, api?.timestamp, \"\"),\n\t\tstatusType: firstDefined(api?.Status, api?.statusType, \"\"),\n\t\tdescription: firstDefined(api?.Description, api?.description, \"\"),\n\t\teventName: firstDefined(api?.EventName, api?.eventName),\n\t\truleName: firstDefined(api?.RuleName, api?.ruleName),\n\t\tspaceName: firstDefined(api?.SpaceName, api?.spaceName),\n\t\tassignTeam: firstDefined(api?.AssignTeam, api?.assignTeam),\n\t\tcameraName: firstDefined(api?.CameraName, api?.cameraName),\n\t\ttype: firstDefined(api?.Type, api?.type),\n\t\tmediaDetails: firstDefined(api?.MediaDetails, api?.mediaDetails),\n\t\tadditionalMedia: firstDefined(api?.AdditionalMedia, api?.additionalMedia),\n\t\ttimeElapsed: firstDefined(api?.TimeElapsed, api?.timeElapsed),\n\t\ttimeRemaining: firstDefined(api?.TimeRemaining, api?.timeRemaining),\n\t\tanomalyName: firstDefined(api?.AnomalyName, api?.anomalyName),\n\t\talertDetails: firstDefined(api?.AlertDetails, api?.alertDetails),\n\t\tstatusHistory: firstDefined(api?.StatusHistory, api?.statusHistory),\n\t};\n}\n\nexport function createSchoolsAlertsAdapter(config: AdapterCfg): AlertsPort {\n\tconst headers: Record<string, string> = {\n\t\t\"Content-Type\": \"application/json\",\n\t\t...(config.headers || {}),\n\t};\n\n\treturn {\n\t\tasync listAlerts(): Promise<Alert[]> {\n\t\t\t// need to update the customerId default values\n\t\t\tconst url = joinUrl(config.baseUrl, \"/api/detectionpolicy/alerts?customerId=99e5c8b5-b9d4-4d35-8885-7f121c532664\");\n\t\t\tconst data = await doRequest<any>(url, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders,\n\t\t\t});\n\t\t\tif (!Array.isArray(data?.Items)) return [];\n\t\t\treturn (data?.Items as any[]).map(mapSchoolsAlert);\n\t\t},\n\t\tasync getAlertStatusList(): Promise<AlertStatusListItem[]> {\n\t\t\tconst url = joinUrl(config.baseUrl, \"/api/detectionpolicy/alerts/StatusList\");\n\t\t\tconst data = await doRequest<any>(url, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders,\n\t\t\t});\n\t\t\treturn Array.isArray(data) ? (data as AlertStatusListItem[]) : [];\n\t\t},\n\t\tasync getAlertsReport(query: AlertsReportQuery): Promise<AlertReport[]> {\n\t\t\tconst base = joinUrl(config.baseUrl, \"/api/detectionpolicy/alerts/GetAlertsReport\");\n\t\t\tconst url = buildUrlWithParams(base, query as any);\n\t\t\tconst data = await doRequest<any>(url, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders,\n\t\t\t});\n\t\t\treturn Array.isArray(data) ? (data as AlertReport[]) : [];\n\t\t},\n\t\tasync updateAlertStatus(payload: UpdateAlertStatusPayload): Promise<any> {\n\t\t\t// Schools API expects: { AlertId, Status, Notes }\n\t\t\tconst url = joinUrl(config.baseUrl, \"/api/detectionpolicy/alerts/Log\");\n\t\t\tconst body = {\n\t\t\t\tAlertId: (payload as any).alertId ?? (payload as any).alertUniqueId ?? (payload as any).AlertId,\n\t\t\t\tStatus: (payload as any).status ?? (payload as any).Status ?? \"\",\n\t\t\t\tNotes: (payload as any).notes ?? (payload as any).Notes ?? \"\",\n\t\t\t};\n\t\t\treturn doRequest<any>(url, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders,\n\t\t\t\tbody: JSON.stringify(body),\n\t\t\t});\n\t\t},\n\t\tasync getAdminSettings(): Promise<AdminSettings | null> {\n\t\t\tconst url = joinUrl(config.baseUrl, \"/api/detectionpolicy/alerts/GetAdminSettings\");\n\t\t\tconst data = await doRequest<any>(url, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders,\n\t\t\t});\n\t\t\tif (data && typeof data === \"object\") {\n\t\t\t\tif (\"data\" in data) return (data as any).data as AdminSettings;\n\t\t\t\tif (\"userId\" in data) return data as AdminSettings;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tasync setAdminSettings(payload: SetAdminSettingsPayload): Promise<any> {\n\t\t\tconst url = joinUrl(config.baseUrl, \"/api/detectionpolicy/alerts/SetAdminSettings\");\n\t\t\tconst body = {\n\t\t\t\tuserId: 0,\n\t\t\t\tisAdminSetting: true,\n\t\t\t\tsortBy: payload?.sortBy ?? \"\",\n\t\t\t};\n\t\t\treturn doRequest<any>(url, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders,\n\t\t\t\tbody: JSON.stringify(body),\n\t\t\t});\n\t\t},\n\t\tasync getPreferenceSettings(): Promise<PreferenceSettings | null> {\n\t\t\tconst url = joinUrl(config.baseUrl, \"/api/detectionpolicy/alerts/GetPreferenceSettings\");\n\t\t\tconst data = await doRequest<any>(url, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders,\n\t\t\t});\n\t\t\tif (data && typeof data === \"object\") {\n\t\t\t\tif (\"data\" in data) return (data as any).data as PreferenceSettings;\n\t\t\t\tif (\"anomalyIds\" in data) return data as PreferenceSettings;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tasync setPreferenceSettings(payload: SetPreferenceSettingsPayload): Promise<any> {\n\t\t\tconst url = joinUrl(config.baseUrl, \"/api/detectionpolicy/alerts/SetPreferenceSettings\");\n\t\t\tconst toTicks = (hms?: string): number => {\n\t\t\t\tconst { hours, minutes, seconds } = parseHms(hms);\n\t\t\t\tconst totalSeconds = hours * 3600 + minutes * 60 + seconds;\n\t\t\t\treturn totalSeconds * 10_000_000;\n\t\t\t};\n\t\t\tconst body = {\n\t\t\t\tSettings: {\n\t\t\t\t\tUserId: 0,\n\t\t\t\t\tAnomalyIds: Array.isArray(payload?.anomalyIds) ? payload.anomalyIds.map((x) => String(x)) : [],\n\t\t\t\t\tDoNotDisturbStart: { Ticks: toTicks(payload?.doNotDisturbStart) },\n\t\t\t\t\tDoNotDisturbEnd: { Ticks: toTicks(payload?.doNotDisturbEnd) },\n\t\t\t\t\tInApp: !!payload?.inApp,\n\t\t\t\t\tSMS: !!payload?.sms,\n\t\t\t\t\tEmail: !!payload?.email,\n\t\t\t\t\tSortBy: payload?.sortBy ?? \"\",\n\t\t\t\t},\n\t\t\t};\n\t\t\tconst raw = await doRequest<any>(url, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders,\n\t\t\t\tbody: JSON.stringify(body),\n\t\t\t});\n\t\t\tconst isSuccess = (raw as any)?.responseStatus ?? true;\n\t\t\tconst message = (raw as any)?.data ?? (raw as any)?.message ?? \"Preferences updated successfully.\";\n\t\t\treturn {\n\t\t\t\tresponseStatus: isSuccess,\n\t\t\t\terrorMessage: isSuccess ? \"\" : ((raw as any)?.errorMessage ?? (raw as any)?.Message ?? (raw as any)?.message ?? \"\"),\n\t\t\t\tstatusCode: 200,\n\t\t\t\tdata: message,\n\t\t\t};\n\t\t},\n\t\tasync getAlertNotifications(alertId: string | number): Promise<any[]> {\n\t\t\tconst base = joinUrl(config.baseUrl, \"/api/detectionpolicy/alerts/GetNotifications\");\n\t\t\tconst url = buildUrlWithParams(base, { alertId });\n\t\t\tconst data = await doRequest<any>(url, {\n\t\t\t\tmethod: \"GET\",\n\t\t\t\theaders,\n\t\t\t});\n\t\t\tif (Array.isArray(data)) return data as any[];\n\t\t\tif (data && typeof data === \"object\" && Array.isArray((data as any).data)) {\n\t\t\t\treturn (data as any).data as any[];\n\t\t\t}\n\t\t\treturn [];\n\t\t},\n\t};\n}\n\nexport default createSchoolsAlertsAdapter;\n\n\n","import type { RulesPort, SetEscalationSettingsPayload, RulesLookups } from \"../../ports/rules.port\";\n\ntype AdapterCfg = { baseUrl: string; headers?: Record<string, string> };\n\nfunction getAuthHeader(): Record<string, string> {\n\ttry {\n\t\tconst token = localStorage.getItem(\"authToken\");\n\t\treturn token ? { Authorization: `Bearer ${token}` } : {};\n\t} catch {\n\t\treturn {};\n\t}\n}\n\nasync function doRequest<T>(url: string, init: RequestInit): Promise<T> {\n\tconst mergedHeaders: Record<string, string> = {\n\t\t...(init.headers as Record<string, string> | undefined),\n\t\t...getAuthHeader(),\n\t};\n\tconst res = await fetch(url, { ...init, headers: mergedHeaders });\n\tif (res.status === 401) {\n\t\twindow.location.href = \"/login\";\n\t\tthrow new Error(\"Unauthorized\");\n\t}\n\tif (res.status === 204) return {} as T;\n\tconst text = await res.text();\n\tlet data: any = {};\n\tif (text) {\n\t\ttry {\n\t\t\tdata = JSON.parse(text);\n\t\t} catch {\n\t\t\tdata = { ok: res.ok, status: res.status, raw: text };\n\t\t}\n\t}\n\tif (!res.ok) {\n\t\tconst message = data?.errorMessage || data?.message || `HTTP ${res.status}`;\n\t\tthrow new Error(message);\n\t}\n\treturn data as T;\n}\n\nexport function createSchoolsRulesAdapter(cfg: AdapterCfg): RulesPort {\n\tconst headers: Record<string, string> = {\n\t\t\"Content-Type\": \"application/json\",\n\t\t...(cfg.headers || {}),\n\t};\n\tconst url = new URL(\"/api/detectionpolicy/rules\", cfg.baseUrl).toString();\n\treturn {\n\t\tasync getRules() {\n\t\t\tconst data = await doRequest<any>(url, { method: \"GET\", headers });\n\t\t\treturn Array.isArray(data) ? (data as any[]) : [];\n\t\t},\n\t\tasync setEscalationSettings(payload: SetEscalationSettingsPayload) {\n\t\t\treturn doRequest<any>(url, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders,\n\t\t\t\tbody: JSON.stringify(payload ?? {}),\n\t\t\t});\n\t\t},\n\t\tasync getLookups() {\n\t\t\tconst makeUrl = (path: string) => new URL(path, cfg.baseUrl).toString();\n\t\t\tconst requests = [\n\t\t\t\tdoRequest<any[]>(makeUrl(\"/api/detectionpolicy/lookups/actiontypes\"), { method: \"GET\", headers }),\n\t\t\t\tdoRequest<any[]>(makeUrl(\"/api/detectionpolicy/lookups/anomalies\"), { method: \"GET\", headers }),\n\t\t\t\tdoRequest<any[]>(makeUrl(\"/api/detectionpolicy/lookups/thirdparty\"), { method: \"GET\", headers }),\n\t\t\t\tdoRequest<any[]>(makeUrl(\"/api/detectionpolicy/lookups/severity\"), { method: \"GET\", headers }),\n\t\t\t\tdoRequest<any[]>(makeUrl(\"/api/detectionpolicy/lookups/scheduletypes\"), { method: \"GET\", headers }),\n\t\t\t] as const;\n\n\t\t\tconst [\n\t\t\t\tactionTypesRes,\n\t\t\t\tanomaliesRes,\n\t\t\t\tthirdPartyRes,\n\t\t\t\tseveritiesRes,\n\t\t\t\tscheduleTypesRes,\n\t\t\t] = await Promise.allSettled(requests);\n\n\t\t\tconst getArray = (res: PromiseSettledResult<any[]>): any[] =>\n\t\t\t\tres.status === \"fulfilled\" && Array.isArray(res.value) ? res.value : [];\n\n\t\t\tconst rawActionTypes = getArray(actionTypesRes);\n\t\t\tconst rawAnomalies = getArray(anomaliesRes);\n\t\t\tconst rawThirdParties = getArray(thirdPartyRes);\n\t\t\tconst rawSeverities = getArray(severitiesRes);\n\t\t\tconst rawScheduleTypes = getArray(scheduleTypesRes);\n\n\t\t\tconst actionTypes = rawActionTypes\n\t\t\t\t.map((actions: any) => ({\n\t\t\t\t\tactionTypeId:\n\t\t\t\t\t\tNumber(actions?.ActionTypeId),\n\t\t\t\t\tname: actions?.DisplayName ?? actions?.Name ?? \"\",\n\t\t\t\t}))\n\n\t\t\tconst anomalies = rawAnomalies\n\t\t\t\t.map((anomalies: any) => ({\n\t\t\t\t\trecordId: anomalies?.AnomalyId,\n\t\t\t\t\tanomalyName: anomalies?.DisplayName ?? anomalies?.Name ?? \"\",\n\t\t\t\t}))\n\n\t\t\tconst thirdParties = rawThirdParties\n\t\t\t\t.map((tp: any) => ({\n\t\t\t\t\tthirdPartyId:\n\t\t\t\t\t\tNumber(tp?.ThirdPartyId),\n\t\t\t\t\tthirdPartyName: tp?.ThirdPartyName ?? tp?.Name ?? \"\",\n\t\t\t\t}))\n\n\t\t\tconst lookups: any = {\n\t\t\t\tactionTypes,\n\t\t\t\tanomalies,\n\t\t\t\tthirdParties,\n\t\t\t};\n\n\t\t\tif (rawSeverities.length) {\n\t\t\t\tlookups.severities = rawSeverities;\n\t\t\t}\n\t\t\tif (rawScheduleTypes.length) {\n\t\t\t\tlookups.scheduleTypes = rawScheduleTypes;\n\t\t\t}\n\n\t\t\treturn lookups as RulesLookups;\n\t\t},\n\t\tasync updateRule(recordId: number, payload: any) {\n\t\t\tconst putUrl = `${url}/${recordId}`;\n\t\t\treturn doRequest<any>(putUrl, {\n\t\t\t\tmethod: \"PUT\",\n\t\t\t\theaders,\n\t\t\t\tbody: JSON.stringify(payload ?? {}),\n\t\t\t});\n\t\t},\n\t};\n}\n\nexport default createSchoolsRulesAdapter;\n\n\n","import React, { createContext, useContext, useMemo } from \"react\";\nimport { tenantDomains, type TenantId } from \"../config/tenants\";\nimport { createAlertsAdapter as createSnlAlertsAdapter } from \"../adapters/http/alerts.adapter\";\nimport { createRulesAdapter as createSnlRulesAdapter } from \"../adapters/http/rules.adapter\";\nimport { createSchoolsAlertsAdapter } from \"../adapters/http/alerts.adapter.schools\";\nimport { createSchoolsRulesAdapter } from \"../adapters/http/rules.adapter.schools\";\nimport type { AlertsPort } from \"../ports/alerts.port\";\nimport type { RulesPort } from \"../ports/rules.port\";\n\ntype ApiContextValue = {\n config: {\n tenant: TenantId;\n alertsBaseUrl: string;\n rulesBaseUrl: string;\n headers?: Record<string, string>;\n };\n alerts: AlertsPort;\n rules: RulesPort;\n};\n\nconst ApiContext = createContext<ApiContextValue | null>(null);\n\nexport function ApiProvider({\n tenant = \"snl\",\n override,\n children,\n}: Readonly<{\n tenant?: TenantId;\n override?: Partial<{\n alertsBaseUrl: string;\n rulesBaseUrl: string;\n headers: Record<string, string>;\n }>;\n children: React.ReactNode;\n}>) {\n const config = useMemo(() => {\n const alertsBaseUrl =\n (override?.alertsBaseUrl?.trim()) ||\n tenantDomains[tenant]?.alerts ||\n \"\";\n let rulesBaseUrl =\n (override?.rulesBaseUrl?.trim()) ||\n tenantDomains[tenant]?.rules ||\n \"\";\n if (tenant === \"snl\") {\n rulesBaseUrl = alertsBaseUrl;\n }\n const headers = override?.headers;\n return { tenant, alertsBaseUrl, rulesBaseUrl, headers };\n }, [\n tenant,\n override?.alertsBaseUrl,\n override?.rulesBaseUrl,\n JSON.stringify(override?.headers || {}),\n ]);\n const value = useMemo<ApiContextValue>(() => {\n const alertsAdapter =\n config.tenant === \"schools\"\n ? createSchoolsAlertsAdapter({ baseUrl: config.alertsBaseUrl, headers: config.headers })\n : createSnlAlertsAdapter({ baseUrl: config.alertsBaseUrl, headers: config.headers });\n const rulesAdapter =\n config.tenant === \"schools\"\n ? createSchoolsRulesAdapter({ baseUrl: config.rulesBaseUrl, headers: config.headers })\n : createSnlRulesAdapter({ baseUrl: config.alertsBaseUrl, headers: config.headers });\n return { config, alerts: alertsAdapter, rules: rulesAdapter };\n }, [config]);\n\n return <ApiContext.Provider value={value}>{children}</ApiContext.Provider>;\n}\n\nexport function useApi() {\n const context = useContext(ApiContext);\n if (!context) throw new Error(\"useApi must be used inside ApiProvider\");\n return context;\n}\n\n\n","import type { Alert } from \"../../types/alerts.types\";\nimport type { OptionItem } from \"./Filters/FilterSelect\";\n\n// Priority background colors for table rows\nexport const PRIORITY_ROW_BG_CLASS: Record<Alert[\"priority\"], string> = {\n Critical: \"#FFE2E2\",\n High: \"#FF95004D\",\n Medium: \"#FEF9C2\",\n Low: \"#E0EDFF\",\n};\n\n// Priority border/text colors\nexport const PRIORITY_BORDER_TEXT_CLASS: Record<Alert[\"priority\"], string> = {\n Critical: \"#FF3B30\",\n High: \"#FFB86A\",\n Medium: \"#FFCC00\",\n Low: \"#007AFF\",\n};\n\n// 3rd party IDs for email and sms\nexport const THIRD_PARTY_EMAIL_ID = 6;\nexport const THIRD_PARTY_SMS_ID = 7;\n\ninterface NotificationButtonState {\n isDisabled: boolean;\n buttonText: string;\n tooltipTitle: string;\n}\n\n/**\n * Get the button state for email/sms notification buttons\n */\nexport function getNotificationButtonState(\n thirdPartyId: number,\n record: Alert,\n defaultTitle: string\n): NotificationButtonState {\n const isEmailButton = thirdPartyId === THIRD_PARTY_EMAIL_ID;\n const isSmsButton = thirdPartyId === THIRD_PARTY_SMS_ID;\n const isEmailSent = (record as any).isEmailSent;\n const isSmsSent = (record as any).isSMSSent;\n\n const isDisabled = (isEmailButton && isEmailSent) || (isSmsButton && isSmsSent);\n\n const buttonTextHelper = isEmailButton\n ? \"Send Email\"\n : isSmsButton\n ? \"Send SMS\"\n : defaultTitle;\n \n const buttonText = isEmailButton && isEmailSent\n ? \"Email sent\"\n : isSmsButton && isSmsSent\n ? \"SMS sent\" :\n buttonTextHelper;\n\n const tooltipTitle =\n isEmailButton && isEmailSent\n ? \"Email sent\"\n : isSmsButton && isSmsSent\n ? \"SMS sent\"\n : `Click to ${buttonTextHelper.toLowerCase()}`;\n\n return { isDisabled, buttonText, tooltipTitle };\n}\n\n/**\n * Compute unique anomaly types from alert data\n */\nexport function computeAnomalyOptions(data: Alert[]): OptionItem[] {\n const set = new Set<string>();\n (data || []).forEach((item) => {\n const name = (item as any).anomalyName;\n if (typeof name === \"string\" && name.trim().length > 0) {\n set.add(name.trim());\n }\n });\n const opts = Array.from(set).map((name) => ({ label: name, value: name }));\n return [{ label: \"All Types\", value: \"All\" }, ...opts];\n}\n\n/**\n * Compute unique spaces from alert data\n */\nexport function computeSpaceOptions(data: Alert[]): OptionItem[] {\n const set = new Set<string>();\n (data || []).forEach((item) => {\n const name = (item as any).spaceName;\n if (typeof name === \"string\" && name.trim().length > 0) {\n set.add(name.trim());\n }\n });\n const opts = Array.from(set).map((name) => ({ label: name, value: name }));\n return [{ label: \"All\", value: \"All\" }, ...opts];\n}\n\n/**\n * Get the button loading key for tracking loading state\n */\nexport function getButtonLoadingKey(recordId: number | string, isEmail: boolean): string {\n return `${recordId}-${isEmail ? \"email\" : \"sms\"}`;\n}\n\n/**\n * Check if a button is an email or SMS button\n */\nexport function isNotificationButton(thirdPartyId: number): boolean {\n return thirdPartyId === THIRD_PARTY_EMAIL_ID || thirdPartyId === THIRD_PARTY_SMS_ID;\n}\n","import { Select } from \"antd\";\n\nexport interface OptionItem {\n label: string;\n value: string;\n}\n\ninterface FilterSelectProps {\n value: string;\n onChange: (value: string) => void;\n options: OptionItem[];\n className?: string;\n dropdownWidth?: number; //dropdowns showing squeeezed to the left when the text is too long\n}\n\nexport default function FilterSelect({ value, onChange, options, className, dropdownWidth }: FilterSelectProps) {\n return (\n <Select\n className={className}\n options={options}\n value={value}\n onChange={onChange}\n dropdownMatchSelectWidth={dropdownWidth ?? 260}\n />\n );\n}\n\n\n","import FilterSelect from \"./FilterSelect\";\nimport type { OptionItem } from \"./FilterSelect\";\n\nconst defaultOptions: OptionItem[] = [\n { label: \"All levels\", value: \"All\" },\n { label: \"Critical\", value: \"Critical\" },\n { label: \"High\", value: \"High\" },\n { label: \"Medium\", value: \"Medium\" },\n { label: \"Low\", value: \"Low\" },\n];\n\ninterface PrioritySelectProps {\n value: string;\n onChange: (value: string) => void;\n options?: OptionItem[];\n}\n\nexport default function PrioritySelect({ value, onChange, options }: PrioritySelectProps) {\n return <FilterSelect className=\"w-[140px]\" value={value} onChange={onChange} options={options || defaultOptions} />;\n}\n\n\n","import FilterSelect from \"./FilterSelect\";\nimport type { OptionItem } from \"./FilterSelect\";\n\nconst defaultOptions: OptionItem[] = [\n { label: \"All Types\", value: \"All\" },\n { label: \"Weapon Detection\", value: \"Weapon\" },\n { label: \"Unauthorized Access\", value: \"Unauthorized\" },\n { label: \"Aggressive Behavior\", value: \"Aggressive\" },\n];\n\ninterface AnomalyTypeSelectProps {\n value: string;\n onChange: (value: string) => void;\n options?: OptionItem[];\n}\n\nexport default function AnomalyTypeSelect({ value, onChange, options }: AnomalyTypeSelectProps) {\n return <FilterSelect className=\"w-[220px]\" dropdownWidth={280} value={value} onChange={onChange} options={options || defaultOptions} />;\n}\n\n\n","import FilterSelect from \"./FilterSelect\";\nimport type { OptionItem } from \"./FilterSelect\";\n\ninterface SpaceSelectProps {\n value: string;\n onChange: (value: string) => void;\n options?: OptionItem[];\n}\n\nexport default function SpaceSelect({ value, onChange, options }: SpaceSelectProps) {\n return <FilterSelect className=\"w-[100px]\" value={value} onChange={onChange} options={options || []} />;\n}\n\n\n","import FilterSelect from \"./FilterSelect\";\nimport type { OptionItem } from \"./FilterSelect\";\n\nconst options: OptionItem[] = [\n { label: \"All\", value: \"All\" },\n { label: \"SOS\", value: \"SOS\" },\n { label: \"911\", value: \"911\" },\n { label: \"Aegix\", value: \"Aegix\" },\n { label: \"Eli\", value: \"Eli\" },\n { label: \"Skydio\", value: \"Skydio\" },\n];\n\ninterface ActionTakenSelectProps {\n value: string;\n onChange: (value: string) => void;\n options?: OptionItem[];\n}\n\nexport default function ActionTakenSelect({ value, onChange, options: override }: ActionTakenSelectProps) {\n return <FilterSelect className=\"w-[130px]\" value={value} onChange={onChange} options={override || options} />;\n}\n\n\n","import { Table } from \"antd\";\nimport type { ColumnsType, TableProps } from \"antd/es/table\";\nimport type { ReactNode } from \"react\";\n\nexport interface DataTableProps<T extends object> {\n columns: ColumnsType<T>;\n data: T[];\n loading?: boolean;\n pageSize?: number;\n rowKey?: string | ((record: T) => string);\n toolbar?: ReactNode;\n tableProps?: Partial<TableProps<T>>;\n}\n\nexport default function DataTable<T extends object>({\n columns,\n data,\n loading = false,\n pageSize = 10,\n rowKey = \"id\",\n toolbar,\n tableProps,\n}: DataTableProps<T>) {\n return (\n <div>\n {toolbar}\n <Table<T>\n rowKey={rowKey as any}\n dataSource={data}\n columns={columns}\n loading={loading}\n pagination={{\n pageSize,\n showSizeChanger: true,\n showTotal: (total) => `Total: ${total}`,\n }}\n bordered\n {...(tableProps as any)}\n />\n </div>\n );\n}\n\n\n","import { useEffect, useMemo, useState } from \"react\";\nimport { Input, Tag, Space, Progress, Button, Tooltip, Row, Col } from \"antd\";\nimport type { ColumnsType } from \"antd/es/table\";\nimport type { ReactNode } from \"react\";\nimport type { Alert } from \"../../types/alerts.types\";\nimport { getPriorityHexColor, parseHmsToSeconds, parseThirdPartyIds } from \"../../utils/alerts\";\nimport type { OptionItem } from \"./Filters/FilterSelect\";\nimport { MailOutlined, MessageOutlined } from \"@ant-design/icons\";\nimport { useApi } from \"../../providers/ApiProvider\";\nimport {\n PRIORITY_ROW_BG_CLASS,\n PRIORITY_BORDER_TEXT_CLASS,\n THIRD_PARTY_EMAIL_ID,\n THIRD_PARTY_SMS_ID,\n getNotificationButtonState,\n computeAnomalyOptions,\n computeSpaceOptions,\n getButtonLoadingKey,\n isNotificationButton,\n} from \"./alertsTable.helpers\";\n\ninterface AlertsTableProps {\n data: Alert[];\n loading?: boolean;\n pageSize?: number;\n columns?: ColumnsType<Alert>;\n severityOptions?: OptionItem[];\n anomalyOptions?: OptionItem[];\n spaceOptions?: OptionItem[];\n renderActions?: (record: Alert) => ReactNode;\n onAlertIdClick?: (record: Alert, opts?: { tab?: \"details\" | \"track\" }) => void;\n onRefetch?: () => void;\n excludeCompleted?: boolean;\n}\n\nimport PrioritySelect from \"./Filters/PrioritySelect\";\nimport AnomalyTypeSelect from \"./Filters/AnomalyTypeSelect\";\nimport SpaceSelect from \"./Filters/SpaceSelect\";\nimport ActionTakenSelect from \"./Filters/ActionTakenSelect\";\nimport DataTable from \"../DataTable/DataTable\";\nimport { toast } from \"react-toastify\";\n\nfunction AlertsTable({ data, loading = false, pageSize = 10, columns: externalColumns, severityOptions, spaceOptions, renderActions, onAlertIdClick, onRefetch, excludeCompleted = true }: AlertsTableProps) {\n const [severity, setSeverity] = useState<string>(\"All\");\n const [anomalyType, setAnomalyType] = useState<string>(\"All\");\n const [space, setSpace] = useState<string>(\"All\");\n const [actionTaken, setActionTaken] = useState<string>(\"All\");\n const [search, setSearch] = useState<string>(\"\");\n const [actionOptions, setActionOptions] = useState<OptionItem[]>([{ label: \"All\", value: \"All\" }]);\n const [loadingButtons, setLoadingButtons] = useState<Set<string>>(new Set());\n const { rules, alerts } = useApi();\n\n // map thirdPartyId -> icon\n const thirdPartyAssetMap: Record<\n number,\n { title: string; kind: \"img\" | \"icon\"; src?: string; icon?: ReactNode; alt?: string }\n > = {\n 6: { title: \"Email\", kind: \"icon\", icon: <MailOutlined /> },\n 7: { title: \"SMS\", kind: \"icon\", icon: <MessageOutlined /> },\n };\n\n\n\n const computedAnomalyOptions = useMemo(() => computeAnomalyOptions(data), [data]);\n\n const computedSpaceOptions = useMemo(() => computeSpaceOptions(data), [data]);\n\n // Fetch third parties for Action Taken dropdown from lookups\n useEffect(() => {\n let mounted = true;\n (async () => {\n try {\n const lookups = await rules.getLookups();\n const tp = Array.isArray(lookups.thirdParties) ? lookups.thirdParties : [];\n const opts: OptionItem[] = tp.map((t) => ({\n label: t.thirdPartyName,\n value: String(t.thirdPartyId),\n }));\n if (mounted) {\n setActionOptions([{ label: \"All\", value: \"All\" }, ...opts]);\n }\n } catch (e) {\n console.error(\"Error loading third party options\", e);\n }\n })();\n return () => {\n mounted = false;\n };\n }, [rules]);\n\n const hasAnyThirdPartyIds = useMemo(\n () => (data || []).some((d) => parseThirdPartyIds(d).length > 0),\n [data]\n );\n\n const filteredData = useMemo(() => {\n return (data || []).filter((item) => {\n const matchesSeverity = severity === \"All\" || item.priority === severity;\n const textSearch = `${item.id} ${item.description} ${item.statusType}`.toLowerCase();\n const matchesSearch = !search || textSearch.includes(search.toLowerCase());\n const matchesAnomaly =\n anomalyType === \"All\" ||\n ((item as any).anomalyName || \"\").toLowerCase() === anomalyType.toLowerCase();\n const matchesSpace =\n space === \"All\" ||\n (((item as any).spaceName || \"\").toLowerCase() === space.toLowerCase());\n const matchesAction =\n !hasAnyThirdPartyIds ||\n actionTaken === \"All\" ||\n parseThirdPartyIds(item).includes(Number(actionTaken));\n const matchesArchived = !excludeCompleted || ![\"completed\", \"false positive\"]\n .includes(String(item.statusType || \"\")\n .toLowerCase());\n return (\n matchesSeverity &&\n matchesSearch &&\n matchesAnomaly &&\n matchesSpace &&\n matchesAction &&\n matchesArchived\n );\n });\n }, [data, severity, search, anomalyType, space, actionTaken, hasAnyThirdPartyIds, excludeCompleted]);\n\n const anomalyOptionsToUse = computedAnomalyOptions;\n const spaceOptionsToUse = spaceOptions && spaceOptions.length ? spaceOptions : computedSpaceOptions;\n\n const defaultColumns: ColumnsType<Alert> = [\n {\n title: \"Severity\",\n dataIndex: \"priority\",\n key: \"priority\",\n width: 120,\n render: (value: Alert[\"priority\"]) => (\n <Tag className=\"px-[10px] py-[2px]\" style={{ border: `2px solid ${PRIORITY_BORDER_TEXT_CLASS[value]}`, backgroundColor: PRIORITY_ROW_BG_CLASS[value] }}>\n {value}\n </Tag>\n ),\n },\n {\n title: \"Tracker\",\n key: \"tracker\",\n width: 140,\n render: (_: any, record) => {\n return (\n <a\n onClick={(e) => {\n e.preventDefault();\n onAlertIdClick?.(record, { tab: \"track\" });\n }}\n className=\"text-blue-600 hover:underline\"\n >\n Tracker\n </a>\n );\n },\n },\n {\n title: \"Call to action/Human in the loop\",\n key: \"actions\",\n width: 320,\n render: (_: any, record) => {\n if (renderActions) return <>{renderActions(record)}</>;\n const ids = parseThirdPartyIds(record);\n // If no thirdPartyIds present render nothing\n if (!ids.length) return null;\n\n const handleSendNotification = async (isEmail: boolean, isSMS: boolean) => {\n const buttonKey = getButtonLoadingKey(record.id, isEmail);\n setLoadingButtons((prev) => new Set(prev).add(buttonKey));\n try {\n const response = await alerts.sendSMSorEmailNotifications?.(record.id, isEmail, isSMS);\n if (response?.responseStatus) {\n toast.success(response.data || (isEmail ? \"Email sent successfully\" : \"SMS sent successfully\"));\n onRefetch?.();\n } else {\n toast.error(response?.data || response?.errorMessage || \"Failed to send notification\");\n }\n } catch (error: any) {\n toast.error(error?.message || \"Failed to send notification\");\n } finally {\n setLoadingButtons((prev) => {\n const next = new Set(prev);\n next.delete(buttonKey);\n return next;\n });\n }\n };\n\n return (\n <Space size=\"middle\">\n {ids.map((id) => {\n const map = thirdPartyAssetMap[id];\n if (!map) return null;\n\n const isEmailButton = id === THIRD_PARTY_EMAIL_ID;\n const isSmsButton = id === THIRD_PARTY_SMS_ID;\n const { isDisabled, buttonText, tooltipTitle } = getNotificationButtonState(id, record, map.title);\n\n // Check if this button is currently loading\n const buttonKey = getButtonLoadingKey(record.id, isEmailButton);\n const isLoading = isNotificationButton(id) && loadingButtons.has(buttonKey);\n\n // onClick handler for email and sms buttons \n const handleClick = () => {\n handleSendNotification(isEmailButton, isSmsButton);\n };\n\n return (\n <Tooltip key={id} title={tooltipTitle}>\n <Button\n size=\"small\"\n disabled={isDisabled}\n loading={isLoading}\n onClick={isNotificationButton(id) ? handleClick : undefined}\n icon={\n !isLoading && (map.kind === \"img\" && map.src ? (\n <img src={map.src} alt={map.alt || map.title} />\n ) : (\n map.icon\n ))\n }\n className=\"flex flex-col items-center justify-center gap-1\"\n style={{ height: 'fit-content' }}\n >\n {buttonText}\n </Button>\n </Tooltip>\n );\n })}\n </Space>\n );\n },\n },\n {\n title: \"Alert Timestamp\",\n dataIndex: \"timestamp\",\n key: \"timestamp\",\n width: 220,\n render: (_ts: string, record: Alert) => {\n const elapsedStr = record?.timeElapsed;\n const remainingStr = record?.timeRemaining;\n const elapsedSec = elapsedStr ? parseHmsToSeconds(elapsedStr) : 0;\n const remainingSec = remainingStr ? parseHmsToSeconds(remainingStr) : 0;\n const percent = Math.round((elapsedSec / (elapsedSec + remainingSec)) * 100);\n return (\n <div>\n <div className=\"flex items-center gap-2\">\n <span className=\"w-[70px]\">Elapsed:</span>\n <span className=\"font-medium\">{elapsedStr ?? \"-\"}</span>\n </div>\n <Progress percent={percent} showInfo={false} size=\"small\" strokeColor={getPriorityHexColor(record.priority)} />\n <div className=\"flex items-center gap-2\">\n <span className=\"w-[70px]\">Remaining</span>\n <span className=\"font-medium\">{remainingStr ?? \"-\"}</span>\n </div>\n </div>\n );\n },\n },\n {\n title: \"Status\",\n dataIndex: \"statusType\",\n key: \"statusType\",\n width: 140,\n },\n {\n title: \"Description\",\n dataIndex: \"description\",\n key: \"description\",\n render: (text: string, record) => (\n <div>\n <a\n onClick={(e) => {\n e.preventDefault();\n onAlertIdClick?.(record);\n }}\n className=\"inline-block mb-1 text-blue-600\"\n >\n {(record as any).alertNumber}\n </a>\n <div className=\"text-black/65\">{text}</div>\n </div>\n ),\n },\n ];\n\n const columnsToUse = externalColumns && externalColumns.length ? externalColumns : defaultColumns;\n\n return (\n <div>\n <DataTable<Alert>\n rowKey=\"id\"\n data={filteredData}\n columns={columnsToUse}\n loading={loading}\n pageSize={pageSize}\n // tableProps={{\n // rowClassName: (record) => `${PRIORITY_ROW_BG_CLASS[(record as Alert).priority]}`,\n // }}\n toolbar={(\n <Row gutter={[12, 12]} className=\"mb-3\" align=\"middle\">\n <Col flex=\"none\">\n <div className=\"flex items-center gap-2\">\n <span>Severity</span>\n <PrioritySelect value={severity} onChange={setSeverity} options={severityOptions} />\n </div>\n </Col>\n <Col flex=\"none\">\n <div className=\"flex items-center gap-2\">\n <span>Anomaly type</span>\n <AnomalyTypeSelect value={anomalyType} onChange={setAnomalyType} options={anomalyOptionsToUse} />\n </div>\n </Col>\n <Col flex=\"none\">\n <div className=\"flex items-center gap-2\">\n <span>Space</span>\n <SpaceSelect value={space} onChange={setSpace} options={spaceOptionsToUse} />\n </div>\n </Col>\n <Col flex=\"none\">\n <div className=\"flex items-center gap-2\">\n <span>Action Taken</span>\n <ActionTakenSelect value={actionTaken} onChange={setActionTaken} options={actionOptions} />\n </div>\n </Col>\n <Col flex=\"auto\" />\n <Col flex=\"none\">\n <Input.Search\n allowClear\n placeholder=\"Search\"\n onSearch={setSearch}\n onChange={(e) => setSearch(e.target.value)}\n className=\"w-[260px] \"\n enterButton\n />\n </Col>\n </Row>\n )}\n />\n </div>\n );\n}\n\nexport default AlertsTable;\n","// src/subscribable.ts\nvar Subscribable = class {\n constructor() {\n this.listeners = /* @__PURE__ */ new Set();\n this.subscribe = this.subscribe.bind(this);\n }\n subscribe(listener) {\n this.listeners.add(listener);\n this.onSubscribe();\n return () => {\n this.listeners.delete(listener);\n this.onUnsubscribe();\n };\n }\n hasListeners() {\n return this.listeners.size > 0;\n }\n onSubscribe() {\n }\n onUnsubscribe() {\n }\n};\nexport {\n Subscribable\n};\n//# sourceMappingURL=subscribable.js.map","// src/timeoutManager.ts\nvar defaultTimeoutProvider = {\n // We need the wrapper function syntax below instead of direct references to\n // global setTimeout etc.\n //\n // BAD: `setTimeout: setTimeout`\n // GOOD: `setTimeout: (cb, delay) => setTimeout(cb, delay)`\n //\n // If we use direct references here, then anything that wants to spy on or\n // replace the global setTimeout (like tests) won't work since we'll already\n // have a hard reference to the original implementation at the time when this\n // file was imported.\n setTimeout: (callback, delay) => setTimeout(callback, delay),\n clearTimeout: (timeoutId) => clearTimeout(timeoutId),\n setInterval: (callback, delay) => setInterval(callback, delay),\n clearInterval: (intervalId) => clearInterval(intervalId)\n};\nvar TimeoutManager = class {\n // We cannot have TimeoutManager<T> as we must instantiate it with a concrete\n // type at app boot; and if we leave that type, then any new timer provider\n // would need to support ReturnType<typeof setTimeout>, which is infeasible.\n //\n // We settle for type safety for the TimeoutProvider type, and accept that\n // this class is unsafe internally to allow for extension.\n #provider = defaultTimeoutProvider;\n #providerCalled = false;\n setTimeoutProvider(provider) {\n if (process.env.NODE_ENV !== \"production\") {\n if (this.#providerCalled && provider !== this.#provider) {\n console.error(\n `[timeoutManager]: Switching provider after calls to previous provider might result in unexpected behavior.`,\n { previous: this.#provider, provider }\n );\n }\n }\n this.#provider = provider;\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = false;\n }\n }\n setTimeout(callback, delay) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = true;\n }\n return this.#provider.setTimeout(callback, delay);\n }\n clearTimeout(timeoutId) {\n this.#provider.clearTimeout(timeoutId);\n }\n setInterval(callback, delay) {\n if (process.env.NODE_ENV !== \"production\") {\n this.#providerCalled = true;\n }\n return this.#provider.setInterval(callback, delay);\n }\n clearInterval(intervalId) {\n this.#provider.clearInterval(intervalId);\n }\n};\nvar timeoutManager = new TimeoutManager();\nfunction systemSetTimeoutZero(callback) {\n setTimeout(callback, 0);\n}\nexport {\n TimeoutManager,\n defaultTimeoutProvider,\n systemSetTimeoutZero,\n timeoutManager\n};\n//# sourceMappingURL=timeoutManager.js.map","// src/utils.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar isServer = typeof window === \"undefined\" || \"Deno\" in globalThis;\nfunction noop() {\n}\nfunction functionalUpdate(updater, input) {\n return typeof updater === \"function\" ? updater(input) : updater;\n}\nfunction isValidTimeout(value) {\n return typeof value === \"number\" && value >= 0 && value !== Infinity;\n}\nfunction timeUntilStale(updatedAt, staleTime) {\n return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0);\n}\nfunction resolveStaleTime(staleTime, query) {\n return typeof staleTime === \"function\" ? staleTime(query) : staleTime;\n}\nfunction resolveEnabled(enabled, query) {\n return typeof enabled === \"function\" ? enabled(query) : enabled;\n}\nfunction matchQuery(filters, query) {\n const {\n type = \"all\",\n exact,\n fetchStatus,\n predicate,\n queryKey,\n stale\n } = filters;\n if (queryKey) {\n if (exact) {\n if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n return false;\n }\n } else if (!partialMatchKey(query.queryKey, queryKey)) {\n return false;\n }\n }\n if (type !== \"all\") {\n const isActive = query.isActive();\n if (type === \"active\" && !isActive) {\n return false;\n }\n if (type === \"inactive\" && isActive) {\n return false;\n }\n }\n if (typeof stale === \"boolean\" && query.isStale() !== stale) {\n return false;\n }\n if (fetchStatus && fetchStatus !== query.state.fetchStatus) {\n return false;\n }\n if (predicate && !predicate(query)) {\n return false;\n }\n return true;\n}\nfunction matchMutation(filters, mutation) {\n const { exact, status, predicate, mutationKey } = filters;\n if (mutationKey) {\n if (!mutation.options.mutationKey) {\n return false;\n }\n if (exact) {\n if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) {\n return false;\n }\n } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n return false;\n }\n }\n if (status && mutation.state.status !== status) {\n return false;\n }\n if (predicate && !predicate(mutation)) {\n return false;\n }\n return true;\n}\nfunction hashQueryKeyByOptions(queryKey, options) {\n const hashFn = options?.queryKeyHashFn || hashKey;\n return hashFn(queryKey);\n}\nfunction hashKey(queryKey) {\n return JSON.stringify(\n queryKey,\n (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {\n result[key] = val[key];\n return result;\n }, {}) : val\n );\n}\nfunction partialMatchKey(a, b) {\n if (a === b) {\n return true;\n }\n if (typeof a !== typeof b) {\n return false;\n }\n if (a && b && typeof a === \"object\" && typeof b === \"object\") {\n return Object.keys(b).every((key) => partialMatchKey(a[key], b[key]));\n }\n return false;\n}\nvar hasOwn = Object.prototype.hasOwnProperty;\nfunction replaceEqualDeep(a, b, depth = 0) {\n if (a === b) {\n return a;\n }\n if (depth > 500) return b;\n const array = isPlainArray(a) && isPlainArray(b);\n if (!array && !(isPlainObject(a) && isPlainObject(b))) return b;\n const aItems = array ? a : Object.keys(a);\n const aSize = aItems.length;\n const bItems = array ? b : Object.keys(b);\n const bSize = bItems.length;\n const copy = array ? new Array(bSize) : {};\n let equalItems = 0;\n for (let i = 0; i < bSize; i++) {\n const key = array ? i : bItems[i];\n const aItem = a[key];\n const bItem = b[key];\n if (aItem === bItem) {\n copy[key] = aItem;\n if (array ? i < aSize : hasOwn.call(a, key)) equalItems++;\n continue;\n }\n if (aItem === null || bItem === null || typeof aItem !== \"object\" || typeof bItem !== \"object\") {\n copy[key] = bItem;\n continue;\n }\n const v = replaceEqualDeep(aItem, bItem, depth + 1);\n copy[key] = v;\n if (v === aItem) equalItems++;\n }\n return aSize === bSize && equalItems === aSize ? a : copy;\n}\nfunction shallowEqualObjects(a, b) {\n if (!b || Object.keys(a).length !== Object.keys(b).length) {\n return false;\n }\n for (const key in a) {\n if (a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n}\nfunction isPlainArray(value) {\n return Array.isArray(value) && value.length === Object.keys(value).length;\n}\nfunction isPlainObject(o) {\n if (!hasObjectPrototype(o)) {\n return false;\n }\n const ctor = o.constructor;\n if (ctor === void 0) {\n return true;\n }\n const prot = ctor.prototype;\n if (!hasObjectPrototype(prot)) {\n return false;\n }\n if (!prot.hasOwnProperty(\"isPrototypeOf\")) {\n return false;\n }\n if (Object.getPrototypeOf(o) !== Object.prototype) {\n return false;\n }\n return true;\n}\nfunction hasObjectPrototype(o) {\n return Object.prototype.toString.call(o) === \"[object Object]\";\n}\nfunction sleep(timeout) {\n return new Promise((resolve) => {\n timeoutManager.setTimeout(resolve, timeout);\n });\n}\nfunction replaceData(prevData, data, options) {\n if (typeof options.structuralSharing === \"function\") {\n return options.structuralSharing(prevData, data);\n } else if (options.structuralSharing !== false) {\n if (process.env.NODE_ENV !== \"production\") {\n try {\n return replaceEqualDeep(prevData, data);\n } catch (error) {\n console.error(\n `Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${options.queryHash}]: ${error}`\n );\n throw error;\n }\n }\n return replaceEqualDeep(prevData, data);\n }\n return data;\n}\nfunction keepPreviousData(previousData) {\n return previousData;\n}\nfunction addToEnd(items, item, max = 0) {\n const newItems = [...items, item];\n return max && newItems.length > max ? newItems.slice(1) : newItems;\n}\nfunction addToStart(items, item, max = 0) {\n const newItems = [item, ...items];\n return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n}\nvar skipToken = Symbol();\nfunction ensureQueryFn(options, fetchOptions) {\n if (process.env.NODE_ENV !== \"production\") {\n if (options.queryFn === skipToken) {\n console.error(\n `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`\n );\n }\n }\n if (!options.queryFn && fetchOptions?.initialPromise) {\n return () => fetchOptions.initialPromise;\n }\n if (!options.queryFn || options.queryFn === skipToken) {\n return () => Promise.reject(new Error(`Missing queryFn: '${options.queryHash}'`));\n }\n return options.queryFn;\n}\nfunction shouldThrowError(throwOnError, params) {\n if (typeof throwOnError === \"function\") {\n return throwOnError(...params);\n }\n return !!throwOnError;\n}\nfunction addConsumeAwareSignal(object, getSignal, onCancelled) {\n let consumed = false;\n let signal;\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n signal ??= getSignal();\n if (consumed) {\n return signal;\n }\n consumed = true;\n if (signal.aborted) {\n onCancelled();\n } else {\n signal.addEventListener(\"abort\", onCancelled, { once: true });\n }\n return signal;\n }\n });\n return object;\n}\nexport {\n addConsumeAwareSignal,\n addToEnd,\n addToStart,\n ensureQueryFn,\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n isPlainArray,\n isPlainObject,\n isServer,\n isValidTimeout,\n keepPreviousData,\n matchMutation,\n matchQuery,\n noop,\n partialMatchKey,\n replaceData,\n replaceEqualDeep,\n resolveEnabled,\n resolveStaleTime,\n shallowEqualObjects,\n shouldThrowError,\n skipToken,\n sleep,\n timeUntilStale\n};\n//# sourceMappingURL=utils.js.map","// src/focusManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nimport { isServer } from \"./utils.js\";\nvar FocusManager = class extends Subscribable {\n #focused;\n #cleanup;\n #setup;\n constructor() {\n super();\n this.#setup = (onFocus) => {\n if (!isServer && window.addEventListener) {\n const listener = () => onFocus();\n window.addEventListener(\"visibilitychange\", listener, false);\n return () => {\n window.removeEventListener(\"visibilitychange\", listener);\n };\n }\n return;\n };\n }\n onSubscribe() {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.();\n this.#cleanup = void 0;\n }\n }\n setEventListener(setup) {\n this.#setup = setup;\n this.#cleanup?.();\n this.#cleanup = setup((focused) => {\n if (typeof focused === \"boolean\") {\n this.setFocused(focused);\n } else {\n this.onFocus();\n }\n });\n }\n setFocused(focused) {\n const changed = this.#focused !== focused;\n if (changed) {\n this.#focused = focused;\n this.onFocus();\n }\n }\n onFocus() {\n const isFocused = this.isFocused();\n this.listeners.forEach((listener) => {\n listener(isFocused);\n });\n }\n isFocused() {\n if (typeof this.#focused === \"boolean\") {\n return this.#focused;\n }\n return globalThis.document?.visibilityState !== \"hidden\";\n }\n};\nvar focusManager = new FocusManager();\nexport {\n FocusManager,\n focusManager\n};\n//# sourceMappingURL=focusManager.js.map","// src/thenable.ts\nimport { noop } from \"./utils.js\";\nfunction pendingThenable() {\n let resolve;\n let reject;\n const thenable = new Promise((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n thenable.status = \"pending\";\n thenable.catch(() => {\n });\n function finalize(data) {\n Object.assign(thenable, data);\n delete thenable.resolve;\n delete thenable.reject;\n }\n thenable.resolve = (value) => {\n finalize({\n status: \"fulfilled\",\n value\n });\n resolve(value);\n };\n thenable.reject = (reason) => {\n finalize({\n status: \"rejected\",\n reason\n });\n reject(reason);\n };\n return thenable;\n}\nfunction tryResolveSync(promise) {\n let data;\n promise.then((result) => {\n data = result;\n return result;\n }, noop)?.catch(noop);\n if (data !== void 0) {\n return { data };\n }\n return void 0;\n}\nexport {\n pendingThenable,\n tryResolveSync\n};\n//# sourceMappingURL=thenable.js.map","// src/notifyManager.ts\nimport { systemSetTimeoutZero } from \"./timeoutManager.js\";\nvar defaultScheduler = systemSetTimeoutZero;\nfunction createNotifyManager() {\n let queue = [];\n let transactions = 0;\n let notifyFn = (callback) => {\n callback();\n };\n let batchNotifyFn = (callback) => {\n callback();\n };\n let scheduleFn = defaultScheduler;\n const schedule = (callback) => {\n if (transactions) {\n queue.push(callback);\n } else {\n scheduleFn(() => {\n notifyFn(callback);\n });\n }\n };\n const flush = () => {\n const originalQueue = queue;\n queue = [];\n if (originalQueue.length) {\n scheduleFn(() => {\n batchNotifyFn(() => {\n originalQueue.forEach((callback) => {\n notifyFn(callback);\n });\n });\n });\n }\n };\n return {\n batch: (callback) => {\n let result;\n transactions++;\n try {\n result = callback();\n } finally {\n transactions--;\n if (!transactions) {\n flush();\n }\n }\n return result;\n },\n /**\n * All calls to the wrapped function will be batched.\n */\n batchCalls: (callback) => {\n return (...args) => {\n schedule(() => {\n callback(...args);\n });\n };\n },\n schedule,\n /**\n * Use this method to set a custom notify function.\n * This can be used to for example wrap notifications with `React.act` while running tests.\n */\n setNotifyFunction: (fn) => {\n notifyFn = fn;\n },\n /**\n * Use this method to set a custom function to batch notifications together into a single tick.\n * By default React Query will use the batch function provided by ReactDOM or React Native.\n */\n setBatchNotifyFunction: (fn) => {\n batchNotifyFn = fn;\n },\n setScheduler: (fn) => {\n scheduleFn = fn;\n }\n };\n}\nvar notifyManager = createNotifyManager();\nexport {\n createNotifyManager,\n defaultScheduler,\n notifyManager\n};\n//# sourceMappingURL=notifyManager.js.map","// src/onlineManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nimport { isServer } from \"./utils.js\";\nvar OnlineManager = class extends Subscribable {\n #online = true;\n #cleanup;\n #setup;\n constructor() {\n super();\n this.#setup = (onOnline) => {\n if (!isServer && window.addEventListener) {\n const onlineListener = () => onOnline(true);\n const offlineListener = () => onOnline(false);\n window.addEventListener(\"online\", onlineListener, false);\n window.addEventListener(\"offline\", offlineListener, false);\n return () => {\n window.removeEventListener(\"online\", onlineListener);\n window.removeEventListener(\"offline\", offlineListener);\n };\n }\n return;\n };\n }\n onSubscribe() {\n if (!this.#cleanup) {\n this.setEventListener(this.#setup);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#cleanup?.();\n this.#cleanup = void 0;\n }\n }\n setEventListener(setup) {\n this.#setup = setup;\n this.#cleanup?.();\n this.#cleanup = setup(this.setOnline.bind(this));\n }\n setOnline(online) {\n const changed = this.#online !== online;\n if (changed) {\n this.#online = online;\n this.listeners.forEach((listener) => {\n listener(online);\n });\n }\n }\n isOnline() {\n return this.#online;\n }\n};\nvar onlineManager = new OnlineManager();\nexport {\n OnlineManager,\n onlineManager\n};\n//# sourceMappingURL=onlineManager.js.map","// src/retryer.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport { isServer, sleep } from \"./utils.js\";\nfunction defaultRetryDelay(failureCount) {\n return Math.min(1e3 * 2 ** failureCount, 3e4);\n}\nfunction canFetch(networkMode) {\n return (networkMode ?? \"online\") === \"online\" ? onlineManager.isOnline() : true;\n}\nvar CancelledError = class extends Error {\n constructor(options) {\n super(\"CancelledError\");\n this.revert = options?.revert;\n this.silent = options?.silent;\n }\n};\nfunction isCancelledError(value) {\n return value instanceof CancelledError;\n}\nfunction createRetryer(config) {\n let isRetryCancelled = false;\n let failureCount = 0;\n let continueFn;\n const thenable = pendingThenable();\n const isResolved = () => thenable.status !== \"pending\";\n const cancel = (cancelOptions) => {\n if (!isResolved()) {\n const error = new CancelledError(cancelOptions);\n reject(error);\n config.onCancel?.(error);\n }\n };\n const cancelRetry = () => {\n isRetryCancelled = true;\n };\n const continueRetry = () => {\n isRetryCancelled = false;\n };\n const canContinue = () => focusManager.isFocused() && (config.networkMode === \"always\" || onlineManager.isOnline()) && config.canRun();\n const canStart = () => canFetch(config.networkMode) && config.canRun();\n const resolve = (value) => {\n if (!isResolved()) {\n continueFn?.();\n thenable.resolve(value);\n }\n };\n const reject = (value) => {\n if (!isResolved()) {\n continueFn?.();\n thenable.reject(value);\n }\n };\n const pause = () => {\n return new Promise((continueResolve) => {\n continueFn = (value) => {\n if (isResolved() || canContinue()) {\n continueResolve(value);\n }\n };\n config.onPause?.();\n }).then(() => {\n continueFn = void 0;\n if (!isResolved()) {\n config.onContinue?.();\n }\n });\n };\n const run = () => {\n if (isResolved()) {\n return;\n }\n let promiseOrValue;\n const initialPromise = failureCount === 0 ? config.initialPromise : void 0;\n try {\n promiseOrValue = initialPromise ?? config.fn();\n } catch (error) {\n promiseOrValue = Promise.reject(error);\n }\n Promise.resolve(promiseOrValue).then(resolve).catch((error) => {\n if (isResolved()) {\n return;\n }\n const retry = config.retry ?? (isServer ? 0 : 3);\n const retryDelay = config.retryDelay ?? defaultRetryDelay;\n const delay = typeof retryDelay === \"function\" ? retryDelay(failureCount, error) : retryDelay;\n const shouldRetry = retry === true || typeof retry === \"number\" && failureCount < retry || typeof retry === \"function\" && retry(failureCount, error);\n if (isRetryCancelled || !shouldRetry) {\n reject(error);\n return;\n }\n failureCount++;\n config.onFail?.(failureCount, error);\n sleep(delay).then(() => {\n return canContinue() ? void 0 : pause();\n }).then(() => {\n if (isRetryCancelled) {\n reject(error);\n } else {\n run();\n }\n });\n });\n };\n return {\n promise: thenable,\n status: () => thenable.status,\n cancel,\n continue: () => {\n continueFn?.();\n return thenable;\n },\n cancelRetry,\n continueRetry,\n canStart,\n start: () => {\n if (canStart()) {\n run();\n } else {\n pause().then(run);\n }\n return thenable;\n }\n };\n}\nexport {\n CancelledError,\n canFetch,\n createRetryer,\n isCancelledError\n};\n//# sourceMappingURL=retryer.js.map","// src/removable.ts\nimport { timeoutManager } from \"./timeoutManager.js\";\nimport { isServer, isValidTimeout } from \"./utils.js\";\nvar Removable = class {\n #gcTimeout;\n destroy() {\n this.clearGcTimeout();\n }\n scheduleGc() {\n this.clearGcTimeout();\n if (isValidTimeout(this.gcTime)) {\n this.#gcTimeout = timeoutManager.setTimeout(() => {\n this.optionalRemove();\n }, this.gcTime);\n }\n }\n updateGcTime(newGcTime) {\n this.gcTime = Math.max(\n this.gcTime || 0,\n newGcTime ?? (isServer ? Infinity : 5 * 60 * 1e3)\n );\n }\n clearGcTimeout() {\n if (this.#gcTimeout) {\n timeoutManager.clearTimeout(this.#gcTimeout);\n this.#gcTimeout = void 0;\n }\n }\n};\nexport {\n Removable\n};\n//# sourceMappingURL=removable.js.map","// src/query.ts\nimport {\n ensureQueryFn,\n noop,\n replaceData,\n resolveEnabled,\n resolveStaleTime,\n skipToken,\n timeUntilStale\n} from \"./utils.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { CancelledError, canFetch, createRetryer } from \"./retryer.js\";\nimport { Removable } from \"./removable.js\";\nvar Query = class extends Removable {\n #initialState;\n #revertState;\n #cache;\n #client;\n #retryer;\n #defaultOptions;\n #abortSignalConsumed;\n constructor(config) {\n super();\n this.#abortSignalConsumed = false;\n this.#defaultOptions = config.defaultOptions;\n this.setOptions(config.options);\n this.observers = [];\n this.#client = config.client;\n this.#cache = this.#client.getQueryCache();\n this.queryKey = config.queryKey;\n this.queryHash = config.queryHash;\n this.#initialState = getDefaultState(this.options);\n this.state = config.state ?? this.#initialState;\n this.scheduleGc();\n }\n get meta() {\n return this.options.meta;\n }\n get promise() {\n return this.#retryer?.promise;\n }\n setOptions(options) {\n this.options = { ...this.#defaultOptions, ...options };\n this.updateGcTime(this.options.gcTime);\n if (this.state && this.state.data === void 0) {\n const defaultState = getDefaultState(this.options);\n if (defaultState.data !== void 0) {\n this.setState(\n successState(defaultState.data, defaultState.dataUpdatedAt)\n );\n this.#initialState = defaultState;\n }\n }\n }\n optionalRemove() {\n if (!this.observers.length && this.state.fetchStatus === \"idle\") {\n this.#cache.remove(this);\n }\n }\n setData(newData, options) {\n const data = replaceData(this.state.data, newData, this.options);\n this.#dispatch({\n data,\n type: \"success\",\n dataUpdatedAt: options?.updatedAt,\n manual: options?.manual\n });\n return data;\n }\n setState(state, setStateOptions) {\n this.#dispatch({ type: \"setState\", state, setStateOptions });\n }\n cancel(options) {\n const promise = this.#retryer?.promise;\n this.#retryer?.cancel(options);\n return promise ? promise.then(noop).catch(noop) : Promise.resolve();\n }\n destroy() {\n super.destroy();\n this.cancel({ silent: true });\n }\n reset() {\n this.destroy();\n this.setState(this.#initialState);\n }\n isActive() {\n return this.observers.some(\n (observer) => resolveEnabled(observer.options.enabled, this) !== false\n );\n }\n isDisabled() {\n if (this.getObserversCount() > 0) {\n return !this.isActive();\n }\n return this.options.queryFn === skipToken || this.state.dataUpdateCount + this.state.errorUpdateCount === 0;\n }\n isStatic() {\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => resolveStaleTime(observer.options.staleTime, this) === \"static\"\n );\n }\n return false;\n }\n isStale() {\n if (this.getObserversCount() > 0) {\n return this.observers.some(\n (observer) => observer.getCurrentResult().isStale\n );\n }\n return this.state.data === void 0 || this.state.isInvalidated;\n }\n isStaleByTime(staleTime = 0) {\n if (this.state.data === void 0) {\n return true;\n }\n if (staleTime === \"static\") {\n return false;\n }\n if (this.state.isInvalidated) {\n return true;\n }\n return !timeUntilStale(this.state.dataUpdatedAt, staleTime);\n }\n onFocus() {\n const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus());\n observer?.refetch({ cancelRefetch: false });\n this.#retryer?.continue();\n }\n onOnline() {\n const observer = this.observers.find((x) => x.shouldFetchOnReconnect());\n observer?.refetch({ cancelRefetch: false });\n this.#retryer?.continue();\n }\n addObserver(observer) {\n if (!this.observers.includes(observer)) {\n this.observers.push(observer);\n this.clearGcTimeout();\n this.#cache.notify({ type: \"observerAdded\", query: this, observer });\n }\n }\n removeObserver(observer) {\n if (this.observers.includes(observer)) {\n this.observers = this.observers.filter((x) => x !== observer);\n if (!this.observers.length) {\n if (this.#retryer) {\n if (this.#abortSignalConsumed) {\n this.#retryer.cancel({ revert: true });\n } else {\n this.#retryer.cancelRetry();\n }\n }\n this.scheduleGc();\n }\n this.#cache.notify({ type: \"observerRemoved\", query: this, observer });\n }\n }\n getObserversCount() {\n return this.observers.length;\n }\n invalidate() {\n if (!this.state.isInvalidated) {\n this.#dispatch({ type: \"invalidate\" });\n }\n }\n async fetch(options, fetchOptions) {\n if (this.state.fetchStatus !== \"idle\" && // If the promise in the retryer is already rejected, we have to definitely\n // re-start the fetch; there is a chance that the query is still in a\n // pending state when that happens\n this.#retryer?.status() !== \"rejected\") {\n if (this.state.data !== void 0 && fetchOptions?.cancelRefetch) {\n this.cancel({ silent: true });\n } else if (this.#retryer) {\n this.#retryer.continueRetry();\n return this.#retryer.promise;\n }\n }\n if (options) {\n this.setOptions(options);\n }\n if (!this.options.queryFn) {\n const observer = this.observers.find((x) => x.options.queryFn);\n if (observer) {\n this.setOptions(observer.options);\n }\n }\n if (process.env.NODE_ENV !== \"production\") {\n if (!Array.isArray(this.options.queryKey)) {\n console.error(\n `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`\n );\n }\n }\n const abortController = new AbortController();\n const addSignalProperty = (object) => {\n Object.defineProperty(object, \"signal\", {\n enumerable: true,\n get: () => {\n this.#abortSignalConsumed = true;\n return abortController.signal;\n }\n });\n };\n const fetchFn = () => {\n const queryFn = ensureQueryFn(this.options, fetchOptions);\n const createQueryFnContext = () => {\n const queryFnContext2 = {\n client: this.#client,\n queryKey: this.queryKey,\n meta: this.meta\n };\n addSignalProperty(queryFnContext2);\n return queryFnContext2;\n };\n const queryFnContext = createQueryFnContext();\n this.#abortSignalConsumed = false;\n if (this.options.persister) {\n return this.options.persister(\n queryFn,\n queryFnContext,\n this\n );\n }\n return queryFn(queryFnContext);\n };\n const createFetchContext = () => {\n const context2 = {\n fetchOptions,\n options: this.options,\n queryKey: this.queryKey,\n client: this.#client,\n state: this.state,\n fetchFn\n };\n addSignalProperty(context2);\n return context2;\n };\n const context = createFetchContext();\n this.options.behavior?.onFetch(context, this);\n this.#revertState = this.state;\n if (this.state.fetchStatus === \"idle\" || this.state.fetchMeta !== context.fetchOptions?.meta) {\n this.#dispatch({ type: \"fetch\", meta: context.fetchOptions?.meta });\n }\n this.#retryer = createRetryer({\n initialPromise: fetchOptions?.initialPromise,\n fn: context.fetchFn,\n onCancel: (error) => {\n if (error instanceof CancelledError && error.revert) {\n this.setState({\n ...this.#revertState,\n fetchStatus: \"idle\"\n });\n }\n abortController.abort();\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: \"failed\", failureCount, error });\n },\n onPause: () => {\n this.#dispatch({ type: \"pause\" });\n },\n onContinue: () => {\n this.#dispatch({ type: \"continue\" });\n },\n retry: context.options.retry,\n retryDelay: context.options.retryDelay,\n networkMode: context.options.networkMode,\n canRun: () => true\n });\n try {\n const data = await this.#retryer.start();\n if (data === void 0) {\n if (process.env.NODE_ENV !== \"production\") {\n console.error(\n `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`\n );\n }\n throw new Error(`${this.queryHash} data is undefined`);\n }\n this.setData(data);\n this.#cache.config.onSuccess?.(data, this);\n this.#cache.config.onSettled?.(\n data,\n this.state.error,\n this\n );\n return data;\n } catch (error) {\n if (error instanceof CancelledError) {\n if (error.silent) {\n return this.#retryer.promise;\n } else if (error.revert) {\n if (this.state.data === void 0) {\n throw error;\n }\n return this.state.data;\n }\n }\n this.#dispatch({\n type: \"error\",\n error\n });\n this.#cache.config.onError?.(\n error,\n this\n );\n this.#cache.config.onSettled?.(\n this.state.data,\n error,\n this\n );\n throw error;\n } finally {\n this.scheduleGc();\n }\n }\n #dispatch(action) {\n const reducer = (state) => {\n switch (action.type) {\n case \"failed\":\n return {\n ...state,\n fetchFailureCount: action.failureCount,\n fetchFailureReason: action.error\n };\n case \"pause\":\n return {\n ...state,\n fetchStatus: \"paused\"\n };\n case \"continue\":\n return {\n ...state,\n fetchStatus: \"fetching\"\n };\n case \"fetch\":\n return {\n ...state,\n ...fetchState(state.data, this.options),\n fetchMeta: action.meta ?? null\n };\n case \"success\":\n const newState = {\n ...state,\n ...successState(action.data, action.dataUpdatedAt),\n dataUpdateCount: state.dataUpdateCount + 1,\n ...!action.manual && {\n fetchStatus: \"idle\",\n fetchFailureCount: 0,\n fetchFailureReason: null\n }\n };\n this.#revertState = action.manual ? newState : void 0;\n return newState;\n case \"error\":\n const error = action.error;\n return {\n ...state,\n error,\n errorUpdateCount: state.errorUpdateCount + 1,\n errorUpdatedAt: Date.now(),\n fetchFailureCount: state.fetchFailureCount + 1,\n fetchFailureReason: error,\n fetchStatus: \"idle\",\n status: \"error\",\n // flag existing data as invalidated if we get a background error\n // note that \"no data\" always means stale so we can set unconditionally here\n isInvalidated: true\n };\n case \"invalidate\":\n return {\n ...state,\n isInvalidated: true\n };\n case \"setState\":\n return {\n ...state,\n ...action.state\n };\n }\n };\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.observers.forEach((observer) => {\n observer.onQueryUpdate();\n });\n this.#cache.notify({ query: this, type: \"updated\", action });\n });\n }\n};\nfunction fetchState(data, options) {\n return {\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchStatus: canFetch(options.networkMode) ? \"fetching\" : \"paused\",\n ...data === void 0 && {\n error: null,\n status: \"pending\"\n }\n };\n}\nfunction successState(data, dataUpdatedAt) {\n return {\n data,\n dataUpdatedAt: dataUpdatedAt ?? Date.now(),\n error: null,\n isInvalidated: false,\n status: \"success\"\n };\n}\nfunction getDefaultState(options) {\n const data = typeof options.initialData === \"function\" ? options.initialData() : options.initialData;\n const hasData = data !== void 0;\n const initialDataUpdatedAt = hasData ? typeof options.initialDataUpdatedAt === \"function\" ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0;\n return {\n data,\n dataUpdateCount: 0,\n dataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n error: null,\n errorUpdateCount: 0,\n errorUpdatedAt: 0,\n fetchFailureCount: 0,\n fetchFailureReason: null,\n fetchMeta: null,\n isInvalidated: false,\n status: hasData ? \"success\" : \"pending\",\n fetchStatus: \"idle\"\n };\n}\nexport {\n Query,\n fetchState\n};\n//# sourceMappingURL=query.js.map","// src/queryObserver.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { fetchState } from \"./query.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { pendingThenable } from \"./thenable.js\";\nimport {\n isServer,\n isValidTimeout,\n noop,\n replaceData,\n resolveEnabled,\n resolveStaleTime,\n shallowEqualObjects,\n timeUntilStale\n} from \"./utils.js\";\nimport { timeoutManager } from \"./timeoutManager.js\";\nvar QueryObserver = class extends Subscribable {\n constructor(client, options) {\n super();\n this.options = options;\n this.#client = client;\n this.#selectError = null;\n this.#currentThenable = pendingThenable();\n this.bindMethods();\n this.setOptions(options);\n }\n #client;\n #currentQuery = void 0;\n #currentQueryInitialState = void 0;\n #currentResult = void 0;\n #currentResultState;\n #currentResultOptions;\n #currentThenable;\n #selectError;\n #selectFn;\n #selectResult;\n // This property keeps track of the last query with defined data.\n // It will be used to pass the previous data and query to the placeholder function between renders.\n #lastQueryWithDefinedData;\n #staleTimeoutId;\n #refetchIntervalId;\n #currentRefetchInterval;\n #trackedProps = /* @__PURE__ */ new Set();\n bindMethods() {\n this.refetch = this.refetch.bind(this);\n }\n onSubscribe() {\n if (this.listeners.size === 1) {\n this.#currentQuery.addObserver(this);\n if (shouldFetchOnMount(this.#currentQuery, this.options)) {\n this.#executeFetch();\n } else {\n this.updateResult();\n }\n this.#updateTimers();\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.destroy();\n }\n }\n shouldFetchOnReconnect() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnReconnect\n );\n }\n shouldFetchOnWindowFocus() {\n return shouldFetchOn(\n this.#currentQuery,\n this.options,\n this.options.refetchOnWindowFocus\n );\n }\n destroy() {\n this.listeners = /* @__PURE__ */ new Set();\n this.#clearStaleTimeout();\n this.#clearRefetchInterval();\n this.#currentQuery.removeObserver(this);\n }\n setOptions(options) {\n const prevOptions = this.options;\n const prevQuery = this.#currentQuery;\n this.options = this.#client.defaultQueryOptions(options);\n if (this.options.enabled !== void 0 && typeof this.options.enabled !== \"boolean\" && typeof this.options.enabled !== \"function\" && typeof resolveEnabled(this.options.enabled, this.#currentQuery) !== \"boolean\") {\n throw new Error(\n \"Expected enabled to be a boolean or a callback that returns a boolean\"\n );\n }\n this.#updateQuery();\n this.#currentQuery.setOptions(this.options);\n if (prevOptions._defaulted && !shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getQueryCache().notify({\n type: \"observerOptionsUpdated\",\n query: this.#currentQuery,\n observer: this\n });\n }\n const mounted = this.hasListeners();\n if (mounted && shouldFetchOptionally(\n this.#currentQuery,\n prevQuery,\n this.options,\n prevOptions\n )) {\n this.#executeFetch();\n }\n this.updateResult();\n if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || resolveStaleTime(this.options.staleTime, this.#currentQuery) !== resolveStaleTime(prevOptions.staleTime, this.#currentQuery))) {\n this.#updateStaleTimeout();\n }\n const nextRefetchInterval = this.#computeRefetchInterval();\n if (mounted && (this.#currentQuery !== prevQuery || resolveEnabled(this.options.enabled, this.#currentQuery) !== resolveEnabled(prevOptions.enabled, this.#currentQuery) || nextRefetchInterval !== this.#currentRefetchInterval)) {\n this.#updateRefetchInterval(nextRefetchInterval);\n }\n }\n getOptimisticResult(options) {\n const query = this.#client.getQueryCache().build(this.#client, options);\n const result = this.createResult(query, options);\n if (shouldAssignObserverCurrentProperties(this, result)) {\n this.#currentResult = result;\n this.#currentResultOptions = this.options;\n this.#currentResultState = this.#currentQuery.state;\n }\n return result;\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n trackResult(result, onPropTracked) {\n return new Proxy(result, {\n get: (target, key) => {\n this.trackProp(key);\n onPropTracked?.(key);\n if (key === \"promise\") {\n this.trackProp(\"data\");\n if (!this.options.experimental_prefetchInRender && this.#currentThenable.status === \"pending\") {\n this.#currentThenable.reject(\n new Error(\n \"experimental_prefetchInRender feature flag is not enabled\"\n )\n );\n }\n }\n return Reflect.get(target, key);\n }\n });\n }\n trackProp(key) {\n this.#trackedProps.add(key);\n }\n getCurrentQuery() {\n return this.#currentQuery;\n }\n refetch({ ...options } = {}) {\n return this.fetch({\n ...options\n });\n }\n fetchOptimistic(options) {\n const defaultedOptions = this.#client.defaultQueryOptions(options);\n const query = this.#client.getQueryCache().build(this.#client, defaultedOptions);\n return query.fetch().then(() => this.createResult(query, defaultedOptions));\n }\n fetch(fetchOptions) {\n return this.#executeFetch({\n ...fetchOptions,\n cancelRefetch: fetchOptions.cancelRefetch ?? true\n }).then(() => {\n this.updateResult();\n return this.#currentResult;\n });\n }\n #executeFetch(fetchOptions) {\n this.#updateQuery();\n let promise = this.#currentQuery.fetch(\n this.options,\n fetchOptions\n );\n if (!fetchOptions?.throwOnError) {\n promise = promise.catch(noop);\n }\n return promise;\n }\n #updateStaleTimeout() {\n this.#clearStaleTimeout();\n const staleTime = resolveStaleTime(\n this.options.staleTime,\n this.#currentQuery\n );\n if (isServer || this.#currentResult.isStale || !isValidTimeout(staleTime)) {\n return;\n }\n const time = timeUntilStale(this.#currentResult.dataUpdatedAt, staleTime);\n const timeout = time + 1;\n this.#staleTimeoutId = timeoutManager.setTimeout(() => {\n if (!this.#currentResult.isStale) {\n this.updateResult();\n }\n }, timeout);\n }\n #computeRefetchInterval() {\n return (typeof this.options.refetchInterval === \"function\" ? this.options.refetchInterval(this.#currentQuery) : this.options.refetchInterval) ?? false;\n }\n #updateRefetchInterval(nextInterval) {\n this.#clearRefetchInterval();\n this.#currentRefetchInterval = nextInterval;\n if (isServer || resolveEnabled(this.options.enabled, this.#currentQuery) === false || !isValidTimeout(this.#currentRefetchInterval) || this.#currentRefetchInterval === 0) {\n return;\n }\n this.#refetchIntervalId = timeoutManager.setInterval(() => {\n if (this.options.refetchIntervalInBackground || focusManager.isFocused()) {\n this.#executeFetch();\n }\n }, this.#currentRefetchInterval);\n }\n #updateTimers() {\n this.#updateStaleTimeout();\n this.#updateRefetchInterval(this.#computeRefetchInterval());\n }\n #clearStaleTimeout() {\n if (this.#staleTimeoutId) {\n timeoutManager.clearTimeout(this.#staleTimeoutId);\n this.#staleTimeoutId = void 0;\n }\n }\n #clearRefetchInterval() {\n if (this.#refetchIntervalId) {\n timeoutManager.clearInterval(this.#refetchIntervalId);\n this.#refetchIntervalId = void 0;\n }\n }\n createResult(query, options) {\n const prevQuery = this.#currentQuery;\n const prevOptions = this.options;\n const prevResult = this.#currentResult;\n const prevResultState = this.#currentResultState;\n const prevResultOptions = this.#currentResultOptions;\n const queryChange = query !== prevQuery;\n const queryInitialState = queryChange ? query.state : this.#currentQueryInitialState;\n const { state } = query;\n let newState = { ...state };\n let isPlaceholderData = false;\n let data;\n if (options._optimisticResults) {\n const mounted = this.hasListeners();\n const fetchOnMount = !mounted && shouldFetchOnMount(query, options);\n const fetchOptionally = mounted && shouldFetchOptionally(query, prevQuery, options, prevOptions);\n if (fetchOnMount || fetchOptionally) {\n newState = {\n ...newState,\n ...fetchState(state.data, query.options)\n };\n }\n if (options._optimisticResults === \"isRestoring\") {\n newState.fetchStatus = \"idle\";\n }\n }\n let { error, errorUpdatedAt, status } = newState;\n data = newState.data;\n let skipSelect = false;\n if (options.placeholderData !== void 0 && data === void 0 && status === \"pending\") {\n let placeholderData;\n if (prevResult?.isPlaceholderData && options.placeholderData === prevResultOptions?.placeholderData) {\n placeholderData = prevResult.data;\n skipSelect = true;\n } else {\n placeholderData = typeof options.placeholderData === \"function\" ? options.placeholderData(\n this.#lastQueryWithDefinedData?.state.data,\n this.#lastQueryWithDefinedData\n ) : options.placeholderData;\n }\n if (placeholderData !== void 0) {\n status = \"success\";\n data = replaceData(\n prevResult?.data,\n placeholderData,\n options\n );\n isPlaceholderData = true;\n }\n }\n if (options.select && data !== void 0 && !skipSelect) {\n if (prevResult && data === prevResultState?.data && options.select === this.#selectFn) {\n data = this.#selectResult;\n } else {\n try {\n this.#selectFn = options.select;\n data = options.select(data);\n data = replaceData(prevResult?.data, data, options);\n this.#selectResult = data;\n this.#selectError = null;\n } catch (selectError) {\n this.#selectError = selectError;\n }\n }\n }\n if (this.#selectError) {\n error = this.#selectError;\n data = this.#selectResult;\n errorUpdatedAt = Date.now();\n status = \"error\";\n }\n const isFetching = newState.fetchStatus === \"fetching\";\n const isPending = status === \"pending\";\n const isError = status === \"error\";\n const isLoading = isPending && isFetching;\n const hasData = data !== void 0;\n const result = {\n status,\n fetchStatus: newState.fetchStatus,\n isPending,\n isSuccess: status === \"success\",\n isError,\n isInitialLoading: isLoading,\n isLoading,\n data,\n dataUpdatedAt: newState.dataUpdatedAt,\n error,\n errorUpdatedAt,\n failureCount: newState.fetchFailureCount,\n failureReason: newState.fetchFailureReason,\n errorUpdateCount: newState.errorUpdateCount,\n isFetched: newState.dataUpdateCount > 0 || newState.errorUpdateCount > 0,\n isFetchedAfterMount: newState.dataUpdateCount > queryInitialState.dataUpdateCount || newState.errorUpdateCount > queryInitialState.errorUpdateCount,\n isFetching,\n isRefetching: isFetching && !isPending,\n isLoadingError: isError && !hasData,\n isPaused: newState.fetchStatus === \"paused\",\n isPlaceholderData,\n isRefetchError: isError && hasData,\n isStale: isStale(query, options),\n refetch: this.refetch,\n promise: this.#currentThenable,\n isEnabled: resolveEnabled(options.enabled, query) !== false\n };\n const nextResult = result;\n if (this.options.experimental_prefetchInRender) {\n const hasResultData = nextResult.data !== void 0;\n const isErrorWithoutData = nextResult.status === \"error\" && !hasResultData;\n const finalizeThenableIfPossible = (thenable) => {\n if (isErrorWithoutData) {\n thenable.reject(nextResult.error);\n } else if (hasResultData) {\n thenable.resolve(nextResult.data);\n }\n };\n const recreateThenable = () => {\n const pending = this.#currentThenable = nextResult.promise = pendingThenable();\n finalizeThenableIfPossible(pending);\n };\n const prevThenable = this.#currentThenable;\n switch (prevThenable.status) {\n case \"pending\":\n if (query.queryHash === prevQuery.queryHash) {\n finalizeThenableIfPossible(prevThenable);\n }\n break;\n case \"fulfilled\":\n if (isErrorWithoutData || nextResult.data !== prevThenable.value) {\n recreateThenable();\n }\n break;\n case \"rejected\":\n if (!isErrorWithoutData || nextResult.error !== prevThenable.reason) {\n recreateThenable();\n }\n break;\n }\n }\n return nextResult;\n }\n updateResult() {\n const prevResult = this.#currentResult;\n const nextResult = this.createResult(this.#currentQuery, this.options);\n this.#currentResultState = this.#currentQuery.state;\n this.#currentResultOptions = this.options;\n if (this.#currentResultState.data !== void 0) {\n this.#lastQueryWithDefinedData = this.#currentQuery;\n }\n if (shallowEqualObjects(nextResult, prevResult)) {\n return;\n }\n this.#currentResult = nextResult;\n const shouldNotifyListeners = () => {\n if (!prevResult) {\n return true;\n }\n const { notifyOnChangeProps } = this.options;\n const notifyOnChangePropsValue = typeof notifyOnChangeProps === \"function\" ? notifyOnChangeProps() : notifyOnChangeProps;\n if (notifyOnChangePropsValue === \"all\" || !notifyOnChangePropsValue && !this.#trackedProps.size) {\n return true;\n }\n const includedProps = new Set(\n notifyOnChangePropsValue ?? this.#trackedProps\n );\n if (this.options.throwOnError) {\n includedProps.add(\"error\");\n }\n return Object.keys(this.#currentResult).some((key) => {\n const typedKey = key;\n const changed = this.#currentResult[typedKey] !== prevResult[typedKey];\n return changed && includedProps.has(typedKey);\n });\n };\n this.#notify({ listeners: shouldNotifyListeners() });\n }\n #updateQuery() {\n const query = this.#client.getQueryCache().build(this.#client, this.options);\n if (query === this.#currentQuery) {\n return;\n }\n const prevQuery = this.#currentQuery;\n this.#currentQuery = query;\n this.#currentQueryInitialState = query.state;\n if (this.hasListeners()) {\n prevQuery?.removeObserver(this);\n query.addObserver(this);\n }\n }\n onQueryUpdate() {\n this.updateResult();\n if (this.hasListeners()) {\n this.#updateTimers();\n }\n }\n #notify(notifyOptions) {\n notifyManager.batch(() => {\n if (notifyOptions.listeners) {\n this.listeners.forEach((listener) => {\n listener(this.#currentResult);\n });\n }\n this.#client.getQueryCache().notify({\n query: this.#currentQuery,\n type: \"observerResultsUpdated\"\n });\n });\n }\n};\nfunction shouldLoadOnMount(query, options) {\n return resolveEnabled(options.enabled, query) !== false && query.state.data === void 0 && !(query.state.status === \"error\" && options.retryOnMount === false);\n}\nfunction shouldFetchOnMount(query, options) {\n return shouldLoadOnMount(query, options) || query.state.data !== void 0 && shouldFetchOn(query, options, options.refetchOnMount);\n}\nfunction shouldFetchOn(query, options, field) {\n if (resolveEnabled(options.enabled, query) !== false && resolveStaleTime(options.staleTime, query) !== \"static\") {\n const value = typeof field === \"function\" ? field(query) : field;\n return value === \"always\" || value !== false && isStale(query, options);\n }\n return false;\n}\nfunction shouldFetchOptionally(query, prevQuery, options, prevOptions) {\n return (query !== prevQuery || resolveEnabled(prevOptions.enabled, query) === false) && (!options.suspense || query.state.status !== \"error\") && isStale(query, options);\n}\nfunction isStale(query, options) {\n return resolveEnabled(options.enabled, query) !== false && query.isStaleByTime(resolveStaleTime(options.staleTime, query));\n}\nfunction shouldAssignObserverCurrentProperties(observer, optimisticResult) {\n if (!shallowEqualObjects(observer.getCurrentResult(), optimisticResult)) {\n return true;\n }\n return false;\n}\nexport {\n QueryObserver\n};\n//# sourceMappingURL=queryObserver.js.map","// src/infiniteQueryBehavior.ts\nimport {\n addConsumeAwareSignal,\n addToEnd,\n addToStart,\n ensureQueryFn\n} from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n return {\n onFetch: (context, query) => {\n const options = context.options;\n const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n const oldPages = context.state.data?.pages || [];\n const oldPageParams = context.state.data?.pageParams || [];\n let result = { pages: [], pageParams: [] };\n let currentPage = 0;\n const fetchFn = async () => {\n let cancelled = false;\n const addSignalProperty = (object) => {\n addConsumeAwareSignal(\n object,\n () => context.signal,\n () => cancelled = true\n );\n };\n const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n const fetchPage = async (data, param, previous) => {\n if (cancelled) {\n return Promise.reject();\n }\n if (param == null && data.pages.length) {\n return Promise.resolve(data);\n }\n const createQueryFnContext = () => {\n const queryFnContext2 = {\n client: context.client,\n queryKey: context.queryKey,\n pageParam: param,\n direction: previous ? \"backward\" : \"forward\",\n meta: context.options.meta\n };\n addSignalProperty(queryFnContext2);\n return queryFnContext2;\n };\n const queryFnContext = createQueryFnContext();\n const page = await queryFn(queryFnContext);\n const { maxPages } = context.options;\n const addTo = previous ? addToStart : addToEnd;\n return {\n pages: addTo(data.pages, page, maxPages),\n pageParams: addTo(data.pageParams, param, maxPages)\n };\n };\n if (direction && oldPages.length) {\n const previous = direction === \"backward\";\n const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n const oldData = {\n pages: oldPages,\n pageParams: oldPageParams\n };\n const param = pageParamFn(options, oldData);\n result = await fetchPage(oldData, param, previous);\n } else {\n const remainingPages = pages ?? oldPages.length;\n do {\n const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n if (currentPage > 0 && param == null) {\n break;\n }\n result = await fetchPage(result, param);\n currentPage++;\n } while (currentPage < remainingPages);\n }\n return result;\n };\n if (context.options.persister) {\n context.fetchFn = () => {\n return context.options.persister?.(\n fetchFn,\n {\n client: context.client,\n queryKey: context.queryKey,\n meta: context.options.meta,\n signal: context.signal\n },\n query\n );\n };\n } else {\n context.fetchFn = fetchFn;\n }\n }\n };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n const lastIndex = pages.length - 1;\n return pages.length > 0 ? options.getNextPageParam(\n pages[lastIndex],\n pages,\n pageParams[lastIndex],\n pageParams\n ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n if (!data) return false;\n return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n if (!data || !options.getPreviousPageParam) return false;\n return getPreviousPageParam(options, data) != null;\n}\nexport {\n hasNextPage,\n hasPreviousPage,\n infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map","// src/mutation.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Removable } from \"./removable.js\";\nimport { createRetryer } from \"./retryer.js\";\nvar Mutation = class extends Removable {\n #client;\n #observers;\n #mutationCache;\n #retryer;\n constructor(config) {\n super();\n this.#client = config.client;\n this.mutationId = config.mutationId;\n this.#mutationCache = config.mutationCache;\n this.#observers = [];\n this.state = config.state || getDefaultState();\n this.setOptions(config.options);\n this.scheduleGc();\n }\n setOptions(options) {\n this.options = options;\n this.updateGcTime(this.options.gcTime);\n }\n get meta() {\n return this.options.meta;\n }\n addObserver(observer) {\n if (!this.#observers.includes(observer)) {\n this.#observers.push(observer);\n this.clearGcTimeout();\n this.#mutationCache.notify({\n type: \"observerAdded\",\n mutation: this,\n observer\n });\n }\n }\n removeObserver(observer) {\n this.#observers = this.#observers.filter((x) => x !== observer);\n this.scheduleGc();\n this.#mutationCache.notify({\n type: \"observerRemoved\",\n mutation: this,\n observer\n });\n }\n optionalRemove() {\n if (!this.#observers.length) {\n if (this.state.status === \"pending\") {\n this.scheduleGc();\n } else {\n this.#mutationCache.remove(this);\n }\n }\n }\n continue() {\n return this.#retryer?.continue() ?? // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n this.execute(this.state.variables);\n }\n async execute(variables) {\n const onContinue = () => {\n this.#dispatch({ type: \"continue\" });\n };\n const mutationFnContext = {\n client: this.#client,\n meta: this.options.meta,\n mutationKey: this.options.mutationKey\n };\n this.#retryer = createRetryer({\n fn: () => {\n if (!this.options.mutationFn) {\n return Promise.reject(new Error(\"No mutationFn found\"));\n }\n return this.options.mutationFn(variables, mutationFnContext);\n },\n onFail: (failureCount, error) => {\n this.#dispatch({ type: \"failed\", failureCount, error });\n },\n onPause: () => {\n this.#dispatch({ type: \"pause\" });\n },\n onContinue,\n retry: this.options.retry ?? 0,\n retryDelay: this.options.retryDelay,\n networkMode: this.options.networkMode,\n canRun: () => this.#mutationCache.canRun(this)\n });\n const restored = this.state.status === \"pending\";\n const isPaused = !this.#retryer.canStart();\n try {\n if (restored) {\n onContinue();\n } else {\n this.#dispatch({ type: \"pending\", variables, isPaused });\n await this.#mutationCache.config.onMutate?.(\n variables,\n this,\n mutationFnContext\n );\n const context = await this.options.onMutate?.(\n variables,\n mutationFnContext\n );\n if (context !== this.state.context) {\n this.#dispatch({\n type: \"pending\",\n context,\n variables,\n isPaused\n });\n }\n }\n const data = await this.#retryer.start();\n await this.#mutationCache.config.onSuccess?.(\n data,\n variables,\n this.state.context,\n this,\n mutationFnContext\n );\n await this.options.onSuccess?.(\n data,\n variables,\n this.state.context,\n mutationFnContext\n );\n await this.#mutationCache.config.onSettled?.(\n data,\n null,\n this.state.variables,\n this.state.context,\n this,\n mutationFnContext\n );\n await this.options.onSettled?.(\n data,\n null,\n variables,\n this.state.context,\n mutationFnContext\n );\n this.#dispatch({ type: \"success\", data });\n return data;\n } catch (error) {\n try {\n await this.#mutationCache.config.onError?.(\n error,\n variables,\n this.state.context,\n this,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n await this.options.onError?.(\n error,\n variables,\n this.state.context,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n await this.#mutationCache.config.onSettled?.(\n void 0,\n error,\n this.state.variables,\n this.state.context,\n this,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n await this.options.onSettled?.(\n void 0,\n error,\n variables,\n this.state.context,\n mutationFnContext\n );\n } catch (e) {\n void Promise.reject(e);\n }\n this.#dispatch({ type: \"error\", error });\n throw error;\n } finally {\n this.#mutationCache.runNext(this);\n }\n }\n #dispatch(action) {\n const reducer = (state) => {\n switch (action.type) {\n case \"failed\":\n return {\n ...state,\n failureCount: action.failureCount,\n failureReason: action.error\n };\n case \"pause\":\n return {\n ...state,\n isPaused: true\n };\n case \"continue\":\n return {\n ...state,\n isPaused: false\n };\n case \"pending\":\n return {\n ...state,\n context: action.context,\n data: void 0,\n failureCount: 0,\n failureReason: null,\n error: null,\n isPaused: action.isPaused,\n status: \"pending\",\n variables: action.variables,\n submittedAt: Date.now()\n };\n case \"success\":\n return {\n ...state,\n data: action.data,\n failureCount: 0,\n failureReason: null,\n error: null,\n status: \"success\",\n isPaused: false\n };\n case \"error\":\n return {\n ...state,\n data: void 0,\n error: action.error,\n failureCount: state.failureCount + 1,\n failureReason: action.error,\n isPaused: false,\n status: \"error\"\n };\n }\n };\n this.state = reducer(this.state);\n notifyManager.batch(() => {\n this.#observers.forEach((observer) => {\n observer.onMutationUpdate(action);\n });\n this.#mutationCache.notify({\n mutation: this,\n type: \"updated\",\n action\n });\n });\n }\n};\nfunction getDefaultState() {\n return {\n context: void 0,\n data: void 0,\n error: null,\n failureCount: 0,\n failureReason: null,\n isPaused: false,\n status: \"idle\",\n variables: void 0,\n submittedAt: 0\n };\n}\nexport {\n Mutation,\n getDefaultState\n};\n//# sourceMappingURL=mutation.js.map","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#mutations = /* @__PURE__ */ new Set();\n this.#scopes = /* @__PURE__ */ new Map();\n this.#mutationId = 0;\n }\n #mutations;\n #scopes;\n #mutationId;\n build(client, options, state) {\n const mutation = new Mutation({\n client,\n mutationCache: this,\n mutationId: ++this.#mutationId,\n options: client.defaultMutationOptions(options),\n state\n });\n this.add(mutation);\n return mutation;\n }\n add(mutation) {\n this.#mutations.add(mutation);\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n scopedMutations.push(mutation);\n } else {\n this.#scopes.set(scope, [mutation]);\n }\n }\n this.notify({ type: \"added\", mutation });\n }\n remove(mutation) {\n if (this.#mutations.delete(mutation)) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const scopedMutations = this.#scopes.get(scope);\n if (scopedMutations) {\n if (scopedMutations.length > 1) {\n const index = scopedMutations.indexOf(mutation);\n if (index !== -1) {\n scopedMutations.splice(index, 1);\n }\n } else if (scopedMutations[0] === mutation) {\n this.#scopes.delete(scope);\n }\n }\n }\n }\n this.notify({ type: \"removed\", mutation });\n }\n canRun(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const mutationsWithSameScope = this.#scopes.get(scope);\n const firstPendingMutation = mutationsWithSameScope?.find(\n (m) => m.state.status === \"pending\"\n );\n return !firstPendingMutation || firstPendingMutation === mutation;\n } else {\n return true;\n }\n }\n runNext(mutation) {\n const scope = scopeFor(mutation);\n if (typeof scope === \"string\") {\n const foundMutation = this.#scopes.get(scope)?.find((m) => m !== mutation && m.state.isPaused);\n return foundMutation?.continue() ?? Promise.resolve();\n } else {\n return Promise.resolve();\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.#mutations.forEach((mutation) => {\n this.notify({ type: \"removed\", mutation });\n });\n this.#mutations.clear();\n this.#scopes.clear();\n });\n }\n getAll() {\n return Array.from(this.#mutations);\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (mutation) => matchMutation(defaultedFilters, mutation)\n );\n }\n findAll(filters = {}) {\n return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n resumePausedMutations() {\n const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n return notifyManager.batch(\n () => Promise.all(\n pausedMutations.map((mutation) => mutation.continue().catch(noop))\n )\n );\n }\n};\nfunction scopeFor(mutation) {\n return mutation.options.scope?.id;\n}\nexport {\n MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/mutationObserver.ts\nimport { getDefaultState } from \"./mutation.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nimport { hashKey, shallowEqualObjects } from \"./utils.js\";\nvar MutationObserver = class extends Subscribable {\n #client;\n #currentResult = void 0;\n #currentMutation;\n #mutateOptions;\n constructor(client, options) {\n super();\n this.#client = client;\n this.setOptions(options);\n this.bindMethods();\n this.#updateResult();\n }\n bindMethods() {\n this.mutate = this.mutate.bind(this);\n this.reset = this.reset.bind(this);\n }\n setOptions(options) {\n const prevOptions = this.options;\n this.options = this.#client.defaultMutationOptions(options);\n if (!shallowEqualObjects(this.options, prevOptions)) {\n this.#client.getMutationCache().notify({\n type: \"observerOptionsUpdated\",\n mutation: this.#currentMutation,\n observer: this\n });\n }\n if (prevOptions?.mutationKey && this.options.mutationKey && hashKey(prevOptions.mutationKey) !== hashKey(this.options.mutationKey)) {\n this.reset();\n } else if (this.#currentMutation?.state.status === \"pending\") {\n this.#currentMutation.setOptions(this.options);\n }\n }\n onUnsubscribe() {\n if (!this.hasListeners()) {\n this.#currentMutation?.removeObserver(this);\n }\n }\n onMutationUpdate(action) {\n this.#updateResult();\n this.#notify(action);\n }\n getCurrentResult() {\n return this.#currentResult;\n }\n reset() {\n this.#currentMutation?.removeObserver(this);\n this.#currentMutation = void 0;\n this.#updateResult();\n this.#notify();\n }\n mutate(variables, options) {\n this.#mutateOptions = options;\n this.#currentMutation?.removeObserver(this);\n this.#currentMutation = this.#client.getMutationCache().build(this.#client, this.options);\n this.#currentMutation.addObserver(this);\n return this.#currentMutation.execute(variables);\n }\n #updateResult() {\n const state = this.#currentMutation?.state ?? getDefaultState();\n this.#currentResult = {\n ...state,\n isPending: state.status === \"pending\",\n isSuccess: state.status === \"success\",\n isError: state.status === \"error\",\n isIdle: state.status === \"idle\",\n mutate: this.mutate,\n reset: this.reset\n };\n }\n #notify(action) {\n notifyManager.batch(() => {\n if (this.#mutateOptions && this.hasListeners()) {\n const variables = this.#currentResult.variables;\n const onMutateResult = this.#currentResult.context;\n const context = {\n client: this.#client,\n meta: this.options.meta,\n mutationKey: this.options.mutationKey\n };\n if (action?.type === \"success\") {\n try {\n this.#mutateOptions.onSuccess?.(\n action.data,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n this.#mutateOptions.onSettled?.(\n action.data,\n null,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n } else if (action?.type === \"error\") {\n try {\n this.#mutateOptions.onError?.(\n action.error,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n try {\n this.#mutateOptions.onSettled?.(\n void 0,\n action.error,\n variables,\n onMutateResult,\n context\n );\n } catch (e) {\n void Promise.reject(e);\n }\n }\n }\n this.listeners.forEach((listener) => {\n listener(this.#currentResult);\n });\n });\n }\n};\nexport {\n MutationObserver\n};\n//# sourceMappingURL=mutationObserver.js.map","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n constructor(config = {}) {\n super();\n this.config = config;\n this.#queries = /* @__PURE__ */ new Map();\n }\n #queries;\n build(client, options, state) {\n const queryKey = options.queryKey;\n const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n let query = this.get(queryHash);\n if (!query) {\n query = new Query({\n client,\n queryKey,\n queryHash,\n options: client.defaultQueryOptions(options),\n state,\n defaultOptions: client.getQueryDefaults(queryKey)\n });\n this.add(query);\n }\n return query;\n }\n add(query) {\n if (!this.#queries.has(query.queryHash)) {\n this.#queries.set(query.queryHash, query);\n this.notify({\n type: \"added\",\n query\n });\n }\n }\n remove(query) {\n const queryInMap = this.#queries.get(query.queryHash);\n if (queryInMap) {\n query.destroy();\n if (queryInMap === query) {\n this.#queries.delete(query.queryHash);\n }\n this.notify({ type: \"removed\", query });\n }\n }\n clear() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n this.remove(query);\n });\n });\n }\n get(queryHash) {\n return this.#queries.get(queryHash);\n }\n getAll() {\n return [...this.#queries.values()];\n }\n find(filters) {\n const defaultedFilters = { exact: true, ...filters };\n return this.getAll().find(\n (query) => matchQuery(defaultedFilters, query)\n );\n }\n findAll(filters = {}) {\n const queries = this.getAll();\n return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n }\n notify(event) {\n notifyManager.batch(() => {\n this.listeners.forEach((listener) => {\n listener(event);\n });\n });\n }\n onFocus() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onFocus();\n });\n });\n }\n onOnline() {\n notifyManager.batch(() => {\n this.getAll().forEach((query) => {\n query.onOnline();\n });\n });\n }\n};\nexport {\n QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/queryClient.ts\nimport {\n functionalUpdate,\n hashKey,\n hashQueryKeyByOptions,\n noop,\n partialMatchKey,\n resolveStaleTime,\n skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar QueryClient = class {\n #queryCache;\n #mutationCache;\n #defaultOptions;\n #queryDefaults;\n #mutationDefaults;\n #mountCount;\n #unsubscribeFocus;\n #unsubscribeOnline;\n constructor(config = {}) {\n this.#queryCache = config.queryCache || new QueryCache();\n this.#mutationCache = config.mutationCache || new MutationCache();\n this.#defaultOptions = config.defaultOptions || {};\n this.#queryDefaults = /* @__PURE__ */ new Map();\n this.#mutationDefaults = /* @__PURE__ */ new Map();\n this.#mountCount = 0;\n }\n mount() {\n this.#mountCount++;\n if (this.#mountCount !== 1) return;\n this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n if (focused) {\n await this.resumePausedMutations();\n this.#queryCache.onFocus();\n }\n });\n this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n if (online) {\n await this.resumePausedMutations();\n this.#queryCache.onOnline();\n }\n });\n }\n unmount() {\n this.#mountCount--;\n if (this.#mountCount !== 0) return;\n this.#unsubscribeFocus?.();\n this.#unsubscribeFocus = void 0;\n this.#unsubscribeOnline?.();\n this.#unsubscribeOnline = void 0;\n }\n isFetching(filters) {\n return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n }\n isMutating(filters) {\n return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n }\n /**\n * Imperative (non-reactive) way to retrieve data for a QueryKey.\n * Should only be used in callbacks or functions where reading the latest data is necessary, e.g. for optimistic updates.\n *\n * Hint: Do not use this function inside a component, because it won't receive updates.\n * Use `useQuery` to create a `QueryObserver` that subscribes to changes.\n */\n getQueryData(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(options.queryHash)?.state.data;\n }\n ensureQueryData(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n const query = this.#queryCache.build(this, defaultedOptions);\n const cachedData = query.state.data;\n if (cachedData === void 0) {\n return this.fetchQuery(options);\n }\n if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n void this.prefetchQuery(defaultedOptions);\n }\n return Promise.resolve(cachedData);\n }\n getQueriesData(filters) {\n return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n const data = state.data;\n return [queryKey, data];\n });\n }\n setQueryData(queryKey, updater, options) {\n const defaultedOptions = this.defaultQueryOptions({ queryKey });\n const query = this.#queryCache.get(\n defaultedOptions.queryHash\n );\n const prevData = query?.state.data;\n const data = functionalUpdate(updater, prevData);\n if (data === void 0) {\n return void 0;\n }\n return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n }\n setQueriesData(filters, updater, options) {\n return notifyManager.batch(\n () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n queryKey,\n this.setQueryData(queryKey, updater, options)\n ])\n );\n }\n getQueryState(queryKey) {\n const options = this.defaultQueryOptions({ queryKey });\n return this.#queryCache.get(\n options.queryHash\n )?.state;\n }\n removeQueries(filters) {\n const queryCache = this.#queryCache;\n notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n queryCache.remove(query);\n });\n });\n }\n resetQueries(filters, options) {\n const queryCache = this.#queryCache;\n return notifyManager.batch(() => {\n queryCache.findAll(filters).forEach((query) => {\n query.reset();\n });\n return this.refetchQueries(\n {\n type: \"active\",\n ...filters\n },\n options\n );\n });\n }\n cancelQueries(filters, cancelOptions = {}) {\n const defaultedCancelOptions = { revert: true, ...cancelOptions };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n );\n return Promise.all(promises).then(noop).catch(noop);\n }\n invalidateQueries(filters, options = {}) {\n return notifyManager.batch(() => {\n this.#queryCache.findAll(filters).forEach((query) => {\n query.invalidate();\n });\n if (filters?.refetchType === \"none\") {\n return Promise.resolve();\n }\n return this.refetchQueries(\n {\n ...filters,\n type: filters?.refetchType ?? filters?.type ?? \"active\"\n },\n options\n );\n });\n }\n refetchQueries(filters, options = {}) {\n const fetchOptions = {\n ...options,\n cancelRefetch: options.cancelRefetch ?? true\n };\n const promises = notifyManager.batch(\n () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled() && !query.isStatic()).map((query) => {\n let promise = query.fetch(void 0, fetchOptions);\n if (!fetchOptions.throwOnError) {\n promise = promise.catch(noop);\n }\n return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n })\n );\n return Promise.all(promises).then(noop);\n }\n fetchQuery(options) {\n const defaultedOptions = this.defaultQueryOptions(options);\n if (defaultedOptions.retry === void 0) {\n defaultedOptions.retry = false;\n }\n const query = this.#queryCache.build(this, defaultedOptions);\n return query.isStaleByTime(\n resolveStaleTime(defaultedOptions.staleTime, query)\n ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n }\n prefetchQuery(options) {\n return this.fetchQuery(options).then(noop).catch(noop);\n }\n fetchInfiniteQuery(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.fetchQuery(options);\n }\n prefetchInfiniteQuery(options) {\n return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n }\n ensureInfiniteQueryData(options) {\n options.behavior = infiniteQueryBehavior(options.pages);\n return this.ensureQueryData(options);\n }\n resumePausedMutations() {\n if (onlineManager.isOnline()) {\n return this.#mutationCache.resumePausedMutations();\n }\n return Promise.resolve();\n }\n getQueryCache() {\n return this.#queryCache;\n }\n getMutationCache() {\n return this.#mutationCache;\n }\n getDefaultOptions() {\n return this.#defaultOptions;\n }\n setDefaultOptions(options) {\n this.#defaultOptions = options;\n }\n setQueryDefaults(queryKey, options) {\n this.#queryDefaults.set(hashKey(queryKey), {\n queryKey,\n defaultOptions: options\n });\n }\n getQueryDefaults(queryKey) {\n const defaults = [...this.#queryDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n setMutationDefaults(mutationKey, options) {\n this.#mutationDefaults.set(hashKey(mutationKey), {\n mutationKey,\n defaultOptions: options\n });\n }\n getMutationDefaults(mutationKey) {\n const defaults = [...this.#mutationDefaults.values()];\n const result = {};\n defaults.forEach((queryDefault) => {\n if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n Object.assign(result, queryDefault.defaultOptions);\n }\n });\n return result;\n }\n defaultQueryOptions(options) {\n if (options._defaulted) {\n return options;\n }\n const defaultedOptions = {\n ...this.#defaultOptions.queries,\n ...this.getQueryDefaults(options.queryKey),\n ...options,\n _defaulted: true\n };\n if (!defaultedOptions.queryHash) {\n defaultedOptions.queryHash = hashQueryKeyByOptions(\n defaultedOptions.queryKey,\n defaultedOptions\n );\n }\n if (defaultedOptions.refetchOnReconnect === void 0) {\n defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n }\n if (defaultedOptions.throwOnError === void 0) {\n defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n }\n if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n defaultedOptions.networkMode = \"offlineFirst\";\n }\n if (defaultedOptions.queryFn === skipToken) {\n defaultedOptions.enabled = false;\n }\n return defaultedOptions;\n }\n defaultMutationOptions(options) {\n if (options?._defaulted) {\n return options;\n }\n return {\n ...this.#defaultOptions.mutations,\n ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n ...options,\n _defaulted: true\n };\n }\n clear() {\n this.#queryCache.clear();\n this.#mutationCache.clear();\n }\n};\nexport {\n QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","\"use client\";\n\n// src/QueryClientProvider.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar QueryClientContext = React.createContext(\n void 0\n);\nvar useQueryClient = (queryClient) => {\n const client = React.useContext(QueryClientContext);\n if (queryClient) {\n return queryClient;\n }\n if (!client) {\n throw new Error(\"No QueryClient set, use QueryClientProvider to set one\");\n }\n return client;\n};\nvar QueryClientProvider = ({\n client,\n children\n}) => {\n React.useEffect(() => {\n client.mount();\n return () => {\n client.unmount();\n };\n }, [client]);\n return /* @__PURE__ */ jsx(QueryClientContext.Provider, { value: client, children });\n};\nexport {\n QueryClientContext,\n QueryClientProvider,\n useQueryClient\n};\n//# sourceMappingURL=QueryClientProvider.js.map","\"use client\";\n\n// src/IsRestoringProvider.ts\nimport * as React from \"react\";\nvar IsRestoringContext = React.createContext(false);\nvar useIsRestoring = () => React.useContext(IsRestoringContext);\nvar IsRestoringProvider = IsRestoringContext.Provider;\nexport {\n IsRestoringProvider,\n useIsRestoring\n};\n//# sourceMappingURL=IsRestoringProvider.js.map","\"use client\";\n\n// src/QueryErrorResetBoundary.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createValue() {\n let isReset = false;\n return {\n clearReset: () => {\n isReset = false;\n },\n reset: () => {\n isReset = true;\n },\n isReset: () => {\n return isReset;\n }\n };\n}\nvar QueryErrorResetBoundaryContext = React.createContext(createValue());\nvar useQueryErrorResetBoundary = () => React.useContext(QueryErrorResetBoundaryContext);\nvar QueryErrorResetBoundary = ({\n children\n}) => {\n const [value] = React.useState(() => createValue());\n return /* @__PURE__ */ jsx(QueryErrorResetBoundaryContext.Provider, { value, children: typeof children === \"function\" ? children(value) : children });\n};\nexport {\n QueryErrorResetBoundary,\n useQueryErrorResetBoundary\n};\n//# sourceMappingURL=QueryErrorResetBoundary.js.map","\"use client\";\n\n// src/errorBoundaryUtils.ts\nimport * as React from \"react\";\nimport { shouldThrowError } from \"@tanstack/query-core\";\nvar ensurePreventErrorBoundaryRetry = (options, errorResetBoundary, query) => {\n const throwOnError = query?.state.error && typeof options.throwOnError === \"function\" ? shouldThrowError(options.throwOnError, [query.state.error, query]) : options.throwOnError;\n if (options.suspense || options.experimental_prefetchInRender || throwOnError) {\n if (!errorResetBoundary.isReset()) {\n options.retryOnMount = false;\n }\n }\n};\nvar useClearResetErrorBoundary = (errorResetBoundary) => {\n React.useEffect(() => {\n errorResetBoundary.clearReset();\n }, [errorResetBoundary]);\n};\nvar getHasError = ({\n result,\n errorResetBoundary,\n throwOnError,\n query,\n suspense\n}) => {\n return result.isError && !errorResetBoundary.isReset() && !result.isFetching && query && (suspense && result.data === void 0 || shouldThrowError(throwOnError, [result.error, query]));\n};\nexport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n};\n//# sourceMappingURL=errorBoundaryUtils.js.map","// src/suspense.ts\nvar defaultThrowOnError = (_error, query) => query.state.data === void 0;\nvar ensureSuspenseTimers = (defaultedOptions) => {\n if (defaultedOptions.suspense) {\n const MIN_SUSPENSE_TIME_MS = 1e3;\n const clamp = (value) => value === \"static\" ? value : Math.max(value ?? MIN_SUSPENSE_TIME_MS, MIN_SUSPENSE_TIME_MS);\n const originalStaleTime = defaultedOptions.staleTime;\n defaultedOptions.staleTime = typeof originalStaleTime === \"function\" ? (...args) => clamp(originalStaleTime(...args)) : clamp(originalStaleTime);\n if (typeof defaultedOptions.gcTime === \"number\") {\n defaultedOptions.gcTime = Math.max(\n defaultedOptions.gcTime,\n MIN_SUSPENSE_TIME_MS\n );\n }\n }\n};\nvar willFetch = (result, isRestoring) => result.isLoading && result.isFetching && !isRestoring;\nvar shouldSuspend = (defaultedOptions, result) => defaultedOptions?.suspense && result.isPending;\nvar fetchOptimistic = (defaultedOptions, observer, errorResetBoundary) => observer.fetchOptimistic(defaultedOptions).catch(() => {\n errorResetBoundary.clearReset();\n});\nexport {\n defaultThrowOnError,\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n};\n//# sourceMappingURL=suspense.js.map","\"use client\";\n\n// src/useBaseQuery.ts\nimport * as React from \"react\";\nimport { isServer, noop, notifyManager } from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nimport { useQueryErrorResetBoundary } from \"./QueryErrorResetBoundary.js\";\nimport {\n ensurePreventErrorBoundaryRetry,\n getHasError,\n useClearResetErrorBoundary\n} from \"./errorBoundaryUtils.js\";\nimport { useIsRestoring } from \"./IsRestoringProvider.js\";\nimport {\n ensureSuspenseTimers,\n fetchOptimistic,\n shouldSuspend,\n willFetch\n} from \"./suspense.js\";\nfunction useBaseQuery(options, Observer, queryClient) {\n if (process.env.NODE_ENV !== \"production\") {\n if (typeof options !== \"object\" || Array.isArray(options)) {\n throw new Error(\n 'Bad argument type. Starting with v5, only the \"Object\" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object'\n );\n }\n }\n const isRestoring = useIsRestoring();\n const errorResetBoundary = useQueryErrorResetBoundary();\n const client = useQueryClient(queryClient);\n const defaultedOptions = client.defaultQueryOptions(options);\n client.getDefaultOptions().queries?._experimental_beforeQuery?.(\n defaultedOptions\n );\n const query = client.getQueryCache().get(defaultedOptions.queryHash);\n if (process.env.NODE_ENV !== \"production\") {\n if (!defaultedOptions.queryFn) {\n console.error(\n `[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`\n );\n }\n }\n defaultedOptions._optimisticResults = isRestoring ? \"isRestoring\" : \"optimistic\";\n ensureSuspenseTimers(defaultedOptions);\n ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary, query);\n useClearResetErrorBoundary(errorResetBoundary);\n const isNewCacheEntry = !client.getQueryCache().get(defaultedOptions.queryHash);\n const [observer] = React.useState(\n () => new Observer(\n client,\n defaultedOptions\n )\n );\n const result = observer.getOptimisticResult(defaultedOptions);\n const shouldSubscribe = !isRestoring && options.subscribed !== false;\n React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => {\n const unsubscribe = shouldSubscribe ? observer.subscribe(notifyManager.batchCalls(onStoreChange)) : noop;\n observer.updateResult();\n return unsubscribe;\n },\n [observer, shouldSubscribe]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n React.useEffect(() => {\n observer.setOptions(defaultedOptions);\n }, [defaultedOptions, observer]);\n if (shouldSuspend(defaultedOptions, result)) {\n throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary);\n }\n if (getHasError({\n result,\n errorResetBoundary,\n throwOnError: defaultedOptions.throwOnError,\n query,\n suspense: defaultedOptions.suspense\n })) {\n throw result.error;\n }\n ;\n client.getDefaultOptions().queries?._experimental_afterQuery?.(\n defaultedOptions,\n result\n );\n if (defaultedOptions.experimental_prefetchInRender && !isServer && willFetch(result, isRestoring)) {\n const promise = isNewCacheEntry ? (\n // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted\n fetchOptimistic(defaultedOptions, observer, errorResetBoundary)\n ) : (\n // subscribe to the \"cache promise\" so that we can finalize the currentThenable once data comes in\n query?.promise\n );\n promise?.catch(noop).finally(() => {\n observer.updateResult();\n });\n }\n return !defaultedOptions.notifyOnChangeProps ? observer.trackResult(result) : result;\n}\nexport {\n useBaseQuery\n};\n//# sourceMappingURL=useBaseQuery.js.map","\"use client\";\n\n// src/useQuery.ts\nimport { QueryObserver } from \"@tanstack/query-core\";\nimport { useBaseQuery } from \"./useBaseQuery.js\";\nfunction useQuery(options, queryClient) {\n return useBaseQuery(options, QueryObserver, queryClient);\n}\nexport {\n useQuery\n};\n//# sourceMappingURL=useQuery.js.map","\"use client\";\n\n// src/useMutation.ts\nimport * as React from \"react\";\nimport {\n MutationObserver,\n noop,\n notifyManager,\n shouldThrowError\n} from \"@tanstack/query-core\";\nimport { useQueryClient } from \"./QueryClientProvider.js\";\nfunction useMutation(options, queryClient) {\n const client = useQueryClient(queryClient);\n const [observer] = React.useState(\n () => new MutationObserver(\n client,\n options\n )\n );\n React.useEffect(() => {\n observer.setOptions(options);\n }, [observer, options]);\n const result = React.useSyncExternalStore(\n React.useCallback(\n (onStoreChange) => observer.subscribe(notifyManager.batchCalls(onStoreChange)),\n [observer]\n ),\n () => observer.getCurrentResult(),\n () => observer.getCurrentResult()\n );\n const mutate = React.useCallback(\n (variables, mutateOptions) => {\n observer.mutate(variables, mutateOptions).catch(noop);\n },\n [observer]\n );\n if (result.error && shouldThrowError(observer.options.throwOnError, [result.error])) {\n throw result.error;\n }\n return { ...result, mutate, mutateAsync: result.mutate };\n}\nexport {\n useMutation\n};\n//# sourceMappingURL=useMutation.js.map","import { useMutation, useQueryClient } from \"@tanstack/react-query\";\nimport { useApi } from \"../providers/ApiProvider\";\nimport type { UpdateAlertStatusPayload } from \"../ports/alerts.port\";\n\nexport function useUpdateAlertStatus() {\n const { alerts } = useApi();\n const qClient = useQueryClient();\n return useMutation({\n mutationFn: (payload: UpdateAlertStatusPayload) => alerts.updateAlertStatus(payload),\n onSuccess: () => {\n qClient.invalidateQueries({ queryKey: [\"alerts\", \"list\"] });\n qClient.invalidateQueries({ queryKey: [\"alerts\", \"report\"] });\n },\n });\n}\n\n\n","export function getTimeString(date: Date, timeZone: string): string {\n return date.toLocaleTimeString([], {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: true,\n timeZone,\n });\n}\n\nexport function getAbbrAndOffset(date: Date, timeZone: string): { abbr?: string; offset?: string } {\n try {\n const parts = new Intl.DateTimeFormat(\"en-US\", { timeZone, timeZoneName: \"short\" }).formatToParts(date);\n const tzPart = parts.find((p) => p.type === \"timeZoneName\");\n const abbr = tzPart?.value;\n\n let offset: string | undefined;\n try {\n const offParts = new Intl.DateTimeFormat(\"en-US\", { timeZone, timeZoneName: \"shortOffset\" as any }).formatToParts(date);\n const offPart = offParts.find((p) => p.type === \"timeZoneName\");\n if (offPart?.value && offPart.value.startsWith(\"GMT\")) {\n offset = offPart.value.replace(\"GMT\", \"\");\n }\n } catch { }\n\n return { abbr, offset };\n } catch {\n return {};\n }\n}\n\n/**\n * format a date-like value into MM/DD/YYYY HH:MM:SS (24h) format\n */\nexport function formatTimestamp(value: unknown): string {\n if (!value) return \"-\";\n try {\n const d = new Date(value as any);\n const pad = (n: number) => String(n).padStart(2, \"0\");\n const MM = pad(d.getMonth() + 1);\n const DD = pad(d.getDate());\n const YYYY = d.getFullYear();\n const HH = pad(d.getHours());\n const mm = pad(d.getMinutes());\n const ss = pad(d.getSeconds());\n return `${MM}/${DD}/${YYYY} ${HH}:${mm}:${ss}`;\n } catch {\n return \"-\";\n }\n}\n\n/**\n * Formats a date-like value to a localized string with 2-digit parts (en-US).\n * Example: 12/31/2025, 11:59:59 PM\n */\nexport function formatDisplayTimestamp(ts: unknown): string {\n if (!ts) return \"-\";\n try {\n const date = new Date(ts as any);\n return date.toLocaleString(\"en-US\", {\n day: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n });\n } catch {\n return \"-\";\n }\n}","import type { ColumnsType } from \"antd/es/table\";\nimport type { ReactNode } from \"react\";\nimport AlertsTable from \"../Alerts/AlertsTable\";\nimport type { Alert } from \"../../types/alerts.types\";\nimport type { OptionItem } from \"../Alerts/Filters/FilterSelect\";\nimport { Button, Dropdown, Tag } from \"antd\";\nimport { MoreOutlined } from \"@ant-design/icons\";\nimport { useUpdateAlertStatus } from \"../../hooks/useUpdateAlertStatus\";\nimport { formatTimestamp } from \"../../utils/dateTimeUtils\";\nimport { toast } from \"react-toastify\";\n\n// Match AlertsTable.tsx border colors for severity\nconst PRIORITY_BORDER_TEXT_CLASS: Record<Alert[\"priority\"], string> = {\n Critical: \"#FF3B30\",\n High: \"#FFB86A\",\n Medium: \"#FFCC00\",\n Low: \"#007AFF\",\n};\n\nconst PRIORITY_ROW_BG_CLASS: Record<string, string> = {\n Critical: \"#FFE2E2\",\n High: \"#FF95004D\",\n Medium: \"#FEF9C2\",\n Low: \"#E0EDFF\",\n};\n\ninterface ArchivedTableProps {\n alerts: Alert[];\n loading?: boolean;\n columns?: ColumnsType<Alert>;\n pageSize?: number;\n severityOptions?: OptionItem[];\n anomalyOptions?: OptionItem[];\n spaceOptions?: OptionItem[];\n renderActions?: (record: Alert) => ReactNode;\n onAlertIdClick?: (record: Alert) => void;\n}\n\nexport default function ArchivedTable({\n alerts,\n loading = false,\n pageSize = 10,\n severityOptions,\n anomalyOptions,\n spaceOptions,\n onAlertIdClick,\n}: ArchivedTableProps) {\n const updateStatus = useUpdateAlertStatus();\n const archivedStatus = [\"completed\", \"false positive\"];\n\n const handleReopen = async (record: Alert) => {\n try {\n const response = await updateStatus.mutateAsync({\n alertUniqueId: (record as any).alertId ?? (record as any).id,\n alertId: (record as any).id,\n status: \"Reopen\",\n notes: \"Reopened\",\n modifiedBy: 0,\n } as any);\n if ((response as any)?.responseStatus) {\n const successMsg = (response as any)?.data || \"Alert reopened successfully.\";\n toast.success(successMsg);\n } else {\n const errMsg = (response as any)?.errorMessage || \"Failed to reopen alert\";\n toast.error(errMsg);\n }\n } catch {\n toast.error(\"Failed to reopen alert. Please try again.\");\n }\n };\n\n const archivedColumns: ColumnsType<Alert> = [\n {\n title: \"Severity\",\n dataIndex: \"priority\",\n key: \"priority\",\n width: 120,\n render: (value: Alert[\"priority\"]) => (\n <Tag\n className=\"px-[10px] py-[2px]\"\n style={{\n border: `2px solid ${PRIORITY_BORDER_TEXT_CLASS[value]}`,\n backgroundColor: PRIORITY_ROW_BG_CLASS[String(value)]\n }}\n >\n {value}\n </Tag>\n ),\n },\n {\n title: \"Timestamp\",\n dataIndex: \"timestamp\",\n key: \"timestamp\",\n width: 200,\n render: (ts: string) => formatTimestamp(ts),\n },\n {\n title: \"Status\",\n dataIndex: \"statusType\",\n key: \"statusType\",\n width: 140,\n },\n {\n title: \"Description\",\n dataIndex: \"description\",\n key: \"description\",\n render: (text: string, record) => (\n <div>\n <a\n onClick={(e) => {\n e.preventDefault();\n onAlertIdClick?.(record);\n }}\n className=\"inline-block mb-1 text-blue-600\"\n >\n {(record as any).alertNumber}\n </a>\n <div className=\"text-black/65\">{text}</div>\n </div>\n ),\n },\n {\n title: \"\",\n key: \"menu\",\n width: 60,\n align: \"right\",\n render: (_: any, record) => {\n return (\n <Dropdown\n trigger={[\"click\"]}\n menu={{\n items: [\n { key: \"reopen\", label: \"Reopen\" },\n ],\n onClick: ({ key }) => {\n if (key === \"reopen\") handleReopen(record);\n },\n }}\n >\n <Button type=\"text\" icon={<MoreOutlined />} />\n </Dropdown>\n );\n },\n },\n ];\n\n const filtered = (alerts || []).filter(\n (a) => archivedStatus.includes((a.statusType || \"\").toLowerCase())\n );\n\n return (\n <AlertsTable\n data={filtered}\n loading={loading}\n pageSize={pageSize}\n columns={archivedColumns}\n severityOptions={severityOptions}\n anomalyOptions={anomalyOptions}\n spaceOptions={spaceOptions}\n // Actions/Tracker removed for archived view; use menu column instead\n renderActions={undefined}\n onAlertIdClick={onAlertIdClick}\n excludeCompleted={false}\n />\n );\n}\n\n\n","import { useMemo } from \"react\";\n\ninterface AnalogClockProps {\n size?: number;\n time: Date;\n timeZone?: string;\n}\n\nexport default function AnalogClockUSA({\n size = 120,\n time,\n timeZone = \"America/New_York\",\n}: AnalogClockProps) {\n // Properly extract hours, minutes, seconds for the specified timezone\n const { hours, minutes, seconds } = useMemo(() => {\n const formatter = new Intl.DateTimeFormat(\"en-US\", {\n timeZone,\n hour: \"numeric\",\n minute: \"numeric\",\n second: \"numeric\",\n hour12: false,\n });\n\n const parts = formatter.formatToParts(time);\n return {\n hours: parseInt(parts.find((p) => p.type === \"hour\")?.value || \"0\", 10),\n minutes: parseInt(parts.find((p) => p.type === \"minute\")?.value || \"0\", 10),\n seconds: parseInt(parts.find((p) => p.type === \"second\")?.value || \"0\", 10),\n };\n }, [time, timeZone]);\n\n const secondAngle = seconds * 6;\n const minuteAngle = minutes * 6 + seconds * 0.1;\n const hourAngle = (hours % 12) * 30 + minutes * 0.5;\n\n const center = size / 2;\n\n return (\n <div\n className=\"relative rounded-full border border-gray-300 bg-white\"\n style={{ width: size, height: size }}\n role=\"img\"\n aria-label=\"Analog Clock\"\n >\n {/* Hour markers */}\n {[...Array(12)].map((_, i) => {\n const angle = i * 30;\n const markerLength = 6;\n const outerRadius = center - 4;\n const innerRadius = outerRadius - markerLength;\n const rad = (angle - 90) * (Math.PI / 180);\n const x1 = center + innerRadius * Math.cos(rad);\n const y1 = center + innerRadius * Math.sin(rad);\n const x2 = center + outerRadius * Math.cos(rad);\n const y2 = center + outerRadius * Math.sin(rad);\n return (\n <svg\n key={i}\n className=\"absolute inset-0\"\n width={size}\n height={size}\n >\n <line\n x1={x1}\n y1={y1}\n x2={x2}\n y2={y2}\n stroke=\"#9CA3AF\"\n strokeWidth={i % 3 === 0 ? 2 : 1}\n strokeLinecap=\"round\"\n />\n </svg>\n );\n })}\n\n {/* Hour hand */}\n <svg\n className=\"absolute inset-0\"\n width={size}\n height={size}\n style={{ transform: `rotate(${hourAngle}deg)` }}\n >\n <line\n x1={center}\n y1={center}\n x2={center}\n y2={center - size * 0.25}\n stroke=\"#1F2937\"\n strokeWidth={4}\n strokeLinecap=\"round\"\n />\n </svg>\n\n {/* Minute hand */}\n <svg\n className=\"absolute inset-0\"\n width={size}\n height={size}\n style={{ transform: `rotate(${minuteAngle}deg)` }}\n >\n <line\n x1={center}\n y1={center}\n x2={center}\n y2={center - size * 0.35}\n stroke=\"#374151\"\n strokeWidth={3}\n strokeLinecap=\"round\"\n />\n </svg>\n\n {/* Second hand */}\n <svg\n className=\"absolute inset-0\"\n width={size}\n height={size}\n style={{ transform: `rotate(${secondAngle}deg)` }}\n >\n <line\n x1={center}\n y1={center + size * 0.08}\n x2={center}\n y2={center - size * 0.38}\n stroke=\"#EF4444\"\n strokeWidth={1.5}\n strokeLinecap=\"round\"\n />\n </svg>\n\n {/* Center dot */}\n <div\n className=\"absolute bg-gray-900 rounded-full\"\n style={{\n width: 8,\n height: 8,\n left: center - 4,\n top: center - 4,\n }}\n />\n </div>\n );\n}\n","import { useEffect, useMemo, useState } from \"react\";\nimport { getAbbrAndOffset, getTimeString } from \"../../utils/dateTimeUtils\";\nimport AnalogClock from \"./AnalogClock\";\n\ninterface ClockProps {\n label?: string;\n timeZone?: string;\n updateIntervalMs?: number;\n className?: string;\n}\n\n\n\nexport default function Clock({ label = \"USA\", timeZone = \"America/New_York\", updateIntervalMs = 1000, className }: ClockProps) {\n const [now, setNow] = useState<Date>(new Date());\n\n useEffect(() => {\n const id = setInterval(() => setNow(new Date()), updateIntervalMs);\n return () => clearInterval(id);\n }, [updateIntervalMs]);\n\n const timeString = useMemo(() => getTimeString(now, timeZone), [now, timeZone]);\n const { abbr, offset } = useMemo(() => getAbbrAndOffset(now, timeZone), [now, timeZone]);\n\n return (\n <div className={`flex items-center gap-3 ${className || \"\"}`}>\n <AnalogClock time={now} timeZone={timeZone} size={80} />\n <div className=\"flex flex-col items-baseline gap-1\">\n <div className=\"flex items-center gap-2 text-sm text-gray-600\">\n <span className=\"uppercase\">{label}</span>\n {abbr && <span className=\"px-1.5 py-0.5 rounded-md border text-[10px] leading-none text-gray-600 bg-gray-50\">{abbr}</span>}\n {offset && <span className=\"text-xs text-gray-500\">{offset}</span>}\n </div>\n <div className=\"text-2xl font-semibold text-gray-700 tracking-wide\">{timeString}</div>\n </div>\n </div>\n );\n}\n\n\n","import { Row, Col, Select, Typography, Space, Button } from \"antd\";\nimport type { GroupBy, SortBy } from \"./settings.types\";\n\nconst { Text } = Typography;\n\ninterface AdminSettingsSectionProps {\n sortBy: SortBy;\n groupBy: GroupBy;\n onChange: (patch: Partial<{ sortBy: SortBy; groupBy: GroupBy }>) => void;\n showActions?: boolean;\n onSave?: () => void;\n onClear?: () => void;\n saving?: boolean;\n}\n\nexport default function AdminSettingsSection({ sortBy, onChange, showActions, onSave, onClear, saving }: AdminSettingsSectionProps) {\n return (\n <Row gutter={[16, 16]} align=\"middle\">\n <Col xs={24} md={8} lg={5}>\n <Space className=\"w-full items-center\" direction=\"horizontal\" size={12}>\n <Text className=\"text-gray-600\">Sort by:</Text>\n <Select\n placeholder=\"By Severity\"\n value={sortBy}\n onChange={(v: SortBy) => onChange({ sortBy: v })}\n options={[\n { label: \"By Severity\", value: \"By Severity\" },\n { label: \"By Created Date\", value: \"By Created Date\" },\n ]}\n className=\"w-full\"\n style={{ minWidth: '200px' }}\n />\n </Space>\n </Col>\n <Col xs={24} md={8} style={{ alignSelf: 'end' }}>\n {showActions ? (\n <Space className=\"w-full\" direction=\"horizontal\" size={8} >\n <Button onClick={onClear} disabled={saving}>Clear</Button>\n <Button type=\"primary\" onClick={onSave} loading={saving}>Save</Button>\n </Space>\n ) : null}\n </Col>\n </Row>\n );\n}\n\n\n","import { Select, Typography, Button, Checkbox, Spin, Row, Col } from \"antd\";\nimport { useEffect, useState } from \"react\";\nimport { useApi } from \"../../providers/ApiProvider\";\nimport type { EscBasis } from \"./settings.types\";\n\nconst { Text } = Typography;\n\ninterface Option<T> { label: string; value: T }\n\ninterface EscalationRowSectionProps {\n escBasis: EscBasis;\n setEscBasis: (v: EscBasis) => void;\n selectedSeverity?: number;\n setSelectedSeverity: (id: number) => void;\n selectedRule?: string;\n setSelectedRule: (id: string) => void;\n severityOptions: Option<number>[];\n ruleOptions: Option<string>[];\n minsOptions: Option<number>[];\n roleOptions: Option<number>[];\n l1mins?: number; setL1mins: (v: number) => void; l1role?: number; setL1role: (v?: number) => void;\n l2mins?: number; setL2mins: (v: number) => void; l2role?: number; setL2role: (v?: number) => void;\n l3mins?: number; setL3mins: (v: number) => void; l3role?: number; setL3role: (v?: number) => void;\n actions: string[]; setActions: (v: string[]) => void;\n thirdPartyIds: number[]; setThirdPartyIds: (v: number[]) => void;\n humanLoop: boolean; setHumanLoop: (v: boolean) => void;\n onClear: () => void;\n onSave: () => void;\n saving?: boolean;\n onActionTypesLoaded?: (items: { actionTypeId: number; name: string }[]) => void;\n}\n\nexport default function EscalationRowSection(props: EscalationRowSectionProps) {\n const {\n // escBasis, setEscBasis,\n // selectedSeverity, setSelectedSeverity,\n selectedRule, setSelectedRule,\n ruleOptions, minsOptions, roleOptions,\n l1mins, setL1mins, l1role, setL1role,\n l2mins, setL2mins, l2role, setL2role,\n l3mins, setL3mins, l3role, setL3role,\n actions, setActions, thirdPartyIds, setThirdPartyIds, humanLoop, setHumanLoop,\n onClear, onSave, saving, onActionTypesLoaded,\n } = props;\n\n const { rules: rulesApi } = useApi();\n const [actionOptionsState, setActionOptionsState] = useState<{ label: string; value: string }[]>([]);\n const [thirdPartyOptionsState, setThirdPartyOptionsState] = useState<{ label: string; value: number }[]>([]);\n const [loadingLookups, setLoadingLookups] = useState<boolean>(false);\n\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n setLoadingLookups(true);\n const lookups = await rulesApi.getLookups();\n if (cancelled || !lookups || !Array.isArray(lookups.actionTypes)) return;\n const mapped = lookups.actionTypes.map(at => ({ label: at.name, value: String(at.actionTypeId) }));\n setActionOptionsState(mapped);\n if (onActionTypesLoaded) {\n onActionTypesLoaded(lookups.actionTypes);\n }\n const tp = Array.isArray(lookups.thirdParties)\n ? lookups.thirdParties.map(tp => ({ label: tp.thirdPartyName, value: tp.thirdPartyId }))\n : [];\n setThirdPartyOptionsState(tp);\n } catch (e) {\n console.error(\"Error loading lookups\", e);\n } finally {\n if (!cancelled) setLoadingLookups(false);\n }\n })();\n return () => { cancelled = true; };\n }, []);\n\n // logic to check if there is any input\n const hasAnyInput =\n typeof l1mins === \"number\" ||\n typeof l1role === \"number\" ||\n typeof l2mins === \"number\" ||\n typeof l2role === \"number\" ||\n typeof l3mins === \"number\" ||\n typeof l3role === \"number\" ||\n (Array.isArray(actions) && actions.length > 0) ||\n (Array.isArray(thirdPartyIds) && thirdPartyIds.length > 0) ||\n !!humanLoop;\n const canSave = !!selectedRule && hasAnyInput && !saving;\n\n return (\n <Spin spinning={!!saving || loadingLookups}>\n {/* Row1*/}\n <Row gutter={[16, 16]} align=\"bottom\">\n <Col xs={24} sm={12} md={8} lg={4}>\n <div>\n <Text className=\"text-gray-700 font-medium block mb-1\">Rules</Text>\n <Select\n placeholder=\"Rules\"\n value={selectedRule}\n onChange={setSelectedRule}\n options={ruleOptions}\n className=\"w-full\"\n />\n </div>\n </Col>\n\n <Col xs={24} sm={12} md={8} lg={4}>\n <div>\n <Row gutter={8}>\n <Col span={10}>\n <Text className=\"text-gray-700 font-medium block mb-1\">Level 1 (mins)</Text>\n </Col>\n <Col span={14}>\n <Text className=\"text-gray-700 font-medium block mb-1\">Escalate to</Text>\n </Col>\n </Row>\n <Row gutter={8}>\n <Col span={10}>\n <Select\n className=\"w-full\"\n placeholder=\"Mins\"\n value={l1mins}\n onChange={setL1mins as any}\n options={minsOptions}\n />\n </Col>\n <Col span={14}>\n <Select\n placeholder=\"Escalate to\"\n className=\"w-full\"\n value={l1role}\n onChange={setL1role}\n options={roleOptions}\n />\n </Col>\n </Row>\n </div>\n </Col>\n\n <Col xs={24} sm={12} md={8} lg={4}>\n <div>\n <Row gutter={8}>\n <Col span={10}>\n <Text className=\"text-gray-700 font-medium block mb-1\">Level 2 (mins)</Text>\n </Col>\n <Col span={14}>\n <Text className=\"text-gray-700 font-medium block mb-1\">Escalate to</Text>\n </Col>\n </Row>\n <Row gutter={8}>\n <Col span={10}>\n <Select\n className=\"w-full\"\n placeholder=\"Mins\"\n value={l2mins}\n onChange={setL2mins as any}\n options={minsOptions}\n />\n </Col>\n <Col span={14}>\n <Select\n placeholder=\"Escalate to\"\n className=\"w-full\"\n value={l2role}\n onChange={setL2role}\n options={roleOptions}\n />\n </Col>\n </Row>\n </div>\n </Col>\n\n <Col xs={24} sm={12} md={8} lg={4}>\n <div>\n <Row gutter={8}>\n <Col span={10}>\n <Text className=\"text-gray-700 font-medium block mb-1\">Level 3 (mins)</Text>\n </Col>\n <Col span={14}>\n <Text className=\"text-gray-700 font-medium block mb-1\">Escalate to</Text>\n </Col>\n </Row>\n <Row gutter={8}>\n <Col span={10}>\n <Select\n className=\"w-full\"\n placeholder=\"Mins\"\n value={l3mins}\n onChange={setL3mins as any}\n options={minsOptions}\n />\n </Col>\n <Col span={14}>\n <Select\n placeholder=\"Escalate to\"\n className=\"w-full\"\n value={l3role}\n onChange={setL3role}\n options={roleOptions}\n />\n </Col>\n </Row>\n </div>\n </Col>\n\n <Col xs={24} sm={12} md={8} lg={5}>\n <div>\n <Text className=\"text-gray-700 font-medium block mb-1\">Pick Actions</Text>\n <Select\n mode=\"multiple\"\n placeholder=\"Select response actions\"\n className=\"w-full\"\n value={actions}\n onChange={setActions}\n options={actionOptionsState}\n />\n </div>\n </Col>\n\n <Col xs={24} sm={12} md={8} lg={3}>\n <div className=\"flex items-end h-full\">\n <Checkbox checked={humanLoop} onChange={(e) => setHumanLoop(e.target.checked)}>\n Human-In-The-Loop\n </Checkbox>\n </div>\n </Col>\n </Row>\n \n {/* Row2*/}\n <Row gutter={[16, 16]} align=\"bottom\" className=\"mt-4\">\n <Col xs={24} sm={12} md={8} lg={5}>\n <div>\n <Text className=\"text-gray-700 font-medium block mb-1\">Third Party App</Text>\n <Select\n mode=\"multiple\"\n placeholder=\"Third Party app\"\n className=\"w-full\"\n value={thirdPartyIds}\n onChange={setThirdPartyIds}\n options={thirdPartyOptionsState}\n />\n </div>\n </Col>\n\n <Col xs={24} sm={12} md={8}>\n <div className=\"flex items-center gap-2\">\n <Button onClick={onClear}>Clear</Button>\n <Button type=\"primary\" onClick={onSave} loading={!!saving} disabled={!canSave}>\n Save\n </Button>\n </div>\n </Col>\n </Row>\n </Spin>\n );\n}\n\n\n","import { Button, Table } from \"antd\";\nimport type { EscalationEntry, UserRoleItem } from \"./settings.types\";\nimport { EditOutlined } from \"@ant-design/icons\";\n\ninterface Props {\n entries: EscalationEntry[];\n userRoles: UserRoleItem[];\n onEdit: (id: string) => void;\n loading?: boolean;\n}\n\nexport default function EscalationTableSection({ entries, userRoles, onEdit, loading }: Props) {\n const roleMap = new Map(userRoles.map(r => [r.userRoleId, r.userRoleName] as const));\n const getRoleNames = (ids: number[]): string => ids.map(id => roleMap.get(id) || String(id)).join(\", \");\n\n return (\n <Table\n rowKey=\"id\"\n dataSource={entries}\n pagination={false}\n loading={loading}\n columns={[\n { title: \"Rule\", dataIndex: \"ruleOrSeverityLabel\", key: \"rule\" },\n {\n title: \"Level 1\",\n key: \"l1\",\n render: (_: any, row: EscalationEntry) => (\n <span>\n {row.l1.minutes ? `Action taken in (${row.l1.minutes} Mins)` : \"No Action taken in 0 Min\"}\n {row.l1.roles?.length ? `, Escalate to (${getRoleNames(row.l1.roles)})` : \"\"}\n </span>\n ),\n },\n {\n title: \"Level 2\",\n key: \"l2\",\n render: (_: any, row: EscalationEntry) => (\n <span>\n {row.l2.minutes ? `Action taken in (${row.l2.minutes} Mins)` : \"No Action taken in 0 Min\"}\n {row.l2.roles?.length ? `, Escalate to (${getRoleNames(row.l2.roles)})` : \"\"}\n </span>\n ),\n },\n {\n title: \"Level 3\",\n key: \"l3\",\n render: (_: any, row: EscalationEntry) => (\n <span>\n {row.l3.minutes ? `Action taken in (${row.l3.minutes} Mins)` : \"No Action taken in 0 Min\"}\n {row.l3.roles?.length ? `, Escalate to (${getRoleNames(row.l3.roles)})` : \"\"}\n </span>\n ),\n },\n {\n title: \"Pick Actions\",\n key: \"actionsCol\",\n render: (_: any, row: EscalationEntry) => (row.actions && row.actions.length ? row.actions.join(\", \") : \"-\"),\n },\n {\n title: \"Notify\",\n key: \"notify\",\n render: (_: any, row: EscalationEntry) => (row.notify && row.notify.length ? row.notify.join(\", \") : \"-\"),\n },\n {\n title: \"Human-In-The-Loop\",\n key: \"humanLoop\",\n render: (_: any, row: EscalationEntry) => (row.humanLoop ? \"Yes\" : \"No\"),\n },\n {\n title: \"Actions\",\n key: \"ops\",\n render: (_: any, row: EscalationEntry) => (\n <Button type=\"text\" onClick={() => onEdit(row.id)}><EditOutlined /></Button>\n ),\n },\n ]}\n />\n );\n}\n\n\n","import { useEffect, useMemo, useState } from \"react\";\nimport { Table, Select, Typography, Button, Space } from \"antd\";\nimport type { UserRoleItem, RuleItem } from \"./settings.types\";\nimport type { ApiRuleItem } from \"../../ports/rules.port\";\nimport { useApi } from \"../../providers/ApiProvider\";\nimport { toast } from \"react-toastify\";\n\nconst { Title } = Typography;\n\ninterface Props {\n userRoles: UserRoleItem[];\n rules: RuleItem[];\n rawRules?: ApiRuleItem[];\n}\n\ninterface RowData {\n key: string;\n ruleName: string;\n ruleDesc?: string;\n}\n\nexport default function AlertAssignment({ userRoles, rules, rawRules }: Props) {\n const { rules: rulesApi } = useApi();\n const [loading, setLoading] = useState(false);\n const [latestRawRules, setLatestRawRules] = useState<ApiRuleItem[] | undefined>(rawRules);\n const [assignments, setAssignments] = useState<Record<string, number[]>>({});\n const roleOptions = useMemo(() => userRoles.map(r => ({ label: r.userRoleName, value: r.userRoleId })), [userRoles]);\n\n const rows = useMemo<RowData[]>(\n () =>\n (rules || []).map((r, idx) => ({\n key: r.RuleId || r.Name || String(idx),\n ruleName: r.Name || \"-\",\n ruleDesc: r.Description || \"\",\n })),\n [rules]\n );\n\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n setLoading(true);\n const fresh = await rulesApi.getRules();\n if (!cancelled) {\n setLatestRawRules(Array.isArray(fresh) ? fresh : []);\n setAssignments({});\n }\n } catch (e) {\n if (!cancelled && Array.isArray(rawRules)) {\n setLatestRawRules(rawRules);\n }\n } finally {\n if (!cancelled) setLoading(false);\n }\n })();\n return () => { cancelled = true; };\n }, []);\n\n // Fallback: if we have no latestRawRules\n useEffect(() => {\n if (!latestRawRules && Array.isArray(rawRules)) {\n setLatestRawRules(rawRules);\n }\n }, [rawRules]);\n\n const initialAssignments = useMemo<Record<string, number[]>>(() => {\n if (!Array.isArray(latestRawRules) || !latestRawRules.length) return {};\n const map: Record<string, number[]> = {};\n for (const row of rows) {\n const match: any = (latestRawRules as any[]).find((r: any) =>\n r?.ruleId === row.key ||\n r?.ruleName === row.key ||\n r?.RuleId === row.key ||\n r?.ruleName === row.ruleName || // fallback by name\n r?.Name === row.ruleName\n );\n const ids: number[] = Array.isArray(match?.userRoleIds) ? match.userRoleIds : [];\n if (ids.length) {\n map[row.key] = ids;\n }\n }\n return map;\n }, [latestRawRules, rows]);\n\n const handleClear = () => {\n setAssignments({});\n };\n\n const handleSave = async () => {\n try {\n if (!latestRawRules || !Array.isArray(latestRawRules) || Object.keys(assignments).length === 0) {\n toast.info(\"No changes to save\");\n return;\n }\n setLoading(true);\n const updates = Object.entries(assignments).map(async ([ruleId, userRoleIds]) => {\n const original: any = latestRawRules.find((r: any) =>\n r?.ruleId === ruleId || r?.ruleName === ruleId || r?.RuleId === ruleId\n );\n const recordId: number | undefined = typeof original?.recordId === \"number\" ? original.recordId : undefined;\n if (!original || typeof recordId !== \"number\") {\n throw new Error(`Unable to find recordId for rule ${ruleId}`);\n }\n const selectedIds: number[] = Array.isArray(userRoleIds) ? userRoleIds : [];\n const selectedRoles = selectedIds.map(id => {\n const match = userRoles.find(r => r.userRoleId === id);\n return {\n id,\n name: match?.userRoleName ?? String(id),\n };\n });\n const payload = {\n ...original,\n ruleId, // ensure ruleId matches the selected rule\n userRoleIds: selectedIds,\n userRoles: selectedRoles,\n actions: [\n {\n actionTypeId: 4,\n actionTypeUniqueId: \"bc0973d4-9be0-4efb-8545-c9112ba06c1f\",\n name: \"Audible Warning\",\n notificationType: \"Alarm\",\n category: \"Hardware\",\n description: \"Test\",\n isSystemDefined: true,\n isActive: true,\n displayOrder: 0,\n },\n ],\n };\n return rulesApi.updateRule(recordId, payload);\n });\n await Promise.all(updates);\n toast.success(\"Alert assignment saved\");\n try {\n const refreshed = await rulesApi.getRules();\n setLatestRawRules(Array.isArray(refreshed) ? refreshed : []);\n // Clear local pending edits so UI reflects server truth first\n setAssignments({});\n } catch (e) {\n console.error(\"Failed to refresh rules after save\", e);\n }\n } catch (e) {\n console.error(\"Failed to save alert assignment\", e);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <div className=\"w-full\">\n <div className=\"flex items-center justify-between\">\n <Title level={4} className=\"!mb-4\">Alert Assignment</Title>\n \n </div>\n {/* <Spin spinning={loading}> */}\n <Table\n rowKey=\"key\"\n dataSource={rows}\n loading={loading}\n pagination={false}\n columns={[\n { title: \"Rule Name\", dataIndex: \"ruleName\", key: \"ruleName\" },\n { title: \"Description\", dataIndex: \"ruleDesc\", key: \"ruleDesc\" },\n {\n title: \"Alert Notification To\",\n key: \"assign\",\n render: (_: any, row: RowData) => (\n <Select\n mode=\"multiple\"\n placeholder=\"Dropdown with Multi select\"\n className=\"w-full\"\n value={assignments[row.key] ?? initialAssignments[row.key] ?? []}\n onChange={(vals) => setAssignments(prev => ({ ...prev, [row.key]: vals }))}\n options={roleOptions}\n />\n ),\n },\n ]}\n />\n <Space className=\"mt-4\">\n <Button onClick={handleClear} disabled={loading}>Clear</Button>\n <Button\n type=\"primary\"\n onClick={handleSave}\n loading={loading}\n disabled={loading || Object.keys(assignments).length === 0}\n >\n Save\n </Button>\n </Space>\n {/* </Spin> */}\n </div>\n );\n}\n\n\n","import { useMemo, useState, useEffect } from \"react\";\nimport { Typography, Divider, Spin } from \"antd\";\nimport AdminSettingsSection from \"./AdminSettingsSection\";\nimport EscalationRowSection from \"./EscalationRowSection\";\nimport EscalationTableSection from \"./EscalationTableSection\";\nimport AlertAssignment from \"./AlertAssignment\";\nimport { toast } from \"react-toastify\";\nimport { useApi } from \"../../providers/ApiProvider\";\nimport type { ApiRuleItem } from \"../../ports/rules.port\";\nimport { normalizeSortBy } from \"../../utils/preferences\";\n\nconst { Title } = Typography;\n\nexport interface SeverityItem {\n SeverityId: number;\n Code: string;\n DisplayName: string;\n SortOrder: number;\n IsActive: boolean;\n}\n\nexport interface RuleItem {\n RuleId: string;\n Name: string;\n Description: string;\n SeverityId: number;\n}\n\nexport interface UserRoleItem {\n userRoleId: number;\n userRoleName: string;\n}\n\nexport interface SettingsPanelProps {\n severities: SeverityItem[];\n rules: RuleItem[];\n userRoles: UserRoleItem[];\n rawRules?: ApiRuleItem[];\n onSave?: (value: unknown) => void;\n}\n\n//dropdowns labels for admin settings and escalation sttings \ntype SortBy = \"By Severity\" | \"By Created Date\" | \"By Updated Date\";\ntype GroupBy = \"By severity\" | \"By Rules\";\ntype EscBasis = \"severity\" | \"rules\";\n\nexport default function SettingsPanel({ severities, rules, userRoles, rawRules, onSave }: SettingsPanelProps) {\n const { rules: rulesApi, alerts: alertsApi } = useApi();\n const [sortBy, setSortBy] = useState<SortBy>(\"By Severity\");\n const [groupBy, setGroupBy] = useState<GroupBy>(\"By severity\");\n const [savedSortBy, setSavedSortBy] = useState<SortBy>(\"By Severity\");\n const [adminDirty, setAdminDirty] = useState<boolean>(false);\n const [savingAdmin, setSavingAdmin] = useState<boolean>(false);\n const [loadingSettings, setLoadingSettings] = useState<boolean>(false);\n const [settingsError, setSettingsError] = useState<string | null>(null);\n const [escBasis, setEscBasis] = useState<EscBasis>(\"rules\");\n const [selectedSeverity, setSelectedSeverity] = useState<number | undefined>();\n const [selectedRule, setSelectedRule] = useState<string | undefined>();\n\n const [l1mins, setL1mins] = useState<number | undefined>();\n const [l1role, setL1role] = useState<number | undefined>();\n const [l2mins, setL2mins] = useState<number | undefined>();\n const [l2role, setL2role] = useState<number | undefined>();\n const [l3mins, setL3mins] = useState<number | undefined>();\n const [l3role, setL3role] = useState<number | undefined>();\n const [actions, setActions] = useState<string[]>([]);\n const [thirdPartyIds, setThirdPartyIds] = useState<number[]>([]);\n const [humanLoop, setHumanLoop] = useState<boolean>(false);\n const [actionTypeIdToName, setActionTypeIdToName] = useState<Record<number, string>>({});\n const [thirdPartyIdToName, setThirdPartyIdToName] = useState<Record<number, string>>({});\n const [userRolesFromLookups, setUserRolesFromLookups] = useState<UserRoleItem[]>(userRoles || []);\n const [entries, setEntries] = useState<Array<{\n id: string;\n ruleOrSeverityLabel: string;\n l1: { minutes?: number; roles: number[] };\n l2: { minutes?: number; roles: number[] };\n l3: { minutes?: number; roles: number[] };\n actions: string[];\n }>>([]);\n const [savingEscalation, setSavingEscalation] = useState<boolean>(false);\n const [loadingEntries, setLoadingEntries] = useState<boolean>(false);\n // local state for fresh rules data after save\n const [localRules, setLocalRules] = useState<any[]>(rawRules || []);\n\n // sync local rules when rawRules changes\n useEffect(() => {\n if (rawRules && rawRules.length) {\n setLocalRules(rawRules);\n }\n }, [rawRules]);\n\n // Initialize table rows from fetched rules' escalationSettings\n useEffect(() => {\n if (!localRules || !localRules.length) return;\n const mapsReady =\n Object.keys(actionTypeIdToName).length > 0 ||\n Object.keys(thirdPartyIdToName).length > 0;\n if (entries.length && !mapsReady) return; // keep any user added entries until lookups exist\n const next = localRules.map((r, idx) => {\n const label =\n rules.find(x => x.RuleId === (r.ruleId || r.ruleName))?.Name ||\n r.ruleName ||\n (r as any).Name ||\n \"-\";\n const escalation_settings: any = (r as any).escalationSettings || {};\n const l1role = typeof escalation_settings.level1UserRoleId === \"number\" && escalation_settings.level1UserRoleId > 0 ? [escalation_settings.level1UserRoleId] : [];\n const l2role = typeof escalation_settings.level2UserRoleId === \"number\" && escalation_settings.level2UserRoleId > 0 ? [escalation_settings.level2UserRoleId] : [];\n const l3role = typeof escalation_settings.level3UserRoleId === \"number\" && escalation_settings.level3UserRoleId > 0 ? [escalation_settings.level3UserRoleId] : [];\n const actionIds: number[] = Array.isArray(escalation_settings.escalationSettingsActionTypeIds)\n ? escalation_settings.escalationSettingsActionTypeIds\n : [];\n const actionNames: string[] = actionIds.map((id) => actionTypeIdToName[id] || String(id));\n const tpIds: number[] = Array.isArray(escalation_settings.thirdPartyId)\n ? escalation_settings.thirdPartyId\n : [];\n const notifyNames: string[] = tpIds.map((id: number) => thirdPartyIdToName[id] || String(id));\n const humanLoopFlag: boolean | null = typeof escalation_settings.humanLoop === \"boolean\"\n ? escalation_settings.humanLoop\n : null;\n return {\n id: String(r.ruleId || r.ruleName || idx),\n ruleOrSeverityLabel: label,\n l1: { minutes: escalation_settings.level1PostAssistTime ?? undefined, roles: l1role },\n l2: { minutes: escalation_settings.level2PostAssistTime ?? undefined, roles: l2role },\n l3: { minutes: escalation_settings.level3PostAssistTime ?? undefined, roles: l3role },\n actions: actionNames,\n notify: notifyNames,\n humanLoop: humanLoopFlag,\n };\n });\n setEntries(next);\n }, [localRules, rules, actionTypeIdToName, thirdPartyIdToName]);\n\n const severityOptions = useMemo(\n () => severities.map(s => ({ label: s.DisplayName, value: s.SeverityId })),\n [severities]\n );\n const ruleOptions = useMemo(\n () => rules.map(r => ({ label: r.Name, value: r.RuleId })),\n [rules]\n );\n const roleOptions = useMemo(\n () => userRolesFromLookups.map(r => ({ label: r.userRoleName, value: r.userRoleId })),\n [userRolesFromLookups]\n );\n const minsOptions = useMemo(() => (\n [1, 3, 5, 10, 15, 20, 30, 45, 60].map(v => ({ label: `${v}`, value: v }))\n ), []);\n\n // Fetch Admin Settings on mount\n useEffect(() => {\n let cancelled = false;\n async function load() {\n try {\n setLoadingSettings(true);\n setSettingsError(null);\n const data = await alertsApi.getAdminSettings();\n if (!cancelled && data) {\n const srtBy = normalizeSortBy(data.sortBy);\n setSortBy(srtBy);\n setSavedSortBy(srtBy);\n setAdminDirty(false);\n }\n } catch (error: unknown) {\n if (!cancelled) {\n const message = error instanceof Error ? error.message : \"Failed to load admin settings\";\n setSettingsError(message);\n }\n } finally {\n if (!cancelled) setLoadingSettings(false);\n }\n }\n load();\n return () => {\n cancelled = true;\n };\n }, []);\n\n // Prefill escalation settings when a rule is selected (basis: rules)\n useEffect(() => {\n if (!selectedRule) return;\n \n // Helper to convert role ID to number, treating 0 and invalid values as undefined\n const toRoleId = (val: unknown): number | undefined => {\n const num = Number(val);\n return !isNaN(num) && num > 0 ? num : undefined;\n };\n const toMins = (val: unknown): number | undefined => {\n const num = Number(val);\n return !isNaN(num) && num > 0 ? num : undefined;\n };\n \n // Use localRules (which has fresh data after save) instead of rawRules prop\n const found: any = (localRules || []).find((r: any) =>\n r?.ruleId === selectedRule || r?.ruleName === selectedRule || r?.RuleId === selectedRule\n );\n const es = found?.escalationSettings;\n \n if (es && typeof es === \"object\") {\n setL1mins(toMins(es.level1PostAssistTime));\n setL1role(toRoleId(es.level1UserRoleId));\n setL2mins(toMins(es.level2PostAssistTime));\n setL2role(toRoleId(es.level2UserRoleId));\n setL3mins(toMins(es.level3PostAssistTime));\n setL3role(toRoleId(es.level3UserRoleId));\n const actionIds: number[] = Array.isArray(es.escalationSettingsActionTypeIds)\n ? es.escalationSettingsActionTypeIds\n : [];\n setActions(actionIds.map((id: number) => String(id)));\n setThirdPartyIds(Array.isArray(es.thirdPartyId) ? es.thirdPartyId : []);\n setHumanLoop(!!es.humanLoop);\n }\n }, [escBasis, selectedRule, localRules]);\n\n // Helper: refetch rules and rebuild escalation table entries\n const refetchEntries = async () => {\n try {\n setLoadingEntries(true);\n const latest = await rulesApi.getRules();\n const list: any[] = Array.isArray(latest) ? latest : (Array.isArray((latest as any)?.data) ? (latest as any).data : []);\n // Update localRules with fresh data from API\n setLocalRules(list);\n const next = list.map((r: any, idx: number) => {\n const label =\n rules.find(x => x.RuleId === (r.ruleId || r.ruleName))?.Name ||\n r.ruleName ||\n (r as any).Name ||\n \"-\";\n const escalation_settings: any = (r as any).escalationSettings || {};\n const l1role = typeof escalation_settings.level1UserRoleId === \"number\" && escalation_settings.level1UserRoleId > 0 ? [escalation_settings.level1UserRoleId] : [];\n const l2role = typeof escalation_settings.level2UserRoleId === \"number\" && escalation_settings.level2UserRoleId > 0 ? [escalation_settings.level2UserRoleId] : [];\n const l3role = typeof escalation_settings.level3UserRoleId === \"number\" && escalation_settings.level3UserRoleId > 0 ? [escalation_settings.level3UserRoleId] : [];\n const actionIds: number[] = Array.isArray(escalation_settings.escalationSettingsActionTypeIds)\n ? escalation_settings.escalationSettingsActionTypeIds\n : [];\n const actionNames: string[] = actionIds.map((id) => actionTypeIdToName[id] || String(id));\n const tpIds: number[] = Array.isArray(escalation_settings.thirdPartyId)\n ? escalation_settings.thirdPartyId\n : [];\n const notifyNames: string[] = tpIds.map((id: number) => thirdPartyIdToName[id] || String(id));\n const humanLoopFlag: boolean | null = typeof escalation_settings.humanLoop === \"boolean\"\n ? escalation_settings.humanLoop\n : null;\n return {\n id: String(r.ruleId || r.ruleName || idx),\n ruleOrSeverityLabel: label,\n l1: { minutes: escalation_settings.level1PostAssistTime ?? undefined, roles: l1role },\n l2: { minutes: escalation_settings.level2PostAssistTime ?? undefined, roles: l2role },\n l3: { minutes: escalation_settings.level3PostAssistTime ?? undefined, roles: l3role },\n actions: actionNames,\n notify: notifyNames,\n humanLoop: humanLoopFlag,\n };\n });\n setEntries(next);\n } catch (e) {\n console.error(\"Failed to refetch entries\", e);\n } finally {\n setLoadingEntries(false);\n }\n };\n\n // Fetch lookups for third parties once to build id->name mapping\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n const lookups = await rulesApi.getLookups();\n if (cancelled || !lookups) return;\n const map: Record<number, string> = {};\n if (Array.isArray(lookups.thirdParties)) {\n for (const tp of lookups.thirdParties) {\n if (typeof tp.thirdPartyId === \"number\") {\n map[tp.thirdPartyId] = tp.thirdPartyName;\n }\n }\n }\n setThirdPartyIdToName(map);\n const roles = Array.isArray((lookups as any).userRoles)\n ? (lookups as any).userRoles.map((ur: any) => ({\n userRoleId: ur.userRoleId ?? ur.id,\n userRoleName: ur.userRoleName ?? ur.name,\n }))\n : [];\n if (!cancelled) {\n setUserRolesFromLookups(roles.length ? roles : (userRoles || []));\n }\n } catch (e) {\n console.error(\"Error loading lookups\", e);\n }\n })();\n return () => { cancelled = true; }\n }, []);\n\n const handleAdminSave = async () => {\n setSavingAdmin(true);\n try {\n const resp = await alertsApi.setAdminSettings({ sortBy, groupBy: \"string\" }); //once BE removes the field, it will be removed\n if ((resp as any)?.responseStatus && (resp as any)?.data) {\n toast.success((resp as any).data);\n }\n setSavedSortBy(sortBy);\n setAdminDirty(false);\n } catch (e) {\n console.error(\"Error saving admin settings\", e);\n } finally {\n setSavingAdmin(false);\n }\n };\n\n const handleAdminCancel = () => {\n setSortBy(savedSortBy);\n setAdminDirty(false);\n };\n\n\n const handleSave = async () => {\n setSavingEscalation(true);\n const escalationPayload = {\n ruleId: selectedRule,\n levels: [\n { minutes: l1mins, role: l1role },\n { minutes: l2mins, role: l2role },\n { minutes: l3mins, role: l3role },\n ],\n actions,\n thirdPartyIds,\n humanLoop,\n };\n onSave?.(escalationPayload);\n try {\n if (selectedRule) {\n const actionTypeIds = Array.isArray(actions)\n ? actions\n .map((a) => Number(a))\n : [];\n const original: any = (localRules || []).find((r: any) =>\n r?.ruleId === selectedRule || r?.ruleName === selectedRule || r?.RuleId === selectedRule\n );\n const recordId: number | undefined =\n typeof original?.recordId === \"number\" ? original.recordId : undefined;\n if (!original || typeof recordId !== \"number\") {\n toast.error(\"Unable to find rule recordId for update\");\n return;\n }\n const updatedRecord = {\n ...original,\n actions: [ //this will definitely be remoed\n {\n \"actionTypeId\": 4,\n \"actionTypeUniqueId\": \"bc0973d4-9be0-4efb-8545-c9112ba06c1f\",\n \"name\": \"Audible Warning\",\n \"notificationType\": \"Alarm\",\n \"category\": \"Hardware\",\n \"description\": \"Test\",\n \"isSystemDefined\": true,\n \"isActive\": true,\n \"displayOrder\": 0\n }\n ],\n escalationSettings: {\n level1UserRoleId: l1role ?? 0,\n level1PostAssistTime: l1mins ?? 0,\n level2UserRoleId: l2role ?? 0,\n level2PostAssistTime: l2mins ?? 0,\n level3UserRoleId: l3role ?? 0,\n level3PostAssistTime: l3mins ?? 0,\n escalationSettingsActionTypeIds: actionTypeIds,\n thirdPartyId: Array.isArray(thirdPartyIds) ? thirdPartyIds : [],\n humanLoop,\n },\n };\n const resp = await rulesApi.updateRule(recordId, updatedRecord);\n if ((resp as any)?.responseStatus || (resp as any)?.ok || (resp as any)) {\n toast.success(\"Escalation settings saved\");\n await refetchEntries();\n setSelectedRule(undefined);\n setL1mins(undefined); setL1role(undefined);\n setL2mins(undefined); setL2role(undefined);\n setL3mins(undefined); setL3role(undefined);\n setActions([]);\n setThirdPartyIds([]);\n setHumanLoop(false);\n return; // skip local optimistic append\n }\n }\n } catch (e) {\n console.error(\"Error saving escalation settings\", e);\n }\n finally {\n setSavingEscalation(false);\n }\n\n // local append after save\n const ruleOrSeverityLabel = (rules.find(r => r.RuleId === selectedRule)?.Name || \"-\");\n setEntries(prev => [\n ...prev,\n {\n id: `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,\n ruleOrSeverityLabel,\n l1: { minutes: l1mins, roles: l1role ? [l1role] : [] },\n l2: { minutes: l2mins, roles: l2role ? [l2role] : [] },\n l3: { minutes: l3mins, roles: l3role ? [l3role] : [] },\n actions: (Array.isArray(actions) ? actions : []).map((a) => {\n const id = Number(a);\n return actionTypeIdToName[id] || String(a);\n }),\n notify: (Array.isArray(thirdPartyIds) ? thirdPartyIds : []).map((id) => thirdPartyIdToName[id] || String(id)),\n humanLoop: !!humanLoop,\n },\n ]);\n };\n\n const handleClear = () => {\n setSortBy(\"By Severity\");\n setGroupBy(\"By severity\");\n setEscBasis(\"rules\");\n setSelectedSeverity(undefined);\n setSelectedRule(undefined);\n setL1mins(undefined); setL1role(undefined);\n setL2mins(undefined); setL2role(undefined);\n setL3mins(undefined); setL3role(undefined);\n setActions([]);\n setThirdPartyIds([]);\n setHumanLoop(false);\n };\n\n return (\n <div className=\"w-full\">\n <div className=\"mb-6\">\n <Title level={4} className=\"!mb-2\">Admin Settings</Title>\n <Spin spinning={loadingSettings}>\n {settingsError ? (\n <div className=\"text-sm text-red-600 mb-2\">Failed to load settings: {settingsError}</div>\n ) : null}\n <AdminSettingsSection\n sortBy={sortBy}\n groupBy={groupBy}\n onChange={(patch) => {\n if (patch.sortBy) {\n setSortBy(patch.sortBy);\n setAdminDirty(true);\n }\n if (patch.groupBy) {\n setGroupBy(patch.groupBy);\n setAdminDirty(true);\n }\n }}\n showActions={adminDirty}\n onSave={handleAdminSave}\n onClear={handleAdminCancel}\n saving={savingAdmin}\n />\n </Spin>\n </div>\n\n <Divider className=\"my-6\" />\n\n <div>\n <Title level={4} className=\"!mb-4\">Escalation Settings</Title>\n <EscalationRowSection\n escBasis={escBasis}\n setEscBasis={setEscBasis}\n selectedSeverity={selectedSeverity}\n setSelectedSeverity={setSelectedSeverity as any}\n selectedRule={selectedRule}\n setSelectedRule={setSelectedRule as any}\n severityOptions={severityOptions}\n ruleOptions={ruleOptions}\n minsOptions={minsOptions}\n roleOptions={roleOptions}\n l1mins={l1mins}\n setL1mins={setL1mins as any}\n l1role={l1role}\n setL1role={setL1role}\n l2mins={l2mins}\n setL2mins={setL2mins as any}\n l2role={l2role}\n setL2role={setL2role}\n l3mins={l3mins}\n setL3mins={setL3mins as any}\n l3role={l3role}\n setL3role={setL3role}\n actions={actions}\n setActions={setActions}\n thirdPartyIds={thirdPartyIds}\n setThirdPartyIds={setThirdPartyIds}\n humanLoop={humanLoop}\n setHumanLoop={setHumanLoop}\n onClear={handleClear}\n onSave={handleSave}\n saving={savingEscalation}\n onActionTypesLoaded={(items) => {\n const map: Record<number, string> = {};\n for (const it of items) {\n if (typeof it.actionTypeId === \"number\") {\n map[it.actionTypeId] = it.name;\n }\n }\n setActionTypeIdToName(map);\n }}\n />\n </div>\n\n <Divider className=\"my-6\" />\n\n <EscalationTableSection\n entries={entries}\n userRoles={userRolesFromLookups}\n loading={loadingEntries}\n onEdit={(id) => {\n setEscBasis(\"rules\");\n const row = entries.find(e => e.id === id);\n const matchedRule =\n rules.find(r => r.RuleId === id) ||\n (row ? rules.find(r => r.Name === row.ruleOrSeverityLabel) : undefined);\n setSelectedRule(matchedRule ? matchedRule.RuleId : id);\n }}\n />\n\n <Divider className=\"my-6\" />\n <AlertAssignment userRoles={userRolesFromLookups} rules={rules} rawRules={rawRules} />\n <Divider />\n </div>\n );\n}\n\n\n","import { useState, useEffect } from \"react\";\nimport { Typography, Row, Col, Select, Checkbox, Divider, Space, Button, TimePicker, Spin } from \"antd\";\nimport type { RuleItem, SeverityItem } from \"./settings.types\";\nimport { normalizeSortBy, hmsToDayjs } from \"../../utils/preferences\";\nimport type { Dayjs } from \"dayjs\";\nimport { useApi } from \"../../providers/ApiProvider\";\nimport { toast } from \"react-toastify\";\n\nconst { Title, Text } = Typography;\n\ninterface Props {\n severities: SeverityItem[];\n rules: RuleItem[];\n onSave?: (value: unknown) => void;\n onCancel?: () => void;\n}\n\nexport default function MyPreferencesPanel({ severities: _severities, rules: _rules, onSave, onCancel }: Props) {\n const { rules: rulesApi, alerts: alertsApi } = useApi();\n const sortOptions = [\n { label: \"By Severity\", value: \"By Severity\" },\n { label: \"By Created Date\", value: \"By Created Date\" },\n ];\n\n const [sortBy, setSortBy] = useState<string>(\"By Severity\");\n const [subscribedRuleIds, setSubscribedRuleIds] = useState<Set<string>>(new Set());\n const [dndFrom, setDndFrom] = useState<Dayjs | null>(null);\n const [dndTo, setDndTo] = useState<Dayjs | null>(null);\n const [channels, setChannels] = useState<{ inApp: boolean; sms: boolean; email: boolean }>({ inApp: false, sms: false, email: false });\n const [anomalies, setAnomalies] = useState<Array<{ recordId: number; anomalyName: string }>>([]);\n const [loadingAnomalies, setLoadingAnomalies] = useState<boolean>(true);\n const [isSaving, setIsSaving] = useState<boolean>(false);\n\n // Load preference settings\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n const pref = await alertsApi.getPreferenceSettings();\n if (cancelled || !pref) return;\n setChannels({\n inApp: !!pref.inApp, //convert to bool - as the resp is str\n sms: !!pref.sms,\n email: !!pref.email,\n });\n const normalized = normalizeSortBy(pref.sortBy);\n setSortBy(normalized === \"By Created Date\" ? \"By Created Date\" : \"By Severity\");\n setDndFrom(hmsToDayjs(pref.doNotDisturbStart));\n setDndTo(hmsToDayjs(pref.doNotDisturbEnd));\n if (Array.isArray(pref.anomalyIds)) {\n // store as strings to match checkbox Set<string>\n setSubscribedRuleIds(new Set(pref.anomalyIds.map(x => String(x))));\n }\n } catch(e) {\n console.error(\"Error in loading my preferences: \",e);\n }\n })();\n return () => { cancelled = true; };\n }, []);\n\n // Load anomalies lookups\n useEffect(() => {\n let cancelled = false;\n (async () => {\n try {\n setLoadingAnomalies(true);\n const lookups = await rulesApi.getLookups();\n if (cancelled || !lookups) return;\n const list = Array.isArray((lookups as any).anomalies) ? (lookups as any).anomalies : [];\n setAnomalies(list);\n } catch (e) {\n console.error(\"Failed to load anomalies lookups\", e);\n } finally {\n if (!cancelled) setLoadingAnomalies(false);\n }\n })();\n return () => { cancelled = true; };\n }, []);\n\n const toggleRule = (ruleId: string) => {\n setSubscribedRuleIds(prev => {\n const copy = new Set(prev);\n if (copy.has(ruleId)) copy.delete(ruleId); else copy.add(ruleId);\n return copy;\n });\n };\n\n const handleSave = async () => {\n onSave?.({\n sortBy,\n subscribedRuleIds: Array.from(subscribedRuleIds),\n dnd: {\n from: dndFrom,\n to: dndTo,\n },\n channels,\n });\n try {\n setIsSaving(true);\n const start = dndFrom ? (dndFrom as any).format?.(\"HH:mm:ss\") ?? \"00:00:00\" : \"00:00:00\";\n const end = dndTo ? (dndTo as any).format?.(\"HH:mm:ss\") ?? \"00:00:00\" : \"00:00:00\";\n const anomalyIds = Array.from(subscribedRuleIds)\n .map(x => Number(x))\n .filter(n => Number.isFinite(n)) as number[];\n const resp: any = await alertsApi.setPreferenceSettings({\n anomalyIds,\n doNotDisturbStart: start,\n doNotDisturbEnd: end,\n inApp: !!channels.inApp,\n sms: !!channels.sms,\n email: !!channels.email,\n sortBy,\n });\n if (resp?.responseStatus) {\n toast.success(resp?.data || \"Preferences updated successfully.\");\n }\n } catch(e) {\n console.error(\"Error in saving my preferences: \",e);\n } finally {\n setIsSaving(false);\n }\n };\n\n return (\n <div className=\"w-full\">\n <Row gutter={[16, 16]} align=\"middle\" className=\"mb-4\">\n <Col xs={24} md={8}>\n <Space direction=\"horizontal\" size={12} className=\"w-full items-center\">\n <Text className=\"text-gray-600\">Sort By:</Text>\n <Select className=\"w-[240px]\" value={sortBy} options={sortOptions} onChange={setSortBy} />\n </Space>\n </Col>\n </Row>\n\n <div className=\"mb-4\">\n <Title level={5} className=\"!mb-2\">Anomalies</Title>\n {loadingAnomalies ? (\n <div className=\"py-4\">\n <Spin />\n </div>\n ) : (\n <Space direction=\"vertical\" size={10} className=\"w-full\">\n {(Array.isArray(anomalies) ? anomalies : []).map((a) => {\n const id = String(a.recordId);\n const name = a.anomalyName;\n return (\n <Checkbox key={id} checked={subscribedRuleIds.has(id)} onChange={() => toggleRule(id)}>\n {name}\n </Checkbox>\n );\n })}\n </Space>\n )}\n </div>\n\n <div className=\"mb-4\">\n <Title level={5} className=\"!mb-2\">Notification Timing & Channels</Title>\n <Row gutter={[16, 16]} align=\"middle\" className=\"mb-3\">\n <Col xs={24} md={12}>\n <Space direction=\"horizontal\" size={12} className=\"w-full items-center\">\n <Text>Do Not Disturb mode:</Text>\n <Space size={12} className=\"w-full\">\n <Space direction=\"horizontal\" size={8} className=\"items-center\">\n <Text>From</Text>\n <TimePicker value={dndFrom as any} onChange={(v) => setDndFrom(v)} format=\"HH:mm\" />\n </Space>\n <Space direction=\"horizontal\" size={8} className=\"items-center\">\n <Text>To</Text>\n <TimePicker value={dndTo as any} onChange={(v) => setDndTo(v)} format=\"HH:mm\" />\n </Space>\n </Space>\n </Space>\n </Col>\n </Row>\n <Row gutter={[24, 12]}>\n <Col>\n <Checkbox checked={channels.inApp} onChange={(e) => setChannels({ ...channels, inApp: e.target.checked })}>In-app</Checkbox>\n </Col>\n <Col>\n <Checkbox checked={channels.sms} onChange={(e) => setChannels({ ...channels, sms: e.target.checked })}>SMS</Checkbox>\n </Col>\n <Col>\n <Checkbox checked={channels.email} onChange={(e) => setChannels({ ...channels, email: e.target.checked })}>Email</Checkbox>\n </Col>\n </Row>\n </div>\n\n <Divider />\n\n <Space className=\"gap-3\">\n <Button onClick={onCancel} disabled={isSaving}>Cancel</Button>\n <Button type=\"primary\" onClick={handleSave} loading={isSaving}>Save</Button>\n </Space>\n </div>\n );\n}\n\n\n","import { useState } from \"react\";\nimport type { SeverityItem, RuleItem, UserRoleItem } from \"./settings.types\";\nimport type { ApiRuleItem } from \"../../ports/rules.port\";\nimport SettingsPanel from \"./SettingsPanel\";\nimport MyPreferencesPanel from \"./MyPreferencesPanel\";\n\ninterface SettingsTabsProps {\n severities: SeverityItem[];\n rules: RuleItem[];\n userRoles: UserRoleItem[];\n rawRules?: ApiRuleItem[];\n}\n\nexport default function SettingsTabs({ severities, rules, userRoles, rawRules }: SettingsTabsProps) {\n const [active, setActive] = useState<\"global\" | \"prefs\">(\"global\");\n\n return (\n <div className=\"w-full\">\n <div className=\"inline-flex rounded-xl overflow-hidden border border-gray-200 mb-4\">\n <button\n // type=\"button\"\n onClick={() => setActive(\"global\")}\n className={`px-5 py-2 text-base font-medium outline-none ${\n active === \"global\" ? \" bg-black text-white\" : \" bg-white text-black\"\n }`}\n style={{ border: \"0\" }}\n >\n Global Settings\n </button>\n <button\n // type=\"button\"\n onClick={() => setActive(\"prefs\")}\n className={`px-5 py-2 text-base font-medium outline-none ${\n active === \"prefs\" ? \"bg-black text-white\" : \"bg-white\"\n }`}\n >\n My Preferences\n </button>\n </div>\n\n {active === \"global\" ? (\n <SettingsPanel severities={severities} rules={rules} userRoles={userRoles} rawRules={rawRules} />\n ) : (\n <MyPreferencesPanel severities={severities} rules={rules} />\n )}\n </div>\n );\n}\n\n\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAIZSURBVHgBnZW/b9NAFMe/z3H6i1ZNJUBFQsL/QQkLCFBtRhhKF1ibhBmpXbtgFlYqsTG0gRGWwgAjMb8EYmjYGN0pCCrVVaX+SBxf37PiqHWcOu5Xsux79+6j77vz3RH66IbdsDTQPCFngmBwqMCPBwVXoe204Fd/2ZfrSWMpHrDshtGCvsY9FlKkFNYD+Es/7EtuX+itp1sLnLrScTWoPMYsfnty/lUPtAOs4syiUgQOoWHJpG9kdBiX11Z+UaZCk1YT+vOzACuzYxgf7hZbyBGvhTi9af+7SkQbyKi7M8N4ZJ5D+eU2dg9UN07KvyNOS8io6UkNFXMMj1/vnACKAuTmNXZpIqME+LF+iIbX7ukjkClODWTQw+ujuGYMYfXzXnICbxSBDrxAUvYDhkrZp6ggUC8+sDI7mpj9YmESb3/uJ5Z9TJ5A3eORvzsBpgs6lufGT2TKPNY3fbxh6Knis0FTSjnx+LP3u5DJicDi/t7MCFadPaRJQTl02/5vKcKnpITluYkwrWjksebs48Pvg3SoUkXtq32hxt+1pITI8Zc/zcGACN59ty/WdWnklV5ukZ+49wU8MUJIF3mBGlqUr3Dv1+wpl20v9UuP75pElyrgc3XK7UJFbLvK4DJiv9ggDmWcjO9G4imWvW00yV/hjvtpOFnpQOVLkcO+0EhyevGrROG1ol1hREFc8ZGxyddIje+v9c4i9+gI5z7MozLxclgAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAVCAYAAACpF6WWAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAKeSURBVHgBjVVdbtpAEJ5ZmygPfTBSaVWpUt0bwFuURgJOUG5QeoLACbw+QeAEwA3SGxgJokh9CDeI+xSpTRU/Imw8nbFZx6QQGAl5d2fm229+dkDYI2f6oaUAOwhWExBcPnL4FwFBSLCexpCMf+qPi12++PKgpR/cGOwRa1pwQIjgOoWkf6s/hOVzVd588R+/xWjf5YAY8Y0+ErQrZFfnXg3lK3uGm7A+RISOxfbit5NprqBxxgBoeEIVHehqtI9lSz+5McaaITaA2J17bycFaBayMOS8IaT+zHuv4Ui58P9oAvB4Ga0paUgqbFGswL5idIcIx3P9DCiXrQB7iJawcTiCkMMIUlj7Jo8zr6Yv/EfRXXIqRnzUxnP9u46Id8Q5Sslq3+pqWErHAPKqvxROC/ZMuJwKJ8bkPouUkrYUqgt5IgMDKAxfAYT8nAZnmR2A5J47YSjrFKyOYpZN2SiIJ8YjRqVfASyAFVg9s2F2gXwRsClMXdnYcFpq5PyiQ8KEilaywc79+aEow2i7fdCF46SIpuTvCGi2kWSXjCM4QqS4Zl3yjwQ0UySwrBfGRJNjQKW4ZrmEpL45CxUDTGWdgmoZgxOoDA6zxYgr7ZudhWk3x6Sp4kl0nZmgujQhcH5Cvqy/Hxi5hdL+dgsWxR2rma4FkLeDw+PMM243+t2YB0jDDI9nMBquyWqI3tjmLYguQfqDzxebty/DIcnePr9jfePVfDhSzv2/Hs8LAY3kMmFfTCl+rl3uu1GWF6Jx+X3vkpa+58jeeNyXvY3Pd8N+a0hvgK9ge3hMTmG5CPTnSICWcFpXaDfZUcAck99yOnZM/id3hcmAFV/hgEilU6p0TcH2gpZYS98xc/kXUJ8YImPFzfeLh0cgXbMp8n/yD3ySPZSK0MWKAAAAAElFTkSuQmCC\"","import { Card, Tabs, Steps } from \"antd\";\nimport type { TrackIncidentData, TrackIncidentTimelineItem, NotificationGroup, NotificationRecipient } from \"../../types/trackIncident.types\";\nimport completedPng from '../../assets/completed.png';\nimport pendingPng from '../../assets/pending.png';\nimport dayjs from \"dayjs\";\n\ntype Props = {\n data: TrackIncidentData;\n};\n\nfunction renderTimelineItem(item: TrackIncidentTimelineItem) {\n const icon =\n (item.status || '').toLowerCase() === 'completed'\n ? <img src={completedPng} alt=\"completed\" style={{ width: 20, height: 20 }} />\n : <img src={pendingPng} alt=\"pending\" style={{ width: 20, height: 20 }} />;\n return {\n title: (\n <div className=\"flex flex-col gap-0 min-w-0\">\n <div className=\"flex flex-col\">\n <span className=\"block text-sm break-words mb-1 overflow-visible whitespace-normal\"><b>{item.title}</b></span>\n {item.description ? <span className=\"text-gray-500 text-xs\">{item.description}</span> : null}\n </div>\n {item.timestamp ? <span className='text-gray-500 text-xs'>{item.timestamp}</span> : null}\n </div>\n ),\n icon,\n description: null as any,\n };\n}\n\nexport default function TrackIncident({ data }: Readonly<Props>) {\n return (\n <div className=\"w-full\">\n <Tabs\n type=\"card\"\n items={[\n {\n key: \"action\",\n label: \"Action Taken\",\n children: (\n <div className=\"w-full\">\n <Card className=\"mb-4 rounded-md p-4\" bordered>\n <div className=\"grid grid-cols-4 gap-6 text-xs\">\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-gray-500\">Alert ID</span>\n <span className=\"text-black\">{data.summary.alertNumber}</span>\n </div>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-gray-500\">Incident ID</span>\n <span className=\"text-black\">{data.summary.incidentId}</span>\n </div>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-gray-500\">Severity</span>\n <span className=\"text-black\">{data.summary.severity}</span>\n </div>\n <div className=\"flex flex-col gap-1\">\n <span className=\"text-gray-500\">Location</span>\n <span className=\"text-black\">{data.summary.location}</span>\n </div>\n </div>\n </Card>\n <Card className=\"rounded-md p-4\" bordered>\n <div className=\"flex items-center justify-between\">\n <h4 className=\"text-sm text-black font-medium\">Response Timeline/ Audit trail/log</h4>\n </div>\n <div className=\"mt-2\">\n <Steps\n direction=\"vertical\"\n size=\"small\"\n current={1}\n items={(data.timeline || []).map(renderTimelineItem)}\n />\n </div>\n </Card>\n </div>\n ),\n },\n {\n key: \"notification\",\n label: \"Notification Sent\",\n children: (\n <div className=\"grid grid-cols-2 gap-4\">\n {(data.notifications || []).map((group: NotificationGroup, idx) => (\n <Card key={idx} className=\"rounded-md p-4\" bordered>\n <div className=\"flex items-start justify-between\">\n <div className=\"flex flex-col\">\n <h4 className=\"text-sm text-black font-medium\">{group.channelLabel}</h4>\n <span className=\"text-xs text-gray-500 mt-1\">{dayjs(group.sentAt)?.format('MM/DD/YYYY HH:mm:ss')}</span>\n </div>\n <span className=\"text-[11px] px-2 py-1 rounded-full bg-green-50 text-green-700 border border-green-200\">{group.delivered}/{group.total} Delivered</span>\n </div>\n <div className=\"mt-4 text-xs\">\n <div className=\"text-black\"> {group.messageTitle}</div>\n {group.messageBody ? <div className=\"text-gray-600\">{group.messageBody}</div> : null}\n </div>\n <div className=\"mt-4\">\n <div className=\"text-xs text-black font-medium\">Recipients ({group.total})</div>\n <div className=\"mt-2 flex flex-col gap-3 text-xs\">\n {(group.recipients || []).map((r: NotificationRecipient, rIdx) => {\n const escalationTypeFlag = String(r?.notificationReceipientType || \"\").toLowerCase() === \"EscalationNotification\".toLowerCase();\n return (\n <div key={rIdx} className=\"flex items-center justify-between\">\n <div className=\"flex flex-col\">\n <span className=\"text-black\">\n {r.name} - <span style={{ color: escalationTypeFlag ? \"#FF3B30\" : \"#FFB86A\" }}>\n {escalationTypeFlag ? \"Escalation Notification\" : \"Alert Notification\"}\n </span>\n </span>\n <span className=\"text-gray-500\">{r.role} . {r.phone}</span>\n </div>\n <span className={`text-[11px] px-3 py-[2px] rounded ${r.status === 'Delivered' ? 'bg-green-50 text-green-700 border border-green-200' : 'bg-red-50 text-red-700 border border-red-200'}`}>\n {r.status}\n </span>\n </div>\n )\n })}\n </div>\n </div>\n </Card>\n ))}\n {data?.notifications?.length ? null : <span className=\"text-gray-500 text-xs\">No notifications.</span>}\n </div>\n ),\n },\n // {\n // key: \"rapidsos\",\n // label: \"RapidSOS\",\n // children: (\n // <Card className=\"rounded-md\" bordered>\n // <div className=\"flex flex-col gap-2 text-xs\">\n // {(data.rapidSOS || []).map((r, idx) => (\n // <div key={idx} className=\"flex justify-between gap-2 border-b border-gray-100 pb-2\">\n // <span className=\"text-black\">{r.event}</span>\n // <span className=\"text-gray-500\">{r.details || ''}</span>\n // <span className=\"text-gray-500\">{r.timestamp}</span>\n // </div>\n // ))}\n // {!data.rapidSOS?.length ? <span className=\"text-gray-500\">No RapidSOS records.</span> : null}\n // </div>\n // </Card>\n // ),\n // },\n ]}\n />\n </div>\n );\n}\n\n\n","import React from 'react';\nimport TrackIncident from './TrackIncident';\nimport type { TrackIncidentData, TimelineState, TrackIncidentTimelineItem } from '../../types/trackIncident.types';\nimport { formatDisplayTimestamp } from '../../utils/dateTimeUtils';\n\n// Props for the TrackIncidentWrapper component\nexport interface TrackIncidentWrapperProps {\n alertId?: string | number;\n id?: string | number;\n priority?: string;\n spaceName?: string;\n alertNumber?: string | number;\n statusHistory?: any[];\n notifGroups?: TrackIncidentData['notifications'];\n}\n\n// Wrapper component that computes TrackIncidentData from raw props\nconst TrackIncidentWrapper: React.FC<TrackIncidentWrapperProps> = ({\n alertId,\n id,\n priority,\n spaceName,\n alertNumber,\n statusHistory,\n notifGroups,\n}) => {\n const summary = {\n alertId: alertId ?? String(id ?? ''),\n incidentId: '-',\n severity: priority || '',\n location: spaceName || '',\n alertNumber: alertNumber ?? '',\n };\n\n const timeline: TrackIncidentTimelineItem[] = statusHistory?.length\n ? statusHistory.map((subject: any) => {\n const computedStatus: TimelineState =\n ((subject?.status || subject?.eventStatus || '').toLowerCase() === 'completed')\n ? 'Completed'\n : 'Inprogress';\n const timestampValue = (() => {\n if (subject?.createdDate) return formatDisplayTimestamp(subject.createdDate);\n if (subject?.timestamp) return formatDisplayTimestamp(subject.timestamp);\n return '';\n })();\n return {\n status: computedStatus,\n title: subject?.status || subject?.eventStatus || 'Status Update',\n description: subject?.description || subject?.actionNotes || '',\n timestamp: timestampValue,\n };\n })\n : [];\n\n const data: TrackIncidentData = {\n summary,\n timeline,\n notifications: notifGroups ?? [],\n };\n\n return <TrackIncident data={data} />;\n};\n\nexport default TrackIncidentWrapper;\n","export function isLikelyVideoUrl(url: unknown): boolean {\n if (!url || typeof url !== \"string\") return false;\n const lower = url.split(\"?\")[0].toLowerCase();\n return (\n lower.endsWith(\".mp4\") ||\n lower.endsWith(\".webm\") ||\n lower.endsWith(\".ogg\") ||\n lower.endsWith(\".m3u8\")\n );\n}\n\nexport function isVideoMedia(media: any): boolean {\n const typeStr = (media?.mediaType || media?.type || \"\").toString().toLowerCase();\n if (typeStr === \"video\" || typeStr === \"mp4\") return true;\n return isLikelyVideoUrl(media?.mediaUrl || media);\n}\n\nexport function normalizeMedia(mediaDetails: unknown): any[] {\n const md: any = mediaDetails as any;\n if (!md) return [];\n if (Array.isArray(md)) return md;\n return [md];\n}\n\n\n","import { Button, Modal, Carousel, Tag, Tabs, Select } from 'antd';\nimport React, { useRef, useState, useEffect } from 'react';\nimport { LeftOutlined, RightOutlined } from '@ant-design/icons';\nimport { toast } from 'react-toastify';\nimport type { AlertModalProps, AlertData } from '../../types/alertModal.types';\nimport TrackIncidentWrapper from './TrackIncidentWrapper';\nimport type { TrackIncidentData, DeliveryStatus } from '../../types/trackIncident.types';\nimport { useUpdateAlertStatus } from '../../hooks/useUpdateAlertStatus';\n\nimport { formatDisplayTimestamp } from '../../utils/dateTimeUtils';\nimport { isVideoMedia, normalizeMedia } from '../../utils/media';\nimport { useApi } from '../../providers/ApiProvider';\n\n// Match AlertsTable.tsx border colors for severity\nconst PRIORITY_BORDER_COLOR: Record<string, string> = {\n Critical: '#FF3B30',\n High: '#FFB86A',\n Medium: '#FFCC00',\n Low: '#007AFF',\n};\n\nconst PRIORITY_ROW_BG_CLASS: Record<string, string> = {\n Critical: \"#FFE2E2\",\n High: \"#FF95004D\",\n Medium: \"#FEF9C2\",\n Low: \"#E0EDFF\",\n};\n\nconst AlertModal: React.FC<AlertModalProps> = ({ isModalOpen, handleModalClose, selectedRow, fetchAlertLogs, alertStatusList = [], alertStatusLoading = false, initialTab = 'details' }) => {\n const [selectedAction, setSelectedAction] = useState<string | number | undefined>();\n const [notes, setNotes] = useState<string>('');\n const [saving, setSaving] = useState<boolean>(false);\n const mediaCarouselRef = useRef<any>(null);\n const [activeTab, setActiveTab] = useState<'details' | 'track'>('details');\n const [notifGroups, setNotifGroups] = useState<TrackIncidentData['notifications']>(undefined);\n const [notifying, setNotifying] = useState<boolean>(false);\n const updateStatus = useUpdateAlertStatus();\n const { alerts, config } = useApi();\n const isSchools = (config as any)?.tenant === 'schools';\n\n const alertData: AlertData = selectedRow?.originalData || {};\n const {\n eventName,\n alertId,\n timestamp,\n description,\n spaceName,\n assignTeam,\n priority,\n statusType,\n id,\n alertDetails,\n statusHistory,\n mediaDetails,\n alertNumber,\n } = alertData;\n const shouldShowNotify = !isSchools && typeof (alertData as any)?.anomalyName === 'string' &&\n String((alertData as any)?.anomalyName || '').toLowerCase().includes('elopement');\n\n const mapDeliveryStatus = (rawStatus?: any): DeliveryStatus => {\n const statusLower = String(rawStatus || '').toLowerCase();\n if (statusLower === 'delivered') return 'Delivered';\n if (statusLower === 'failed') return 'Failed';\n return 'Queued';\n };\n\n const mapRowToRecipient = (r: any) => ({\n name: r?.receipientName || r?.recipientName || '-',\n role: r?.receipientRoleName || '',\n phone: r?.receipentPhoneNumber || r?.recipientPhoneNumber || r?.receipientEmail || r?.recipientEmail || '',\n status: mapDeliveryStatus(r?.messageStatus),\n notificationReceipientType: r?.notificationReceipientType || '',\n });\n\n const buildNotificationGroup = (type: string, rows: any[]) => {\n const recipients = rows.map(mapRowToRecipient);\n const delivered = recipients.filter((r) => r.status === 'Delivered').length;\n const latest = rows\n .map((r: any) => r?.sentAt)\n .filter(Boolean)\n .sort((a: any, b: any) => new Date(b).getTime() - new Date(a).getTime())[0];\n const first = rows[0] || {};\n const messageTitle = [first?.severityName, first?.anomalyName].filter(Boolean).join(' - ') || `${type} Notification`;\n return {\n channelLabel: `${type} Notification`,\n sentAt: latest || '',\n messageTitle,\n messageBody: '',\n total: recipients.length,\n delivered,\n recipients,\n };\n };\n\n const processNotifications = (raw: any[]) => {\n const groupsMap = new Map<string, any[]>();\n (raw || []).forEach((row: any) => {\n const key = String(row?.notificationType || 'Unknown');\n const list = groupsMap.get(key) || [];\n list.push(row);\n groupsMap.set(key, list);\n });\n return Array.from(groupsMap.entries()).map(([type, rows]) => buildNotificationGroup(type, rows));\n };\n\n const fetchNotifications = async (alertId: string | number) => {\n try {\n const raw = await alerts.getAlertNotifications(alertId as any);\n const groups = processNotifications(raw);\n setNotifGroups(groups);\n } catch {\n setNotifGroups(undefined);\n }\n };\n\n //fetch notifications when selected alert changes or Track tab becomes active\n useEffect(() => {\n if (activeTab !== 'track' || !id) return;\n let cancelled = false;\n fetchNotifications(id).then(() => {\n if (cancelled) setNotifGroups(undefined);\n });\n return () => { cancelled = true; };\n }, [activeTab, id]);\n\n // whenever the modal opens or initialTab changes, set the active tab\n useEffect(() => {\n if (isModalOpen) {\n setActiveTab(initialTab);\n }\n }, [isModalOpen, initialTab]);\n\n const statusOptions: { value: string | number; label: string }[] =\n (alertStatusList || []).map((s: any) => ({\n value: s.value,\n label: s.statusName\n }));\n\n\n const handleSaveChanges = async () => {\n\n try {\n setSaving(true);\n\n const payload = {\n alertUniqueId: alertId as any,\n alertId: id as any,\n status: selectedAction ? String(selectedAction) : undefined,\n notes: notes.trim(),\n modifiedBy: 0\n };\n\n const response = await updateStatus.mutateAsync(payload as any);\n if ((response)?.responseStatus) {\n const successMsg = (response)?.data || 'Alert updated successfully.';\n toast.success(successMsg, {\n autoClose: 1500,\n onClose: () => {\n fetchAlertLogs();\n handleModalClose();\n }\n });\n setSelectedAction(undefined);\n setNotes('');\n } else {\n const errMsg = (response)?.errorMessage || 'Failed to update alert status';\n toast.error(errMsg);\n }\n } catch (error) {\n console.error('Error updating alert status:', error);\n toast.error('Failed to update alert status. Please try again.');\n } finally {\n setSaving(false);\n }\n };\n\n const handleNotifyFamily = async () => {\n try {\n if (!id) {\n toast.error('Alert ID is missing.');\n return;\n }\n setNotifying(true);\n const targetId = id;\n if (!alerts.notifyFamilyMembers) {\n toast.error('Notify Family is not supported.');\n return;\n }\n const resp: any = await alerts.notifyFamilyMembers(targetId as any);\n if (resp?.responseStatus) {\n const msg = resp?.data || 'Alert Notifications sent to Family Members.';\n toast.success(msg);\n } else {\n const err = resp?.errorMessage || 'Failed to send notifications.';\n toast.error(err);\n }\n } catch (e) {\n console.error('Error notifying family members:', e);\n toast.error('Failed to send notifications. Please try again.');\n } finally {\n setNotifying(false);\n }\n };\n return (\n <Modal\n // title=\"Alert Detail\"\n open={isModalOpen}\n onCancel={handleModalClose}\n width={1000}\n styles={{\n body: {\n maxHeight: '70vh',\n overflowY: 'auto',\n }\n }}\n footer={\n activeTab === 'details'\n ? (\n <div className=\"flex flex-row gap-2 justify-start\">\n <Button onClick={handleModalClose} className='bg-[#6C757D] text-white'>Cancel</Button>\n <Button\n type=\"primary\"\n onClick={handleSaveChanges}\n loading={saving}\n >\n {saving ? 'Saving...' : 'Save Changes'}\n </Button>\n </div>\n )\n : null\n }\n >\n {selectedRow && (\n <Tabs\n activeKey={activeTab}\n onChange={(key) => setActiveTab(key as 'details' | 'track')}\n items={[\n {\n key: 'details',\n label: 'Alert Detail',\n children: (\n <div className='grid grid-cols-2 gap-2'>\n <div className='flex flex-col gap-2'>\n <div className='text-sm font-bold'>{eventName || 'Alert Event'}</div>\n {alertDetails?.firstName ? <div className='text-sm text-gray-500'>\n Resident ID/Name: {alertDetails?.firstName} {alertDetails?.lastName || \"\"} &nbsp; {alertDetails?.residentId || \"\"}\n </div> : null}\n <div className='text-sm text-gray-500'>\n Timestamp: {formatDisplayTimestamp(timestamp)}\n </div>\n <div className=\"font-sm text-gray-500\">\n <b className='text-black text-sm/6'>Description:</b> {description || 'No description available'}\n </div>\n {spaceName && (\n <div className=\"font-sm text-gray-500\">\n Space: {spaceName}\n </div>\n )}\n {assignTeam && (\n <div className=\"font-sm text-gray-500\">\n Assigned to: {assignTeam}\n </div>\n )}\n <div className='flex gap-2 justify-start mt-3'>\n <Tag\n className=\"font-sm text-gray-500 rounded-[8px] py-2 px-3\"\n style={{\n border: `2px solid ${PRIORITY_BORDER_COLOR[String(priority)] || '#DFE4EA'}`,\n backgroundColor: PRIORITY_ROW_BG_CLASS[String(priority)]\n }}\n >\n Severity: {priority || 'N/A'}\n </Tag>\n {/* <Tag className=\"font-sm text-gray-500 rounded-[8px] py-2 px-3\">\n Shared With: {type || 'N/A'}\n </Tag> */}\n <Tag\n className=\"font-sm text-gray-500 rounded-[8px] py-2 px-3\"\n style={\n String(statusType || '').toLowerCase() === 'completed'\n ? { background: '#E7F6EC', border: '0.68px solid var(--Green, #34C759)' }\n : { background: '#E0EDFF', border: '1px solid var(--Grays-Gray-4, #D1D1D6)' }\n }\n >\n Status: {statusType || 'N/A'}\n </Tag>\n </div>\n {/* </div> */}\n <div className=\"w-full flex flex-col justify-start items-start mt-2 font-bold\">\n <div className=\"w-full mt-4\">\n <div className=\"flex flex-col gap-2\">\n\n <Select\n placeholder=\"Change Status\"\n className=\"w-full text-gray-500\"\n onChange={(value) => setSelectedAction(value)}\n value={selectedAction}\n options={statusOptions}\n loading={alertStatusLoading}\n />\n </div>\n <div className=\"flex flex-col gap-2 mt-3\">\n <label htmlFor=\"action-details-input\" className=\"text-xs text-gray-500 font-medium\">Action Taken (Comments)</label>\n <textarea\n id=\"action-details-input\"\n placeholder=\"Enter details...\"\n className=\"w-full text-gray-500 h-20 border border-grey-500 rounded-md p-2\"\n value={notes}\n onChange={(e) => setNotes(e.target.value)}\n />\n\n </div>\n {shouldShowNotify && (\n <div className='border border-[#DFE4EA] rounded-md px-4 py-2 flex flex-row justify-between items-center mt-4 mb-8'>\n <label htmlFor='notify-family-button' className='text-xs font-medium'>Alert notification will be sent to all Family Members.</label>\n <Button\n loading={notifying}\n onClick={handleNotifyFamily}\n disabled={notifying}\n className='bg-black text-white rounded-md px-4 py-2 text-xs disabled:opacity-60 disabled:cursor-not-allowed'\n >\n Notify Family\n </Button>\n </div>\n )}\n </div>\n </div>\n </div>\n <div className='flex flex-col gap-4'>\n <div className=\"w-full mt-1\">\n <div className=\"w-full flex items-center justify-between\">\n <h3 className='text-black font-bold text-sm'>Camera Footage</h3>\n {normalizeMedia(mediaDetails).length ? (\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => mediaCarouselRef.current?.prev?.()}\n className=\"w-6 h-6 flex items-center justify-center rounded-full bg-gray-200 hover:bg-gray-300 text-gray-600\"\n aria-label=\"Previous media\"\n >\n <LeftOutlined style={{ fontSize: 12 }} />\n </button>\n <button\n type=\"button\"\n onClick={() => mediaCarouselRef.current?.next?.()}\n className=\"w-6 h-6 flex items-center justify-center rounded-full bg-gray-200 hover:bg-gray-300 text-gray-600\"\n aria-label=\"Next media\"\n >\n <RightOutlined style={{ fontSize: 12 }} />\n </button>\n </div>\n ) : null}\n </div>\n {normalizeMedia(mediaDetails).length ? (\n <div className=\"w-full\">\n <Carousel ref={mediaCarouselRef} dots className=\"w-full\">\n {normalizeMedia(mediaDetails).map((media: any, index: number) => (\n <div key={index} className=\"flex justify-center items-center\">\n {isVideoMedia(media) ? (\n <video\n width=\"240\"\n height=\"200\"\n controls\n className='max-w-full max-h-[90vh] object-contain rounded-lg shadow-lg'\n >\n <source src={media.mediaUrl || media} />\n Your browser does not support the video tag.\n </video>\n ) : (\n <img\n src={media.mediaUrl || media}\n alt={media.caption || `media-${index}`}\n className='max-w-full max-h-[90vh] object-contain rounded-lg shadow-lg'\n />\n )}\n {media.caption && (\n <p className=\"text-xs text-gray-500 mt-1\">{media.caption}</p>\n )}\n </div>\n ))}\n </Carousel>\n </div>\n ) : null}\n </div>\n </div>\n </div>\n )\n },\n {\n key: 'track',\n label: 'Track Incident',\n children: (\n <TrackIncidentWrapper\n alertId={alertId}\n id={id}\n priority={priority}\n spaceName={spaceName}\n alertNumber={alertNumber}\n statusHistory={statusHistory}\n notifGroups={notifGroups}\n />\n )\n }\n ]}\n />\n )}\n </Modal>\n );\n};\n\nexport default AlertModal;\n\n\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useApi } from \"../providers/ApiProvider\";\nimport type { AlertStatusListItem } from \"../ports/alerts.port\";\n\nexport function useAlertStatusList() {\n const { alerts } = useApi();\n const query = useQuery<AlertStatusListItem[], Error>({\n queryKey: [\"alerts\", \"statusList\"],\n queryFn: () => alerts.getAlertStatusList(),\n staleTime: 5 * 60_000,\n });\n return {\n list: query.data ?? [],\n loading: query.isLoading,\n error: query.error,\n refetch: query.refetch,\n };\n}\n\n\n","import { Tabs } from \"antd\";\nimport AlertsTable from \"../Alerts/AlertsTable\";\nimport type { Alert } from \"../../types/alerts.types\";\nimport ArchivedTable from \"../Archived/ArchivedTable\";\nimport Clock from \"../Clock/Clock\";\nimport settingsDummy from \"../../data/settingsDummy.json\";\nimport SettingsTabs from \"../Settings/SettingsTabs\";\nimport { useEffect, useState } from \"react\";\nimport AlertModal from \"../AlertModal/AlertModal\";\nimport { useAlertStatusList } from \"../../hooks/useAlertStatusList\";\nimport type { AlertConsoleProps } from \"../../types/alertConsole.types\";\nimport type { ApiRuleItem } from \"../../ports/rules.port\";\nimport type { RuleItem, UserRoleItem } from \"../Settings/settings.types\";\nimport { useApi } from \"../../providers/ApiProvider\";\n\nexport default function AlertConsole({ alerts, loading = false, columns, onRefetch }: AlertConsoleProps) {\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [selectedAlert, setSelectedAlert] = useState<Alert | null>(null);\n const [initialAlertTab, setInitialAlertTab] = useState<\"details\" | \"track\">(\"details\");\n const { list: alertStatusList, loading: alertStatusLoading } = useAlertStatusList();\n\n function handleOpenAlert(record: Alert, opts?: { tab?: \"details\" | \"track\" }) {\n setSelectedAlert(record);\n setInitialAlertTab(opts?.tab ?? \"details\");\n setIsModalOpen(true);\n }\n\n function handleCloseModal() {\n setIsModalOpen(false);\n }\n\n const selectedRow = selectedAlert\n ? {\n originalData: {\n // include the full selected alert so alll modal fieldsare present\n ...selectedAlert,\n // ensure alertId is available even if backend uses id\n alertId: (selectedAlert as any).alertId ?? selectedAlert.id,\n mediaDetails: (selectedAlert as any).mediaDetails,\n } as any,\n }\n : null;\n\n return (\n <div className=\"p-6 flex flex-col items-start justify-start min-h-screen w-full overflow-auto\">\n <div className=\"w-1/2 flex items-center justify-between mb-4\">\n <h1 className=\"text-xl font-bold text-black\">Alert Console</h1>\n <Clock label=\"USA\" timeZone=\"America/New_York\" />\n </div>\n <Tabs\n defaultActiveKey=\"active\"\n className=\"w-full\"\n tabBarStyle={{ fontSize: 'medium' }}\n onChange={(activeKey) => {\n if (activeKey === \"active\") {\n onRefetch?.();\n }\n }}\n items={[\n {\n key: \"active\",\n label: \"Active\",\n children: (\n <AlertsTable data={alerts} loading={loading} pageSize={10} columns={columns || []} onAlertIdClick={handleOpenAlert} onRefetch={onRefetch} />\n ),\n },\n {\n key: \"archived\",\n label: \"Archived\",\n children: (\n <ArchivedTable alerts={alerts} loading={loading} columns={columns || []} onAlertIdClick={handleOpenAlert} />\n ),\n },\n {\n key: \"settings\",\n label: \"Settings\",\n children: (\n <SettingsDataWrapper />\n ),\n },\n // {\n // key: \"reports\",\n // label: \"Reports\",\n // children: <ReportsPanel />,\n // },\n ]}\n />\n <AlertModal\n isModalOpen={isModalOpen}\n handleModalClose={handleCloseModal}\n selectedRow={selectedRow as any}\n fetchAlertLogs={() => {}}\n alertStatusList={alertStatusList}\n alertStatusLoading={alertStatusLoading}\n initialTab={initialAlertTab}\n />\n </div>\n );\n}\n\nfunction SettingsDataWrapper() {\n const [rules, setRules] = useState<RuleItem[]>([]);\n const [userRoles, setUserRoles] = useState<UserRoleItem[]>([]);\n const [rawRules, setRawRules] = useState<ApiRuleItem[]>([]);\n const { rules: rulesApi } = useApi();\n\n useEffect(() => {\n let mounted = true;\n (async () => {\n try {\n const data = await rulesApi.getRules();\n if (!mounted) return;\n setRawRules(Array.isArray(data) ? data : []);\n const mappedRules: RuleItem[] = (data || []).map((r: ApiRuleItem, idx) => ({\n RuleId: r.ruleId || r.ruleName || String(idx),\n Name: r.ruleName || (r as any).Name || \"-\",\n Description: r.ruleDesc || (r as any).Description || \"\",\n SeverityId: 0,\n }));\n setRules(mappedRules.length ? mappedRules : (settingsDummy.rules as any));\n\n try {\n const lookups = await rulesApi.getLookups();\n const roles = Array.isArray((lookups as any)?.userRoles)\n ? (lookups as any).userRoles.map((ur: any) => ({\n userRoleId: ur.userRoleId ?? ur.id,\n userRoleName: ur.userRoleName ?? ur.name,\n }))\n : [];\n setUserRoles(roles.length ? roles : (settingsDummy.userRoles as any));\n } catch {\n setUserRoles(settingsDummy.userRoles as any);\n }\n } catch {\n setRules(settingsDummy.rules as any);\n setUserRoles(settingsDummy.userRoles as any);\n }\n })();\n return () => { mounted = false; };\n }, []);\n\n return (\n <SettingsTabs\n severities={settingsDummy.severities as any}\n rules={rules}\n userRoles={userRoles}\n rawRules={rawRules}\n />\n );\n}\n\n\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useApi } from \"../providers/ApiProvider\";\nimport type { Alert } from \"../types/alerts.types\";\n\nexport function useAlerts() {\n const { alerts } = useApi();\n const query = useQuery<Alert[], Error>({\n queryKey: [\"alerts\", \"list\"],\n queryFn: () => alerts.listAlerts(),\n staleTime: 30_000,\n });\n return {\n alerts: query.data ?? [],\n loading: query.isLoading,\n error: query.error,\n refetch: query.refetch,\n };\n}\n\n\n","import { useMemo, useState } from \"react\";\nimport AlertConsole from \"./components/AlertConsole/AlertConsole\";\nimport type { Alert } from \"./types/alerts.types\";\nimport type { ColumnsType } from \"antd/es/table\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { ApiProvider } from \"./providers/ApiProvider\";\nimport type { TenantId } from \"./config/tenants\";\nimport { useAlerts } from \"./hooks/useAlerts\";\n\nexport type AlertConsoleWidgetProps = {\n tenant: TenantId;\n apiDomain: string;\n rulesDomain?: string;\n headers?: Record<string, string>;\n alerts?: Alert[];\n loading?: boolean;\n columns?: ColumnsType<Alert>;\n};\n\nfunction ConnectedAlertConsole(props: Readonly<{ columns?: ColumnsType<Alert> }>) {\n const { alerts, loading, refetch } = useAlerts();\n return <AlertConsole alerts={alerts} loading={loading} columns={props.columns} onRefetch={refetch} />;\n}\n\nexport default function AlertConsoleWidget({\n tenant,\n apiDomain,\n rulesDomain,\n headers,\n alerts,\n loading,\n columns,\n}: Readonly<AlertConsoleWidgetProps>) {\n //to avoid creating new query client instance between every re-render and lose cached data\n // create and save the same instance onlu once\n const [queryClient] = useState(() => new QueryClient());\n //use the same reference for override object to avoid re-rendering ApiProvider on every render\n const override = useMemo(\n () => ({\n alertsBaseUrl: apiDomain,\n rulesBaseUrl: rulesDomain || apiDomain,\n headers: headers || undefined,\n }),\n [apiDomain, rulesDomain, headers]\n );\n\n return (\n <QueryClientProvider client={queryClient}>\n <ApiProvider tenant={tenant} override={override}>\n {Array.isArray(alerts) ? (\n <AlertConsole alerts={alerts} loading={!!loading} columns={columns} />\n ) : (\n <ConnectedAlertConsole columns={columns} />\n )}\n </ApiProvider>\n </QueryClientProvider>\n );\n}\n\n\n","import { useQuery } from \"@tanstack/react-query\";\nimport { useApi } from \"../providers/ApiProvider\";\nimport type { AlertsReportQuery, AlertReport } from \"../types/reports.types\";\n\nexport function useAlertsReport(params: AlertsReportQuery) {\n const { alerts } = useApi();\n const query = useQuery<AlertReport[], Error>({\n queryKey: [\"alerts\", \"report\", params],\n queryFn: () => alerts.getAlertsReport(params),\n staleTime: 60_000,\n });\n return {\n data: query.data ?? [],\n loading: query.isLoading,\n error: query.error,\n refetch: query.refetch,\n };\n}\n\n\n","export { default as AlertConsoleWidget } from \"./AlertConsoleWidget\";\nexport { default as AlertConsole } from \"./components/AlertConsole/AlertConsole\";\nexport { ApiProvider, useApi } from \"./providers/ApiProvider\";\nexport type { TenantId } from \"./config/tenants\";\nexport type { AlertConsoleWidgetProps } from \"./AlertConsoleWidget\";\nexport type { AlertConsoleProps } from \"./types/alertConsole.types\";\nexport type { Alert } from \"./types/alerts.types\";\n\nexport { default as AlertsTable } from \"./components/Alerts/AlertsTable\";\nexport { default as DataTable } from \"./components/DataTable/DataTable\";\nexport type { OptionItem } from \"./components/Alerts/Filters/FilterSelect\";\nexport { default as ArchivedTable } from \"./components/Archived/ArchivedTable\";\nexport { default as Clock } from \"./components/Clock/Clock\";\nexport { default as SettingsPanel } from \"./components/Settings/SettingsPanel\";\nexport { default as AlertAssignment } from \"./components/Settings/AlertAssignment\";\nexport { default as MyPreferencesPanel } from \"./components/Settings/MyPreferencesPanel\";\nexport { default as SettingsTabs } from \"./components/Settings/SettingsTabs\";\nexport { useAlerts } from \"./hooks/useAlerts\";\nexport { useAlertsReport } from \"./hooks/useAlertsReport\";\nexport { useAlertStatusList } from \"./hooks/useAlertStatusList\";\nexport { useUpdateAlertStatus } from \"./hooks/useUpdateAlertStatus\";\n\nimport type { ColumnsType } from \"antd/es/table\";\nimport type { Alert } from \"./types/alerts.types\";\n\nexport const exampleAlertColumns: ColumnsType<Alert> = [\n { title: \"ID\", dataIndex: \"id\", key: \"id\", width: 120 },\n { title: \"Priority\", dataIndex: \"priority\", key: \"priority\", width: 120 },\n { title: \"Timestamp\", dataIndex: \"timestamp\", key: \"timestamp\", width: 220 },\n { title: \"Status\", dataIndex: \"statusType\", key: \"statusType\", width: 140 },\n { title: \"Description\", dataIndex: \"description\", key: \"description\" },\n];\n"],"names":["PRIORITY_HEX","palette","getPriorityHexColor","priority","parseHmsToSeconds","timeStr","parts","hh","mm","ss","hours","minutes","seconds","safeHours","safeMinutes","safeSeconds","parseThirdPartyIds","record","raw","asString","ids","s","n","seen","unique","SNL_ALERTS","SNL_RULES","SCHOOLS_ALERTS","SCHOOLS_RULES","tenantDomains","joinUrl","base","path","trimmedBase","normalizedPath","getAuthHeader","token","buildUrlWithParams","baseUrl","params","url","k","v","doRequest","init","mergedHeaders","res","text","data","message","createAlertsAdapter","config","headers","query","payload","body","isSuccess","alertId","isEmail","isSMS","createRulesAdapter","cfg","lookupsUrl","recordId","putUrl","t","e","module","this","r","i","u","a","o","c","f","h","d","l","$","y","M","m","g","D","p","S","_","w","O","b","normalizeSortBy","input","parseHms","hmsToDayjs","dayjs","firstDefined","values","mapSchoolsAlert","api","createSchoolsAlertsAdapter","toTicks","hms","x","createSchoolsRulesAdapter","makeUrl","requests","actionTypesRes","anomaliesRes","thirdPartyRes","severitiesRes","scheduleTypesRes","getArray","rawActionTypes","rawAnomalies","rawThirdParties","rawSeverities","rawScheduleTypes","actionTypes","actions","anomalies","thirdParties","tp","lookups","ApiContext","createContext","ApiProvider","tenant","override","children","useMemo","alertsBaseUrl","rulesBaseUrl","value","alertsAdapter","createSnlAlertsAdapter","rulesAdapter","createSnlRulesAdapter","jsx","useApi","context","useContext","PRIORITY_ROW_BG_CLASS","PRIORITY_BORDER_TEXT_CLASS","THIRD_PARTY_EMAIL_ID","THIRD_PARTY_SMS_ID","getNotificationButtonState","thirdPartyId","defaultTitle","isEmailButton","isSmsButton","isEmailSent","isSmsSent","isDisabled","buttonTextHelper","buttonText","tooltipTitle","computeAnomalyOptions","set","item","name","opts","computeSpaceOptions","getButtonLoadingKey","isNotificationButton","FilterSelect","onChange","options","className","dropdownWidth","Select","defaultOptions","PrioritySelect","AnomalyTypeSelect","SpaceSelect","ActionTakenSelect","DataTable","columns","loading","pageSize","rowKey","toolbar","tableProps","Table","total","AlertsTable","externalColumns","severityOptions","spaceOptions","renderActions","onAlertIdClick","onRefetch","excludeCompleted","severity","setSeverity","useState","anomalyType","setAnomalyType","space","setSpace","actionTaken","setActionTaken","search","setSearch","actionOptions","setActionOptions","loadingButtons","setLoadingButtons","rules","alerts","thirdPartyAssetMap","MailOutlined","MessageOutlined","computedAnomalyOptions","computedSpaceOptions","useEffect","mounted","hasAnyThirdPartyIds","filteredData","matchesSeverity","textSearch","matchesSearch","matchesAnomaly","matchesSpace","matchesAction","matchesArchived","anomalyOptionsToUse","spaceOptionsToUse","defaultColumns","Tag","Fragment","handleSendNotification","buttonKey","prev","response","toast","error","next","Space","id","map","isLoading","handleClick","Tooltip","Button","_ts","elapsedStr","remainingStr","elapsedSec","remainingSec","percent","jsxs","Progress","columnsToUse","Row","Col","Input","Subscribable","listener","defaultTimeoutProvider","callback","delay","timeoutId","intervalId","TimeoutManager","#provider","#providerCalled","provider","timeoutManager","systemSetTimeoutZero","isServer","noop","functionalUpdate","updater","isValidTimeout","timeUntilStale","updatedAt","staleTime","resolveStaleTime","resolveEnabled","enabled","matchQuery","filters","type","exact","fetchStatus","predicate","queryKey","stale","hashQueryKeyByOptions","partialMatchKey","isActive","matchMutation","mutation","status","mutationKey","hashKey","val","isPlainObject","result","key","hasOwn","replaceEqualDeep","depth","array","isPlainArray","aSize","bItems","bSize","copy","equalItems","aItem","bItem","shallowEqualObjects","hasObjectPrototype","ctor","prot","sleep","timeout","resolve","replaceData","prevData","addToEnd","items","max","newItems","addToStart","skipToken","ensureQueryFn","fetchOptions","shouldThrowError","throwOnError","addConsumeAwareSignal","object","getSignal","onCancelled","consumed","signal","FocusManager","#focused","#cleanup","#setup","onFocus","setup","focused","isFocused","focusManager","pendingThenable","reject","thenable","_resolve","_reject","finalize","reason","defaultScheduler","createNotifyManager","queue","transactions","notifyFn","batchNotifyFn","scheduleFn","schedule","flush","originalQueue","args","fn","notifyManager","OnlineManager","#online","onOnline","onlineListener","offlineListener","online","onlineManager","defaultRetryDelay","failureCount","canFetch","networkMode","CancelledError","createRetryer","isRetryCancelled","continueFn","isResolved","cancel","cancelOptions","cancelRetry","continueRetry","canContinue","canStart","pause","continueResolve","run","promiseOrValue","initialPromise","retry","retryDelay","shouldRetry","Removable","#gcTimeout","newGcTime","Query","#initialState","#revertState","#cache","#client","#retryer","#defaultOptions","#abortSignalConsumed","getDefaultState","defaultState","successState","newData","#dispatch","state","setStateOptions","promise","observer","abortController","addSignalProperty","fetchFn","queryFn","queryFnContext","queryFnContext2","context2","action","reducer","fetchState","newState","dataUpdatedAt","hasData","initialDataUpdatedAt","QueryObserver","client","#selectError","#currentThenable","#currentQuery","#currentQueryInitialState","#currentResult","#currentResultState","#currentResultOptions","#selectFn","#selectResult","#lastQueryWithDefinedData","#staleTimeoutId","#refetchIntervalId","#currentRefetchInterval","#trackedProps","shouldFetchOnMount","#executeFetch","#updateTimers","shouldFetchOn","#clearStaleTimeout","#clearRefetchInterval","prevOptions","prevQuery","#updateQuery","shouldFetchOptionally","#updateStaleTimeout","nextRefetchInterval","#computeRefetchInterval","#updateRefetchInterval","shouldAssignObserverCurrentProperties","onPropTracked","target","defaultedOptions","nextInterval","prevResult","prevResultState","prevResultOptions","queryInitialState","isPlaceholderData","fetchOnMount","fetchOptionally","errorUpdatedAt","skipSelect","placeholderData","selectError","isFetching","isPending","isError","nextResult","isStale","hasResultData","isErrorWithoutData","finalizeThenableIfPossible","recreateThenable","pending","prevThenable","shouldNotifyListeners","notifyOnChangeProps","notifyOnChangePropsValue","includedProps","typedKey","#notify","notifyOptions","shouldLoadOnMount","field","optimisticResult","infiniteQueryBehavior","pages","direction","oldPages","oldPageParams","currentPage","cancelled","fetchPage","param","previous","page","maxPages","addTo","pageParamFn","getPreviousPageParam","getNextPageParam","oldData","remainingPages","pageParams","lastIndex","Mutation","#observers","#mutationCache","variables","onContinue","mutationFnContext","restored","isPaused","MutationCache","#mutations","#scopes","#mutationId","scope","scopeFor","scopedMutations","index","firstPendingMutation","defaultedFilters","event","pausedMutations","MutationObserver","#currentMutation","#mutateOptions","#updateResult","onMutateResult","QueryCache","#queries","queryHash","queryInMap","queries","QueryClient","#queryCache","#queryDefaults","#mutationDefaults","#mountCount","#unsubscribeFocus","#unsubscribeOnline","cachedData","queryCache","defaultedCancelOptions","promises","defaults","queryDefault","QueryClientContext","React","useQueryClient","queryClient","QueryClientProvider","IsRestoringContext","useIsRestoring","createValue","isReset","QueryErrorResetBoundaryContext","useQueryErrorResetBoundary","ensurePreventErrorBoundaryRetry","errorResetBoundary","useClearResetErrorBoundary","getHasError","suspense","ensureSuspenseTimers","clamp","originalStaleTime","willFetch","isRestoring","shouldSuspend","fetchOptimistic","useBaseQuery","Observer","isNewCacheEntry","shouldSubscribe","onStoreChange","unsubscribe","useQuery","useMutation","mutate","mutateOptions","useUpdateAlertStatus","qClient","getTimeString","date","timeZone","getAbbrAndOffset","abbr","offset","offPart","formatTimestamp","pad","MM","DD","YYYY","HH","formatDisplayTimestamp","ts","ArchivedTable","anomalyOptions","updateStatus","archivedStatus","handleReopen","successMsg","errMsg","archivedColumns","Dropdown","MoreOutlined","filtered","AnalogClockUSA","size","time","secondAngle","minuteAngle","hourAngle","center","angle","markerLength","outerRadius","innerRadius","rad","x1","y1","x2","y2","Clock","label","updateIntervalMs","now","setNow","timeString","AnalogClock","Text","Typography","AdminSettingsSection","sortBy","showActions","onSave","onClear","saving","EscalationRowSection","props","selectedRule","setSelectedRule","ruleOptions","minsOptions","roleOptions","l1mins","setL1mins","l1role","setL1role","l2mins","setL2mins","l2role","setL2role","l3mins","setL3mins","l3role","setL3role","setActions","thirdPartyIds","setThirdPartyIds","humanLoop","setHumanLoop","onActionTypesLoaded","rulesApi","actionOptionsState","setActionOptionsState","thirdPartyOptionsState","setThirdPartyOptionsState","loadingLookups","setLoadingLookups","mapped","at","hasAnyInput","canSave","Spin","Checkbox","EscalationTableSection","entries","userRoles","onEdit","roleMap","getRoleNames","row","EditOutlined","Title","AlertAssignment","rawRules","setLoading","latestRawRules","setLatestRawRules","assignments","setAssignments","rows","idx","fresh","initialAssignments","match","handleClear","handleSave","updates","ruleId","userRoleIds","original","selectedIds","selectedRoles","refreshed","vals","SettingsPanel","severities","alertsApi","setSortBy","groupBy","setGroupBy","savedSortBy","setSavedSortBy","adminDirty","setAdminDirty","savingAdmin","setSavingAdmin","loadingSettings","setLoadingSettings","settingsError","setSettingsError","escBasis","setEscBasis","selectedSeverity","setSelectedSeverity","actionTypeIdToName","setActionTypeIdToName","thirdPartyIdToName","setThirdPartyIdToName","userRolesFromLookups","setUserRolesFromLookups","setEntries","savingEscalation","setSavingEscalation","loadingEntries","setLoadingEntries","localRules","setLocalRules","mapsReady","escalation_settings","actionNames","notifyNames","humanLoopFlag","load","srtBy","toRoleId","num","toMins","es","actionIds","refetchEntries","latest","list","roles","ur","handleAdminSave","resp","handleAdminCancel","actionTypeIds","updatedRecord","ruleOrSeverityLabel","patch","Divider","it","matchedRule","MyPreferencesPanel","_severities","_rules","onCancel","sortOptions","subscribedRuleIds","setSubscribedRuleIds","dndFrom","setDndFrom","dndTo","setDndTo","channels","setChannels","setAnomalies","loadingAnomalies","setLoadingAnomalies","isSaving","setIsSaving","pref","normalized","toggleRule","start","end","anomalyIds","TimePicker","SettingsTabs","active","setActive","completedPng","pendingPng","renderTimelineItem","icon","TrackIncident","Tabs","Card","Steps","group","rIdx","escalationTypeFlag","TrackIncidentWrapper","spaceName","alertNumber","statusHistory","notifGroups","summary","timeline","subject","computedStatus","timestampValue","isLikelyVideoUrl","lower","isVideoMedia","media","typeStr","normalizeMedia","mediaDetails","md","PRIORITY_BORDER_COLOR","AlertModal","isModalOpen","handleModalClose","selectedRow","fetchAlertLogs","alertStatusList","alertStatusLoading","initialTab","selectedAction","setSelectedAction","notes","setNotes","setSaving","mediaCarouselRef","useRef","activeTab","setActiveTab","setNotifGroups","notifying","setNotifying","isSchools","alertData","eventName","timestamp","description","assignTeam","statusType","alertDetails","shouldShowNotify","mapDeliveryStatus","rawStatus","statusLower","mapRowToRecipient","buildNotificationGroup","recipients","delivered","first","messageTitle","processNotifications","groupsMap","fetchNotifications","groups","statusOptions","handleSaveChanges","handleNotifyFamily","targetId","msg","err","Modal","LeftOutlined","RightOutlined","Carousel","useAlertStatusList","AlertConsole","setIsModalOpen","selectedAlert","setSelectedAlert","initialAlertTab","setInitialAlertTab","handleOpenAlert","handleCloseModal","activeKey","SettingsDataWrapper","setRules","setUserRoles","setRawRules","mappedRules","settingsDummy","useAlerts","ConnectedAlertConsole","refetch","AlertConsoleWidget","apiDomain","rulesDomain","useAlertsReport","exampleAlertColumns"],"mappings":"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","x_google_ignoreList":[4,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41]}