@ssgc/alert-console 2.1.0 → 2.1.2
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.
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.es.js +1422 -1318
- package/dist/index.es.js.map +1 -1
- package/package.json +1 -1
package/dist/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/utils/alerts.ts","../src/assets/skydio.png","../src/assets/aegix.png","../src/assets/eli.png","../src/assets/rapidSOS.png","../src/assets/911.png","../src/config/tenants.ts","../src/adapters/http/alerts.adapter.ts","../src/adapters/http/rules.adapter.ts","../src/adapters/http/alerts.adapter.schools.ts","../src/adapters/http/rules.adapter.schools.ts","../src/providers/ApiProvider.tsx","../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/assets/clock.png","../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","../node_modules/dayjs/dayjs.min.js","../src/utils/preferences.ts","../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/data/trackIncidentMock.ts","../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":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","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 default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEsAAAA3CAYAAABErrdQAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAmySURBVHgB7VsLUFTXGf7uLuzC8hBQiI5WMVHR1EwFUUFp1Ip5WOsYW9RWG41WjRYjqE3EJzqpNE58tGmirSHUTEZrjYnSqk1titVRY4Jix9d0FAkiCsK6u8Au+z79z13YLLrLLiv7qOSbuXPPPeeec8/97n/+/z//OVcAoazsWmJsbGSRTCYbJpEIMfgWIiwWK5qatId0OmNucvKQrwVOVO/e8WXx8d2/JckF6uqU6urquuSQyEjZdndEWa1WSCQSPC4wmUwkNRYIgmDPk8vlLu/n/Oh0+iKJQhExFW7wOBHFERoaipCQEDDGPK4jk4UOk0iljxcRnoKTxYXAU8K4Lu+aTLWADFqboegOXZosDqlU6rl0IYBw10UrfA8+HD2VrhAECFZiSkJ9PHlHi8/v6iGX2jpspnyFFFiUFIMouUQkzNdflEuXJwgYWZyorRfvY+WpOgz/jgIWUYwYQqngntaMgi+VKJ/9JGLCPHuRR+qLh9Y+YGQ16K1444t6nJ/ZDynxYQ+VZxTfxsYLSmwfnQBfw1OyAqazzDQOw0hq+kY5/16ZJG2VDWYEEwJGVqtONbnQ4jpSXjKp52bdHwgYWdxam4iQDjjRAUfAyAolqRmZICOFjv8bBETBc2GKJLfg1JS+YpofwTXgnMN337Wd8SXgG3IEimgITu9hsKss1vZw9Lit/vBcW+AbyeJvQOa4ads2aHfuhBCu+Eaj04syCpHIUlMR80EhhBDnXYiRh2BrhQoX//I1LA+UmciSdpdLcWBCL/SLDoW/4BuyOFFvb4VmQz7i9n4EIVQGZrG5AeLUIjISjStWoi4jAwnnzjltotlswXfj5NiZEQ+1oS1d0aTo9t3UYshHFahfOACKED8pvpqae8wXqE0azJp2F7ost2q1rIrkzKJSOS1//ct6NuOzO6w9RH9wnX1WpWX+AOfJd59EoUB7rTO9EZJusTzQ7bScD1qD1bXe42qLD1UL85/S8h1ZfLhZ2nsRKhNf1Hs7SB/cr1bUp9ZQkHqvEq18Uu2GCW4trX50an1Hlr4ZzGhwXS6Tt1dbJKHG5FoyueDyybg8xH9erc+cUsXiJVDn5EAS352MI4VZrA66ieL+zGimMI0gWk5nWDgwGlspKrHjshqJ5B7oOXvMRlJUiIB9NxohIekd2zMc/oJvyCKlHbk0GxJ5GBqyl1GIwUhv+WBcSuBhSpG4B8HlaVCsDOdmJmLeiRoojQyOAmSkOeXAmFD8d1Yi5ftPawncJD7xRDw6HS2OqSswgwF3u/dAz1uVkMTFPVy9JZLaHkSH3oP7OgO1tXU+1FluAmpMq+XxXOeBeL6oa5vXtDuf4Rz5UbCCdHWHiG4s+A3Ueavdku5PBCys7A6W8nJYlEoEE4I2miTI5TQB95+l8wSBI8tq00lCqAvhDg+jKZEewYTAkRWhEEM1xqtXnRYbSv6N0EGDEEwI3LohDbFub25GXXo6wsaPh822kbSRb2a+chnWZiMi16yxWUTBjyavHfjOz3IHs1l0So1lZTCWlPANUjZSTBSNiI1D+IwZot4KFrK4nxU4sjjcERFEUuVbp9QTuCMiSIhqRZffctQRdJgsa8v0w2Qyo7nZQNesTb5nbTivw4N5PI+Xs5YVHLW6AQaDyX4/P3iRmWL0anUT9BRxdazLz3yXsVKpoXvMTp/jLTpMFt9EUVp6BSNGLEJW1kY8/8IyfFV6uUP7TvV6AxYs3PJQ/vXrVXh91Tt8S6K4QXbO3Hy8QsfoMQtwuPiE+Ax+nD17GS+8uBzz523C1Jd+hR2/3SsuhPCymhoVJj73S7y66E2MHbcYV6/d7Lw9sd4sWBT/9QR7d+d+MV1bq2RPPTWZKZXqh+4jibCn6eu2nBmjL89uVdXR2eKQb6U2NCx76VvidU7OFlZY+ElLOwZWUWFbvCgpucD6989iKnWDve35v1jPcnO3iem0tFfZF2eviWmNppEWGpSsM8B58trPat0KnZAQB0VENHRaPT7++J84crSMhoAKy3NnYcqUUcjLe5/WBhkqK6rIKZdi16414jD5U9ERrFs3BzW19Vi0aAdiY8NQVVWP9NE2RzQ5+WlsLtiLCZlp6Ne3FxITe4n5q/J+h9On30NMt6iWoSrg/d0bkTpiAerrNUhLH4yCt4qo/bWIiYlCdHQnbk33RrJOnjzPklNeFr/mxImvsWk/yRfz6+pUrLnZSI65hWVmLmYmo4kNSPopu3O3Tszbv/84mz07nyTFyEaPXynWee75JezSpeti+aeHTjAaevbnHDx4nCUPn8t+MCGb2r7PGhu1bELmAqd9eiPv9+zYsdNi+tcFRWx46kw2Y0Y+zZiMrEV4HwleL4Vpm/WYNCkdSUl9wKQyHDywQcy/c0eNFSu3471df8a9e42i6R858mn06tmDQlcCpk/PRFi4BLpmHXp0j8bNG5V4sn9vDB06QIzEDE8ZjPj4aLEt6h+mTcvEhdIi5CzLwouTliKCpkgNGiMpfKO9L60r+eXl1STlsWJ69aq5KP1qH4Y+0w8vTVvVaR6IV2RZyMpERITR8MmioSXBwYP/QkODDgsXbsa2rbl4Lftn1NE+oiI3Gm2WjCtglboRJH00LYyAiaxZQs94XL9RY+sIscWNpFqjE68bG3X2502e/Cxksihqy4AxGanIXf6OvYwTUUoGppyIT0kZQv3Q2svmzfsRau/dR2fBK51lNlmoU01i+pMDm5GckoVRo4bie8P64OjRM2TStTh86Dw+3CMn6bmNxUu2YGLmKOz58FOsWP5z0dI1qTS0iq/A5B+m48fT12J61jgc+ds56HQ2qdlc8AdU31bh2bGp+Mfx88jOzhL15PZt2Zg1ewNJ6WpkfH8Yqm7X4O/HSnGi5F1RF748Jx9Jg/pi4MB+KC7+HEWFeeg0eKOzNJomdpf0UCu4RayoqCa9Y2Lr1+9mZ89eEvWXVtvM5i0oYGfO/Ifl5xey6mrbs8hHY5WV1aI15Dh5+jJbt/6Pom67f19tzz9z5gpbu66Q3bhxS7wm38pedulSOdu0aQ8rLj5lt6qt58OHT7GNG4uYSmWzmK11HgWcpw6T5agseSe4G+AKmgYdGzNuWZs8x/t52tmL8GdYH9DKjvWsHdDY7fWvI/DKdXBUlu7MsSJchrcL5rfJkzisMNjSgotnCC7rdegXkk5c0fDp3JB3NC3tmQ79fRXM8DFZtuaFIIsePAhP544SGv5qdHF4Qha3tBLygy6ii8PiYo+YI5qamg5LVKrGV/g/wOjCaO+XXw7Oj05nyhGVCf+pXKGQbY+MjJjaVf9sdQauovjI4wLF/77/Hz2ddffND91GAAAAAElFTkSuQmCC\"","export default \"data:image/png;base64,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\"","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 console.log('baseurl', config)\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 ?? \"\",\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 return doRequest<any>(url, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload ?? {}),\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 };\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 console.log('cfg', cfg)\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 console.log('url', url)\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","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\";\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\tgroupBy: payload?.groupBy ?? \"\",\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\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 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\tconst lookupsUrl = new URL(\"/api/detectionpolicy/rules/lookups\", 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\treturn doRequest<RulesLookups>(lookupsUrl, { method: \"GET\", headers });\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 console.log('config', config)\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 { 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 skydio from \"../../assets/skydio.png\";\nimport aegix from \"../../assets/aegix.png\";\nimport eli from \"../../assets/eli.png\";\nimport rapidSOS from \"../../assets/rapidSOS.png\";\nimport nineOneOne from \"../../assets/911.png\";\nimport type { OptionItem } from \"./Filters/FilterSelect\";\nimport { MailOutlined, MessageOutlined } from \"@ant-design/icons\";\nimport { useApi } from \"../../providers/ApiProvider\";\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}\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\";\n\nfunction AlertsTable({ data, loading = false, pageSize = 10, columns: externalColumns, severityOptions, spaceOptions, renderActions, onAlertIdClick }: AlertsTableProps) {\n const PRIORITY_ROW_BG_CLASS: Record<Alert[\"priority\"], string> = {\n Critical:\"#FFE2E2\",\n High:\"#FF95004D\",\n Medium:\"#FEF9C2\",\n Low:\"#E0EDFF\",\n };\n const PRIORITY_BORDER_TEXT_CLASS: Record<Alert[\"priority\"], string> = {\n Critical:\"#FF3B30\",\n High:\"#FFB86A\",\n Medium:\"#FFCC00\",\n Low:\"#007AFF\",\n };\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 { rules } = useApi();\n\n // Map thirdPartyId -> asset/icon\n const thirdPartyAssetMap: Record<\n number,\n { title: string; kind: \"img\" | \"icon\"; src?: string; icon?: ReactNode; alt?: string }\n > = {\n 1: { title: \"911 Inform\", kind: \"img\", src: nineOneOne, alt: \"911 Inform\" },\n 2: { title: \"SKYDIO\", kind: \"img\", src: skydio, alt: \"Skydio\" },\n 3: { title: \"RapidSOS\", kind: \"img\", src: rapidSOS, alt: \"RapidSOS\" },\n // Treat EXGIS as AEGIX based on available asset\n 4: { title: \"AEGIX\", kind: \"img\", src: aegix, alt: \"Aegix\" },\n 5: { title: \"Eli Technologies\", kind: \"img\", src: eli, alt: \"Eli Technologies\" },\n 6: { title: \"Email\", kind: \"icon\", icon: <MailOutlined /> },\n 7: { title: \"SMS\", kind: \"icon\", icon: <MessageOutlined /> },\n };\n\n \n\n const computedAnomalyOptions = useMemo(() => {\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 }, [data]);\n\n const computedSpaceOptions = useMemo(() => {\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 Spaces\", value: \"All\" }, ...opts];\n }, [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 {\n // keep default \"All\" option on error\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 haystack = `${item.id} ${item.description} ${item.statusType}`.toLowerCase();\n const matchesSearch = !search || haystack.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 return (\n matchesSeverity &&\n matchesSearch &&\n matchesAnomaly &&\n matchesSpace &&\n matchesAction\n );\n });\n }, [data, severity, search, anomalyType, space, actionTaken, hasAnyThirdPartyIds]);\n\n const anomalyOptionsToUse = computedAnomalyOptions;\n const spaceOptionsToUse = spaceOptions && spaceOptions.length ? spaceOptions : computedSpaceOptions;\n\nconst 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: \"Alert Timestamp\",\n dataIndex: \"timestamp\",\n key: \"timestamp\",\n width: 220,\n render: (_ts: string, record: Alert) => {\n const elapsedStr = record.timeElapsed ? record.timeElapsed : undefined;\n const remainingStr = record.timeRemaining ? record.timeRemaining : undefined;\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).clientId}\n </a>\n <div className=\"text-black/65\">{text}</div>\n </div>\n ),\n },\n {\n title: \"Actions\",\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 (or keep old static set if desired)\n if (!ids.length) return null;\n return (\n <Space size=\"middle\">\n {ids.map((id) => {\n const map = thirdPartyAssetMap[id];\n if (!map) return null;\n const commonClassName = `${PRIORITY_ROW_BG_CLASS[record.priority]} border ${PRIORITY_BORDER_TEXT_CLASS[record.priority]}`;\n return (\n <Tooltip key={id} title={map.title}>\n <Button\n size=\"large\"\n icon={\n map.kind === \"img\" && map.src ? (\n <img src={map.src} alt={map.alt || map.title} />\n ) : (\n map.icon\n )\n }\n className={commonClassName}\n />\n </Tooltip>\n );\n })}\n </Space>\n );\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\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 } from \"antd\";\nimport { MoreOutlined } from \"@ant-design/icons\";\nimport { useUpdateAlertStatus } from \"../../hooks/useUpdateAlertStatus\";\nimport { formatTimestamp } from \"../../utils/dateTimeUtils\";\nimport { toast } from \"react-toastify\";\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 },\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).clientId}\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 />\n );\n}\n\n\n","export default \"data:image/png;base64,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\"","import { useEffect, useMemo, useState } from \"react\";\nimport { getAbbrAndOffset, getTimeString } from \"../../utils/dateTimeUtils\";\nimport clock_icon from \"../../assets/clock.png\";\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 <div className=\"flex items-center justify-center w-20 h-20\">\n <img src={clock_icon} alt=\"clock\" className=\"\" />\n </div>\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}\n\nexport default function AdminSettingsSection({ sortBy, groupBy, onChange, showActions, onSave, onClear }: AdminSettingsSectionProps) {\n return (\n <Row gutter={[16, 16]} align=\"middle\">\n <Col xs={24} md={4}>\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 />\n </Space>\n </Col>\n <Col xs={24} md={4}>\n <Space className=\"w-full items-center\" direction=\"horizontal\" size={12}>\n <Text className=\"text-gray-600\">Group alerts by:</Text>\n <Select\n value={groupBy}\n onChange={(v: GroupBy) => onChange({ groupBy: v })}\n options={[\n { label: \"By severity\", value: \"By severity\" },\n { label: \"By Rules\", value: \"By Rules\" },\n ]}\n className=\"w-full\"\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}>Clear</Button>\n <Button type=\"primary\" onClick={onSave}>Save</Button>\n </Space>\n ) : null}\n </Col>\n </Row>\n );\n}\n\n\n","import { Row, Col, Select, Typography, Space, Button, Checkbox, Spin } 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; l1roles: number[]; setL1roles: (v: number[]) => void;\n l2mins?: number; setL2mins: (v: number) => void; l2roles: number[]; setL2roles: (v: number[]) => void;\n l3mins?: number; setL3mins: (v: number) => void; l3roles: number[]; setL3roles: (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, l1roles, setL1roles,\n l2mins, setL2mins, l2roles, setL2roles,\n l3mins, setL3mins, l3roles, setL3roles,\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 return (\n <Spin spinning={!!saving || loadingLookups}>\n <Row gutter={[16, 16]} align=\"bottom\" className=\"mb-2\">\n <Col xs={24} lg={5}>\n <Space className=\"w-full\" direction=\"vertical\" size={4}>\n {/* <Text className=\"text-gray-600\">Rules</Text> */}\n <Select placeholder=\"Rules\" value={selectedRule} onChange={setSelectedRule} options={ruleOptions} className=\"w-full\" />\n </Space>\n </Col>\n\n {/* Level 1 */}\n <Col xs={24} lg={4}>\n <Space direction=\"vertical\" size={4} className=\"w-full\">\n <Text className=\"text-gray-700 font-medium\">Level 1</Text>\n <Space className=\"w-full\">\n <Select placeholder=\"Mins\" value={l1mins} onChange={setL1mins as any} options={minsOptions} />\n <Select mode=\"multiple\" placeholder=\"Escalate to\" className=\"min-w-[120px] w-full\" value={l1roles} onChange={setL1roles} options={roleOptions} />\n </Space>\n </Space>\n </Col>\n\n {/* Level 2 */}\n <Col xs={24} lg={4}>\n <Space direction=\"vertical\" size={4} className=\"w-full\">\n <Text className=\"text-gray-700 font-medium\">Level 2</Text>\n <Space className=\"w-full\">\n <Select placeholder=\"Mins\" value={l2mins} onChange={setL2mins as any} options={minsOptions} />\n <Select mode=\"multiple\" placeholder=\"Escalate to\" className=\"min-w-[120px] w-full\" value={l2roles} onChange={setL2roles} options={roleOptions} />\n </Space>\n </Space>\n </Col>\n\n {/* Level 3 */}\n <Col xs={24} lg={4}>\n <Space direction=\"vertical\" size={4} className=\"w-full\">\n <Text className=\"text-gray-700 font-medium\">Level 3</Text>\n <Space className=\"w-full\">\n <Select placeholder=\"Mins\" value={l3mins} onChange={setL3mins as any} options={minsOptions} />\n <Select mode=\"multiple\" placeholder=\"Escalate to\" className=\"min-w-[120px] w-full\" value={l3roles} onChange={setL3roles} options={roleOptions} />\n </Space>\n </Space>\n </Col>\n {/* Pick Actions and buttons */}\n <Col xs={24} lg={5}>\n <Space direction=\"vertical\" size={4} className=\"w-full\">\n <Text className=\"text-gray-700 font-medium\">Pick Actions</Text>\n <Space className=\"w-full\">\n <Select mode=\"multiple\" placeholder=\"Select response actions\" className=\"min-w-[260px] w-full\" value={actions} onChange={setActions} options={actionOptionsState} />\n </Space>\n </Space>\n </Col>\n </Row>\n <Row gutter={[16, 16]} align=\"bottom\" className=\"mt-2\">\n {/* Third Party App */}\n <Col xs={24} lg={16}>\n <Space direction=\"vertical\" size={4} className=\"w-full\">\n <Text className=\"text-gray-700 font-medium\">Third Party App</Text>\n <Space className=\"w-full\">\n <Select\n mode=\"multiple\"\n placeholder=\"Third Party app\"\n className=\"min-w-[180px] w-full\"\n value={thirdPartyIds}\n onChange={setThirdPartyIds}\n options={thirdPartyOptionsState}\n />\n <Checkbox checked={humanLoop} onChange={(e) => setHumanLoop(e.target.checked)}>Human-In-Loop</Checkbox>\n <Button onClick={onClear}>Clear</Button>\n <Button type=\"primary\" onClick={onSave} loading={!!saving}>Save</Button>\n </Space>\n </Space>\n </Col>\n\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 ? `No Action taken in (${row.l1.minutes} Mins)` : \"-\"}\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 ? `No Action taken in (${row.l2.minutes} Mins)` : \"-\"}\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 ? `No Action taken in (${row.l3.minutes} Mins)` : \"-\"}\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 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 { 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 [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 const initialAssignments = useMemo<Record<string, number[]>>(() => {\n if (!Array.isArray(rawRules) || !rawRules.length) return {};\n const map: Record<string, number[]> = {};\n for (const row of rows) {\n const match: any = (rawRules 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 }, [rawRules, rows]);\n\n const handleClear = () => {\n setAssignments({});\n };\n\n const handleSave = async () => {\n try {\n if (!rawRules || !Array.isArray(rawRules) || 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 = rawRules.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 payload = {\n ...original,\n ruleId, // ensure ruleId matches the selected rule\n userRoleIds: Array.isArray(userRoleIds) ? userRoleIds : [],\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 // handleClear();\n } catch (e) {\n const message = e instanceof Error ? e.message : \"Failed to save alert assignment\";\n toast.error(message);\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: \"Assign Team\",\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 type=\"primary\" onClick={handleSave} loading={loading} disabled={loading}>Save</Button>\n </Space>\n {/* </Spin> */}\n </div>\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 { 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 { normalizeGroupBy, 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 [savedGroupBy, setSavedGroupBy] = useState<GroupBy>(\"By severity\");\n const [adminDirty, setAdminDirty] = 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 console.log('usr', userRoles)\n\n const [l1mins, setL1mins] = useState<number | undefined>();\n const [l1roles, setL1roles] = useState<number[]>([]);\n const [l2mins, setL2mins] = useState<number | undefined>();\n const [l2roles, setL2roles] = useState<number[]>([]);\n const [l3mins, setL3mins] = useState<number | undefined>();\n const [l3roles, setL3roles] = useState<number[]>([]);\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\n // Initialize table rows from fetched rules' escalationSettings\n useEffect(() => {\n if (!rawRules || !rawRules.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 = rawRules.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 }, [rawRules, 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 const grpBy = normalizeGroupBy(data.groupBy);\n setSortBy(srtBy);\n setGroupBy(grpBy);\n setSavedSortBy(srtBy);\n setSavedGroupBy(grpBy);\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 const found: any = (rawRules || []).find((r: any) =>\n r?.ruleId === selectedRule || r?.ruleName === selectedRule || r?.RuleId === selectedRule\n );\n const es = found?.escalationSettings;\n if (es && typeof es === \"object\") {\n setL1mins(es.level1PostAssistTime ?? undefined);\n setL1roles(es.level1UserRoleId ? [es.level1UserRoleId] : []);\n setL2mins(es.level2PostAssistTime ?? undefined);\n setL2roles(es.level2UserRoleId ? [es.level2UserRoleId] : []);\n setL3mins(es.level3PostAssistTime ?? undefined);\n setL3roles(es.level3UserRoleId ? [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, rawRules]);\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 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 try {\n const resp = await alertsApi.setAdminSettings({ sortBy, groupBy });\n console.log('resp', resp)\n if ((resp as any)?.responseStatus && (resp as any)?.data) {\n toast.success((resp as any).data);\n }\n setSavedSortBy(sortBy);\n setSavedGroupBy(groupBy);\n setAdminDirty(false);\n } catch (e) {\n console.error(\"Error saving admin settings\", e);\n }\n };\n\n const handleAdminCancel = () => {\n setSortBy(savedSortBy);\n setGroupBy(savedGroupBy);\n setAdminDirty(false);\n };\n\n\n const handleSave = async () => {\n setSavingEscalation(true);\n const escalationPayload = {\n ruleId: selectedRule,\n levels: [\n { minutes: l1mins, roles: l1roles },\n { minutes: l2mins, roles: l2roles },\n { minutes: l3mins, roles: l3roles },\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 = (rawRules || []).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: Array.isArray(l1roles) && l1roles.length ? l1roles[0] : 0,\n level1PostAssistTime: l1mins ?? 0,\n level2UserRoleId: Array.isArray(l2roles) && l2roles.length ? l2roles[0] : 0,\n level2PostAssistTime: l2mins ?? 0,\n level3UserRoleId: Array.isArray(l3roles) && l3roles.length ? l3roles[0] : 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); setL1roles([]);\n setL2mins(undefined); setL2roles([]);\n setL3mins(undefined); setL3roles([]);\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 // If we didn't return already (e.g., when selectedRule missing), do a local append\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: l1roles },\n l2: { minutes: l2mins, roles: l2roles },\n l3: { minutes: l3mins, roles: l3roles },\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); setL1roles([]);\n setL2mins(undefined); setL2roles([]);\n setL3mins(undefined); setL3roles([]);\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 />\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 l1roles={l1roles}\n setL1roles={setL1roles}\n l2mins={l2mins}\n setL2mins={setL2mins as any}\n l2roles={l2roles}\n setL2roles={setL2roles}\n l3mins={l3mins}\n setL3mins={setL3mins as any}\n l3roles={l3roles}\n setL3roles={setL3roles}\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, message } 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\";\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; walkie: boolean }>({ inApp: false, sms: false, email: false, walkie: 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 walkie: !!pref.walkieIntegration,\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 walkieIntegration: !!channels.walkie,\n sortBy,\n });\n if (resp?.responseStatus) {\n message.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 <Col>\n <Checkbox checked={channels.walkie} onChange={(e) => setChannels({ ...channels, walkie: e.target.checked })}>Walkie system integration</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 }: 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\" 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.alertId}</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\" 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 type { TrackIncidentData } from \"../types/trackIncident.types\";\n\nexport const defaultTrackIncidentMock: TrackIncidentData = {\n summary: {\n alertId: \"ALT - 002 #\",\n incidentId: \"#000000\",\n severity: \"High\",\n location: \"Block B, Classroom 204\",\n },\n timeline: [\n {\n status: \"Completed\",\n title: \"Emergency Services Dispatched\",\n description: \"AMB-412 and MED-7 confirmed dispatch and began response.\",\n timestamp: \"27/06/2025, 16:00:00\",\n },\n {\n status: \"Completed\",\n title: \"Call Connected to PSAP\",\n description: \"Call routed to Springfield Emergency Communications Center.\",\n timestamp: \"27/06/2025, 16:00:00\",\n },\n {\n status: \"Completed\",\n title: \"911 Call Initiated\",\n description: \"Emergency call placed from school administration office.\",\n timestamp: \"27/06/2025, 16:00:00\",\n },\n {\n status: \"Inprogress\",\n title: \"First Unit On Scene\",\n description: \"Police Unit 24 arrived and confirmed situation.\",\n timestamp: \"29/06/2025, 18:00:00\",\n },\n ],\n notifications: [\n {\n channelLabel: \"SMS Notification\",\n sentAt: \"Sent at 11/02/2025 03:14:00 PM\",\n messageTitle: \"Critical Alert: Unauthorized Access.\",\n messageBody: \"Incident #INC-2025-002. Immediate action required\",\n total: 4,\n delivered: 3,\n recipients: [\n { name: \"John Smith\", role: \"Security Chief\", phone: \"+1 (555) 123-4567\", status: \"Delivered\" },\n { name: \"Jane Doe\", role: \"Principal\", phone: \"+1 (555) 123-4567\", status: \"Delivered\" },\n { name: \"Mike Johnson\", role: \"Safety Officer\", phone: \"+1 (555) 123-4567\", status: \"Delivered\" },\n { name: \"Sarah Williams\", role: \"Safety Officer\", phone: \"+1 (555) 123-4567\", status: \"Failed\" },\n ],\n },\n {\n channelLabel: \"Email Notification\",\n sentAt: \"Sent at 11/02/2025 03:14:00 PM\",\n messageTitle: \"Critical Alert: Unauthorized Access.\",\n messageBody: \"Incident #INC-2025-002. Immediate action required\",\n total: 4,\n delivered: 2,\n recipients: [\n { name: \"John Smith\", role: \"Security Chief\", phone: \"+1 (555) 123-4567\", status: \"Delivered\" },\n { name: \"Jane Doe\", role: \"Principal\", phone: \"+1 (555) 123-4567\", status: \"Delivered\" },\n { name: \"Mike Johnson\", role: \"Safety Officer\", phone: \"+1 (555) 123-4567\", status: \"Failed\" },\n { name: \"Sarah Williams\", role: \"Safety Officer\", phone: \"+1 (555) 123-4567\", status: \"Failed\" },\n ],\n },\n ],\n rapidSOS: [\n {\n event: \"Caller connected to PSAP\",\n timestamp: \"27/06/2025, 16:00:05\",\n details: \"RapidSOS session created\",\n },\n ],\n};\n\n\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 TrackIncident from './TrackIncident';\nimport type { TrackIncidentData, TimelineState, DeliveryStatus } from '../../types/trackIncident.types';\nimport { defaultTrackIncidentMock } from '../../data/trackIncidentMock';\nimport { useUpdateAlertStatus } from '../../hooks/useUpdateAlertStatus';\nimport { formatDisplayTimestamp } from '../../utils/dateTimeUtils';\nimport { isVideoMedia, normalizeMedia } from '../../utils/media';\nimport { useApi } from '../../providers/ApiProvider';\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 updateStatus = useUpdateAlertStatus();\n const { alerts } = useApi();\n\n const alertData: AlertData = selectedRow?.originalData || {};\n const {\n eventName,\n alertId,\n timestamp,\n description,\n spaceName,\n assignTeam,\n priority,\n type,\n statusType,\n id,\n alertDetails,\n statusHistory,\n mediaDetails,\n } = alertData;\n\n //fetch notifications when selected alert changes or Track tab becomes active\n useEffect(() => {\n const alertId = id;\n if (activeTab !== 'track' || !alertId) return;\n let cancelled = false;\n (async () => {\n try {\n const raw = await alerts.getAlertNotifications(alertId as any);\n if (cancelled) return;\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 const groups = Array.from(groupsMap.entries()).map(([type, rows]) => {\n const recipients = rows.map((r: any) => {\n const statusLower = String(r?.messageStatus || '').toLowerCase();\n const status: DeliveryStatus =\n statusLower === 'delivered' ? 'Delivered' :\n statusLower === 'failed' ? 'Failed' : 'Queued';\n return {\n name: r?.receipientName || r?.recipientName || '-',\n role: r?.receipientRoleName || '',\n phone: r?.receipentPhoneNumber || r?.recipientPhoneNumber || r?.receipientEmail || r?.recipientEmail || '',\n status,\n };\n });\n const delivered = recipients.filter((r: any) => 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 setNotifGroups(groups);\n } catch {\n setNotifGroups(undefined);\n }\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\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 !== undefined ? String(selectedAction) : undefined,\n notes: notes.trim(),\n modifiedBy: 0\n };\n\n const response = await updateStatus.mutateAsync(payload as any);\n if ((response as any)?.responseStatus) {\n const successMsg = (response as any)?.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 as any)?.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 return (\n <Modal\n // title=\"Alert Detail\"\n open={isModalOpen}\n onCancel={handleModalClose}\n width={1000}\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 || \"\"} {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 className=\"font-sm text-gray-500 rounded-[8px] py-2 px-3\">\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 className=\"font-sm text-gray-500 rounded-[8px] py-2 px-3\">\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 className=\"text-xs text-gray-500 font-medium\">Action Taken (Comments)</label>\n {selectedAction ? (\n <label className=\"text-xs text-gray-500 font-medium\" htmlFor=\"action-details-input\">\n Enter {statusOptions.find(status => status.value === selectedAction)?.label}\n </label>\n ) : null}\n\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 <div className='border border-[#DFE4EA] rounded-md px-4 py-2 flex flex-row justify-between items-center mt-4 mb-8'>\n <label className='text-xs font-medium'>Alert notification will be sent to all Family Members.</label>\n <button className='bg-[#000000] text-white rounded-md px-4 py-2 text-xs'>Notify Family</button>\n </div>\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 const summary = {\n alertId: alertId ?? id ?? defaultTrackIncidentMock.summary.alertId,\n incidentId: defaultTrackIncidentMock.summary.incidentId,\n severity: priority || defaultTrackIncidentMock.summary.severity,\n location: spaceName || defaultTrackIncidentMock.summary.location,\n };\n const timeline = (statusHistory && statusHistory.length)\n ? statusHistory.map((subject: any) => {\n const computedStatus: TimelineState =\n ((subject?.status || subject?.eventStatus || '').toLowerCase() === 'completed')\n ? 'Completed'\n : 'Inprogress';\n return ({\n status: computedStatus,\n title: subject?.status || subject?.eventStatus || 'Status Update',\n description: subject?.description || subject?.actionNotes || '',\n timestamp: subject?.createdDate ? `${formatDisplayTimestamp(subject?.createdDate)}` : (subject?.timestamp ? `${formatDisplayTimestamp(subject?.timestamp)}` : ''),\n });\n })\n : defaultTrackIncidentMock.timeline;\n const data: TrackIncidentData = {\n summary,\n timeline,\n notifications: notifGroups ?? [],\n rapidSOS: defaultTrackIncidentMock.rapidSOS,\n };\n return <TrackIncident data={data} />;\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 }: 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 useEffect(() => {}, []);\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\">\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: 24 }}\n items={[\n {\n key: \"active\",\n label: \"Active\",\n children: (\n <AlertsTable data={alerts} loading={loading} pageSize={10} columns={columns || []} onAlertIdClick={handleOpenAlert} />\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 } = useAlerts();\n return <AlertConsole alerts={alerts} loading={loading} columns={props.columns} />;\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":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","owner","debugStack","debugTask","refProp","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","isValidElement","object","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","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","skydio","aegix","eli","rapidSOS","nineOneOne","SNL_ALERTS","SNL_RULES","SCHOOLS_ALERTS","SCHOOLS_RULES","tenantDomains","joinUrl","base","path","trimmedBase","normalizedPath","getAuthHeader","token","buildUrlWithParams","baseUrl","params","url","v","doRequest","init","mergedHeaders","res","text","data","message","createAlertsAdapter","headers","query","payload","body","alertId","createRulesAdapter","cfg","lookupsUrl","recordId","putUrl","firstDefined","values","mapSchoolsAlert","api","createSchoolsAlertsAdapter","createSchoolsRulesAdapter","ApiContext","createContext","ApiProvider","tenant","override","useMemo","alertsBaseUrl","rulesBaseUrl","alertsAdapter","createSnlAlertsAdapter","rulesAdapter","createSnlRulesAdapter","jsx","useApi","context","useContext","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","PRIORITY_ROW_BG_CLASS","PRIORITY_BORDER_TEXT_CLASS","severity","setSeverity","useState","anomalyType","setAnomalyType","space","setSpace","actionTaken","setActionTaken","search","setSearch","actionOptions","setActionOptions","rules","thirdPartyAssetMap","MailOutlined","MessageOutlined","computedAnomalyOptions","set","item","opts","computedSpaceOptions","useEffect","mounted","lookups","t","hasAnyThirdPartyIds","d","filteredData","matchesSeverity","haystack","matchesSearch","matchesAnomaly","matchesSpace","matchesAction","anomalyOptionsToUse","spaceOptionsToUse","defaultColumns","Tag","_ts","elapsedStr","remainingStr","elapsedSec","remainingSec","percent","jsxs","Progress","e","_","Fragment","Space","id","map","commonClassName","Tooltip","Button","columnsToUse","Row","Col","Input","Subscribable","listener","defaultTimeoutProvider","callback","delay","timeoutId","intervalId","TimeoutManager","#provider","#providerCalled","provider","timeoutManager","systemSetTimeoutZero","isServer","noop","functionalUpdate","updater","input","isValidTimeout","timeUntilStale","updatedAt","staleTime","resolveStaleTime","resolveEnabled","enabled","matchQuery","filters","exact","fetchStatus","predicate","queryKey","stale","hashQueryKeyByOptions","partialMatchKey","isActive","matchMutation","mutation","status","mutationKey","hashKey","val","isPlainObject","result","a","b","hasOwn","replaceEqualDeep","array","isPlainArray","aSize","bItems","bSize","copy","equalItems","i","aItem","bItem","shallowEqualObjects","o","hasObjectPrototype","ctor","prot","sleep","timeout","resolve","replaceData","prevData","error","addToEnd","items","max","newItems","addToStart","skipToken","ensureQueryFn","fetchOptions","shouldThrowError","throwOnError","addConsumeAwareSignal","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","x","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","isLoading","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","m","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","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","alerts","qClient","getTimeString","date","timeZone","getAbbrAndOffset","abbr","p","offset","offPart","formatTimestamp","pad","MM","DD","YYYY","HH","formatDisplayTimestamp","ts","ArchivedTable","completedStatus","anomalyOptions","updateStatus","handleReopen","response","successMsg","toast","errMsg","archivedColumns","Dropdown","MoreOutlined","filtered","clock_icon","Clock","label","updateIntervalMs","now","setNow","timeString","Text","Typography","AdminSettingsSection","sortBy","groupBy","showActions","onSave","onClear","EscalationRowSection","selectedRule","setSelectedRule","ruleOptions","minsOptions","roleOptions","l1mins","setL1mins","l1roles","setL1roles","l2mins","setL2mins","l2roles","setL2roles","l3mins","setL3mins","l3roles","setL3roles","actions","setActions","thirdPartyIds","setThirdPartyIds","humanLoop","setHumanLoop","saving","onActionTypesLoaded","rulesApi","actionOptionsState","setActionOptionsState","thirdPartyOptionsState","setThirdPartyOptionsState","loadingLookups","setLoadingLookups","mapped","at","tp","Spin","Checkbox","EscalationTableSection","entries","userRoles","onEdit","roleMap","r","getRoleNames","row","EditOutlined","Title","AlertAssignment","rawRules","setLoading","assignments","setAssignments","rows","idx","initialAssignments","match","handleClear","handleSave","updates","ruleId","userRoleIds","original","vals","prev","module","this","u","c","f","h","l","$","y","M","g","D","S","w","O","normalizeSortBy","normalizeGroupBy","parseHms","hmsToDayjs","dayjs","SettingsPanel","severities","alertsApi","setSortBy","setGroupBy","savedSortBy","setSavedSortBy","savedGroupBy","setSavedGroupBy","adminDirty","setAdminDirty","loadingSettings","setLoadingSettings","settingsError","setSettingsError","escBasis","setEscBasis","selectedSeverity","setSelectedSeverity","actionTypeIdToName","setActionTypeIdToName","thirdPartyIdToName","setThirdPartyIdToName","userRolesFromLookups","setUserRolesFromLookups","setEntries","savingEscalation","setSavingEscalation","loadingEntries","setLoadingEntries","mapsReady","next","escalation_settings","l1role","l2role","l3role","actionNames","notifyNames","humanLoopFlag","load","srtBy","grpBy","es","actionIds","refetchEntries","latest","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","anomalies","setAnomalies","loadingAnomalies","setLoadingAnomalies","isSaving","setIsSaving","pref","normalized","list","toggleRule","start","end","anomalyIds","TimePicker","SettingsTabs","active","setActive","completedPng","pendingPng","renderTimelineItem","icon","TrackIncident","Tabs","Card","Steps","group","rIdx","defaultTrackIncidentMock","isLikelyVideoUrl","lower","isVideoMedia","media","typeStr","normalizeMedia","mediaDetails","md","AlertModal","isModalOpen","handleModalClose","selectedRow","fetchAlertLogs","alertStatusList","alertStatusLoading","initialTab","selectedAction","setSelectedAction","notes","setNotes","setSaving","mediaCarouselRef","useRef","activeTab","setActiveTab","notifGroups","setNotifGroups","alertData","eventName","timestamp","description","spaceName","assignTeam","statusType","alertDetails","statusHistory","groupsMap","groups","recipients","statusLower","delivered","first","messageTitle","statusOptions","handleSaveChanges","Modal","LeftOutlined","RightOutlined","Carousel","summary","timeline","subject","useAlertStatusList","AlertConsole","setIsModalOpen","selectedAlert","setSelectedAlert","initialAlertTab","setInitialAlertTab","handleOpenAlert","handleCloseModal","SettingsDataWrapper","setRules","setUserRoles","setRawRules","mappedRules","settingsDummy","useAlerts","ConnectedAlertConsole","AlertConsoleWidget","apiDomain","rulesDomain","useAlertsReport","exampleAlertColumns"],"mappings":"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","x_google_ignoreList":[0,1,2,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,56]}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../node_modules/react/cjs/react-jsx-runtime.production.js","../node_modules/react/cjs/react-jsx-runtime.development.js","../node_modules/react/jsx-runtime.js","../src/utils/alerts.ts","../src/assets/skydio.png","../src/assets/aegix.png","../src/assets/eli.png","../src/assets/rapidSOS.png","../src/assets/911.png","../src/config/tenants.ts","../src/adapters/http/alerts.adapter.ts","../src/adapters/http/rules.adapter.ts","../src/adapters/http/alerts.adapter.schools.ts","../src/adapters/http/rules.adapter.schools.ts","../src/providers/ApiProvider.tsx","../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/assets/clock.png","../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","../node_modules/dayjs/dayjs.min.js","../src/utils/preferences.ts","../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/data/trackIncidentMock.ts","../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":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n isValidElement(node)\n ? node._store && (node._store.validated = 1)\n : \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_LAZY_TYPE &&\n (\"fulfilled\" === node._payload.status\n ? isValidElement(node._payload.value) &&\n node._payload.value._store &&\n (node._payload.value._store.validated = 1)\n : node._store && (node._store.validated = 1));\n }\n function isValidElement(object) {\n return (\n \"object\" === typeof object &&\n null !== object &&\n object.$$typeof === REACT_ELEMENT_TYPE\n );\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","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 default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","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 console.log('baseurl', config)\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 ?? \"\",\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 };\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 console.log('cfg', cfg)\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 console.log('url', url)\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","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\";\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\tgroupBy: payload?.groupBy ?? \"\",\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 raw = await 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\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\tconst lookupsUrl = new URL(\"/api/detectionpolicy/rules/lookups\", 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\treturn doRequest<RulesLookups>(lookupsUrl, { method: \"GET\", headers });\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 console.log('config', config)\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 { 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 skydio from \"../../assets/skydio.png\";\nimport aegix from \"../../assets/aegix.png\";\nimport eli from \"../../assets/eli.png\";\nimport rapidSOS from \"../../assets/rapidSOS.png\";\nimport nineOneOne from \"../../assets/911.png\";\nimport type { OptionItem } from \"./Filters/FilterSelect\";\nimport { MailOutlined, MessageOutlined } from \"@ant-design/icons\";\nimport { useApi } from \"../../providers/ApiProvider\";\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}\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\";\n\nfunction AlertsTable({ data, loading = false, pageSize = 10, columns: externalColumns, severityOptions, spaceOptions, renderActions, onAlertIdClick }: AlertsTableProps) {\n const PRIORITY_ROW_BG_CLASS: Record<Alert[\"priority\"], string> = {\n Critical:\"#FFE2E2\",\n High:\"#FF95004D\",\n Medium:\"#FEF9C2\",\n Low:\"#E0EDFF\",\n };\n const PRIORITY_BORDER_TEXT_CLASS: Record<Alert[\"priority\"], string> = {\n Critical:\"#FF3B30\",\n High:\"#FFB86A\",\n Medium:\"#FFCC00\",\n Low:\"#007AFF\",\n };\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 { rules } = useApi();\n\n // Map thirdPartyId -> asset/icon\n const thirdPartyAssetMap: Record<\n number,\n { title: string; kind: \"img\" | \"icon\"; src?: string; icon?: ReactNode; alt?: string }\n > = {\n 1: { title: \"911 Inform\", kind: \"img\", src: nineOneOne, alt: \"911 Inform\" },\n 2: { title: \"SKYDIO\", kind: \"img\", src: skydio, alt: \"Skydio\" },\n 3: { title: \"RapidSOS\", kind: \"img\", src: rapidSOS, alt: \"RapidSOS\" },\n // Treat EXGIS as AEGIX based on available asset\n 4: { title: \"AEGIX\", kind: \"img\", src: aegix, alt: \"Aegix\" },\n 5: { title: \"Eli Technologies\", kind: \"img\", src: eli, alt: \"Eli Technologies\" },\n 6: { title: \"Email\", kind: \"icon\", icon: <MailOutlined /> },\n 7: { title: \"SMS\", kind: \"icon\", icon: <MessageOutlined /> },\n };\n\n \n\n const computedAnomalyOptions = useMemo(() => {\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 }, [data]);\n\n const computedSpaceOptions = useMemo(() => {\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 }, [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 {\n // keep default \"All\" option on error\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 haystack = `${item.id} ${item.description} ${item.statusType}`.toLowerCase();\n const matchesSearch = !search || haystack.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 return (\n matchesSeverity &&\n matchesSearch &&\n matchesAnomaly &&\n matchesSpace &&\n matchesAction\n );\n });\n }, [data, severity, search, anomalyType, space, actionTaken, hasAnyThirdPartyIds]);\n\n const anomalyOptionsToUse = computedAnomalyOptions;\n const spaceOptionsToUse = spaceOptions && spaceOptions.length ? spaceOptions : computedSpaceOptions;\n\nconst 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: \"Alert Timestamp\",\n dataIndex: \"timestamp\",\n key: \"timestamp\",\n width: 220,\n render: (_ts: string, record: Alert) => {\n const elapsedStr = record.timeElapsed ? record.timeElapsed : undefined;\n const remainingStr = record.timeRemaining ? record.timeRemaining : undefined;\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).clientId}\n </a>\n <div className=\"text-black/65\">{text}</div>\n </div>\n ),\n },\n {\n title: \"Actions\",\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 (or keep old static set if desired)\n if (!ids.length) return null;\n return (\n <Space size=\"middle\">\n {ids.map((id) => {\n const map = thirdPartyAssetMap[id];\n if (!map) return null;\n const commonClassName = `${PRIORITY_ROW_BG_CLASS[record.priority]} border ${PRIORITY_BORDER_TEXT_CLASS[record.priority]}`;\n return (\n <Tooltip key={id} title={map.title}>\n <Button\n size=\"large\"\n icon={\n map.kind === \"img\" && map.src ? (\n <img src={map.src} alt={map.alt || map.title} />\n ) : (\n map.icon\n )\n }\n className={commonClassName}\n />\n </Tooltip>\n );\n })}\n </Space>\n );\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\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).clientId}\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 />\n );\n}\n\n\n","export default \"data:image/png;base64,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\"","import { useEffect, useMemo, useState } from \"react\";\nimport { getAbbrAndOffset, getTimeString } from \"../../utils/dateTimeUtils\";\nimport clock_icon from \"../../assets/clock.png\";\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 <div className=\"flex items-center justify-center w-20 h-20\">\n <img src={clock_icon} alt=\"clock\" className=\"\" />\n </div>\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}\n\nexport default function AdminSettingsSection({ sortBy, groupBy, onChange, showActions, onSave, onClear }: AdminSettingsSectionProps) {\n return (\n <Row gutter={[16, 16]} align=\"middle\">\n <Col xs={24} md={4}>\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 />\n </Space>\n </Col>\n <Col xs={24} md={4}>\n <Space className=\"w-full items-center\" direction=\"horizontal\" size={12}>\n <Text className=\"text-gray-600\">Group alerts by:</Text>\n <Select\n value={groupBy}\n onChange={(v: GroupBy) => onChange({ groupBy: v })}\n options={[\n { label: \"By severity\", value: \"By severity\" },\n { label: \"By Rules\", value: \"By Rules\" },\n ]}\n className=\"w-full\"\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}>Clear</Button>\n <Button type=\"primary\" onClick={onSave}>Save</Button>\n </Space>\n ) : null}\n </Col>\n </Row>\n );\n}\n\n\n","import { Row, Col, Select, Typography, Space, Button, Checkbox, Spin } 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; l1roles: number[]; setL1roles: (v: number[]) => void;\n l2mins?: number; setL2mins: (v: number) => void; l2roles: number[]; setL2roles: (v: number[]) => void;\n l3mins?: number; setL3mins: (v: number) => void; l3roles: number[]; setL3roles: (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, l1roles, setL1roles,\n l2mins, setL2mins, l2roles, setL2roles,\n l3mins, setL3mins, l3roles, setL3roles,\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 // Simple enablement: require a rule and at least one field changed/filled\n const hasAnyInput =\n typeof l1mins === \"number\" ||\n (Array.isArray(l1roles) && l1roles.length > 0) ||\n typeof l2mins === \"number\" ||\n (Array.isArray(l2roles) && l2roles.length > 0) ||\n typeof l3mins === \"number\" ||\n (Array.isArray(l3roles) && l3roles.length > 0) ||\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 <Row gutter={[16, 16]} align=\"bottom\" className=\"mb-2\">\n <Col xs={24} lg={5}>\n <Space className=\"w-full\" direction=\"vertical\" size={4}>\n {/* <Text className=\"text-gray-600\">Rules</Text> */}\n <Select placeholder=\"Rules\" value={selectedRule} onChange={setSelectedRule} options={ruleOptions} className=\"w-full\" />\n </Space>\n </Col>\n\n {/* Level 1 */}\n <Col xs={24} lg={4}>\n <Space direction=\"vertical\" size={4} className=\"w-full\">\n <Text className=\"text-gray-700 font-medium\">Level 1</Text>\n <Space className=\"w-full\">\n <Select placeholder=\"Mins\" value={l1mins} onChange={setL1mins as any} options={minsOptions} />\n <Select placeholder=\"Escalate to\" className=\"min-w-[120px] w-full\" value={l1roles} onChange={setL1roles} options={roleOptions} />\n </Space>\n </Space>\n </Col>\n\n {/* Level 2 */}\n <Col xs={24} lg={4}>\n <Space direction=\"vertical\" size={4} className=\"w-full\">\n <Text className=\"text-gray-700 font-medium\">Level 2</Text>\n <Space className=\"w-full\">\n <Select placeholder=\"Mins\" value={l2mins} onChange={setL2mins as any} options={minsOptions} />\n <Select placeholder=\"Escalate to\" className=\"min-w-[120px] w-full\" value={l2roles} onChange={setL2roles} options={roleOptions} />\n </Space>\n </Space>\n </Col>\n\n {/* Level 3 */}\n <Col xs={24} lg={4}>\n <Space direction=\"vertical\" size={4} className=\"w-full\">\n <Text className=\"text-gray-700 font-medium\">Level 3</Text>\n <Space className=\"w-full\">\n <Select placeholder=\"Mins\" value={l3mins} onChange={setL3mins as any} options={minsOptions} />\n <Select placeholder=\"Escalate to\" className=\"min-w-[120px] w-full\" value={l3roles} onChange={setL3roles} options={roleOptions} />\n </Space>\n </Space>\n </Col>\n {/* Pick Actions and buttons */}\n <Col xs={24} lg={5}>\n <Space direction=\"vertical\" size={4} className=\"w-full\">\n <Text className=\"text-gray-700 font-medium\">Pick Actions</Text>\n <Space className=\"w-full\">\n <Select mode=\"multiple\" placeholder=\"Select response actions\" className=\"min-w-[260px] w-full\" value={actions} onChange={setActions} options={actionOptionsState} />\n </Space>\n </Space>\n </Col>\n </Row>\n <Row gutter={[16, 16]} align=\"bottom\" className=\"mt-2\">\n {/* Third Party App */}\n <Col xs={24} lg={16}>\n <Space direction=\"vertical\" size={4} className=\"w-full\">\n <Text className=\"text-gray-700 font-medium\">Third Party App</Text>\n <Space className=\"w-full\">\n <Select\n mode=\"multiple\"\n placeholder=\"Third Party app\"\n className=\"min-w-[180px] w-full\"\n value={thirdPartyIds}\n onChange={setThirdPartyIds}\n options={thirdPartyOptionsState}\n />\n <Checkbox checked={humanLoop} onChange={(e) => setHumanLoop(e.target.checked)}>Human-In-Loop</Checkbox>\n <Button onClick={onClear}>Clear</Button>\n <Button type=\"primary\" onClick={onSave} loading={!!saving} disabled={!canSave}>Save</Button>\n </Space>\n </Space>\n </Col>\n\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 ? `No 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 ? `No 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 ? `No 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 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: \"Assign Team\",\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","!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 { 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 { normalizeGroupBy, 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 [savedGroupBy, setSavedGroupBy] = useState<GroupBy>(\"By severity\");\n const [adminDirty, setAdminDirty] = 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 console.log('usr', userRoles)\n\n const [l1mins, setL1mins] = useState<number | undefined>();\n const [l1roles, setL1roles] = useState<number[]>([]);\n const [l2mins, setL2mins] = useState<number | undefined>();\n const [l2roles, setL2roles] = useState<number[]>([]);\n const [l3mins, setL3mins] = useState<number | undefined>();\n const [l3roles, setL3roles] = useState<number[]>([]);\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\n // Initialize table rows from fetched rules' escalationSettings\n useEffect(() => {\n if (!rawRules || !rawRules.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 = rawRules.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 }, [rawRules, 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 const grpBy = normalizeGroupBy(data.groupBy);\n setSortBy(srtBy);\n setGroupBy(grpBy);\n setSavedSortBy(srtBy);\n setSavedGroupBy(grpBy);\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 const found: any = (rawRules || []).find((r: any) =>\n r?.ruleId === selectedRule || r?.ruleName === selectedRule || r?.RuleId === selectedRule\n );\n const es = found?.escalationSettings;\n if (es && typeof es === \"object\") {\n setL1mins(es.level1PostAssistTime ?? undefined);\n setL1roles(es.level1UserRoleId ? [es.level1UserRoleId] : []);\n setL2mins(es.level2PostAssistTime ?? undefined);\n setL2roles(es.level2UserRoleId ? [es.level2UserRoleId] : []);\n setL3mins(es.level3PostAssistTime ?? undefined);\n setL3roles(es.level3UserRoleId ? [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, rawRules]);\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 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 try {\n const resp = await alertsApi.setAdminSettings({ sortBy, groupBy });\n console.log('resp', resp)\n if ((resp as any)?.responseStatus && (resp as any)?.data) {\n toast.success((resp as any).data);\n }\n setSavedSortBy(sortBy);\n setSavedGroupBy(groupBy);\n setAdminDirty(false);\n } catch (e) {\n console.error(\"Error saving admin settings\", e);\n }\n };\n\n const handleAdminCancel = () => {\n setSortBy(savedSortBy);\n setGroupBy(savedGroupBy);\n setAdminDirty(false);\n };\n\n\n const handleSave = async () => {\n setSavingEscalation(true);\n const escalationPayload = {\n ruleId: selectedRule,\n levels: [\n { minutes: l1mins, roles: l1roles },\n { minutes: l2mins, roles: l2roles },\n { minutes: l3mins, roles: l3roles },\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 = (rawRules || []).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: Array.isArray(l1roles) && l1roles.length ? l1roles[0] : 0,\n level1PostAssistTime: l1mins ?? 0,\n level2UserRoleId: Array.isArray(l2roles) && l2roles.length ? l2roles[0] : 0,\n level2PostAssistTime: l2mins ?? 0,\n level3UserRoleId: Array.isArray(l3roles) && l3roles.length ? l3roles[0] : 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); setL1roles([]);\n setL2mins(undefined); setL2roles([]);\n setL3mins(undefined); setL3roles([]);\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 // If we didn't return already (e.g., when selectedRule missing), do a local append\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: l1roles },\n l2: { minutes: l2mins, roles: l2roles },\n l3: { minutes: l3mins, roles: l3roles },\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); setL1roles([]);\n setL2mins(undefined); setL2roles([]);\n setL3mins(undefined); setL3roles([]);\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 />\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 l1roles={l1roles}\n setL1roles={setL1roles}\n l2mins={l2mins}\n setL2mins={setL2mins as any}\n l2roles={l2roles}\n setL2roles={setL2roles}\n l3mins={l3mins}\n setL3mins={setL3mins as any}\n l3roles={l3roles}\n setL3roles={setL3roles}\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; walkie: boolean }>({ inApp: false, sms: false, email: false, walkie: 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 walkie: !!pref.walkieIntegration,\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 walkieIntegration: !!channels.walkie,\n sortBy,\n });\n console.log('resp', resp)\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 <Col>\n <Checkbox checked={channels.walkie} onChange={(e) => setChannels({ ...channels, walkie: e.target.checked })}>Walkie system integration</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 }: 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\" 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.alertId}</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\" 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 type { TrackIncidentData } from \"../types/trackIncident.types\";\n\nexport const defaultTrackIncidentMock: TrackIncidentData = {\n summary: {\n alertId: \"ALT - 002 #\",\n incidentId: \"#000000\",\n severity: \"High\",\n location: \"Block B, Classroom 204\",\n },\n timeline: [\n {\n status: \"Completed\",\n title: \"Emergency Services Dispatched\",\n description: \"AMB-412 and MED-7 confirmed dispatch and began response.\",\n timestamp: \"27/06/2025, 16:00:00\",\n },\n {\n status: \"Completed\",\n title: \"Call Connected to PSAP\",\n description: \"Call routed to Springfield Emergency Communications Center.\",\n timestamp: \"27/06/2025, 16:00:00\",\n },\n {\n status: \"Completed\",\n title: \"911 Call Initiated\",\n description: \"Emergency call placed from school administration office.\",\n timestamp: \"27/06/2025, 16:00:00\",\n },\n {\n status: \"Inprogress\",\n title: \"First Unit On Scene\",\n description: \"Police Unit 24 arrived and confirmed situation.\",\n timestamp: \"29/06/2025, 18:00:00\",\n },\n ],\n notifications: [\n {\n channelLabel: \"SMS Notification\",\n sentAt: \"Sent at 11/02/2025 03:14:00 PM\",\n messageTitle: \"Critical Alert: Unauthorized Access.\",\n messageBody: \"Incident #INC-2025-002. Immediate action required\",\n total: 4,\n delivered: 3,\n recipients: [\n { name: \"John Smith\", role: \"Security Chief\", phone: \"+1 (555) 123-4567\", status: \"Delivered\" },\n { name: \"Jane Doe\", role: \"Principal\", phone: \"+1 (555) 123-4567\", status: \"Delivered\" },\n { name: \"Mike Johnson\", role: \"Safety Officer\", phone: \"+1 (555) 123-4567\", status: \"Delivered\" },\n { name: \"Sarah Williams\", role: \"Safety Officer\", phone: \"+1 (555) 123-4567\", status: \"Failed\" },\n ],\n },\n {\n channelLabel: \"Email Notification\",\n sentAt: \"Sent at 11/02/2025 03:14:00 PM\",\n messageTitle: \"Critical Alert: Unauthorized Access.\",\n messageBody: \"Incident #INC-2025-002. Immediate action required\",\n total: 4,\n delivered: 2,\n recipients: [\n { name: \"John Smith\", role: \"Security Chief\", phone: \"+1 (555) 123-4567\", status: \"Delivered\" },\n { name: \"Jane Doe\", role: \"Principal\", phone: \"+1 (555) 123-4567\", status: \"Delivered\" },\n { name: \"Mike Johnson\", role: \"Safety Officer\", phone: \"+1 (555) 123-4567\", status: \"Failed\" },\n { name: \"Sarah Williams\", role: \"Safety Officer\", phone: \"+1 (555) 123-4567\", status: \"Failed\" },\n ],\n },\n ],\n rapidSOS: [\n {\n event: \"Caller connected to PSAP\",\n timestamp: \"27/06/2025, 16:00:05\",\n details: \"RapidSOS session created\",\n },\n ],\n};\n\n\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 TrackIncident from './TrackIncident';\nimport type { TrackIncidentData, TimelineState, DeliveryStatus } from '../../types/trackIncident.types';\nimport { defaultTrackIncidentMock } from '../../data/trackIncidentMock';\nimport { useUpdateAlertStatus } from '../../hooks/useUpdateAlertStatus';\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 updateStatus = useUpdateAlertStatus();\n const { alerts } = useApi();\n\n const alertData: AlertData = selectedRow?.originalData || {};\n const {\n eventName,\n alertId,\n timestamp,\n description,\n spaceName,\n assignTeam,\n priority,\n type,\n statusType,\n id,\n alertDetails,\n statusHistory,\n mediaDetails,\n } = alertData;\n\n //fetch notifications when selected alert changes or Track tab becomes active\n useEffect(() => {\n const alertId = id;\n if (activeTab !== 'track' || !alertId) return;\n let cancelled = false;\n (async () => {\n try {\n const raw = await alerts.getAlertNotifications(alertId as any);\n if (cancelled) return;\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 const groups = Array.from(groupsMap.entries()).map(([type, rows]) => {\n const recipients = rows.map((r: any) => {\n const statusLower = String(r?.messageStatus || '').toLowerCase();\n const status: DeliveryStatus =\n statusLower === 'delivered' ? 'Delivered' :\n statusLower === 'failed' ? 'Failed' : 'Queued';\n return {\n name: r?.receipientName || r?.recipientName || '-',\n role: r?.receipientRoleName || '',\n phone: r?.receipentPhoneNumber || r?.recipientPhoneNumber || r?.receipientEmail || r?.recipientEmail || '',\n status,\n };\n });\n const delivered = recipients.filter((r: any) => 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 setNotifGroups(groups);\n } catch {\n setNotifGroups(undefined);\n }\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\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 !== undefined ? String(selectedAction) : undefined,\n notes: notes.trim(),\n modifiedBy: 0\n };\n\n const response = await updateStatus.mutateAsync(payload as any);\n if ((response as any)?.responseStatus) {\n const successMsg = (response as any)?.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 as any)?.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 return (\n <Modal\n // title=\"Alert Detail\"\n open={isModalOpen}\n onCancel={handleModalClose}\n width={1000}\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 || \"\"} {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 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 <div className='border border-[#DFE4EA] rounded-md px-4 py-2 flex flex-row justify-between items-center mt-4 mb-8'>\n <label className='text-xs font-medium'>Alert notification will be sent to all Family Members.</label>\n <button\n onClick={() => toast.warn(\"Feature coming up soon!\")}\n className='bg-black text-white rounded-md px-4 py-2 text-xs'>Notify Family</button>\n </div>\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 const summary = {\n alertId: alertId ?? id ?? defaultTrackIncidentMock.summary.alertId,\n incidentId: defaultTrackIncidentMock.summary.incidentId,\n severity: priority || defaultTrackIncidentMock.summary.severity,\n location: spaceName || defaultTrackIncidentMock.summary.location,\n };\n const timeline = (statusHistory && statusHistory.length)\n ? statusHistory.map((subject: any) => {\n const computedStatus: TimelineState =\n ((subject?.status || subject?.eventStatus || '').toLowerCase() === 'completed')\n ? 'Completed'\n : 'Inprogress';\n return ({\n status: computedStatus,\n title: subject?.status || subject?.eventStatus || 'Status Update',\n description: subject?.description || subject?.actionNotes || '',\n timestamp: subject?.createdDate ? `${formatDisplayTimestamp(subject?.createdDate)}` : (subject?.timestamp ? `${formatDisplayTimestamp(subject?.timestamp)}` : ''),\n });\n })\n : defaultTrackIncidentMock.timeline;\n const data: TrackIncidentData = {\n summary,\n timeline,\n notifications: notifGroups ?? [],\n rapidSOS: defaultTrackIncidentMock.rapidSOS,\n };\n return <TrackIncident data={data} />;\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 }: 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 useEffect(() => {}, []);\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\">\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: 24 }}\n items={[\n {\n key: \"active\",\n label: \"Active\",\n children: (\n <AlertsTable data={alerts} loading={loading} pageSize={10} columns={columns || []} onAlertIdClick={handleOpenAlert} />\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 } = useAlerts();\n return <AlertConsole alerts={alerts} loading={loading} columns={props.columns} />;\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":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","owner","debugStack","debugTask","refProp","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","isValidElement","object","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","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","skydio","aegix","eli","rapidSOS","nineOneOne","SNL_ALERTS","SNL_RULES","SCHOOLS_ALERTS","SCHOOLS_RULES","tenantDomains","joinUrl","base","path","trimmedBase","normalizedPath","getAuthHeader","token","buildUrlWithParams","baseUrl","params","url","v","doRequest","init","mergedHeaders","res","text","data","message","createAlertsAdapter","headers","query","payload","body","isSuccess","alertId","createRulesAdapter","cfg","lookupsUrl","recordId","putUrl","firstDefined","values","mapSchoolsAlert","api","createSchoolsAlertsAdapter","createSchoolsRulesAdapter","ApiContext","createContext","ApiProvider","tenant","override","useMemo","alertsBaseUrl","rulesBaseUrl","alertsAdapter","createSnlAlertsAdapter","rulesAdapter","createSnlRulesAdapter","jsx","useApi","context","useContext","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","PRIORITY_ROW_BG_CLASS","PRIORITY_BORDER_TEXT_CLASS","severity","setSeverity","useState","anomalyType","setAnomalyType","space","setSpace","actionTaken","setActionTaken","search","setSearch","actionOptions","setActionOptions","rules","thirdPartyAssetMap","MailOutlined","MessageOutlined","computedAnomalyOptions","set","item","opts","computedSpaceOptions","useEffect","mounted","lookups","t","hasAnyThirdPartyIds","d","filteredData","matchesSeverity","haystack","matchesSearch","matchesAnomaly","matchesSpace","matchesAction","anomalyOptionsToUse","spaceOptionsToUse","defaultColumns","Tag","_ts","elapsedStr","remainingStr","elapsedSec","remainingSec","percent","jsxs","Progress","e","_","Fragment","Space","id","map","commonClassName","Tooltip","Button","columnsToUse","Row","Col","Input","Subscribable","listener","defaultTimeoutProvider","callback","delay","timeoutId","intervalId","TimeoutManager","#provider","#providerCalled","provider","timeoutManager","systemSetTimeoutZero","isServer","noop","functionalUpdate","updater","input","isValidTimeout","timeUntilStale","updatedAt","staleTime","resolveStaleTime","resolveEnabled","enabled","matchQuery","filters","exact","fetchStatus","predicate","queryKey","stale","hashQueryKeyByOptions","partialMatchKey","isActive","matchMutation","mutation","status","mutationKey","hashKey","val","isPlainObject","result","a","b","hasOwn","replaceEqualDeep","array","isPlainArray","aSize","bItems","bSize","copy","equalItems","i","aItem","bItem","shallowEqualObjects","o","hasObjectPrototype","ctor","prot","sleep","timeout","resolve","replaceData","prevData","error","addToEnd","items","max","newItems","addToStart","skipToken","ensureQueryFn","fetchOptions","shouldThrowError","throwOnError","addConsumeAwareSignal","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","x","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","isLoading","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","m","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","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","alerts","qClient","getTimeString","date","timeZone","getAbbrAndOffset","abbr","p","offset","offPart","formatTimestamp","pad","MM","DD","YYYY","HH","formatDisplayTimestamp","ts","ArchivedTable","completedStatus","anomalyOptions","updateStatus","handleReopen","response","successMsg","toast","errMsg","archivedColumns","Dropdown","MoreOutlined","filtered","clock_icon","Clock","label","updateIntervalMs","now","setNow","timeString","Text","Typography","AdminSettingsSection","sortBy","groupBy","showActions","onSave","onClear","EscalationRowSection","selectedRule","setSelectedRule","ruleOptions","minsOptions","roleOptions","l1mins","setL1mins","l1roles","setL1roles","l2mins","setL2mins","l2roles","setL2roles","l3mins","setL3mins","l3roles","setL3roles","actions","setActions","thirdPartyIds","setThirdPartyIds","humanLoop","setHumanLoop","saving","onActionTypesLoaded","rulesApi","actionOptionsState","setActionOptionsState","thirdPartyOptionsState","setThirdPartyOptionsState","loadingLookups","setLoadingLookups","mapped","at","tp","hasAnyInput","canSave","Spin","Checkbox","EscalationTableSection","entries","userRoles","onEdit","roleMap","r","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","prev","module","this","u","c","f","h","l","$","y","M","g","D","S","w","O","normalizeSortBy","normalizeGroupBy","parseHms","hmsToDayjs","dayjs","SettingsPanel","severities","alertsApi","setSortBy","setGroupBy","savedSortBy","setSavedSortBy","savedGroupBy","setSavedGroupBy","adminDirty","setAdminDirty","loadingSettings","setLoadingSettings","settingsError","setSettingsError","escBasis","setEscBasis","selectedSeverity","setSelectedSeverity","actionTypeIdToName","setActionTypeIdToName","thirdPartyIdToName","setThirdPartyIdToName","userRolesFromLookups","setUserRolesFromLookups","setEntries","savingEscalation","setSavingEscalation","loadingEntries","setLoadingEntries","mapsReady","next","escalation_settings","l1role","l2role","l3role","actionNames","notifyNames","humanLoopFlag","load","srtBy","grpBy","es","actionIds","refetchEntries","latest","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","anomalies","setAnomalies","loadingAnomalies","setLoadingAnomalies","isSaving","setIsSaving","pref","normalized","list","toggleRule","start","end","anomalyIds","TimePicker","SettingsTabs","active","setActive","completedPng","pendingPng","renderTimelineItem","icon","TrackIncident","Tabs","Card","Steps","group","rIdx","defaultTrackIncidentMock","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","notifGroups","setNotifGroups","alertData","eventName","timestamp","description","spaceName","assignTeam","statusType","alertDetails","statusHistory","groupsMap","groups","recipients","statusLower","delivered","first","messageTitle","statusOptions","handleSaveChanges","Modal","LeftOutlined","RightOutlined","Carousel","summary","timeline","subject","useAlertStatusList","AlertConsole","setIsModalOpen","selectedAlert","setSelectedAlert","initialAlertTab","setInitialAlertTab","handleOpenAlert","handleCloseModal","SettingsDataWrapper","setRules","setUserRoles","setRawRules","mappedRules","settingsDummy","useAlerts","ConnectedAlertConsole","AlertConsoleWidget","apiDomain","rulesDomain","useAlertsReport","exampleAlertColumns"],"mappings":"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","x_google_ignoreList":[0,1,2,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,56]}
|