@backstage-community/plugin-servicenow 1.10.0 → 1.12.0

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.
Files changed (46) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/alpha/plugin.esm.js.map +1 -1
  3. package/dist/alpha.d.ts +4 -4
  4. package/dist/alpha.esm.js +1 -1
  5. package/dist/api/ServiceNowBackendClient.esm.js.map +1 -1
  6. package/dist/components/Router.esm.js.map +1 -1
  7. package/dist/components/Servicenow/ClosedIcon.esm.js.map +1 -1
  8. package/dist/components/Servicenow/CustomSvgIcon.esm.js.map +1 -1
  9. package/dist/components/Servicenow/EntityServicenowContent.esm.js +1 -1
  10. package/dist/components/Servicenow/EntityServicenowContent.esm.js.map +1 -1
  11. package/dist/components/Servicenow/InProgressIcon.esm.js.map +1 -1
  12. package/dist/components/Servicenow/IncidentsFilter.esm.js.map +1 -1
  13. package/dist/components/Servicenow/IncidentsListColumns.esm.js.map +1 -1
  14. package/dist/components/Servicenow/IncidentsTableBody.esm.js.map +1 -1
  15. package/dist/components/Servicenow/IncidentsTableHeader.esm.js.map +1 -1
  16. package/dist/components/Servicenow/IncidentsTableRow.esm.js.map +1 -1
  17. package/dist/components/Servicenow/ModerateIcon.esm.js.map +1 -1
  18. package/dist/components/Servicenow/index.esm.js +5 -1
  19. package/dist/components/Servicenow/index.esm.js.map +1 -1
  20. package/dist/components/shared-components/IncidentEnumFilter.esm.js.map +1 -1
  21. package/dist/hooks/useDebouncedValue.esm.js.map +1 -1
  22. package/dist/hooks/useQueryArrayFilter.esm.js.map +1 -1
  23. package/dist/hooks/useQueryArrayState.esm.js.map +1 -1
  24. package/dist/hooks/useQueryHelpers.esm.js.map +1 -1
  25. package/dist/hooks/useQueryState.esm.js.map +1 -1
  26. package/dist/hooks/useTranslation.esm.js.map +1 -1
  27. package/dist/hooks/useUserEmail.esm.js.map +1 -1
  28. package/dist/plugin.esm.js.map +1 -1
  29. package/dist/routes.esm.js.map +1 -1
  30. package/dist/translations/de.esm.js +13 -13
  31. package/dist/translations/de.esm.js.map +1 -1
  32. package/dist/translations/es.esm.js +9 -9
  33. package/dist/translations/es.esm.js.map +1 -1
  34. package/dist/translations/fr.esm.js +13 -13
  35. package/dist/translations/fr.esm.js.map +1 -1
  36. package/dist/translations/index.esm.js.map +1 -1
  37. package/dist/translations/it.esm.js +15 -15
  38. package/dist/translations/it.esm.js.map +1 -1
  39. package/dist/translations/ja.esm.js +18 -18
  40. package/dist/translations/ja.esm.js.map +1 -1
  41. package/dist/translations/ref.esm.js.map +1 -1
  42. package/dist/types.esm.js.map +1 -1
  43. package/dist/utils/incidentUtils.esm.js.map +1 -1
  44. package/dist/utils/queryParamsUtils.esm.js.map +1 -1
  45. package/dist/utils/stringUtils.esm.js.map +1 -1
  46. package/package.json +14 -14
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # @backstage-community/plugin-servicenow
2
2
 
3
+ ## 1.12.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 5399656: Backstage version bump to v1.50.4
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [5399656]
12
+ - @backstage-community/plugin-servicenow-common@1.11.0
13
+
14
+ ## 1.11.1
15
+
16
+ ### Patch Changes
17
+
18
+ - 69b9fd3: Translations updated for de/es/fr/it/ja
19
+
20
+ ## 1.11.0
21
+
22
+ ### Minor Changes
23
+
24
+ - 8754ccb: Backstage version bump to v1.50.2
25
+
26
+ ### Patch Changes
27
+
28
+ - Updated dependencies [8754ccb]
29
+ - @backstage-community/plugin-servicenow-common@1.10.0
30
+
3
31
  ## 1.10.0
4
32
 
5
33
  ### Minor Changes
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.esm.js","sources":["../../src/alpha/plugin.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ApiBlueprint,\n createFrontendPlugin,\n discoveryApiRef,\n fetchApiRef,\n identityApiRef,\n} from '@backstage/frontend-plugin-api';\nimport { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';\nimport {\n serviceNowApiRef,\n ServiceNowBackendClient,\n} from '../api/ServiceNowBackendClient';\n\nimport { isServicenowAvailable } from '@backstage-community/plugin-servicenow-common';\n\n/** @alpha */\nexport const servicenowApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: serviceNowApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n identityApi: identityApiRef,\n },\n factory: ({ discoveryApi, fetchApi, identityApi }) =>\n new ServiceNowBackendClient(discoveryApi, fetchApi, identityApi),\n }),\n});\n\n/**\n * Servicenow entity content that shows an incident table with a\n * filter similar to the catalog table\n * @alpha\n */\nexport const entityServicenowContent = EntityContentBlueprint.make({\n name: 'EntityServicenowContent',\n params: {\n path: 'servicenow',\n title: 'ServiceNow',\n filter: isServicenowAvailable,\n loader: () =>\n import('../components/Servicenow').then(m => (\n <m.EntityServicenowContent />\n )),\n },\n});\n\n/** @alpha */\nexport default createFrontendPlugin({\n pluginId: 'servicenow',\n extensions: [servicenowApi, entityServicenowContent],\n});\n\n/**\n * @alpha\n * Translation resources for the ServiceNow plugin\n */\nexport * from '../translations';\n"],"names":[],"mappings":";;;;;;;AAgCa,MAAA,aAAA,GAAgB,aAAa,IAAK,CAAA;AAAA,EAC7C,MAAA,EAAQ,kBACN,YAAa,CAAA;AAAA,IACX,GAAK,EAAA,gBAAA;AAAA,IACL,IAAM,EAAA;AAAA,MACJ,YAAc,EAAA,eAAA;AAAA,MACd,QAAU,EAAA,WAAA;AAAA,MACV,WAAa,EAAA;AAAA,KACf;AAAA,IACA,OAAA,EAAS,CAAC,EAAE,YAAc,EAAA,QAAA,EAAU,WAAY,EAAA,KAC9C,IAAI,uBAAA,CAAwB,YAAc,EAAA,QAAA,EAAU,WAAW;AAAA,GAClE;AACL,CAAC;AAOY,MAAA,uBAAA,GAA0B,uBAAuB,IAAK,CAAA;AAAA,EACjE,IAAM,EAAA,yBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,YAAA;AAAA,IACN,KAAO,EAAA,YAAA;AAAA,IACP,MAAQ,EAAA,qBAAA;AAAA,IACR,MAAA,EAAQ,MACN,OAAO,uCAA0B,CAAA,CAAE,IAAK,CAAA,CAAA,CAAA,qBACrC,GAAA,CAAA,CAAA,CAAE,uBAAF,EAAA,EAA0B,CAC5B;AAAA;AAEP,CAAC;AAGD,aAAe,oBAAqB,CAAA;AAAA,EAClC,QAAU,EAAA,YAAA;AAAA,EACV,UAAA,EAAY,CAAC,aAAA,EAAe,uBAAuB;AACrD,CAAC,CAAA;;;;"}
1
+ {"version":3,"file":"plugin.esm.js","sources":["../../src/alpha/plugin.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n ApiBlueprint,\n createFrontendPlugin,\n discoveryApiRef,\n fetchApiRef,\n identityApiRef,\n} from '@backstage/frontend-plugin-api';\nimport { EntityContentBlueprint } from '@backstage/plugin-catalog-react/alpha';\nimport {\n serviceNowApiRef,\n ServiceNowBackendClient,\n} from '../api/ServiceNowBackendClient';\n\nimport { isServicenowAvailable } from '@backstage-community/plugin-servicenow-common';\n\n/** @alpha */\nexport const servicenowApi = ApiBlueprint.make({\n params: defineParams =>\n defineParams({\n api: serviceNowApiRef,\n deps: {\n discoveryApi: discoveryApiRef,\n fetchApi: fetchApiRef,\n identityApi: identityApiRef,\n },\n factory: ({ discoveryApi, fetchApi, identityApi }) =>\n new ServiceNowBackendClient(discoveryApi, fetchApi, identityApi),\n }),\n});\n\n/**\n * Servicenow entity content that shows an incident table with a\n * filter similar to the catalog table\n * @alpha\n */\nexport const entityServicenowContent = EntityContentBlueprint.make({\n name: 'EntityServicenowContent',\n params: {\n path: 'servicenow',\n title: 'ServiceNow',\n filter: isServicenowAvailable,\n loader: () =>\n import('../components/Servicenow').then(m => (\n <m.EntityServicenowContent />\n )),\n },\n});\n\n/** @alpha */\nexport default createFrontendPlugin({\n pluginId: 'servicenow',\n extensions: [servicenowApi, entityServicenowContent],\n});\n\n/**\n * @alpha\n * Translation resources for the ServiceNow plugin\n */\nexport * from '../translations';\n"],"names":[],"mappings":";;;;;;;AAgCO,MAAM,aAAA,GAAgB,aAAa,IAAA,CAAK;AAAA,EAC7C,MAAA,EAAQ,kBACN,YAAA,CAAa;AAAA,IACX,GAAA,EAAK,gBAAA;AAAA,IACL,IAAA,EAAM;AAAA,MACJ,YAAA,EAAc,eAAA;AAAA,MACd,QAAA,EAAU,WAAA;AAAA,MACV,WAAA,EAAa;AAAA,KACf;AAAA,IACA,OAAA,EAAS,CAAC,EAAE,YAAA,EAAc,QAAA,EAAU,WAAA,EAAY,KAC9C,IAAI,uBAAA,CAAwB,YAAA,EAAc,QAAA,EAAU,WAAW;AAAA,GAClE;AACL,CAAC;AAOM,MAAM,uBAAA,GAA0B,uBAAuB,IAAA,CAAK;AAAA,EACjE,IAAA,EAAM,yBAAA;AAAA,EACN,MAAA,EAAQ;AAAA,IACN,IAAA,EAAM,YAAA;AAAA,IACN,KAAA,EAAO,YAAA;AAAA,IACP,MAAA,EAAQ,qBAAA;AAAA,IACR,MAAA,EAAQ,MACN,OAAO,uCAA0B,CAAA,CAAE,IAAA,CAAK,CAAA,CAAA,qBACtC,GAAA,CAAC,CAAA,CAAE,uBAAA,EAAF,EAA0B,CAC5B;AAAA;AAEP,CAAC;AAGD,aAAe,oBAAA,CAAqB;AAAA,EAClC,QAAA,EAAU,YAAA;AAAA,EACV,UAAA,EAAY,CAAC,aAAA,EAAe,uBAAuB;AACrD,CAAC,CAAA;;;;"}
package/dist/alpha.d.ts CHANGED
@@ -68,9 +68,9 @@ declare const entityServicenowContent: _backstage_frontend_plugin_api.Overridabl
68
68
  icon: string | undefined;
69
69
  };
70
70
  configInput: {
71
- filter?: _backstage_filter_predicates.FilterPredicate | undefined;
72
- title?: string | undefined;
73
71
  path?: string | undefined;
72
+ title?: string | undefined;
73
+ filter?: _backstage_filter_predicates.FilterPredicate | undefined;
74
74
  group?: string | false | undefined;
75
75
  icon?: string | undefined;
76
76
  };
@@ -121,9 +121,9 @@ declare const _default: _backstage_frontend_plugin_api.OverridableFrontendPlugin
121
121
  icon: string | undefined;
122
122
  };
123
123
  configInput: {
124
- filter?: _backstage_filter_predicates.FilterPredicate | undefined;
125
- title?: string | undefined;
126
124
  path?: string | undefined;
125
+ title?: string | undefined;
126
+ filter?: _backstage_filter_predicates.FilterPredicate | undefined;
127
127
  group?: string | false | undefined;
128
128
  icon?: string | undefined;
129
129
  };
package/dist/alpha.esm.js CHANGED
@@ -1,4 +1,4 @@
1
1
  export { default, entityServicenowContent, servicenowApi } from './alpha/plugin.esm.js';
2
- export { servicenowTranslations } from './translations/index.esm.js';
3
2
  export { servicenowTranslationRef } from './translations/ref.esm.js';
3
+ export { servicenowTranslations } from './translations/index.esm.js';
4
4
  //# sourceMappingURL=alpha.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ServiceNowBackendClient.esm.js","sources":["../../src/api/ServiceNowBackendClient.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { IncidentPick } from '@backstage-community/plugin-servicenow-common';\nimport {\n createApiRef,\n DiscoveryApi,\n FetchApi,\n IdentityApi,\n} from '@backstage/core-plugin-api';\nimport { IncidentsData, PaginatedIncidentsData } from '../types';\n\nexport interface ServiceNowBackendAPI {\n getIncidents(queryParams: URLSearchParams): Promise<PaginatedIncidentsData>;\n}\n\nexport const serviceNowApiRef = createApiRef<ServiceNowBackendAPI>({\n id: 'plugin.servicenow.service',\n});\n\nexport class ServiceNowBackendClient implements ServiceNowBackendAPI {\n constructor(\n private readonly discoveryApi: DiscoveryApi,\n private readonly fetchApi: FetchApi,\n private readonly identityApi: IdentityApi,\n ) {}\n\n private async fetchFromServiceNow<T>(\n path: string,\n queryParams?: URLSearchParams,\n ): Promise<{ items: T; totalCount: number }> {\n const proxyBase = await this.discoveryApi.getBaseUrl('servicenow');\n const url = `${proxyBase}${path}${queryParams ? `?${queryParams}` : ''}`;\n\n const { token } = await this.identityApi.getCredentials();\n const headers = {\n Authorization: `Bearer ${token}`,\n };\n\n const response = await this.fetchApi.fetch(url, { headers });\n if (!response.ok) {\n let errorBody;\n try {\n errorBody = await response.json();\n } catch (e) {\n throw new Error(\n `ServiceNow API request failed: ${response.status} - Could not parse error response.`,\n );\n }\n\n const errorMessage =\n errorBody?.error?.message ??\n `ServiceNow API request failed: ${response.status}`;\n throw new Error(errorMessage);\n }\n\n return (await response.json()) as { items: T; totalCount: number };\n }\n\n async getIncidents(\n queryParams: URLSearchParams,\n ): Promise<PaginatedIncidentsData> {\n const { items, totalCount } = await this.fetchFromServiceNow<\n IncidentPick[]\n >('/incidents', queryParams);\n\n const incidents = incidentsPickToIncidentsData(items);\n return { incidents, totalCount };\n }\n}\n\nexport function incidentsPickToIncidentsData(\n data: IncidentPick[],\n): IncidentsData[] {\n return data.map(item => ({\n sysId: item.sys_id,\n number: item.number,\n shortDescription: item.short_description,\n description: item.description,\n sysCreatedOn: item.sys_created_on,\n priority: item.priority,\n incidentState: item.incident_state,\n url: item.url,\n }));\n}\n"],"names":[],"mappings":";;AA4BO,MAAM,mBAAmB,YAAmC,CAAA;AAAA,EACjE,EAAI,EAAA;AACN,CAAC;AAEM,MAAM,uBAAwD,CAAA;AAAA,EACnE,WAAA,CACmB,YACA,EAAA,QAAA,EACA,WACjB,EAAA;AAHiB,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AAAA;AAChB,EAEH,MAAc,mBACZ,CAAA,IAAA,EACA,WAC2C,EAAA;AAC3C,IAAA,MAAM,SAAY,GAAA,MAAM,IAAK,CAAA,YAAA,CAAa,WAAW,YAAY,CAAA;AACjE,IAAM,MAAA,GAAA,GAAM,CAAG,EAAA,SAAS,CAAG,EAAA,IAAI,GAAG,WAAc,GAAA,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AAEtE,IAAA,MAAM,EAAE,KAAM,EAAA,GAAI,MAAM,IAAA,CAAK,YAAY,cAAe,EAAA;AACxD,IAAA,MAAM,OAAU,GAAA;AAAA,MACd,aAAA,EAAe,UAAU,KAAK,CAAA;AAAA,KAChC;AAEA,IAAM,MAAA,QAAA,GAAW,MAAM,IAAK,CAAA,QAAA,CAAS,MAAM,GAAK,EAAA,EAAE,SAAS,CAAA;AAC3D,IAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,MAAI,IAAA,SAAA;AACJ,MAAI,IAAA;AACF,QAAY,SAAA,GAAA,MAAM,SAAS,IAAK,EAAA;AAAA,eACzB,CAAG,EAAA;AACV,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,+BAAA,EAAkC,SAAS,MAAM,CAAA,kCAAA;AAAA,SACnD;AAAA;AAGF,MAAA,MAAM,eACJ,SAAW,EAAA,KAAA,EAAO,OAClB,IAAA,CAAA,+BAAA,EAAkC,SAAS,MAAM,CAAA,CAAA;AACnD,MAAM,MAAA,IAAI,MAAM,YAAY,CAAA;AAAA;AAG9B,IAAQ,OAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAC9B,EAEA,MAAM,aACJ,WACiC,EAAA;AACjC,IAAM,MAAA,EAAE,OAAO,UAAW,EAAA,GAAI,MAAM,IAAK,CAAA,mBAAA,CAEvC,cAAc,WAAW,CAAA;AAE3B,IAAM,MAAA,SAAA,GAAY,6BAA6B,KAAK,CAAA;AACpD,IAAO,OAAA,EAAE,WAAW,UAAW,EAAA;AAAA;AAEnC;AAEO,SAAS,6BACd,IACiB,EAAA;AACjB,EAAO,OAAA,IAAA,CAAK,IAAI,CAAS,IAAA,MAAA;AAAA,IACvB,OAAO,IAAK,CAAA,MAAA;AAAA,IACZ,QAAQ,IAAK,CAAA,MAAA;AAAA,IACb,kBAAkB,IAAK,CAAA,iBAAA;AAAA,IACvB,aAAa,IAAK,CAAA,WAAA;AAAA,IAClB,cAAc,IAAK,CAAA,cAAA;AAAA,IACnB,UAAU,IAAK,CAAA,QAAA;AAAA,IACf,eAAe,IAAK,CAAA,cAAA;AAAA,IACpB,KAAK,IAAK,CAAA;AAAA,GACV,CAAA,CAAA;AACJ;;;;"}
1
+ {"version":3,"file":"ServiceNowBackendClient.esm.js","sources":["../../src/api/ServiceNowBackendClient.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { IncidentPick } from '@backstage-community/plugin-servicenow-common';\nimport {\n createApiRef,\n DiscoveryApi,\n FetchApi,\n IdentityApi,\n} from '@backstage/core-plugin-api';\nimport { IncidentsData, PaginatedIncidentsData } from '../types';\n\nexport interface ServiceNowBackendAPI {\n getIncidents(queryParams: URLSearchParams): Promise<PaginatedIncidentsData>;\n}\n\nexport const serviceNowApiRef = createApiRef<ServiceNowBackendAPI>({\n id: 'plugin.servicenow.service',\n});\n\nexport class ServiceNowBackendClient implements ServiceNowBackendAPI {\n constructor(\n private readonly discoveryApi: DiscoveryApi,\n private readonly fetchApi: FetchApi,\n private readonly identityApi: IdentityApi,\n ) {}\n\n private async fetchFromServiceNow<T>(\n path: string,\n queryParams?: URLSearchParams,\n ): Promise<{ items: T; totalCount: number }> {\n const proxyBase = await this.discoveryApi.getBaseUrl('servicenow');\n const url = `${proxyBase}${path}${queryParams ? `?${queryParams}` : ''}`;\n\n const { token } = await this.identityApi.getCredentials();\n const headers = {\n Authorization: `Bearer ${token}`,\n };\n\n const response = await this.fetchApi.fetch(url, { headers });\n if (!response.ok) {\n let errorBody;\n try {\n errorBody = await response.json();\n } catch (e) {\n throw new Error(\n `ServiceNow API request failed: ${response.status} - Could not parse error response.`,\n );\n }\n\n const errorMessage =\n errorBody?.error?.message ??\n `ServiceNow API request failed: ${response.status}`;\n throw new Error(errorMessage);\n }\n\n return (await response.json()) as { items: T; totalCount: number };\n }\n\n async getIncidents(\n queryParams: URLSearchParams,\n ): Promise<PaginatedIncidentsData> {\n const { items, totalCount } = await this.fetchFromServiceNow<\n IncidentPick[]\n >('/incidents', queryParams);\n\n const incidents = incidentsPickToIncidentsData(items);\n return { incidents, totalCount };\n }\n}\n\nexport function incidentsPickToIncidentsData(\n data: IncidentPick[],\n): IncidentsData[] {\n return data.map(item => ({\n sysId: item.sys_id,\n number: item.number,\n shortDescription: item.short_description,\n description: item.description,\n sysCreatedOn: item.sys_created_on,\n priority: item.priority,\n incidentState: item.incident_state,\n url: item.url,\n }));\n}\n"],"names":[],"mappings":";;AA4BO,MAAM,mBAAmB,YAAA,CAAmC;AAAA,EACjE,EAAA,EAAI;AACN,CAAC;AAEM,MAAM,uBAAA,CAAwD;AAAA,EACnE,WAAA,CACmB,YAAA,EACA,QAAA,EACA,WAAA,EACjB;AAHiB,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AAAA,EAChB;AAAA,EAEH,MAAc,mBAAA,CACZ,IAAA,EACA,WAAA,EAC2C;AAC3C,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,YAAA,CAAa,WAAW,YAAY,CAAA;AACjE,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,SAAS,CAAA,EAAG,IAAI,GAAG,WAAA,GAAc,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AAEtE,IAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,IAAA,CAAK,YAAY,cAAA,EAAe;AACxD,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,aAAA,EAAe,UAAU,KAAK,CAAA;AAAA,KAChC;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,QAAA,CAAS,MAAM,GAAA,EAAK,EAAE,SAAS,CAAA;AAC3D,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,IAAI,SAAA;AACJ,MAAA,IAAI;AACF,QAAA,SAAA,GAAY,MAAM,SAAS,IAAA,EAAK;AAAA,MAClC,SAAS,CAAA,EAAG;AACV,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA,+BAAA,EAAkC,SAAS,MAAM,CAAA,kCAAA;AAAA,SACnD;AAAA,MACF;AAEA,MAAA,MAAM,eACJ,SAAA,EAAW,KAAA,EAAO,OAAA,IAClB,CAAA,+BAAA,EAAkC,SAAS,MAAM,CAAA,CAAA;AACnD,MAAA,MAAM,IAAI,MAAM,YAAY,CAAA;AAAA,IAC9B;AAEA,IAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,EAC9B;AAAA,EAEA,MAAM,aACJ,WAAA,EACiC;AACjC,IAAA,MAAM,EAAE,OAAO,UAAA,EAAW,GAAI,MAAM,IAAA,CAAK,mBAAA,CAEvC,cAAc,WAAW,CAAA;AAE3B,IAAA,MAAM,SAAA,GAAY,6BAA6B,KAAK,CAAA;AACpD,IAAA,OAAO,EAAE,WAAW,UAAA,EAAW;AAAA,EACjC;AACF;AAEO,SAAS,6BACd,IAAA,EACiB;AACjB,EAAA,OAAO,IAAA,CAAK,IAAI,CAAA,IAAA,MAAS;AAAA,IACvB,OAAO,IAAA,CAAK,MAAA;AAAA,IACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,kBAAkB,IAAA,CAAK,iBAAA;AAAA,IACvB,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,cAAc,IAAA,CAAK,cAAA;AAAA,IACnB,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,eAAe,IAAA,CAAK,cAAA;AAAA,IACpB,KAAK,IAAA,CAAK;AAAA,GACZ,CAAE,CAAA;AACJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Router.esm.js","sources":["../../src/components/Router.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { MemoryRouter } from 'react-router-dom';\nimport { EntityServicenowContent } from './Servicenow';\n\n/**\n * separately export the router\n *\n * @public\n */\nexport const Router = () => {\n return (\n <MemoryRouter>\n <EntityServicenowContent />\n </MemoryRouter>\n );\n};\n"],"names":[],"mappings":";;;;AAuBO,MAAM,SAAS,MAAM;AAC1B,EAAA,uBACG,GAAA,CAAA,YAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,uBAAA,EAAA,EAAwB,CAC3B,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"Router.esm.js","sources":["../../src/components/Router.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { MemoryRouter } from 'react-router-dom';\nimport { EntityServicenowContent } from './Servicenow';\n\n/**\n * separately export the router\n *\n * @public\n */\nexport const Router = () => {\n return (\n <MemoryRouter>\n <EntityServicenowContent />\n </MemoryRouter>\n );\n};\n"],"names":[],"mappings":";;;;AAuBO,MAAM,SAAS,MAAM;AAC1B,EAAA,uBACE,GAAA,CAAC,YAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,uBAAA,EAAA,EAAwB,CAAA,EAC3B,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ClosedIcon.esm.js","sources":["../../../src/components/Servicenow/ClosedIcon.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CustomSvgIcon } from './CustomSvgIcon';\n\nexport const ClosedIcon = (props: any) => (\n <CustomSvgIcon\n viewBox=\"0 0 16 16\"\n path={\n <path d=\"M2.333 8.667c-.278 0-.486-.236-.65-.4-.163-.163-.4-.372-.4-.65s.236-.486.4-.65c.163-.163.372-.4.65-.4h4c.278 0 .486.236.65.4.163.163.4.372.4.65s-.236.486-.4.65c-.163.163-.372.4-.65.4h-4Zm7.333 0c-.278 0-.486-.236-.65-.4-.163-.163-.4-.372-.4-.65s.236-.486.4-.65c.163-.163.372-.4.65-.4h4c.278 0 .486.236.65.4.163.163.4.372.4.65s-.236.486-.4.65c-.163.163-.372.4-.65.4h-4Z\" />\n }\n {...props}\n />\n);\n"],"names":[],"mappings":";;;AAkBa,MAAA,UAAA,GAAa,CAAC,KACzB,qBAAA,GAAA;AAAA,EAAC,aAAA;AAAA,EAAA;AAAA,IACC,OAAQ,EAAA,WAAA;AAAA,IACR,IACE,kBAAA,GAAA,CAAC,MAAK,EAAA,EAAA,CAAA,EAAE,kXAAmX,EAAA,CAAA;AAAA,IAE5X,GAAG;AAAA;AACN;;;;"}
1
+ {"version":3,"file":"ClosedIcon.esm.js","sources":["../../../src/components/Servicenow/ClosedIcon.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CustomSvgIcon } from './CustomSvgIcon';\n\nexport const ClosedIcon = (props: any) => (\n <CustomSvgIcon\n viewBox=\"0 0 16 16\"\n path={\n <path d=\"M2.333 8.667c-.278 0-.486-.236-.65-.4-.163-.163-.4-.372-.4-.65s.236-.486.4-.65c.163-.163.372-.4.65-.4h4c.278 0 .486.236.65.4.163.163.4.372.4.65s-.236.486-.4.65c-.163.163-.372.4-.65.4h-4Zm7.333 0c-.278 0-.486-.236-.65-.4-.163-.163-.4-.372-.4-.65s.236-.486.4-.65c.163-.163.372-.4.65-.4h4c.278 0 .486.236.65.4.163.163.4.372.4.65s-.236.486-.4.65c-.163.163-.372.4-.65.4h-4Z\" />\n }\n {...props}\n />\n);\n"],"names":[],"mappings":";;;AAkBO,MAAM,UAAA,GAAa,CAAC,KAAA,qBACzB,GAAA;AAAA,EAAC,aAAA;AAAA,EAAA;AAAA,IACC,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,kBACE,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,kXAAA,EAAmX,CAAA;AAAA,IAE5X,GAAG;AAAA;AACN;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"CustomSvgIcon.esm.js","sources":["../../../src/components/Servicenow/CustomSvgIcon.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport SvgIcon from '@mui/material/SvgIcon';\n\nexport const CustomSvgIcon = ({\n path,\n viewBox = '0 0 24 24',\n ...props\n}: any) => {\n return (\n <SvgIcon viewBox={viewBox} {...props}>\n {path}\n </SvgIcon>\n );\n};\n"],"names":[],"mappings":";;;AAkBO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,IAAA;AAAA,EACA,OAAU,GAAA,WAAA;AAAA,EACV,GAAG;AACL,CAAW,KAAA;AACT,EAAA,uBACG,GAAA,CAAA,OAAA,EAAA,EAAQ,OAAmB,EAAA,GAAG,OAC5B,QACH,EAAA,IAAA,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"CustomSvgIcon.esm.js","sources":["../../../src/components/Servicenow/CustomSvgIcon.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport SvgIcon from '@mui/material/SvgIcon';\n\nexport const CustomSvgIcon = ({\n path,\n viewBox = '0 0 24 24',\n ...props\n}: any) => {\n return (\n <SvgIcon viewBox={viewBox} {...props}>\n {path}\n </SvgIcon>\n );\n};\n"],"names":[],"mappings":";;;AAkBO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,IAAA;AAAA,EACA,OAAA,GAAU,WAAA;AAAA,EACV,GAAG;AACL,CAAA,KAAW;AACT,EAAA,uBACE,GAAA,CAAC,OAAA,EAAA,EAAQ,OAAA,EAAmB,GAAG,OAC5B,QAAA,EAAA,IAAA,EACH,CAAA;AAEJ;;;;"}
@@ -20,7 +20,7 @@ import { useDebouncedValue } from '../../hooks/useDebouncedValue.esm.js';
20
20
  import { useQueryState } from '../../hooks/useQueryState.esm.js';
21
21
  import { useQueryArrayState } from '../../hooks/useQueryArrayState.esm.js';
22
22
  import { serviceNowApiRef } from '../../api/ServiceNowBackendClient.esm.js';
23
- import { useUserEmail } from '../../hooks/useUserEmail.esm.js';
23
+ import useUserEmail from '../../hooks/useUserEmail.esm.js';
24
24
  import { useUpdateQueryParams } from '../../hooks/useQueryHelpers.esm.js';
25
25
  import { useTranslation } from '../../hooks/useTranslation.esm.js';
26
26
 
@@ -1 +1 @@
1
- {"version":3,"file":"EntityServicenowContent.esm.js","sources":["../../../src/components/Servicenow/EntityServicenowContent.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useEffect, useState, MouseEvent, ChangeEvent, useMemo } from 'react';\nimport { identityApiRef, useApi } from '@backstage/core-plugin-api';\n\nimport {\n CatalogFilterLayout,\n useEntity,\n} from '@backstage/plugin-catalog-react';\nimport { Table } from '@backstage/core-components';\n\nimport Box from '@mui/material/Box';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport TableBody from '@mui/material/TableBody';\nimport TableRow from '@mui/material/TableRow';\nimport TableCell from '@mui/material/TableCell';\nimport TablePagination from '@mui/material/TablePagination';\n\nimport {\n Order,\n SortingOrderEnum,\n} from '@backstage-community/plugin-servicenow-common';\n\nimport { IncidentsFilter } from './IncidentsFilter';\nimport { useIncidentsListColumns } from './IncidentsListColumns';\nimport { IncidentsTableBody } from './IncidentsTableBody';\nimport { IncidentsTableHeader } from './IncidentsTableHeader';\nimport {\n IncidentTableFieldEnum,\n type IncidentsData,\n type IncidentTableField,\n} from '../../types';\nimport { buildIncidentQueryParams } from '../../utils/queryParamsUtils';\nimport { useDebouncedValue } from '../../hooks/useDebouncedValue';\nimport { useQueryState } from '../../hooks/useQueryState';\nimport { useQueryArrayState } from '../../hooks/useQueryArrayState';\nimport { serviceNowApiRef } from '../../api/ServiceNowBackendClient';\nimport useUserEmail from '../../hooks/useUserEmail';\nimport { useUpdateQueryParams } from '../../hooks/useQueryHelpers';\nimport { useTranslation } from '../../hooks/useTranslation';\n\nexport const EntityServicenowContent = () => {\n const { t } = useTranslation();\n const { entity } = useEntity();\n const serviceNowApi = useApi(serviceNowApiRef);\n const incidentsListColumns = useIncidentsListColumns();\n\n const [search, setSearch] = useQueryState<string>('search', '');\n const [input, setInput] = useState(search);\n const debouncedInput = useDebouncedValue(input, 300);\n\n const [order, setOrder] = useQueryState<Order>('order', SortingOrderEnum.Asc);\n const [orderBy, setOrderBy] = useQueryState<IncidentTableField>(\n 'orderBy',\n IncidentTableFieldEnum.Number,\n );\n\n const [rowsPerPage] = useQueryState<number>('limit', 5);\n const [offset, setOffset] = useQueryState<number>('offset', 0);\n const [state] = useQueryArrayState('state', []);\n const [priority] = useQueryArrayState('priority', []);\n\n const pageNumber = Math.floor(offset / rowsPerPage);\n\n const [count, setCount] = useState<number>(0);\n const [incidentsData, setIncidentsData] = useState<IncidentsData[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const updateQueryParams = useUpdateQueryParams();\n\n const servicenowAnnotations = useMemo(() => {\n const annotations = entity.metadata.annotations;\n const snAnnotations: Record<string, string> = {};\n if (annotations) {\n for (const [key, value] of Object.entries(annotations)) {\n if (key.startsWith('servicenow.com/entity-id')) {\n snAnnotations.entityId = value;\n continue;\n }\n if (key.startsWith('servicenow.com/')) {\n const field = key.substring('servicenow.com/'.length);\n snAnnotations[field] = value;\n }\n }\n }\n return snAnnotations;\n }, [entity.metadata.annotations]);\n\n const kind = entity.kind.toLocaleLowerCase('en-US');\n const userEmail = useUserEmail(kind);\n\n const identityApi = useApi(identityApiRef);\n\n useEffect(() => {\n identityApi.getBackstageIdentity().then(identity => {\n if (identity.userEntityRef) {\n localStorage.setItem('userEntityRef', identity.userEntityRef);\n }\n });\n }, [identityApi]);\n\n useEffect(() => {\n if (debouncedInput !== search) {\n setSearch(debouncedInput);\n setOffset(0);\n }\n }, [debouncedInput, search, setSearch, setOffset]);\n\n useEffect(() => {\n async function fetchIncidents() {\n setLoading(true);\n setError(null);\n\n if (!userEmail && Object.keys(servicenowAnnotations).length === 0) {\n setIncidentsData([]);\n setLoading(false);\n return;\n }\n\n try {\n const queryParams = buildIncidentQueryParams({\n limit: rowsPerPage,\n offset,\n order,\n orderBy,\n search: search,\n priority: priority ?? undefined,\n state: state ?? undefined,\n userEmail,\n ...servicenowAnnotations,\n });\n\n const { incidents, totalCount } = await serviceNowApi.getIncidents(\n queryParams,\n );\n setIncidentsData(incidents);\n setCount(totalCount);\n } catch (e) {\n setError((e as Error).message);\n setIncidentsData([]);\n } finally {\n setLoading(false);\n }\n }\n\n fetchIncidents();\n }, [\n rowsPerPage,\n offset,\n order,\n orderBy,\n search,\n serviceNowApi,\n servicenowAnnotations,\n priority,\n state,\n userEmail,\n ]);\n\n const handleRowsPerPageChange = (event: ChangeEvent<HTMLInputElement>) => {\n const newLimit = parseInt(event.target.value, 10);\n updateQueryParams({\n limit: String(newLimit),\n offset: '0',\n });\n };\n\n const handlePageChange = (_event: unknown, page: number) => {\n setOffset(page * rowsPerPage);\n };\n\n const handleRequestSort = (\n _event: MouseEvent<unknown>,\n property: IncidentTableField,\n ) => {\n const isAsc = orderBy === property && order === SortingOrderEnum.Asc;\n setOrder(isAsc ? SortingOrderEnum.Desc : SortingOrderEnum.Asc);\n setOrderBy(property);\n setOffset(0);\n };\n\n const handleSearch = (str: string) => {\n setInput(str);\n };\n\n const IncidentsTableHeaderComponent = () => (\n <IncidentsTableHeader\n order={order}\n orderBy={orderBy}\n onRequestSort={handleRequestSort}\n />\n );\n\n const IncidentsTableBodyComponent = () =>\n loading ? (\n <TableBody>\n <TableRow>\n <TableCell colSpan={incidentsListColumns.length} align=\"center\">\n <Box sx={{ py: 3 }}>\n <CircularProgress />\n </Box>\n </TableCell>\n </TableRow>\n </TableBody>\n ) : (\n <IncidentsTableBody rows={incidentsData} />\n );\n\n const TablePaginationComponent = () => {\n return (\n <TablePagination\n rowsPerPageOptions={[5, 10, 20, 50, 100].map(n => ({\n value: n,\n label: t('table.labelRowsSelect', { count: String(n) }),\n }))}\n component=\"div\"\n sx={{ mr: 1 }}\n count={count ?? 0}\n rowsPerPage={rowsPerPage}\n page={pageNumber}\n onPageChange={handlePageChange}\n onRowsPerPageChange={handleRowsPerPageChange}\n labelRowsPerPage={null}\n showFirstButton\n showLastButton\n />\n );\n };\n\n return (\n <Box>\n <CatalogFilterLayout>\n <CatalogFilterLayout.Filters>\n <IncidentsFilter />\n </CatalogFilterLayout.Filters>\n <CatalogFilterLayout.Content>\n {error ? (\n <Box sx={{ padding: 2, color: 'error.main' }}>\n {t('errors.loadingIncidents', { error })}\n </Box>\n ) : (\n <Table\n data={loading ? [] : incidentsData}\n columns={incidentsListColumns}\n onSearchChange={handleSearch}\n title={\n count === 0\n ? t('page.title')\n : t('page.titleWithCount', { count: String(count) })\n }\n localization={{\n toolbar: { searchPlaceholder: t('table.searchPlaceholder') },\n }}\n components={{\n Header: IncidentsTableHeaderComponent,\n Body: IncidentsTableBodyComponent,\n Pagination: TablePaginationComponent,\n }}\n emptyContent={\n loading ? null : (\n <Box\n data-testid=\"no-incidents-found\"\n sx={{\n padding: 2,\n display: 'flex',\n justifyContent: 'center',\n }}\n >\n {t('table.emptyContent')}\n </Box>\n )\n }\n isLoading={loading}\n />\n )}\n </CatalogFilterLayout.Content>\n </CatalogFilterLayout>\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EntityServicenowContent.esm.js","sources":["../../../src/components/Servicenow/EntityServicenowContent.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useEffect, useState, MouseEvent, ChangeEvent, useMemo } from 'react';\nimport { identityApiRef, useApi } from '@backstage/core-plugin-api';\n\nimport {\n CatalogFilterLayout,\n useEntity,\n} from '@backstage/plugin-catalog-react';\nimport { Table } from '@backstage/core-components';\n\nimport Box from '@mui/material/Box';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport TableBody from '@mui/material/TableBody';\nimport TableRow from '@mui/material/TableRow';\nimport TableCell from '@mui/material/TableCell';\nimport TablePagination from '@mui/material/TablePagination';\n\nimport {\n Order,\n SortingOrderEnum,\n} from '@backstage-community/plugin-servicenow-common';\n\nimport { IncidentsFilter } from './IncidentsFilter';\nimport { useIncidentsListColumns } from './IncidentsListColumns';\nimport { IncidentsTableBody } from './IncidentsTableBody';\nimport { IncidentsTableHeader } from './IncidentsTableHeader';\nimport {\n IncidentTableFieldEnum,\n type IncidentsData,\n type IncidentTableField,\n} from '../../types';\nimport { buildIncidentQueryParams } from '../../utils/queryParamsUtils';\nimport { useDebouncedValue } from '../../hooks/useDebouncedValue';\nimport { useQueryState } from '../../hooks/useQueryState';\nimport { useQueryArrayState } from '../../hooks/useQueryArrayState';\nimport { serviceNowApiRef } from '../../api/ServiceNowBackendClient';\nimport useUserEmail from '../../hooks/useUserEmail';\nimport { useUpdateQueryParams } from '../../hooks/useQueryHelpers';\nimport { useTranslation } from '../../hooks/useTranslation';\n\nexport const EntityServicenowContent = () => {\n const { t } = useTranslation();\n const { entity } = useEntity();\n const serviceNowApi = useApi(serviceNowApiRef);\n const incidentsListColumns = useIncidentsListColumns();\n\n const [search, setSearch] = useQueryState<string>('search', '');\n const [input, setInput] = useState(search);\n const debouncedInput = useDebouncedValue(input, 300);\n\n const [order, setOrder] = useQueryState<Order>('order', SortingOrderEnum.Asc);\n const [orderBy, setOrderBy] = useQueryState<IncidentTableField>(\n 'orderBy',\n IncidentTableFieldEnum.Number,\n );\n\n const [rowsPerPage] = useQueryState<number>('limit', 5);\n const [offset, setOffset] = useQueryState<number>('offset', 0);\n const [state] = useQueryArrayState('state', []);\n const [priority] = useQueryArrayState('priority', []);\n\n const pageNumber = Math.floor(offset / rowsPerPage);\n\n const [count, setCount] = useState<number>(0);\n const [incidentsData, setIncidentsData] = useState<IncidentsData[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const updateQueryParams = useUpdateQueryParams();\n\n const servicenowAnnotations = useMemo(() => {\n const annotations = entity.metadata.annotations;\n const snAnnotations: Record<string, string> = {};\n if (annotations) {\n for (const [key, value] of Object.entries(annotations)) {\n if (key.startsWith('servicenow.com/entity-id')) {\n snAnnotations.entityId = value;\n continue;\n }\n if (key.startsWith('servicenow.com/')) {\n const field = key.substring('servicenow.com/'.length);\n snAnnotations[field] = value;\n }\n }\n }\n return snAnnotations;\n }, [entity.metadata.annotations]);\n\n const kind = entity.kind.toLocaleLowerCase('en-US');\n const userEmail = useUserEmail(kind);\n\n const identityApi = useApi(identityApiRef);\n\n useEffect(() => {\n identityApi.getBackstageIdentity().then(identity => {\n if (identity.userEntityRef) {\n localStorage.setItem('userEntityRef', identity.userEntityRef);\n }\n });\n }, [identityApi]);\n\n useEffect(() => {\n if (debouncedInput !== search) {\n setSearch(debouncedInput);\n setOffset(0);\n }\n }, [debouncedInput, search, setSearch, setOffset]);\n\n useEffect(() => {\n async function fetchIncidents() {\n setLoading(true);\n setError(null);\n\n if (!userEmail && Object.keys(servicenowAnnotations).length === 0) {\n setIncidentsData([]);\n setLoading(false);\n return;\n }\n\n try {\n const queryParams = buildIncidentQueryParams({\n limit: rowsPerPage,\n offset,\n order,\n orderBy,\n search: search,\n priority: priority ?? undefined,\n state: state ?? undefined,\n userEmail,\n ...servicenowAnnotations,\n });\n\n const { incidents, totalCount } = await serviceNowApi.getIncidents(\n queryParams,\n );\n setIncidentsData(incidents);\n setCount(totalCount);\n } catch (e) {\n setError((e as Error).message);\n setIncidentsData([]);\n } finally {\n setLoading(false);\n }\n }\n\n fetchIncidents();\n }, [\n rowsPerPage,\n offset,\n order,\n orderBy,\n search,\n serviceNowApi,\n servicenowAnnotations,\n priority,\n state,\n userEmail,\n ]);\n\n const handleRowsPerPageChange = (event: ChangeEvent<HTMLInputElement>) => {\n const newLimit = parseInt(event.target.value, 10);\n updateQueryParams({\n limit: String(newLimit),\n offset: '0',\n });\n };\n\n const handlePageChange = (_event: unknown, page: number) => {\n setOffset(page * rowsPerPage);\n };\n\n const handleRequestSort = (\n _event: MouseEvent<unknown>,\n property: IncidentTableField,\n ) => {\n const isAsc = orderBy === property && order === SortingOrderEnum.Asc;\n setOrder(isAsc ? SortingOrderEnum.Desc : SortingOrderEnum.Asc);\n setOrderBy(property);\n setOffset(0);\n };\n\n const handleSearch = (str: string) => {\n setInput(str);\n };\n\n const IncidentsTableHeaderComponent = () => (\n <IncidentsTableHeader\n order={order}\n orderBy={orderBy}\n onRequestSort={handleRequestSort}\n />\n );\n\n const IncidentsTableBodyComponent = () =>\n loading ? (\n <TableBody>\n <TableRow>\n <TableCell colSpan={incidentsListColumns.length} align=\"center\">\n <Box sx={{ py: 3 }}>\n <CircularProgress />\n </Box>\n </TableCell>\n </TableRow>\n </TableBody>\n ) : (\n <IncidentsTableBody rows={incidentsData} />\n );\n\n const TablePaginationComponent = () => {\n return (\n <TablePagination\n rowsPerPageOptions={[5, 10, 20, 50, 100].map(n => ({\n value: n,\n label: t('table.labelRowsSelect', { count: String(n) }),\n }))}\n component=\"div\"\n sx={{ mr: 1 }}\n count={count ?? 0}\n rowsPerPage={rowsPerPage}\n page={pageNumber}\n onPageChange={handlePageChange}\n onRowsPerPageChange={handleRowsPerPageChange}\n labelRowsPerPage={null}\n showFirstButton\n showLastButton\n />\n );\n };\n\n return (\n <Box>\n <CatalogFilterLayout>\n <CatalogFilterLayout.Filters>\n <IncidentsFilter />\n </CatalogFilterLayout.Filters>\n <CatalogFilterLayout.Content>\n {error ? (\n <Box sx={{ padding: 2, color: 'error.main' }}>\n {t('errors.loadingIncidents', { error })}\n </Box>\n ) : (\n <Table\n data={loading ? [] : incidentsData}\n columns={incidentsListColumns}\n onSearchChange={handleSearch}\n title={\n count === 0\n ? t('page.title')\n : t('page.titleWithCount', { count: String(count) })\n }\n localization={{\n toolbar: { searchPlaceholder: t('table.searchPlaceholder') },\n }}\n components={{\n Header: IncidentsTableHeaderComponent,\n Body: IncidentsTableBodyComponent,\n Pagination: TablePaginationComponent,\n }}\n emptyContent={\n loading ? null : (\n <Box\n data-testid=\"no-incidents-found\"\n sx={{\n padding: 2,\n display: 'flex',\n justifyContent: 'center',\n }}\n >\n {t('table.emptyContent')}\n </Box>\n )\n }\n isLoading={loading}\n />\n )}\n </CatalogFilterLayout.Content>\n </CatalogFilterLayout>\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"InProgressIcon.esm.js","sources":["../../../src/components/Servicenow/InProgressIcon.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CustomSvgIcon } from './CustomSvgIcon';\n\nexport const InProgressIcon = (props: any) => (\n <CustomSvgIcon\n viewBox=\"0 0 16 16\"\n path={\n <path d=\"M7.99992 14.6667C7.08881 14.6667 6.2277 14.4917 5.41658 14.1417C4.60547 13.7917 3.89714 13.3139 3.29159 12.7083C2.68603 12.1028 2.20825 11.3945 1.85825 10.5833C1.50825 9.77223 1.33325 8.91112 1.33325 8.00001C1.33325 7.07779 1.50825 6.2139 1.85825 5.40834C2.20825 4.60279 2.68603 3.89723 3.29159 3.29168C3.89714 2.68612 4.60547 2.20834 5.41658 1.85834C6.2277 1.50834 7.08881 1.33334 7.99992 1.33334C8.18881 1.33334 8.34714 1.39723 8.47492 1.52501C8.6027 1.65279 8.66658 1.81112 8.66658 2.00001C8.66658 2.1889 8.6027 2.34723 8.47492 2.47501C8.34714 2.60279 8.18881 2.66668 7.99992 2.66668C6.52214 2.66668 5.26381 3.18612 4.22492 4.22501C3.18603 5.2639 2.66659 6.52223 2.66659 8.00001C2.66659 9.47779 3.18603 10.7361 4.22492 11.775C5.26381 12.8139 6.52214 13.3333 7.99992 13.3333C9.4777 13.3333 10.736 12.8139 11.7749 11.775C12.8138 10.7361 13.3333 9.47779 13.3333 8.00001C13.3333 7.81112 13.3971 7.65279 13.5249 7.52501C13.6527 7.39723 13.811 7.33334 13.9999 7.33334C14.1888 7.33334 14.3471 7.39723 14.4749 7.52501C14.6027 7.65279 14.6666 7.81112 14.6666 8.00001C14.6666 8.91112 14.4916 9.77223 14.1416 10.5833C13.7916 11.3945 13.3138 12.1028 12.7083 12.7083C12.1027 13.3139 11.3971 13.7917 10.5916 14.1417C9.78603 14.4917 8.92214 14.6667 7.99992 14.6667Z\" />\n }\n {...props}\n />\n);\n"],"names":[],"mappings":";;;AAkBa,MAAA,cAAA,GAAiB,CAAC,KAC7B,qBAAA,GAAA;AAAA,EAAC,aAAA;AAAA,EAAA;AAAA,IACC,OAAQ,EAAA,WAAA;AAAA,IACR,IACE,kBAAA,GAAA,CAAC,MAAK,EAAA,EAAA,CAAA,EAAE,uuCAAwuC,EAAA,CAAA;AAAA,IAEjvC,GAAG;AAAA;AACN;;;;"}
1
+ {"version":3,"file":"InProgressIcon.esm.js","sources":["../../../src/components/Servicenow/InProgressIcon.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CustomSvgIcon } from './CustomSvgIcon';\n\nexport const InProgressIcon = (props: any) => (\n <CustomSvgIcon\n viewBox=\"0 0 16 16\"\n path={\n <path d=\"M7.99992 14.6667C7.08881 14.6667 6.2277 14.4917 5.41658 14.1417C4.60547 13.7917 3.89714 13.3139 3.29159 12.7083C2.68603 12.1028 2.20825 11.3945 1.85825 10.5833C1.50825 9.77223 1.33325 8.91112 1.33325 8.00001C1.33325 7.07779 1.50825 6.2139 1.85825 5.40834C2.20825 4.60279 2.68603 3.89723 3.29159 3.29168C3.89714 2.68612 4.60547 2.20834 5.41658 1.85834C6.2277 1.50834 7.08881 1.33334 7.99992 1.33334C8.18881 1.33334 8.34714 1.39723 8.47492 1.52501C8.6027 1.65279 8.66658 1.81112 8.66658 2.00001C8.66658 2.1889 8.6027 2.34723 8.47492 2.47501C8.34714 2.60279 8.18881 2.66668 7.99992 2.66668C6.52214 2.66668 5.26381 3.18612 4.22492 4.22501C3.18603 5.2639 2.66659 6.52223 2.66659 8.00001C2.66659 9.47779 3.18603 10.7361 4.22492 11.775C5.26381 12.8139 6.52214 13.3333 7.99992 13.3333C9.4777 13.3333 10.736 12.8139 11.7749 11.775C12.8138 10.7361 13.3333 9.47779 13.3333 8.00001C13.3333 7.81112 13.3971 7.65279 13.5249 7.52501C13.6527 7.39723 13.811 7.33334 13.9999 7.33334C14.1888 7.33334 14.3471 7.39723 14.4749 7.52501C14.6027 7.65279 14.6666 7.81112 14.6666 8.00001C14.6666 8.91112 14.4916 9.77223 14.1416 10.5833C13.7916 11.3945 13.3138 12.1028 12.7083 12.7083C12.1027 13.3139 11.3971 13.7917 10.5916 14.1417C9.78603 14.4917 8.92214 14.6667 7.99992 14.6667Z\" />\n }\n {...props}\n />\n);\n"],"names":[],"mappings":";;;AAkBO,MAAM,cAAA,GAAiB,CAAC,KAAA,qBAC7B,GAAA;AAAA,EAAC,aAAA;AAAA,EAAA;AAAA,IACC,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,kBACE,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,uuCAAA,EAAwuC,CAAA;AAAA,IAEjvC,GAAG;AAAA;AACN;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"IncidentsFilter.esm.js","sources":["../../../src/components/Servicenow/IncidentsFilter.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useMemo, useCallback } from 'react';\n\nimport { SelectItem } from '@backstage/core-components';\n\nimport Box from '@mui/material/Box';\n\nimport { IncidentEnumFilter } from '../shared-components/IncidentEnumFilter';\nimport { useIncidentStateMap, usePriorityMap } from '../../utils/incidentUtils';\nimport { useQueryArrayFilter } from '../../hooks/useQueryArrayFilter';\nimport { useUpdateQueryParams } from '../../hooks/useQueryHelpers';\nimport { useTranslation } from '../../hooks/useTranslation';\n\nexport const IncidentsFilter = () => {\n const { t } = useTranslation();\n const stateFilter = useQueryArrayFilter('state');\n const priorityFilter = useQueryArrayFilter('priority');\n const updateQueryParams = useUpdateQueryParams();\n const incidentStateMap = useIncidentStateMap();\n const priorityMap = usePriorityMap();\n\n const stateValue = useMemo(() => stateFilter.current, [stateFilter]);\n const priorityValue = useMemo(() => priorityFilter.current, [priorityFilter]);\n\n const handleStateChange = useCallback(\n (_e: any, value: SelectItem[]) => {\n updateQueryParams({\n state: value.map(v => v.value).join(','),\n offset: '0',\n });\n },\n [updateQueryParams],\n );\n\n const handlePriorityChange = useCallback(\n (_e: any, value: SelectItem[]) => {\n updateQueryParams({\n priority: value.map(v => v.value).join(','),\n offset: '0',\n });\n },\n [updateQueryParams],\n );\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n minWidth: { xs: 200, lg: 'auto' },\n }}\n >\n <IncidentEnumFilter\n label={t('filter.state')}\n filterKey=\"state\"\n dataMap={incidentStateMap}\n value={stateValue}\n onChange={handleStateChange}\n />\n <IncidentEnumFilter\n label={t('filter.priority')}\n filterKey=\"priority\"\n dataMap={priorityMap}\n value={priorityValue}\n onChange={handlePriorityChange}\n />\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AA4BO,MAAM,kBAAkB,MAAM;AACnC,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAC7B,EAAM,MAAA,WAAA,GAAc,oBAAoB,OAAO,CAAA;AAC/C,EAAM,MAAA,cAAA,GAAiB,oBAAoB,UAAU,CAAA;AACrD,EAAA,MAAM,oBAAoB,oBAAqB,EAAA;AAC/C,EAAA,MAAM,mBAAmB,mBAAoB,EAAA;AAC7C,EAAA,MAAM,cAAc,cAAe,EAAA;AAEnC,EAAA,MAAM,aAAa,OAAQ,CAAA,MAAM,YAAY,OAAS,EAAA,CAAC,WAAW,CAAC,CAAA;AACnE,EAAA,MAAM,gBAAgB,OAAQ,CAAA,MAAM,eAAe,OAAS,EAAA,CAAC,cAAc,CAAC,CAAA;AAE5E,EAAA,MAAM,iBAAoB,GAAA,WAAA;AAAA,IACxB,CAAC,IAAS,KAAwB,KAAA;AAChC,MAAkB,iBAAA,CAAA;AAAA,QAChB,KAAA,EAAO,MAAM,GAAI,CAAA,CAAA,CAAA,KAAK,EAAE,KAAK,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,QACvC,MAAQ,EAAA;AAAA,OACT,CAAA;AAAA,KACH;AAAA,IACA,CAAC,iBAAiB;AAAA,GACpB;AAEA,EAAA,MAAM,oBAAuB,GAAA,WAAA;AAAA,IAC3B,CAAC,IAAS,KAAwB,KAAA;AAChC,MAAkB,iBAAA,CAAA;AAAA,QAChB,QAAA,EAAU,MAAM,GAAI,CAAA,CAAA,CAAA,KAAK,EAAE,KAAK,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,QAC1C,MAAQ,EAAA;AAAA,OACT,CAAA;AAAA,KACH;AAAA,IACA,CAAC,iBAAiB;AAAA,GACpB;AAEA,EACE,uBAAA,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,EAAI,EAAA;AAAA,QACF,OAAS,EAAA,MAAA;AAAA,QACT,aAAe,EAAA,QAAA;AAAA,QACf,GAAK,EAAA,CAAA;AAAA,QACL,QAAU,EAAA,EAAE,EAAI,EAAA,GAAA,EAAK,IAAI,MAAO;AAAA,OAClC;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,kBAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,EAAE,cAAc,CAAA;AAAA,YACvB,SAAU,EAAA,OAAA;AAAA,YACV,OAAS,EAAA,gBAAA;AAAA,YACT,KAAO,EAAA,UAAA;AAAA,YACP,QAAU,EAAA;AAAA;AAAA,SACZ;AAAA,wBACA,GAAA;AAAA,UAAC,kBAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,EAAE,iBAAiB,CAAA;AAAA,YAC1B,SAAU,EAAA,UAAA;AAAA,YACV,OAAS,EAAA,WAAA;AAAA,YACT,KAAO,EAAA,aAAA;AAAA,YACP,QAAU,EAAA;AAAA;AAAA;AACZ;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"IncidentsFilter.esm.js","sources":["../../../src/components/Servicenow/IncidentsFilter.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useMemo, useCallback } from 'react';\n\nimport { SelectItem } from '@backstage/core-components';\n\nimport Box from '@mui/material/Box';\n\nimport { IncidentEnumFilter } from '../shared-components/IncidentEnumFilter';\nimport { useIncidentStateMap, usePriorityMap } from '../../utils/incidentUtils';\nimport { useQueryArrayFilter } from '../../hooks/useQueryArrayFilter';\nimport { useUpdateQueryParams } from '../../hooks/useQueryHelpers';\nimport { useTranslation } from '../../hooks/useTranslation';\n\nexport const IncidentsFilter = () => {\n const { t } = useTranslation();\n const stateFilter = useQueryArrayFilter('state');\n const priorityFilter = useQueryArrayFilter('priority');\n const updateQueryParams = useUpdateQueryParams();\n const incidentStateMap = useIncidentStateMap();\n const priorityMap = usePriorityMap();\n\n const stateValue = useMemo(() => stateFilter.current, [stateFilter]);\n const priorityValue = useMemo(() => priorityFilter.current, [priorityFilter]);\n\n const handleStateChange = useCallback(\n (_e: any, value: SelectItem[]) => {\n updateQueryParams({\n state: value.map(v => v.value).join(','),\n offset: '0',\n });\n },\n [updateQueryParams],\n );\n\n const handlePriorityChange = useCallback(\n (_e: any, value: SelectItem[]) => {\n updateQueryParams({\n priority: value.map(v => v.value).join(','),\n offset: '0',\n });\n },\n [updateQueryParams],\n );\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n gap: 2,\n minWidth: { xs: 200, lg: 'auto' },\n }}\n >\n <IncidentEnumFilter\n label={t('filter.state')}\n filterKey=\"state\"\n dataMap={incidentStateMap}\n value={stateValue}\n onChange={handleStateChange}\n />\n <IncidentEnumFilter\n label={t('filter.priority')}\n filterKey=\"priority\"\n dataMap={priorityMap}\n value={priorityValue}\n onChange={handlePriorityChange}\n />\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AA4BO,MAAM,kBAAkB,MAAM;AACnC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAC7B,EAAA,MAAM,WAAA,GAAc,oBAAoB,OAAO,CAAA;AAC/C,EAAA,MAAM,cAAA,GAAiB,oBAAoB,UAAU,CAAA;AACrD,EAAA,MAAM,oBAAoB,oBAAA,EAAqB;AAC/C,EAAA,MAAM,mBAAmB,mBAAA,EAAoB;AAC7C,EAAA,MAAM,cAAc,cAAA,EAAe;AAEnC,EAAA,MAAM,aAAa,OAAA,CAAQ,MAAM,YAAY,OAAA,EAAS,CAAC,WAAW,CAAC,CAAA;AACnE,EAAA,MAAM,gBAAgB,OAAA,CAAQ,MAAM,eAAe,OAAA,EAAS,CAAC,cAAc,CAAC,CAAA;AAE5E,EAAA,MAAM,iBAAA,GAAoB,WAAA;AAAA,IACxB,CAAC,IAAS,KAAA,KAAwB;AAChC,MAAA,iBAAA,CAAkB;AAAA,QAChB,KAAA,EAAO,MAAM,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,KAAK,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,QACvC,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,iBAAiB;AAAA,GACpB;AAEA,EAAA,MAAM,oBAAA,GAAuB,WAAA;AAAA,IAC3B,CAAC,IAAS,KAAA,KAAwB;AAChC,MAAA,iBAAA,CAAkB;AAAA,QAChB,QAAA,EAAU,MAAM,GAAA,CAAI,CAAA,CAAA,KAAK,EAAE,KAAK,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,QAC1C,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,iBAAiB;AAAA,GACpB;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI;AAAA,QACF,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,GAAA,EAAK,CAAA;AAAA,QACL,QAAA,EAAU,EAAE,EAAA,EAAI,GAAA,EAAK,IAAI,MAAA;AAAO,OAClC;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,kBAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,EAAE,cAAc,CAAA;AAAA,YACvB,SAAA,EAAU,OAAA;AAAA,YACV,OAAA,EAAS,gBAAA;AAAA,YACT,KAAA,EAAO,UAAA;AAAA,YACP,QAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACA,GAAA;AAAA,UAAC,kBAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,EAAE,iBAAiB,CAAA;AAAA,YAC1B,SAAA,EAAU,UAAA;AAAA,YACV,OAAA,EAAS,WAAA;AAAA,YACT,KAAA,EAAO,aAAA;AAAA,YACP,QAAA,EAAU;AAAA;AAAA;AACZ;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"IncidentsListColumns.esm.js","sources":["../../../src/components/Servicenow/IncidentsListColumns.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { TableColumn } from '@backstage/core-components';\n\nimport { IncidentsData, IncidentTableFieldEnum } from '../../types';\nimport { useTranslation } from '../../hooks/useTranslation';\n\n/**\n * Hook to get translated incidents list columns\n */\nexport const useIncidentsListColumns = (): TableColumn<IncidentsData>[] => {\n const { t } = useTranslation();\n\n return [\n {\n id: 'incidentNumber',\n title: t('table.columns.incidentNumber'),\n field: IncidentTableFieldEnum.Number,\n type: 'string',\n },\n {\n id: 'description',\n title: t('table.columns.description'),\n field: IncidentTableFieldEnum.ShortDescription,\n type: 'string',\n },\n {\n id: 'created',\n title: t('table.columns.created'),\n field: IncidentTableFieldEnum.Created,\n type: 'string',\n },\n {\n id: 'priority',\n title: t('table.columns.priority'),\n field: IncidentTableFieldEnum.Priority,\n type: 'numeric',\n },\n {\n id: 'state',\n title: t('table.columns.state'),\n field: IncidentTableFieldEnum.IncidentState,\n type: 'datetime',\n },\n {\n id: 'actions',\n title: t('table.columns.actions'),\n sorting: false,\n type: 'string',\n },\n ];\n};\n\n/**\n * @deprecated Use useIncidentsListColumns hook instead\n */\nexport const IncidentsListColumns: TableColumn<IncidentsData>[] = [\n {\n id: 'incidentNumber',\n title: 'Incident Number',\n field: IncidentTableFieldEnum.Number,\n type: 'string',\n },\n {\n id: 'description',\n title: 'Description',\n field: IncidentTableFieldEnum.ShortDescription,\n type: 'string',\n },\n {\n id: 'created',\n title: 'Created',\n field: IncidentTableFieldEnum.Created,\n type: 'string',\n },\n {\n id: 'priority',\n title: 'Priority',\n field: IncidentTableFieldEnum.Priority,\n type: 'numeric',\n },\n {\n id: 'state',\n title: 'State',\n field: IncidentTableFieldEnum.IncidentState,\n type: 'datetime',\n },\n {\n id: 'actions',\n title: 'Actions',\n sorting: false,\n type: 'string',\n },\n];\n"],"names":[],"mappings":";;;AAuBO,MAAM,0BAA0B,MAAoC;AACzE,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAE7B,EAAO,OAAA;AAAA,IACL;AAAA,MACE,EAAI,EAAA,gBAAA;AAAA,MACJ,KAAA,EAAO,EAAE,8BAA8B,CAAA;AAAA,MACvC,OAAO,sBAAuB,CAAA,MAAA;AAAA,MAC9B,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,EAAI,EAAA,aAAA;AAAA,MACJ,KAAA,EAAO,EAAE,2BAA2B,CAAA;AAAA,MACpC,OAAO,sBAAuB,CAAA,gBAAA;AAAA,MAC9B,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,EAAI,EAAA,SAAA;AAAA,MACJ,KAAA,EAAO,EAAE,uBAAuB,CAAA;AAAA,MAChC,OAAO,sBAAuB,CAAA,OAAA;AAAA,MAC9B,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,EAAI,EAAA,UAAA;AAAA,MACJ,KAAA,EAAO,EAAE,wBAAwB,CAAA;AAAA,MACjC,OAAO,sBAAuB,CAAA,QAAA;AAAA,MAC9B,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,EAAI,EAAA,OAAA;AAAA,MACJ,KAAA,EAAO,EAAE,qBAAqB,CAAA;AAAA,MAC9B,OAAO,sBAAuB,CAAA,aAAA;AAAA,MAC9B,IAAM,EAAA;AAAA,KACR;AAAA,IACA;AAAA,MACE,EAAI,EAAA,SAAA;AAAA,MACJ,KAAA,EAAO,EAAE,uBAAuB,CAAA;AAAA,MAChC,OAAS,EAAA,KAAA;AAAA,MACT,IAAM,EAAA;AAAA;AACR,GACF;AACF;;;;"}
1
+ {"version":3,"file":"IncidentsListColumns.esm.js","sources":["../../../src/components/Servicenow/IncidentsListColumns.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { TableColumn } from '@backstage/core-components';\n\nimport { IncidentsData, IncidentTableFieldEnum } from '../../types';\nimport { useTranslation } from '../../hooks/useTranslation';\n\n/**\n * Hook to get translated incidents list columns\n */\nexport const useIncidentsListColumns = (): TableColumn<IncidentsData>[] => {\n const { t } = useTranslation();\n\n return [\n {\n id: 'incidentNumber',\n title: t('table.columns.incidentNumber'),\n field: IncidentTableFieldEnum.Number,\n type: 'string',\n },\n {\n id: 'description',\n title: t('table.columns.description'),\n field: IncidentTableFieldEnum.ShortDescription,\n type: 'string',\n },\n {\n id: 'created',\n title: t('table.columns.created'),\n field: IncidentTableFieldEnum.Created,\n type: 'string',\n },\n {\n id: 'priority',\n title: t('table.columns.priority'),\n field: IncidentTableFieldEnum.Priority,\n type: 'numeric',\n },\n {\n id: 'state',\n title: t('table.columns.state'),\n field: IncidentTableFieldEnum.IncidentState,\n type: 'datetime',\n },\n {\n id: 'actions',\n title: t('table.columns.actions'),\n sorting: false,\n type: 'string',\n },\n ];\n};\n\n/**\n * @deprecated Use useIncidentsListColumns hook instead\n */\nexport const IncidentsListColumns: TableColumn<IncidentsData>[] = [\n {\n id: 'incidentNumber',\n title: 'Incident Number',\n field: IncidentTableFieldEnum.Number,\n type: 'string',\n },\n {\n id: 'description',\n title: 'Description',\n field: IncidentTableFieldEnum.ShortDescription,\n type: 'string',\n },\n {\n id: 'created',\n title: 'Created',\n field: IncidentTableFieldEnum.Created,\n type: 'string',\n },\n {\n id: 'priority',\n title: 'Priority',\n field: IncidentTableFieldEnum.Priority,\n type: 'numeric',\n },\n {\n id: 'state',\n title: 'State',\n field: IncidentTableFieldEnum.IncidentState,\n type: 'datetime',\n },\n {\n id: 'actions',\n title: 'Actions',\n sorting: false,\n type: 'string',\n },\n];\n"],"names":[],"mappings":";;;AAuBO,MAAM,0BAA0B,MAAoC;AACzE,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAE7B,EAAA,OAAO;AAAA,IACL;AAAA,MACE,EAAA,EAAI,gBAAA;AAAA,MACJ,KAAA,EAAO,EAAE,8BAA8B,CAAA;AAAA,MACvC,OAAO,sBAAA,CAAuB,MAAA;AAAA,MAC9B,IAAA,EAAM;AAAA,KACR;AAAA,IACA;AAAA,MACE,EAAA,EAAI,aAAA;AAAA,MACJ,KAAA,EAAO,EAAE,2BAA2B,CAAA;AAAA,MACpC,OAAO,sBAAA,CAAuB,gBAAA;AAAA,MAC9B,IAAA,EAAM;AAAA,KACR;AAAA,IACA;AAAA,MACE,EAAA,EAAI,SAAA;AAAA,MACJ,KAAA,EAAO,EAAE,uBAAuB,CAAA;AAAA,MAChC,OAAO,sBAAA,CAAuB,OAAA;AAAA,MAC9B,IAAA,EAAM;AAAA,KACR;AAAA,IACA;AAAA,MACE,EAAA,EAAI,UAAA;AAAA,MACJ,KAAA,EAAO,EAAE,wBAAwB,CAAA;AAAA,MACjC,OAAO,sBAAA,CAAuB,QAAA;AAAA,MAC9B,IAAA,EAAM;AAAA,KACR;AAAA,IACA;AAAA,MACE,EAAA,EAAI,OAAA;AAAA,MACJ,KAAA,EAAO,EAAE,qBAAqB,CAAA;AAAA,MAC9B,OAAO,sBAAA,CAAuB,aAAA;AAAA,MAC9B,IAAA,EAAM;AAAA,KACR;AAAA,IACA;AAAA,MACE,EAAA,EAAI,SAAA;AAAA,MACJ,KAAA,EAAO,EAAE,uBAAuB,CAAA;AAAA,MAChC,OAAA,EAAS,KAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR,GACF;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"IncidentsTableBody.esm.js","sources":["../../../src/components/Servicenow/IncidentsTableBody.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Box from '@mui/material/Box';\nimport TableBody from '@mui/material/TableBody';\nimport TableRow from '@mui/material/TableRow';\nimport TableCell from '@mui/material/TableCell';\n\nimport { useIncidentsListColumns } from './IncidentsListColumns';\nimport { IncidentsTableRow } from './IncidentsTableRow';\nimport type { IncidentsData } from '../../types';\nimport { useTranslation } from '../../hooks/useTranslation';\n\nexport const IncidentsTableBody = ({ rows }: { rows: IncidentsData[] }) => {\n const { t } = useTranslation();\n const incidentsListColumns = useIncidentsListColumns();\n\n if (rows?.length > 0) {\n return (\n <TableBody data-testid=\"incidents\">\n {rows.map(row => (\n <IncidentsTableRow key={row.sysId} data={row} />\n ))}\n </TableBody>\n );\n }\n\n return (\n <TableBody>\n <TableRow>\n <TableCell colSpan={incidentsListColumns.length}>\n <Box\n data-testid=\"no-incidents-found\"\n sx={{\n p: 2,\n display: 'flex',\n justifyContent: 'center',\n }}\n >\n {t('table.emptyContent')}\n </Box>\n </TableCell>\n </TableRow>\n </TableBody>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AA0BO,MAAM,kBAAqB,GAAA,CAAC,EAAE,IAAA,EAAsC,KAAA;AACzE,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAC7B,EAAA,MAAM,uBAAuB,uBAAwB,EAAA;AAErD,EAAI,IAAA,IAAA,EAAM,SAAS,CAAG,EAAA;AACpB,IAAA,uBACG,GAAA,CAAA,SAAA,EAAA,EAAU,aAAY,EAAA,WAAA,EACpB,eAAK,GAAI,CAAA,CAAA,GAAA,qBACP,GAAA,CAAA,iBAAA,EAAA,EAAkC,IAAM,EAAA,GAAA,EAAA,EAAjB,GAAI,CAAA,KAAkB,CAC/C,CACH,EAAA,CAAA;AAAA;AAIJ,EACE,uBAAA,GAAA,CAAC,aACC,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA,EACC,8BAAC,SAAU,EAAA,EAAA,OAAA,EAAS,qBAAqB,MACvC,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,aAAY,EAAA,oBAAA;AAAA,MACZ,EAAI,EAAA;AAAA,QACF,CAAG,EAAA,CAAA;AAAA,QACH,OAAS,EAAA,MAAA;AAAA,QACT,cAAgB,EAAA;AAAA,OAClB;AAAA,MAEC,YAAE,oBAAoB;AAAA;AAAA,GACzB,EACF,GACF,CACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"IncidentsTableBody.esm.js","sources":["../../../src/components/Servicenow/IncidentsTableBody.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Box from '@mui/material/Box';\nimport TableBody from '@mui/material/TableBody';\nimport TableRow from '@mui/material/TableRow';\nimport TableCell from '@mui/material/TableCell';\n\nimport { useIncidentsListColumns } from './IncidentsListColumns';\nimport { IncidentsTableRow } from './IncidentsTableRow';\nimport type { IncidentsData } from '../../types';\nimport { useTranslation } from '../../hooks/useTranslation';\n\nexport const IncidentsTableBody = ({ rows }: { rows: IncidentsData[] }) => {\n const { t } = useTranslation();\n const incidentsListColumns = useIncidentsListColumns();\n\n if (rows?.length > 0) {\n return (\n <TableBody data-testid=\"incidents\">\n {rows.map(row => (\n <IncidentsTableRow key={row.sysId} data={row} />\n ))}\n </TableBody>\n );\n }\n\n return (\n <TableBody>\n <TableRow>\n <TableCell colSpan={incidentsListColumns.length}>\n <Box\n data-testid=\"no-incidents-found\"\n sx={{\n p: 2,\n display: 'flex',\n justifyContent: 'center',\n }}\n >\n {t('table.emptyContent')}\n </Box>\n </TableCell>\n </TableRow>\n </TableBody>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AA0BO,MAAM,kBAAA,GAAqB,CAAC,EAAE,IAAA,EAAK,KAAiC;AACzE,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAC7B,EAAA,MAAM,uBAAuB,uBAAA,EAAwB;AAErD,EAAA,IAAI,IAAA,EAAM,SAAS,CAAA,EAAG;AACpB,IAAA,uBACE,GAAA,CAAC,SAAA,EAAA,EAAU,aAAA,EAAY,WAAA,EACpB,eAAK,GAAA,CAAI,CAAA,GAAA,qBACR,GAAA,CAAC,iBAAA,EAAA,EAAkC,IAAA,EAAM,GAAA,EAAA,EAAjB,GAAA,CAAI,KAAkB,CAC/C,CAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,GAAA,CAAC,aACC,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EACC,8BAAC,SAAA,EAAA,EAAU,OAAA,EAAS,qBAAqB,MAAA,EACvC,QAAA,kBAAA,GAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAY,oBAAA;AAAA,MACZ,EAAA,EAAI;AAAA,QACF,CAAA,EAAG,CAAA;AAAA,QACH,OAAA,EAAS,MAAA;AAAA,QACT,cAAA,EAAgB;AAAA,OAClB;AAAA,MAEC,YAAE,oBAAoB;AAAA;AAAA,GACzB,EACF,GACF,CAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"IncidentsTableHeader.esm.js","sources":["../../../src/components/Servicenow/IncidentsTableHeader.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MouseEvent } from 'react';\nimport TableCell from '@mui/material/TableCell';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport TableSortLabel from '@mui/material/TableSortLabel';\n\nimport type { Order } from '@backstage-community/plugin-servicenow-common';\n\nimport { useIncidentsListColumns } from './IncidentsListColumns';\nimport { IncidentTableField } from '../../types';\n\ntype IncidentsTableHeaderProps = {\n order: Order;\n orderBy: IncidentTableField | undefined;\n onRequestSort: (\n event: MouseEvent<unknown>,\n property: IncidentTableField,\n ) => void;\n};\n\nexport const IncidentsTableHeader = ({\n order,\n orderBy,\n onRequestSort,\n}: IncidentsTableHeaderProps) => {\n const incidentsListColumns = useIncidentsListColumns();\n\n const createSortHandler =\n (property: IncidentTableField) => (event: MouseEvent<unknown>) => {\n onRequestSort(event, property);\n };\n\n return (\n <TableHead>\n <TableRow sx={{ marginLeft: '6px', borderBottom: '1px solid #e0e0e0' }}>\n {incidentsListColumns.map(column => (\n <TableCell\n key={column.id as string}\n align=\"left\"\n padding=\"normal\"\n style={{\n lineHeight: '1.5rem',\n fontSize: '0.875rem',\n padding: '24px 16px 24px 20px',\n fontWeight: '700',\n }}\n sortDirection={orderBy === column.field ? order : 'asc'}\n >\n <TableSortLabel\n active={orderBy === column.field}\n direction={orderBy === column.field ? order : 'asc'}\n onClick={\n column.sorting === false\n ? undefined\n : createSortHandler(column.field as IncidentTableField)\n }\n disabled={column.sorting === false}\n >\n {column.title}\n </TableSortLabel>\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAoCO,MAAM,uBAAuB,CAAC;AAAA,EACnC,KAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAiC,KAAA;AAC/B,EAAA,MAAM,uBAAuB,uBAAwB,EAAA;AAErD,EAAA,MAAM,iBACJ,GAAA,CAAC,QAAiC,KAAA,CAAC,KAA+B,KAAA;AAChE,IAAA,aAAA,CAAc,OAAO,QAAQ,CAAA;AAAA,GAC/B;AAEF,EAAA,uBACG,GAAA,CAAA,SAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA,EAAS,EAAI,EAAA,EAAE,UAAY,EAAA,KAAA,EAAO,YAAc,EAAA,mBAAA,EAC9C,EAAA,QAAA,EAAA,oBAAA,CAAqB,IAAI,CACxB,MAAA,qBAAA,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MAEC,KAAM,EAAA,MAAA;AAAA,MACN,OAAQ,EAAA,QAAA;AAAA,MACR,KAAO,EAAA;AAAA,QACL,UAAY,EAAA,QAAA;AAAA,QACZ,QAAU,EAAA,UAAA;AAAA,QACV,OAAS,EAAA,qBAAA;AAAA,QACT,UAAY,EAAA;AAAA,OACd;AAAA,MACA,aAAe,EAAA,OAAA,KAAY,MAAO,CAAA,KAAA,GAAQ,KAAQ,GAAA,KAAA;AAAA,MAElD,QAAA,kBAAA,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAQ,YAAY,MAAO,CAAA,KAAA;AAAA,UAC3B,SAAW,EAAA,OAAA,KAAY,MAAO,CAAA,KAAA,GAAQ,KAAQ,GAAA,KAAA;AAAA,UAC9C,SACE,MAAO,CAAA,OAAA,KAAY,QACf,MACA,GAAA,iBAAA,CAAkB,OAAO,KAA2B,CAAA;AAAA,UAE1D,QAAA,EAAU,OAAO,OAAY,KAAA,KAAA;AAAA,UAE5B,QAAO,EAAA,MAAA,CAAA;AAAA;AAAA;AACV,KAAA;AAAA,IAtBK,MAAO,CAAA;AAAA,GAwBf,GACH,CACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"IncidentsTableHeader.esm.js","sources":["../../../src/components/Servicenow/IncidentsTableHeader.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MouseEvent } from 'react';\nimport TableCell from '@mui/material/TableCell';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport TableSortLabel from '@mui/material/TableSortLabel';\n\nimport type { Order } from '@backstage-community/plugin-servicenow-common';\n\nimport { useIncidentsListColumns } from './IncidentsListColumns';\nimport { IncidentTableField } from '../../types';\n\ntype IncidentsTableHeaderProps = {\n order: Order;\n orderBy: IncidentTableField | undefined;\n onRequestSort: (\n event: MouseEvent<unknown>,\n property: IncidentTableField,\n ) => void;\n};\n\nexport const IncidentsTableHeader = ({\n order,\n orderBy,\n onRequestSort,\n}: IncidentsTableHeaderProps) => {\n const incidentsListColumns = useIncidentsListColumns();\n\n const createSortHandler =\n (property: IncidentTableField) => (event: MouseEvent<unknown>) => {\n onRequestSort(event, property);\n };\n\n return (\n <TableHead>\n <TableRow sx={{ marginLeft: '6px', borderBottom: '1px solid #e0e0e0' }}>\n {incidentsListColumns.map(column => (\n <TableCell\n key={column.id as string}\n align=\"left\"\n padding=\"normal\"\n style={{\n lineHeight: '1.5rem',\n fontSize: '0.875rem',\n padding: '24px 16px 24px 20px',\n fontWeight: '700',\n }}\n sortDirection={orderBy === column.field ? order : 'asc'}\n >\n <TableSortLabel\n active={orderBy === column.field}\n direction={orderBy === column.field ? order : 'asc'}\n onClick={\n column.sorting === false\n ? undefined\n : createSortHandler(column.field as IncidentTableField)\n }\n disabled={column.sorting === false}\n >\n {column.title}\n </TableSortLabel>\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAoCO,MAAM,uBAAuB,CAAC;AAAA,EACnC,KAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,KAAiC;AAC/B,EAAA,MAAM,uBAAuB,uBAAA,EAAwB;AAErD,EAAA,MAAM,iBAAA,GACJ,CAAC,QAAA,KAAiC,CAAC,KAAA,KAA+B;AAChE,IAAA,aAAA,CAAc,OAAO,QAAQ,CAAA;AAAA,EAC/B,CAAA;AAEF,EAAA,uBACE,GAAA,CAAC,SAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,EAAA,EAAI,EAAE,UAAA,EAAY,KAAA,EAAO,YAAA,EAAc,mBAAA,EAAoB,EAClE,QAAA,EAAA,oBAAA,CAAqB,IAAI,CAAA,MAAA,qBACxB,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MAEC,KAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAQ,QAAA;AAAA,MACR,KAAA,EAAO;AAAA,QACL,UAAA,EAAY,QAAA;AAAA,QACZ,QAAA,EAAU,UAAA;AAAA,QACV,OAAA,EAAS,qBAAA;AAAA,QACT,UAAA,EAAY;AAAA,OACd;AAAA,MACA,aAAA,EAAe,OAAA,KAAY,MAAA,CAAO,KAAA,GAAQ,KAAA,GAAQ,KAAA;AAAA,MAElD,QAAA,kBAAA,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAQ,YAAY,MAAA,CAAO,KAAA;AAAA,UAC3B,SAAA,EAAW,OAAA,KAAY,MAAA,CAAO,KAAA,GAAQ,KAAA,GAAQ,KAAA;AAAA,UAC9C,SACE,MAAA,CAAO,OAAA,KAAY,QACf,MAAA,GACA,iBAAA,CAAkB,OAAO,KAA2B,CAAA;AAAA,UAE1D,QAAA,EAAU,OAAO,OAAA,KAAY,KAAA;AAAA,UAE5B,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA;AACV,KAAA;AAAA,IAtBK,MAAA,CAAO;AAAA,GAwBf,GACH,CAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"IncidentsTableRow.esm.js","sources":["../../../src/components/Servicenow/IncidentsTableRow.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport OpenInNewIcon from '@mui/icons-material/OpenInNew';\nimport IconButton from '@mui/material/IconButton';\nimport TableCell from '@mui/material/TableCell';\nimport TableRow from '@mui/material/TableRow';\nimport { makeStyles } from '@mui/styles';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\n\nimport { convertDateFormat } from '../../utils/stringUtils';\nimport {\n renderStatusLabel,\n usePriorityMap,\n useIncidentStateMap,\n} from '../../utils/incidentUtils';\nimport type { IncidentsData } from '../../types';\nimport { useTranslation } from '../../hooks/useTranslation';\n\nconst useStyles = makeStyles(() => ({\n tableCellStyle: {\n lineHeight: '1.5rem',\n fontSize: '0.875rem',\n },\n}));\n\nexport const IncidentsTableRow = ({ data }: { data: IncidentsData }) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const priorityMap = usePriorityMap();\n const incidentStateMap = useIncidentStateMap();\n\n return (\n <TableRow\n hover\n sx={{\n fontSize: '0.875rem',\n '&:last-child td, &:last-child th': { border: 0 },\n borderBottom: '1px solid #e0e0e0',\n }}\n >\n <TableCell component=\"th\" scope=\"row\" className={classes.tableCellStyle}>\n {data.number}\n </TableCell>\n <TableCell align=\"left\" className={classes.tableCellStyle}>\n <Tooltip title={data?.description} arrow placement=\"top\">\n <Typography\n variant=\"body1\"\n style={{\n maxWidth: 208,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {data?.shortDescription}\n </Typography>\n </Tooltip>\n </TableCell>\n <TableCell align=\"left\" className={classes.tableCellStyle}>\n {convertDateFormat(data?.sysCreatedOn)}\n </TableCell>\n <TableCell align=\"left\" className={classes.tableCellStyle}>\n {renderStatusLabel(priorityMap[data?.priority])}\n </TableCell>\n\n <TableCell align=\"left\" className={classes.tableCellStyle}>\n {renderStatusLabel(incidentStateMap[data?.incidentState])}\n </TableCell>\n <TableCell align=\"left\" className={classes.tableCellStyle}>\n <Tooltip title={t('actions.openInServicenow')} arrow placement=\"top\">\n <IconButton onClick={() => window.open(data.url, '_blank')}>\n <OpenInNewIcon fontSize=\"small\" style={{ color: 'inherit' }} />\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;AAiCA,MAAM,SAAA,GAAY,WAAW,OAAO;AAAA,EAClC,cAAgB,EAAA;AAAA,IACd,UAAY,EAAA,QAAA;AAAA,IACZ,QAAU,EAAA;AAAA;AAEd,CAAE,CAAA,CAAA;AAEK,MAAM,iBAAoB,GAAA,CAAC,EAAE,IAAA,EAAoC,KAAA;AACtE,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA;AAC7B,EAAA,MAAM,cAAc,cAAe,EAAA;AACnC,EAAA,MAAM,mBAAmB,mBAAoB,EAAA;AAE7C,EACE,uBAAA,IAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,KAAK,EAAA,IAAA;AAAA,MACL,EAAI,EAAA;AAAA,QACF,QAAU,EAAA,UAAA;AAAA,QACV,kCAAA,EAAoC,EAAE,MAAA,EAAQ,CAAE,EAAA;AAAA,QAChD,YAAc,EAAA;AAAA,OAChB;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAC,GAAA,CAAA,SAAA,EAAA,EAAU,WAAU,IAAK,EAAA,KAAA,EAAM,OAAM,SAAW,EAAA,OAAA,CAAQ,cACtD,EAAA,QAAA,EAAA,IAAA,CAAK,MACR,EAAA,CAAA;AAAA,wBACC,GAAA,CAAA,SAAA,EAAA,EAAU,KAAM,EAAA,MAAA,EAAO,WAAW,OAAQ,CAAA,cAAA,EACzC,QAAC,kBAAA,GAAA,CAAA,OAAA,EAAA,EAAQ,OAAO,IAAM,EAAA,WAAA,EAAa,KAAK,EAAA,IAAA,EAAC,WAAU,KACjD,EAAA,QAAA,kBAAA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,OAAQ,EAAA,OAAA;AAAA,YACR,KAAO,EAAA;AAAA,cACL,QAAU,EAAA,GAAA;AAAA,cACV,UAAY,EAAA,QAAA;AAAA,cACZ,QAAU,EAAA,QAAA;AAAA,cACV,YAAc,EAAA;AAAA,aAChB;AAAA,YAEC,QAAM,EAAA,IAAA,EAAA;AAAA;AAAA,WAEX,CACF,EAAA,CAAA;AAAA,wBACA,GAAA,CAAC,SAAU,EAAA,EAAA,KAAA,EAAM,MAAO,EAAA,SAAA,EAAW,QAAQ,cACxC,EAAA,QAAA,EAAA,iBAAA,CAAkB,IAAM,EAAA,YAAY,CACvC,EAAA,CAAA;AAAA,wBACC,GAAA,CAAA,SAAA,EAAA,EAAU,KAAM,EAAA,MAAA,EAAO,SAAW,EAAA,OAAA,CAAQ,cACxC,EAAA,QAAA,EAAA,iBAAA,CAAkB,WAAY,CAAA,IAAA,EAAM,QAAQ,CAAC,CAChD,EAAA,CAAA;AAAA,wBAEC,GAAA,CAAA,SAAA,EAAA,EAAU,KAAM,EAAA,MAAA,EAAO,SAAW,EAAA,OAAA,CAAQ,cACxC,EAAA,QAAA,EAAA,iBAAA,CAAkB,gBAAiB,CAAA,IAAA,EAAM,aAAa,CAAC,CAC1D,EAAA,CAAA;AAAA,4BACC,SAAU,EAAA,EAAA,KAAA,EAAM,MAAO,EAAA,SAAA,EAAW,QAAQ,cACzC,EAAA,QAAA,kBAAA,GAAA,CAAC,OAAQ,EAAA,EAAA,KAAA,EAAO,EAAE,0BAA0B,CAAA,EAAG,OAAK,IAAC,EAAA,SAAA,EAAU,OAC7D,QAAC,kBAAA,GAAA,CAAA,UAAA,EAAA,EAAW,OAAS,EAAA,MAAM,OAAO,IAAK,CAAA,IAAA,CAAK,GAAK,EAAA,QAAQ,GACvD,QAAC,kBAAA,GAAA,CAAA,aAAA,EAAA,EAAc,QAAS,EAAA,OAAA,EAAQ,OAAO,EAAE,KAAA,EAAO,WAAa,EAAA,CAAA,EAC/D,GACF,CACF,EAAA;AAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"IncidentsTableRow.esm.js","sources":["../../../src/components/Servicenow/IncidentsTableRow.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport OpenInNewIcon from '@mui/icons-material/OpenInNew';\nimport IconButton from '@mui/material/IconButton';\nimport TableCell from '@mui/material/TableCell';\nimport TableRow from '@mui/material/TableRow';\nimport { makeStyles } from '@mui/styles';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\n\nimport { convertDateFormat } from '../../utils/stringUtils';\nimport {\n renderStatusLabel,\n usePriorityMap,\n useIncidentStateMap,\n} from '../../utils/incidentUtils';\nimport type { IncidentsData } from '../../types';\nimport { useTranslation } from '../../hooks/useTranslation';\n\nconst useStyles = makeStyles(() => ({\n tableCellStyle: {\n lineHeight: '1.5rem',\n fontSize: '0.875rem',\n },\n}));\n\nexport const IncidentsTableRow = ({ data }: { data: IncidentsData }) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const priorityMap = usePriorityMap();\n const incidentStateMap = useIncidentStateMap();\n\n return (\n <TableRow\n hover\n sx={{\n fontSize: '0.875rem',\n '&:last-child td, &:last-child th': { border: 0 },\n borderBottom: '1px solid #e0e0e0',\n }}\n >\n <TableCell component=\"th\" scope=\"row\" className={classes.tableCellStyle}>\n {data.number}\n </TableCell>\n <TableCell align=\"left\" className={classes.tableCellStyle}>\n <Tooltip title={data?.description} arrow placement=\"top\">\n <Typography\n variant=\"body1\"\n style={{\n maxWidth: 208,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}\n >\n {data?.shortDescription}\n </Typography>\n </Tooltip>\n </TableCell>\n <TableCell align=\"left\" className={classes.tableCellStyle}>\n {convertDateFormat(data?.sysCreatedOn)}\n </TableCell>\n <TableCell align=\"left\" className={classes.tableCellStyle}>\n {renderStatusLabel(priorityMap[data?.priority])}\n </TableCell>\n\n <TableCell align=\"left\" className={classes.tableCellStyle}>\n {renderStatusLabel(incidentStateMap[data?.incidentState])}\n </TableCell>\n <TableCell align=\"left\" className={classes.tableCellStyle}>\n <Tooltip title={t('actions.openInServicenow')} arrow placement=\"top\">\n <IconButton onClick={() => window.open(data.url, '_blank')}>\n <OpenInNewIcon fontSize=\"small\" style={{ color: 'inherit' }} />\n </IconButton>\n </Tooltip>\n </TableCell>\n </TableRow>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;AAiCA,MAAM,SAAA,GAAY,WAAW,OAAO;AAAA,EAClC,cAAA,EAAgB;AAAA,IACd,UAAA,EAAY,QAAA;AAAA,IACZ,QAAA,EAAU;AAAA;AAEd,CAAA,CAAE,CAAA;AAEK,MAAM,iBAAA,GAAoB,CAAC,EAAE,IAAA,EAAK,KAA+B;AACtE,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,cAAA,EAAe;AAC7B,EAAA,MAAM,cAAc,cAAA,EAAe;AACnC,EAAA,MAAM,mBAAmB,mBAAA,EAAoB;AAE7C,EAAA,uBACE,IAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAK,IAAA;AAAA,MACL,EAAA,EAAI;AAAA,QACF,QAAA,EAAU,UAAA;AAAA,QACV,kCAAA,EAAoC,EAAE,MAAA,EAAQ,CAAA,EAAE;AAAA,QAChD,YAAA,EAAc;AAAA,OAChB;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,WAAU,IAAA,EAAK,KAAA,EAAM,OAAM,SAAA,EAAW,OAAA,CAAQ,cAAA,EACtD,QAAA,EAAA,IAAA,CAAK,MAAA,EACR,CAAA;AAAA,wBACA,GAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAM,MAAA,EAAO,WAAW,OAAA,CAAQ,cAAA,EACzC,QAAA,kBAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,OAAO,IAAA,EAAM,WAAA,EAAa,KAAA,EAAK,IAAA,EAAC,WAAU,KAAA,EACjD,QAAA,kBAAA,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAQ,OAAA;AAAA,YACR,KAAA,EAAO;AAAA,cACL,QAAA,EAAU,GAAA;AAAA,cACV,UAAA,EAAY,QAAA;AAAA,cACZ,QAAA,EAAU,QAAA;AAAA,cACV,YAAA,EAAc;AAAA,aAChB;AAAA,YAEC,QAAA,EAAA,IAAA,EAAM;AAAA;AAAA,WAEX,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAM,MAAA,EAAO,SAAA,EAAW,QAAQ,cAAA,EACxC,QAAA,EAAA,iBAAA,CAAkB,IAAA,EAAM,YAAY,CAAA,EACvC,CAAA;AAAA,wBACA,GAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAM,MAAA,EAAO,SAAA,EAAW,OAAA,CAAQ,cAAA,EACxC,QAAA,EAAA,iBAAA,CAAkB,WAAA,CAAY,IAAA,EAAM,QAAQ,CAAC,CAAA,EAChD,CAAA;AAAA,wBAEA,GAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAM,MAAA,EAAO,SAAA,EAAW,OAAA,CAAQ,cAAA,EACxC,QAAA,EAAA,iBAAA,CAAkB,gBAAA,CAAiB,IAAA,EAAM,aAAa,CAAC,CAAA,EAC1D,CAAA;AAAA,4BACC,SAAA,EAAA,EAAU,KAAA,EAAM,MAAA,EAAO,SAAA,EAAW,QAAQ,cAAA,EACzC,QAAA,kBAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,EAAE,0BAA0B,CAAA,EAAG,OAAK,IAAA,EAAC,SAAA,EAAU,OAC7D,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAS,MAAM,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,GACvD,QAAA,kBAAA,GAAA,CAAC,aAAA,EAAA,EAAc,QAAA,EAAS,OAAA,EAAQ,OAAO,EAAE,KAAA,EAAO,WAAU,EAAG,CAAA,EAC/D,GACF,CAAA,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ModerateIcon.esm.js","sources":["../../../src/components/Servicenow/ModerateIcon.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CustomSvgIcon } from './CustomSvgIcon';\n\nexport const ModerateIcon = (props: any) => (\n <CustomSvgIcon\n viewBox=\"0 0 16 16\"\n path={\n <path d=\"M2.66675 11.3333V9.33332H13.3334V11.3333H2.66675ZM2.66675 6.66666V4.66666H13.3334V6.66666H2.66675Z\" />\n }\n {...props}\n />\n);\n"],"names":[],"mappings":";;;AAkBa,MAAA,YAAA,GAAe,CAAC,KAC3B,qBAAA,GAAA;AAAA,EAAC,aAAA;AAAA,EAAA;AAAA,IACC,OAAQ,EAAA,WAAA;AAAA,IACR,IACE,kBAAA,GAAA,CAAC,MAAK,EAAA,EAAA,CAAA,EAAE,oGAAqG,EAAA,CAAA;AAAA,IAE9G,GAAG;AAAA;AACN;;;;"}
1
+ {"version":3,"file":"ModerateIcon.esm.js","sources":["../../../src/components/Servicenow/ModerateIcon.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CustomSvgIcon } from './CustomSvgIcon';\n\nexport const ModerateIcon = (props: any) => (\n <CustomSvgIcon\n viewBox=\"0 0 16 16\"\n path={\n <path d=\"M2.66675 11.3333V9.33332H13.3334V11.3333H2.66675ZM2.66675 6.66666V4.66666H13.3334V6.66666H2.66675Z\" />\n }\n {...props}\n />\n);\n"],"names":[],"mappings":";;;AAkBO,MAAM,YAAA,GAAe,CAAC,KAAA,qBAC3B,GAAA;AAAA,EAAC,aAAA;AAAA,EAAA;AAAA,IACC,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,kBACE,GAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,oGAAA,EAAqG,CAAA;AAAA,IAE9G,GAAG;AAAA;AACN;;;;"}
@@ -1,2 +1,6 @@
1
- export { EntityServicenowContent } from './EntityServicenowContent.esm.js';
1
+ import { EntityServicenowContent } from './EntityServicenowContent.esm.js';
2
+
3
+
4
+
5
+ export { EntityServicenowContent };
2
6
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"IncidentEnumFilter.esm.js","sources":["../../../src/components/shared-components/IncidentEnumFilter.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SelectItem } from '@backstage/core-components';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport Box from '@mui/material/Box';\nimport Checkbox from '@mui/material/Checkbox';\nimport CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank';\nimport CheckBoxIcon from '@mui/icons-material/CheckBox';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport InputLabel from '@mui/material/InputLabel';\nimport TextField from '@mui/material/TextField';\nimport { renderStatusLabel, StatusData } from '../../utils/incidentUtils';\n\nexport interface IncidentEnumFilterProps {\n label: string;\n /** @deprecated No longer used, kept for backwards compatibility */\n filterKey?: string;\n dataMap: Record<number, StatusData>;\n value: SelectItem[];\n onChange: (event: any, value: SelectItem[]) => void;\n}\n\nexport const IncidentEnumFilter = ({\n label,\n dataMap,\n value,\n onChange,\n}: IncidentEnumFilterProps) => {\n const items: SelectItem[] = Object.entries(dataMap).map(\n ([key, itemValue]) => ({\n value: key,\n label: itemValue.label,\n }),\n );\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column' }}>\n <InputLabel\n sx={{\n transform: 'initial',\n fontWeight: 'bold',\n fontSize: theme => theme.typography.body2.fontSize,\n fontFamily: theme => theme.typography.fontFamily,\n color: theme => theme.palette.text.primary,\n }}\n >\n {label}\n </InputLabel>\n <Autocomplete\n multiple\n disableCloseOnSelect\n aria-label={label}\n options={items}\n isOptionEqualToValue={(option, val) => option.value === val.value}\n getOptionLabel={option => option.label}\n onChange={onChange}\n renderOption={(renderProps, option, { selected }) => {\n const { key, ...optionProps } = renderProps;\n const statusData = dataMap[Number(option.value)];\n\n return (\n <li key={key} {...optionProps}>\n <Checkbox\n icon={<CheckBoxOutlineBlankIcon fontSize=\"small\" />}\n checkedIcon={<CheckBoxIcon fontSize=\"small\" />}\n checked={selected}\n />\n {renderStatusLabel(statusData)}\n </li>\n );\n }}\n size=\"small\"\n value={value}\n popupIcon={\n <ExpandMoreIcon\n data-testid={`select-${label.toLowerCase().replace(/\\s/g, '-')}`}\n />\n }\n renderInput={params => <TextField {...params} variant=\"outlined\" />}\n />\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAoCO,MAAM,qBAAqB,CAAC;AAAA,EACjC,KAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAA+B,KAAA;AAC7B,EAAA,MAAM,KAAsB,GAAA,MAAA,CAAO,OAAQ,CAAA,OAAO,CAAE,CAAA,GAAA;AAAA,IAClD,CAAC,CAAC,GAAK,EAAA,SAAS,CAAO,MAAA;AAAA,MACrB,KAAO,EAAA,GAAA;AAAA,MACP,OAAO,SAAU,CAAA;AAAA,KACnB;AAAA,GACF;AAEA,EACE,uBAAA,IAAA,CAAC,OAAI,EAAI,EAAA,EAAE,SAAS,MAAQ,EAAA,aAAA,EAAe,UACzC,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,EAAI,EAAA;AAAA,UACF,SAAW,EAAA,SAAA;AAAA,UACX,UAAY,EAAA,MAAA;AAAA,UACZ,QAAU,EAAA,CAAA,KAAA,KAAS,KAAM,CAAA,UAAA,CAAW,KAAM,CAAA,QAAA;AAAA,UAC1C,UAAA,EAAY,CAAS,KAAA,KAAA,KAAA,CAAM,UAAW,CAAA,UAAA;AAAA,UACtC,KAAO,EAAA,CAAA,KAAA,KAAS,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA;AAAA,SACrC;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,oBACA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,QAAQ,EAAA,IAAA;AAAA,QACR,oBAAoB,EAAA,IAAA;AAAA,QACpB,YAAY,EAAA,KAAA;AAAA,QACZ,OAAS,EAAA,KAAA;AAAA,QACT,sBAAsB,CAAC,MAAA,EAAQ,GAAQ,KAAA,MAAA,CAAO,UAAU,GAAI,CAAA,KAAA;AAAA,QAC5D,cAAA,EAAgB,YAAU,MAAO,CAAA,KAAA;AAAA,QACjC,QAAA;AAAA,QACA,cAAc,CAAC,WAAA,EAAa,MAAQ,EAAA,EAAE,UAAe,KAAA;AACnD,UAAA,MAAM,EAAE,GAAA,EAAK,GAAG,WAAA,EAAgB,GAAA,WAAA;AAChC,UAAA,MAAM,UAAa,GAAA,OAAA,CAAQ,MAAO,CAAA,MAAA,CAAO,KAAK,CAAC,CAAA;AAE/C,UACE,uBAAA,IAAA,CAAC,IAAc,EAAA,EAAA,GAAG,WAChB,EAAA,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAM,kBAAA,GAAA,CAAC,wBAAyB,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,CAAA;AAAA,gBACjD,WAAa,kBAAA,GAAA,CAAC,YAAa,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,CAAA;AAAA,gBAC5C,OAAS,EAAA;AAAA;AAAA,aACX;AAAA,YACC,kBAAkB,UAAU;AAAA,WAAA,EAAA,EANtB,GAOT,CAAA;AAAA,SAEJ;AAAA,QACA,IAAK,EAAA,OAAA;AAAA,QACL,KAAA;AAAA,QACA,SACE,kBAAA,GAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAa,UAAU,KAAM,CAAA,WAAA,GAAc,OAAQ,CAAA,KAAA,EAAO,GAAG,CAAC,CAAA;AAAA;AAAA,SAChE;AAAA,QAEF,aAAa,CAAU,MAAA,qBAAA,GAAA,CAAC,aAAW,GAAG,MAAA,EAAQ,SAAQ,UAAW,EAAA;AAAA;AAAA;AACnE,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"IncidentEnumFilter.esm.js","sources":["../../../src/components/shared-components/IncidentEnumFilter.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SelectItem } from '@backstage/core-components';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport Box from '@mui/material/Box';\nimport Checkbox from '@mui/material/Checkbox';\nimport CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank';\nimport CheckBoxIcon from '@mui/icons-material/CheckBox';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport InputLabel from '@mui/material/InputLabel';\nimport TextField from '@mui/material/TextField';\nimport { renderStatusLabel, StatusData } from '../../utils/incidentUtils';\n\nexport interface IncidentEnumFilterProps {\n label: string;\n /** @deprecated No longer used, kept for backwards compatibility */\n filterKey?: string;\n dataMap: Record<number, StatusData>;\n value: SelectItem[];\n onChange: (event: any, value: SelectItem[]) => void;\n}\n\nexport const IncidentEnumFilter = ({\n label,\n dataMap,\n value,\n onChange,\n}: IncidentEnumFilterProps) => {\n const items: SelectItem[] = Object.entries(dataMap).map(\n ([key, itemValue]) => ({\n value: key,\n label: itemValue.label,\n }),\n );\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column' }}>\n <InputLabel\n sx={{\n transform: 'initial',\n fontWeight: 'bold',\n fontSize: theme => theme.typography.body2.fontSize,\n fontFamily: theme => theme.typography.fontFamily,\n color: theme => theme.palette.text.primary,\n }}\n >\n {label}\n </InputLabel>\n <Autocomplete\n multiple\n disableCloseOnSelect\n aria-label={label}\n options={items}\n isOptionEqualToValue={(option, val) => option.value === val.value}\n getOptionLabel={option => option.label}\n onChange={onChange}\n renderOption={(renderProps, option, { selected }) => {\n const { key, ...optionProps } = renderProps;\n const statusData = dataMap[Number(option.value)];\n\n return (\n <li key={key} {...optionProps}>\n <Checkbox\n icon={<CheckBoxOutlineBlankIcon fontSize=\"small\" />}\n checkedIcon={<CheckBoxIcon fontSize=\"small\" />}\n checked={selected}\n />\n {renderStatusLabel(statusData)}\n </li>\n );\n }}\n size=\"small\"\n value={value}\n popupIcon={\n <ExpandMoreIcon\n data-testid={`select-${label.toLowerCase().replace(/\\s/g, '-')}`}\n />\n }\n renderInput={params => <TextField {...params} variant=\"outlined\" />}\n />\n </Box>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAoCO,MAAM,qBAAqB,CAAC;AAAA,EACjC,KAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,KAA+B;AAC7B,EAAA,MAAM,KAAA,GAAsB,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,GAAA;AAAA,IAClD,CAAC,CAAC,GAAA,EAAK,SAAS,CAAA,MAAO;AAAA,MACrB,KAAA,EAAO,GAAA;AAAA,MACP,OAAO,SAAA,CAAU;AAAA,KACnB;AAAA,GACF;AAEA,EAAA,uBACE,IAAA,CAAC,OAAI,EAAA,EAAI,EAAE,SAAS,MAAA,EAAQ,aAAA,EAAe,UAAS,EAClD,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI;AAAA,UACF,SAAA,EAAW,SAAA;AAAA,UACX,UAAA,EAAY,MAAA;AAAA,UACZ,QAAA,EAAU,CAAA,KAAA,KAAS,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,QAAA;AAAA,UAC1C,UAAA,EAAY,CAAA,KAAA,KAAS,KAAA,CAAM,UAAA,CAAW,UAAA;AAAA,UACtC,KAAA,EAAO,CAAA,KAAA,KAAS,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK;AAAA,SACrC;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,oBACA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAQ,IAAA;AAAA,QACR,oBAAA,EAAoB,IAAA;AAAA,QACpB,YAAA,EAAY,KAAA;AAAA,QACZ,OAAA,EAAS,KAAA;AAAA,QACT,sBAAsB,CAAC,MAAA,EAAQ,GAAA,KAAQ,MAAA,CAAO,UAAU,GAAA,CAAI,KAAA;AAAA,QAC5D,cAAA,EAAgB,YAAU,MAAA,CAAO,KAAA;AAAA,QACjC,QAAA;AAAA,QACA,cAAc,CAAC,WAAA,EAAa,MAAA,EAAQ,EAAE,UAAS,KAAM;AACnD,UAAA,MAAM,EAAE,GAAA,EAAK,GAAG,WAAA,EAAY,GAAI,WAAA;AAChC,UAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,MAAA,CAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AAE/C,UAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAc,GAAG,WAAA,EAChB,QAAA,EAAA;AAAA,4BAAA,GAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,kBAAM,GAAA,CAAC,wBAAA,EAAA,EAAyB,QAAA,EAAS,OAAA,EAAQ,CAAA;AAAA,gBACjD,WAAA,kBAAa,GAAA,CAAC,YAAA,EAAA,EAAa,QAAA,EAAS,OAAA,EAAQ,CAAA;AAAA,gBAC5C,OAAA,EAAS;AAAA;AAAA,aACX;AAAA,YACC,kBAAkB,UAAU;AAAA,WAAA,EAAA,EANtB,GAOT,CAAA;AAAA,QAEJ,CAAA;AAAA,QACA,IAAA,EAAK,OAAA;AAAA,QACL,KAAA;AAAA,QACA,SAAA,kBACE,GAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAa,UAAU,KAAA,CAAM,WAAA,GAAc,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAC,CAAA;AAAA;AAAA,SAChE;AAAA,QAEF,aAAa,CAAA,MAAA,qBAAU,GAAA,CAAC,aAAW,GAAG,MAAA,EAAQ,SAAQ,UAAA,EAAW;AAAA;AAAA;AACnE,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDebouncedValue.esm.js","sources":["../../src/hooks/useDebouncedValue.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useState, useEffect } from 'react';\n\nexport function useDebouncedValue<T>(value: T, delay: number): T {\n const [debounced, setDebounced] = useState(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebounced(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debounced;\n}\n"],"names":[],"mappings":";;AAkBgB,SAAA,iBAAA,CAAqB,OAAU,KAAkB,EAAA;AAC/D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAEhD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,QAAQ,UAAW,CAAA,MAAM,YAAa,CAAA,KAAK,GAAG,KAAK,CAAA;AACzD,IAAO,OAAA,MAAM,aAAa,KAAK,CAAA;AAAA,GAC9B,EAAA,CAAC,KAAO,EAAA,KAAK,CAAC,CAAA;AAEjB,EAAO,OAAA,SAAA;AACT;;;;"}
1
+ {"version":3,"file":"useDebouncedValue.esm.js","sources":["../../src/hooks/useDebouncedValue.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useState, useEffect } from 'react';\n\nexport function useDebouncedValue<T>(value: T, delay: number): T {\n const [debounced, setDebounced] = useState(value);\n\n useEffect(() => {\n const timer = setTimeout(() => setDebounced(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debounced;\n}\n"],"names":[],"mappings":";;AAkBO,SAAS,iBAAA,CAAqB,OAAU,KAAA,EAAkB;AAC/D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAEhD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,QAAQ,UAAA,CAAW,MAAM,YAAA,CAAa,KAAK,GAAG,KAAK,CAAA;AACzD,IAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,EACjC,CAAA,EAAG,CAAC,KAAA,EAAO,KAAK,CAAC,CAAA;AAEjB,EAAA,OAAO,SAAA;AACT;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useQueryArrayFilter.esm.js","sources":["../../src/hooks/useQueryArrayFilter.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useMemo, useCallback } from 'react';\nimport { useQueryState } from './useQueryState';\nimport { INCIDENT_STATE_MAP, PRIORITY_MAP } from '../utils/incidentUtils';\nimport { SelectItem } from '@backstage/core-components';\n\nexport const useQueryArrayFilter = (filterName: 'state' | 'priority') => {\n const [raw, setRaw] = useQueryState<string>(filterName, '');\n const [, setOffset] = useQueryState<number>('offset', 0);\n\n const map = filterName === 'state' ? INCIDENT_STATE_MAP : PRIORITY_MAP;\n\n const current: SelectItem[] = useMemo(() => {\n return raw\n .split(',')\n .filter(v => v !== '')\n .map(value => ({\n value,\n label: map[Number(value)]?.label,\n }))\n .filter(item => item.label);\n }, [raw, map]);\n\n const set = useCallback(\n (newValues: (string | number)[]) => {\n const joined = newValues.join(',');\n setRaw(joined);\n setOffset(0);\n },\n [setRaw, setOffset],\n );\n\n const clear = useCallback(() => {\n setRaw('');\n setOffset(0);\n }, [setRaw, setOffset]);\n\n return useMemo(\n () =>\n ({\n current,\n set,\n clear,\n } as const),\n [current, set, clear],\n );\n};\n"],"names":[],"mappings":";;;;AAqBa,MAAA,mBAAA,GAAsB,CAAC,UAAqC,KAAA;AACvE,EAAA,MAAM,CAAC,GAAK,EAAA,MAAM,CAAI,GAAA,aAAA,CAAsB,YAAY,EAAE,CAAA;AAC1D,EAAA,MAAM,GAAG,SAAS,CAAI,GAAA,aAAA,CAAsB,UAAU,CAAC,CAAA;AAEvD,EAAM,MAAA,GAAA,GAAM,UAAe,KAAA,OAAA,GAAU,kBAAqB,GAAA,YAAA;AAE1D,EAAM,MAAA,OAAA,GAAwB,QAAQ,MAAM;AAC1C,IAAO,OAAA,GAAA,CACJ,KAAM,CAAA,GAAG,CACT,CAAA,MAAA,CAAO,OAAK,CAAM,KAAA,EAAE,CACpB,CAAA,GAAA,CAAI,CAAU,KAAA,MAAA;AAAA,MACb,KAAA;AAAA,MACA,KAAO,EAAA,GAAA,CAAI,MAAO,CAAA,KAAK,CAAC,CAAG,EAAA;AAAA,KAC3B,CAAA,CAAA,CACD,MAAO,CAAA,CAAA,IAAA,KAAQ,KAAK,KAAK,CAAA;AAAA,GAC3B,EAAA,CAAC,GAAK,EAAA,GAAG,CAAC,CAAA;AAEb,EAAA,MAAM,GAAM,GAAA,WAAA;AAAA,IACV,CAAC,SAAmC,KAAA;AAClC,MAAM,MAAA,MAAA,GAAS,SAAU,CAAA,IAAA,CAAK,GAAG,CAAA;AACjC,MAAA,MAAA,CAAO,MAAM,CAAA;AACb,MAAA,SAAA,CAAU,CAAC,CAAA;AAAA,KACb;AAAA,IACA,CAAC,QAAQ,SAAS;AAAA,GACpB;AAEA,EAAM,MAAA,KAAA,GAAQ,YAAY,MAAM;AAC9B,IAAA,MAAA,CAAO,EAAE,CAAA;AACT,IAAA,SAAA,CAAU,CAAC,CAAA;AAAA,GACV,EAAA,CAAC,MAAQ,EAAA,SAAS,CAAC,CAAA;AAEtB,EAAO,OAAA,OAAA;AAAA,IACL,OACG;AAAA,MACC,OAAA;AAAA,MACA,GAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACF,CAAC,OAAS,EAAA,GAAA,EAAK,KAAK;AAAA,GACtB;AACF;;;;"}
1
+ {"version":3,"file":"useQueryArrayFilter.esm.js","sources":["../../src/hooks/useQueryArrayFilter.ts"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useMemo, useCallback } from 'react';\nimport { useQueryState } from './useQueryState';\nimport { INCIDENT_STATE_MAP, PRIORITY_MAP } from '../utils/incidentUtils';\nimport { SelectItem } from '@backstage/core-components';\n\nexport const useQueryArrayFilter = (filterName: 'state' | 'priority') => {\n const [raw, setRaw] = useQueryState<string>(filterName, '');\n const [, setOffset] = useQueryState<number>('offset', 0);\n\n const map = filterName === 'state' ? INCIDENT_STATE_MAP : PRIORITY_MAP;\n\n const current: SelectItem[] = useMemo(() => {\n return raw\n .split(',')\n .filter(v => v !== '')\n .map(value => ({\n value,\n label: map[Number(value)]?.label,\n }))\n .filter(item => item.label);\n }, [raw, map]);\n\n const set = useCallback(\n (newValues: (string | number)[]) => {\n const joined = newValues.join(',');\n setRaw(joined);\n setOffset(0);\n },\n [setRaw, setOffset],\n );\n\n const clear = useCallback(() => {\n setRaw('');\n setOffset(0);\n }, [setRaw, setOffset]);\n\n return useMemo(\n () =>\n ({\n current,\n set,\n clear,\n } as const),\n [current, set, clear],\n );\n};\n"],"names":[],"mappings":";;;;AAqBO,MAAM,mBAAA,GAAsB,CAAC,UAAA,KAAqC;AACvE,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAI,aAAA,CAAsB,YAAY,EAAE,CAAA;AAC1D,EAAA,MAAM,GAAG,SAAS,CAAA,GAAI,aAAA,CAAsB,UAAU,CAAC,CAAA;AAEvD,EAAA,MAAM,GAAA,GAAM,UAAA,KAAe,OAAA,GAAU,kBAAA,GAAqB,YAAA;AAE1D,EAAA,MAAM,OAAA,GAAwB,QAAQ,MAAM;AAC1C,IAAA,OAAO,GAAA,CACJ,KAAA,CAAM,GAAG,CAAA,CACT,MAAA,CAAO,OAAK,CAAA,KAAM,EAAE,CAAA,CACpB,GAAA,CAAI,CAAA,KAAA,MAAU;AAAA,MACb,KAAA;AAAA,MACA,KAAA,EAAO,GAAA,CAAI,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG;AAAA,KAC7B,CAAE,CAAA,CACD,MAAA,CAAO,CAAA,IAAA,KAAQ,KAAK,KAAK,CAAA;AAAA,EAC9B,CAAA,EAAG,CAAC,GAAA,EAAK,GAAG,CAAC,CAAA;AAEb,EAAA,MAAM,GAAA,GAAM,WAAA;AAAA,IACV,CAAC,SAAA,KAAmC;AAClC,MAAA,MAAM,MAAA,GAAS,SAAA,CAAU,IAAA,CAAK,GAAG,CAAA;AACjC,MAAA,MAAA,CAAO,MAAM,CAAA;AACb,MAAA,SAAA,CAAU,CAAC,CAAA;AAAA,IACb,CAAA;AAAA,IACA,CAAC,QAAQ,SAAS;AAAA,GACpB;AAEA,EAAA,MAAM,KAAA,GAAQ,YAAY,MAAM;AAC9B,IAAA,MAAA,CAAO,EAAE,CAAA;AACT,IAAA,SAAA,CAAU,CAAC,CAAA;AAAA,EACb,CAAA,EAAG,CAAC,MAAA,EAAQ,SAAS,CAAC,CAAA;AAEtB,EAAA,OAAO,OAAA;AAAA,IACL,OACG;AAAA,MACC,OAAA;AAAA,MACA,GAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACF,CAAC,OAAA,EAAS,GAAA,EAAK,KAAK;AAAA,GACtB;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useQueryArrayState.esm.js","sources":["../../src/hooks/useQueryArrayState.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useCallback, useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\n\nexport function useQueryArrayState(\n key: string,\n defaultValue: string[] = [],\n): [string[], (value: string[]) => void] {\n const [searchParams, setSearchParams] = useSearchParams();\n\n const getArrayFromParam = useCallback((): string[] => {\n const raw = searchParams.get(key);\n return raw ? raw.split(',').filter(Boolean) : defaultValue;\n }, [key, searchParams, defaultValue]);\n\n const [state, setState] = useState<string[]>(() => getArrayFromParam());\n\n useEffect(() => {\n const value = getArrayFromParam();\n setState(prev => {\n const prevRaw = prev.join(',');\n const nextRaw = value.join(',');\n return prevRaw === nextRaw ? prev : value;\n });\n }, [getArrayFromParam]);\n\n const setValue = useCallback(\n (newValue: string[]) => {\n const newRaw = newValue.join(',');\n const currentRaw = searchParams.get(key);\n\n if (currentRaw === newRaw || (!currentRaw && newRaw === '')) return;\n\n setSearchParams(\n prev => {\n const params = new URLSearchParams(prev);\n if (newRaw === '') {\n params.delete(key);\n } else {\n params.set(key, newRaw);\n }\n return params;\n },\n { replace: true },\n );\n\n setState(newValue);\n },\n [key, searchParams, setSearchParams],\n );\n\n return [state, setValue];\n}\n"],"names":[],"mappings":";;;AAkBO,SAAS,kBACd,CAAA,GAAA,EACA,YAAyB,GAAA,EACc,EAAA;AACvC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,eAAgB,EAAA;AAExD,EAAM,MAAA,iBAAA,GAAoB,YAAY,MAAgB;AACpD,IAAM,MAAA,GAAA,GAAM,YAAa,CAAA,GAAA,CAAI,GAAG,CAAA;AAChC,IAAA,OAAO,MAAM,GAAI,CAAA,KAAA,CAAM,GAAG,CAAE,CAAA,MAAA,CAAO,OAAO,CAAI,GAAA,YAAA;AAAA,GAC7C,EAAA,CAAC,GAAK,EAAA,YAAA,EAAc,YAAY,CAAC,CAAA;AAEpC,EAAA,MAAM,CAAC,KAAO,EAAA,QAAQ,IAAI,QAAmB,CAAA,MAAM,mBAAmB,CAAA;AAEtE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,QAAQ,iBAAkB,EAAA;AAChC,IAAA,QAAA,CAAS,CAAQ,IAAA,KAAA;AACf,MAAM,MAAA,OAAA,GAAU,IAAK,CAAA,IAAA,CAAK,GAAG,CAAA;AAC7B,MAAM,MAAA,OAAA,GAAU,KAAM,CAAA,IAAA,CAAK,GAAG,CAAA;AAC9B,MAAO,OAAA,OAAA,KAAY,UAAU,IAAO,GAAA,KAAA;AAAA,KACrC,CAAA;AAAA,GACH,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAEtB,EAAA,MAAM,QAAW,GAAA,WAAA;AAAA,IACf,CAAC,QAAuB,KAAA;AACtB,MAAM,MAAA,MAAA,GAAS,QAAS,CAAA,IAAA,CAAK,GAAG,CAAA;AAChC,MAAM,MAAA,UAAA,GAAa,YAAa,CAAA,GAAA,CAAI,GAAG,CAAA;AAEvC,MAAA,IAAI,UAAe,KAAA,MAAA,IAAW,CAAC,UAAA,IAAc,WAAW,EAAK,EAAA;AAE7D,MAAA,eAAA;AAAA,QACE,CAAQ,IAAA,KAAA;AACN,UAAM,MAAA,MAAA,GAAS,IAAI,eAAA,CAAgB,IAAI,CAAA;AACvC,UAAA,IAAI,WAAW,EAAI,EAAA;AACjB,YAAA,MAAA,CAAO,OAAO,GAAG,CAAA;AAAA,WACZ,MAAA;AACL,YAAO,MAAA,CAAA,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA;AAExB,UAAO,OAAA,MAAA;AAAA,SACT;AAAA,QACA,EAAE,SAAS,IAAK;AAAA,OAClB;AAEA,MAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,KACnB;AAAA,IACA,CAAC,GAAK,EAAA,YAAA,EAAc,eAAe;AAAA,GACrC;AAEA,EAAO,OAAA,CAAC,OAAO,QAAQ,CAAA;AACzB;;;;"}
1
+ {"version":3,"file":"useQueryArrayState.esm.js","sources":["../../src/hooks/useQueryArrayState.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useCallback, useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\n\nexport function useQueryArrayState(\n key: string,\n defaultValue: string[] = [],\n): [string[], (value: string[]) => void] {\n const [searchParams, setSearchParams] = useSearchParams();\n\n const getArrayFromParam = useCallback((): string[] => {\n const raw = searchParams.get(key);\n return raw ? raw.split(',').filter(Boolean) : defaultValue;\n }, [key, searchParams, defaultValue]);\n\n const [state, setState] = useState<string[]>(() => getArrayFromParam());\n\n useEffect(() => {\n const value = getArrayFromParam();\n setState(prev => {\n const prevRaw = prev.join(',');\n const nextRaw = value.join(',');\n return prevRaw === nextRaw ? prev : value;\n });\n }, [getArrayFromParam]);\n\n const setValue = useCallback(\n (newValue: string[]) => {\n const newRaw = newValue.join(',');\n const currentRaw = searchParams.get(key);\n\n if (currentRaw === newRaw || (!currentRaw && newRaw === '')) return;\n\n setSearchParams(\n prev => {\n const params = new URLSearchParams(prev);\n if (newRaw === '') {\n params.delete(key);\n } else {\n params.set(key, newRaw);\n }\n return params;\n },\n { replace: true },\n );\n\n setState(newValue);\n },\n [key, searchParams, setSearchParams],\n );\n\n return [state, setValue];\n}\n"],"names":[],"mappings":";;;AAkBO,SAAS,kBAAA,CACd,GAAA,EACA,YAAA,GAAyB,EAAC,EACa;AACvC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,eAAA,EAAgB;AAExD,EAAA,MAAM,iBAAA,GAAoB,YAAY,MAAgB;AACpD,IAAA,MAAM,GAAA,GAAM,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AAChC,IAAA,OAAO,MAAM,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,GAAI,YAAA;AAAA,EAChD,CAAA,EAAG,CAAC,GAAA,EAAK,YAAA,EAAc,YAAY,CAAC,CAAA;AAEpC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAI,QAAA,CAAmB,MAAM,mBAAmB,CAAA;AAEtE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,QAAQ,iBAAA,EAAkB;AAChC,IAAA,QAAA,CAAS,CAAA,IAAA,KAAQ;AACf,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAC7B,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA;AAC9B,MAAA,OAAO,OAAA,KAAY,UAAU,IAAA,GAAO,KAAA;AAAA,IACtC,CAAC,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAEtB,EAAA,MAAM,QAAA,GAAW,WAAA;AAAA,IACf,CAAC,QAAA,KAAuB;AACtB,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA;AAChC,MAAA,MAAM,UAAA,GAAa,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AAEvC,MAAA,IAAI,UAAA,KAAe,MAAA,IAAW,CAAC,UAAA,IAAc,WAAW,EAAA,EAAK;AAE7D,MAAA,eAAA;AAAA,QACE,CAAA,IAAA,KAAQ;AACN,UAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB,IAAI,CAAA;AACvC,UAAA,IAAI,WAAW,EAAA,EAAI;AACjB,YAAA,MAAA,CAAO,OAAO,GAAG,CAAA;AAAA,UACnB,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,UACxB;AACA,UAAA,OAAO,MAAA;AAAA,QACT,CAAA;AAAA,QACA,EAAE,SAAS,IAAA;AAAK,OAClB;AAEA,MAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,CAAC,GAAA,EAAK,YAAA,EAAc,eAAe;AAAA,GACrC;AAEA,EAAA,OAAO,CAAC,OAAO,QAAQ,CAAA;AACzB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useQueryHelpers.esm.js","sources":["../../src/hooks/useQueryHelpers.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useSearchParams } from 'react-router-dom';\n\nexport function useUpdateQueryParams() {\n const [, setSearchParams] = useSearchParams();\n\n return (updates: Record<string, string>) => {\n setSearchParams(\n prev => {\n const params = new URLSearchParams(prev);\n for (const key in updates) {\n if (updates[key] === '') {\n params.delete(key);\n } else {\n params.set(key, updates[key]);\n }\n }\n return params;\n },\n { replace: true },\n );\n };\n}\n"],"names":[],"mappings":";;AAkBO,SAAS,oBAAuB,GAAA;AACrC,EAAA,MAAM,GAAG,eAAe,CAAA,GAAI,eAAgB,EAAA;AAE5C,EAAA,OAAO,CAAC,OAAoC,KAAA;AAC1C,IAAA,eAAA;AAAA,MACE,CAAQ,IAAA,KAAA;AACN,QAAM,MAAA,MAAA,GAAS,IAAI,eAAA,CAAgB,IAAI,CAAA;AACvC,QAAA,KAAA,MAAW,OAAO,OAAS,EAAA;AACzB,UAAI,IAAA,OAAA,CAAQ,GAAG,CAAA,KAAM,EAAI,EAAA;AACvB,YAAA,MAAA,CAAO,OAAO,GAAG,CAAA;AAAA,WACZ,MAAA;AACL,YAAA,MAAA,CAAO,GAAI,CAAA,GAAA,EAAK,OAAQ,CAAA,GAAG,CAAC,CAAA;AAAA;AAC9B;AAEF,QAAO,OAAA,MAAA;AAAA,OACT;AAAA,MACA,EAAE,SAAS,IAAK;AAAA,KAClB;AAAA,GACF;AACF;;;;"}
1
+ {"version":3,"file":"useQueryHelpers.esm.js","sources":["../../src/hooks/useQueryHelpers.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { useSearchParams } from 'react-router-dom';\n\nexport function useUpdateQueryParams() {\n const [, setSearchParams] = useSearchParams();\n\n return (updates: Record<string, string>) => {\n setSearchParams(\n prev => {\n const params = new URLSearchParams(prev);\n for (const key in updates) {\n if (updates[key] === '') {\n params.delete(key);\n } else {\n params.set(key, updates[key]);\n }\n }\n return params;\n },\n { replace: true },\n );\n };\n}\n"],"names":[],"mappings":";;AAkBO,SAAS,oBAAA,GAAuB;AACrC,EAAA,MAAM,GAAG,eAAe,CAAA,GAAI,eAAA,EAAgB;AAE5C,EAAA,OAAO,CAAC,OAAA,KAAoC;AAC1C,IAAA,eAAA;AAAA,MACE,CAAA,IAAA,KAAQ;AACN,QAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB,IAAI,CAAA;AACvC,QAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,UAAA,IAAI,OAAA,CAAQ,GAAG,CAAA,KAAM,EAAA,EAAI;AACvB,YAAA,MAAA,CAAO,OAAO,GAAG,CAAA;AAAA,UACnB,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,UAC9B;AAAA,QACF;AACA,QAAA,OAAO,MAAA;AAAA,MACT,CAAA;AAAA,MACA,EAAE,SAAS,IAAA;AAAK,KAClB;AAAA,EACF,CAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useQueryState.esm.js","sources":["../../src/hooks/useQueryState.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useCallback, useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\n\nexport function useQueryState<T>(\n key: string,\n defaultValue: T,\n): [T, (value: T) => void] {\n const [searchParams, setSearchParams] = useSearchParams();\n\n const getValueFromParams = useCallback(\n (raw: string | null): T => {\n if (typeof defaultValue === 'number') {\n return (raw !== null ? Number(raw) : defaultValue) as T;\n }\n if (typeof defaultValue === 'boolean') {\n return (raw === 'true') as T;\n }\n return (raw ?? defaultValue) as T;\n },\n [defaultValue],\n );\n\n const [state, setState] = useState<T>(() =>\n getValueFromParams(searchParams.get(key)),\n );\n\n useEffect(() => {\n const paramValue = getValueFromParams(searchParams.get(key));\n setState(paramValue);\n }, [getValueFromParams, searchParams, key]);\n\n const setValue = useCallback(\n (newValue: T) => {\n const currentRaw = searchParams.get(key);\n const newRaw = String(newValue);\n\n if (currentRaw === newRaw || (!currentRaw && newRaw === '')) return;\n\n setSearchParams(\n prev => {\n const params = new URLSearchParams(prev);\n\n if (newRaw === '') {\n params.delete(key);\n } else {\n params.set(key, newRaw);\n }\n\n return params;\n },\n { replace: true },\n );\n\n setState(newValue);\n },\n [key, searchParams, setSearchParams],\n );\n\n return [state, setValue];\n}\n"],"names":[],"mappings":";;;AAkBgB,SAAA,aAAA,CACd,KACA,YACyB,EAAA;AACzB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,eAAgB,EAAA;AAExD,EAAA,MAAM,kBAAqB,GAAA,WAAA;AAAA,IACzB,CAAC,GAA0B,KAAA;AACzB,MAAI,IAAA,OAAO,iBAAiB,QAAU,EAAA;AACpC,QAAA,OAAQ,GAAQ,KAAA,IAAA,GAAO,MAAO,CAAA,GAAG,CAAI,GAAA,YAAA;AAAA;AAEvC,MAAI,IAAA,OAAO,iBAAiB,SAAW,EAAA;AACrC,QAAA,OAAQ,GAAQ,KAAA,MAAA;AAAA;AAElB,MAAA,OAAQ,GAAO,IAAA,YAAA;AAAA,KACjB;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEA,EAAM,MAAA,CAAC,KAAO,EAAA,QAAQ,CAAI,GAAA,QAAA;AAAA,IAAY,MACpC,kBAAA,CAAmB,YAAa,CAAA,GAAA,CAAI,GAAG,CAAC;AAAA,GAC1C;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,UAAa,GAAA,kBAAA,CAAmB,YAAa,CAAA,GAAA,CAAI,GAAG,CAAC,CAAA;AAC3D,IAAA,QAAA,CAAS,UAAU,CAAA;AAAA,GAClB,EAAA,CAAC,kBAAoB,EAAA,YAAA,EAAc,GAAG,CAAC,CAAA;AAE1C,EAAA,MAAM,QAAW,GAAA,WAAA;AAAA,IACf,CAAC,QAAgB,KAAA;AACf,MAAM,MAAA,UAAA,GAAa,YAAa,CAAA,GAAA,CAAI,GAAG,CAAA;AACvC,MAAM,MAAA,MAAA,GAAS,OAAO,QAAQ,CAAA;AAE9B,MAAA,IAAI,UAAe,KAAA,MAAA,IAAW,CAAC,UAAA,IAAc,WAAW,EAAK,EAAA;AAE7D,MAAA,eAAA;AAAA,QACE,CAAQ,IAAA,KAAA;AACN,UAAM,MAAA,MAAA,GAAS,IAAI,eAAA,CAAgB,IAAI,CAAA;AAEvC,UAAA,IAAI,WAAW,EAAI,EAAA;AACjB,YAAA,MAAA,CAAO,OAAO,GAAG,CAAA;AAAA,WACZ,MAAA;AACL,YAAO,MAAA,CAAA,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA;AAGxB,UAAO,OAAA,MAAA;AAAA,SACT;AAAA,QACA,EAAE,SAAS,IAAK;AAAA,OAClB;AAEA,MAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,KACnB;AAAA,IACA,CAAC,GAAK,EAAA,YAAA,EAAc,eAAe;AAAA,GACrC;AAEA,EAAO,OAAA,CAAC,OAAO,QAAQ,CAAA;AACzB;;;;"}
1
+ {"version":3,"file":"useQueryState.esm.js","sources":["../../src/hooks/useQueryState.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useCallback, useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\n\nexport function useQueryState<T>(\n key: string,\n defaultValue: T,\n): [T, (value: T) => void] {\n const [searchParams, setSearchParams] = useSearchParams();\n\n const getValueFromParams = useCallback(\n (raw: string | null): T => {\n if (typeof defaultValue === 'number') {\n return (raw !== null ? Number(raw) : defaultValue) as T;\n }\n if (typeof defaultValue === 'boolean') {\n return (raw === 'true') as T;\n }\n return (raw ?? defaultValue) as T;\n },\n [defaultValue],\n );\n\n const [state, setState] = useState<T>(() =>\n getValueFromParams(searchParams.get(key)),\n );\n\n useEffect(() => {\n const paramValue = getValueFromParams(searchParams.get(key));\n setState(paramValue);\n }, [getValueFromParams, searchParams, key]);\n\n const setValue = useCallback(\n (newValue: T) => {\n const currentRaw = searchParams.get(key);\n const newRaw = String(newValue);\n\n if (currentRaw === newRaw || (!currentRaw && newRaw === '')) return;\n\n setSearchParams(\n prev => {\n const params = new URLSearchParams(prev);\n\n if (newRaw === '') {\n params.delete(key);\n } else {\n params.set(key, newRaw);\n }\n\n return params;\n },\n { replace: true },\n );\n\n setState(newValue);\n },\n [key, searchParams, setSearchParams],\n );\n\n return [state, setValue];\n}\n"],"names":[],"mappings":";;;AAkBO,SAAS,aAAA,CACd,KACA,YAAA,EACyB;AACzB,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,eAAA,EAAgB;AAExD,EAAA,MAAM,kBAAA,GAAqB,WAAA;AAAA,IACzB,CAAC,GAAA,KAA0B;AACzB,MAAA,IAAI,OAAO,iBAAiB,QAAA,EAAU;AACpC,QAAA,OAAQ,GAAA,KAAQ,IAAA,GAAO,MAAA,CAAO,GAAG,CAAA,GAAI,YAAA;AAAA,MACvC;AACA,MAAA,IAAI,OAAO,iBAAiB,SAAA,EAAW;AACrC,QAAA,OAAQ,GAAA,KAAQ,MAAA;AAAA,MAClB;AACA,MAAA,OAAQ,GAAA,IAAO,YAAA;AAAA,IACjB,CAAA;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEA,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA;AAAA,IAAY,MACpC,kBAAA,CAAmB,YAAA,CAAa,GAAA,CAAI,GAAG,CAAC;AAAA,GAC1C;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,YAAA,CAAa,GAAA,CAAI,GAAG,CAAC,CAAA;AAC3D,IAAA,QAAA,CAAS,UAAU,CAAA;AAAA,EACrB,CAAA,EAAG,CAAC,kBAAA,EAAoB,YAAA,EAAc,GAAG,CAAC,CAAA;AAE1C,EAAA,MAAM,QAAA,GAAW,WAAA;AAAA,IACf,CAAC,QAAA,KAAgB;AACf,MAAA,MAAM,UAAA,GAAa,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AACvC,MAAA,MAAM,MAAA,GAAS,OAAO,QAAQ,CAAA;AAE9B,MAAA,IAAI,UAAA,KAAe,MAAA,IAAW,CAAC,UAAA,IAAc,WAAW,EAAA,EAAK;AAE7D,MAAA,eAAA;AAAA,QACE,CAAA,IAAA,KAAQ;AACN,UAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB,IAAI,CAAA;AAEvC,UAAA,IAAI,WAAW,EAAA,EAAI;AACjB,YAAA,MAAA,CAAO,OAAO,GAAG,CAAA;AAAA,UACnB,CAAA,MAAO;AACL,YAAA,MAAA,CAAO,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,UACxB;AAEA,UAAA,OAAO,MAAA;AAAA,QACT,CAAA;AAAA,QACA,EAAE,SAAS,IAAA;AAAK,OAClB;AAEA,MAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,IACnB,CAAA;AAAA,IACA,CAAC,GAAA,EAAK,YAAA,EAAc,eAAe;AAAA,GACrC;AAEA,EAAA,OAAO,CAAC,OAAO,QAAQ,CAAA;AACzB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTranslation.esm.js","sources":["../../src/hooks/useTranslation.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n useTranslationRef,\n TranslationRef,\n} from '@backstage/core-plugin-api/alpha';\nimport { servicenowTranslationRef } from '../translations';\n\ntype ServicenowMessages =\n typeof servicenowTranslationRef extends TranslationRef<\n string,\n infer TMessages extends { [x: string]: string }\n >\n ? TMessages\n : never;\n\n/**\n * Hook to access the ServiceNow plugin translations.\n * @alpha\n */\nexport const useTranslation = (): {\n t: (\n key: keyof ServicenowMessages,\n options?: Record<string, unknown>,\n ) => string;\n} => {\n const { t } = useTranslationRef(servicenowTranslationRef);\n return {\n t: t as unknown as (\n key: keyof ServicenowMessages,\n options?: Record<string, unknown>,\n ) => string,\n };\n};\n"],"names":[],"mappings":";;;;AAiCO,MAAM,iBAAiB,MAKzB;AACH,EAAA,MAAM,EAAE,CAAA,EAAM,GAAA,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAO,OAAA;AAAA,IACL;AAAA,GAIF;AACF;;;;"}
1
+ {"version":3,"file":"useTranslation.esm.js","sources":["../../src/hooks/useTranslation.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n useTranslationRef,\n TranslationRef,\n} from '@backstage/core-plugin-api/alpha';\nimport { servicenowTranslationRef } from '../translations';\n\ntype ServicenowMessages =\n typeof servicenowTranslationRef extends TranslationRef<\n string,\n infer TMessages extends { [x: string]: string }\n >\n ? TMessages\n : never;\n\n/**\n * Hook to access the ServiceNow plugin translations.\n * @alpha\n */\nexport const useTranslation = (): {\n t: (\n key: keyof ServicenowMessages,\n options?: Record<string, unknown>,\n ) => string;\n} => {\n const { t } = useTranslationRef(servicenowTranslationRef);\n return {\n t: t as unknown as (\n key: keyof ServicenowMessages,\n options?: Record<string, unknown>,\n ) => string,\n };\n};\n"],"names":[],"mappings":";;;;AAiCO,MAAM,iBAAiB,MAKzB;AACH,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,wBAAwB,CAAA;AACxD,EAAA,OAAO;AAAA,IACL;AAAA,GAIF;AACF;;;;"}