@backstage-community/plugin-ilert 0.19.0 → 0.20.1

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 (77) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +27 -17
  3. package/config.d.ts +1 -1
  4. package/dist/ILertIcon.esm.js.map +1 -1
  5. package/dist/api/client.esm.js +1 -1
  6. package/dist/api/client.esm.js.map +1 -1
  7. package/dist/components/Alert/AlertActionsMenu.esm.js +1 -1
  8. package/dist/components/Alert/AlertActionsMenu.esm.js.map +1 -1
  9. package/dist/components/Alert/AlertAssignModal.esm.js.map +1 -1
  10. package/dist/components/Alert/AlertLink.esm.js.map +1 -1
  11. package/dist/components/Alert/AlertNewModal.esm.js.map +1 -1
  12. package/dist/components/AlertSource/AlertSourceLink.esm.js.map +1 -1
  13. package/dist/components/AlertsPage/AlertsPage.esm.js +1 -1
  14. package/dist/components/AlertsPage/AlertsPage.esm.js.map +1 -1
  15. package/dist/components/AlertsPage/AlertsTable.esm.js.map +1 -1
  16. package/dist/components/AlertsPage/StatusChip.esm.js +1 -1
  17. package/dist/components/AlertsPage/StatusChip.esm.js.map +1 -1
  18. package/dist/components/AlertsPage/TableTitle.esm.js.map +1 -1
  19. package/dist/components/Errors/MissingAuthorizationHeaderError.esm.js +1 -1
  20. package/dist/components/Errors/MissingAuthorizationHeaderError.esm.js.map +1 -1
  21. package/dist/components/ILertCard/ILertCard.esm.js +1 -1
  22. package/dist/components/ILertCard/ILertCard.esm.js.map +1 -1
  23. package/dist/components/ILertCard/ILertCardActionsHeader.esm.js +1 -1
  24. package/dist/components/ILertCard/ILertCardActionsHeader.esm.js.map +1 -1
  25. package/dist/components/ILertCard/ILertCardEmptyState.esm.js +1 -1
  26. package/dist/components/ILertCard/ILertCardEmptyState.esm.js.map +1 -1
  27. package/dist/components/ILertCard/ILertCardHeaderStatus.esm.js.map +1 -1
  28. package/dist/components/ILertCard/ILertCardMaintenanceModal.esm.js.map +1 -1
  29. package/dist/components/ILertCard/ILertCardOnCall.esm.js +1 -1
  30. package/dist/components/ILertCard/ILertCardOnCall.esm.js.map +1 -1
  31. package/dist/components/ILertCard/ILertCardOnCallEmptyState.esm.js.map +1 -1
  32. package/dist/components/ILertCard/ILertCardOnCallItem.esm.js.map +1 -1
  33. package/dist/components/ILertCard/index.esm.js +6 -1
  34. package/dist/components/ILertCard/index.esm.js.map +1 -1
  35. package/dist/components/ILertPage/ILertPage.esm.js +3 -3
  36. package/dist/components/ILertPage/ILertPage.esm.js.map +1 -1
  37. package/dist/components/OnCallSchedulesPage/OnCallSchedulesGrid.esm.js.map +1 -1
  38. package/dist/components/OnCallSchedulesPage/OnCallSchedulesPage.esm.js +1 -1
  39. package/dist/components/OnCallSchedulesPage/OnCallSchedulesPage.esm.js.map +1 -1
  40. package/dist/components/OnCallSchedulesPage/OnCallShiftItem.esm.js.map +1 -1
  41. package/dist/components/Service/ServiceActionsMenu.esm.js +1 -1
  42. package/dist/components/Service/ServiceActionsMenu.esm.js.map +1 -1
  43. package/dist/components/Service/ServiceLink.esm.js.map +1 -1
  44. package/dist/components/ServicesPage/ServicesPage.esm.js +1 -1
  45. package/dist/components/ServicesPage/ServicesPage.esm.js.map +1 -1
  46. package/dist/components/ServicesPage/ServicesTable.esm.js.map +1 -1
  47. package/dist/components/ServicesPage/StatusChip.esm.js.map +1 -1
  48. package/dist/components/Shift/ShiftOverrideModal.esm.js.map +1 -1
  49. package/dist/components/StatusPage/StatusPageActionsMenu.esm.js +1 -1
  50. package/dist/components/StatusPage/StatusPageActionsMenu.esm.js.map +1 -1
  51. package/dist/components/StatusPage/StatusPageLink.esm.js.map +1 -1
  52. package/dist/components/StatusPage/StatusPageURL.esm.js.map +1 -1
  53. package/dist/components/StatusPagePage/StatusChip.esm.js.map +1 -1
  54. package/dist/components/StatusPagePage/StatusPagesPage.esm.js +1 -1
  55. package/dist/components/StatusPagePage/StatusPagesPage.esm.js.map +1 -1
  56. package/dist/components/StatusPagePage/StatusPagesTable.esm.js.map +1 -1
  57. package/dist/components/StatusPagePage/VisibilityChip.esm.js.map +1 -1
  58. package/dist/components/index.esm.js +5 -1
  59. package/dist/components/index.esm.js.map +1 -1
  60. package/dist/constants.esm.js.map +1 -1
  61. package/dist/hooks/index.esm.js.map +1 -1
  62. package/dist/hooks/useAlertActions.esm.js.map +1 -1
  63. package/dist/hooks/useAlertSource.esm.js.map +1 -1
  64. package/dist/hooks/useAlertSourceOnCalls.esm.js.map +1 -1
  65. package/dist/hooks/useAlerts.esm.js.map +1 -1
  66. package/dist/hooks/useAssignAlert.esm.js.map +1 -1
  67. package/dist/hooks/useNewAlert.esm.js.map +1 -1
  68. package/dist/hooks/useOnCallSchedules.esm.js.map +1 -1
  69. package/dist/hooks/useServices.esm.js.map +1 -1
  70. package/dist/hooks/useShiftOverride.esm.js.map +1 -1
  71. package/dist/hooks/useStatusPages.esm.js.map +1 -1
  72. package/dist/index.d.ts +1 -1
  73. package/dist/plugin.esm.js +1 -1
  74. package/dist/plugin.esm.js.map +1 -1
  75. package/dist/route-refs.esm.js.map +1 -1
  76. package/dist/types.esm.js.map +1 -1
  77. package/package.json +10 -10
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @backstage-community/plugin-ilert
2
2
 
3
+ ## 0.20.1
4
+
5
+ ### Patch Changes
6
+
7
+ - e02db27: Align plugin copy and docs to ilert naming; update README, config types, and UI wording (alerts).
8
+
9
+ ## 0.20.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 8db2f72: Backstage version bump to v1.50.2
14
+
3
15
  ## 0.19.0
4
16
 
5
17
  ### Minor Changes
package/README.md CHANGED
@@ -2,24 +2,34 @@
2
2
 
3
3
  ## Introduction
4
4
 
5
- [iLert](https://www.ilert.com) is a platform for alerting, on-call management and uptime monitoring. It helps teams to reduce response times to critical incidents by extending monitoring tools with reliable alerting, automatic escalations, on-call schedules and other features to support the incident response process, such as informing stakeholders or creating tickets in external incident management tools.
5
+ [ilert](https://www.ilert.com) The AI-first platform for on-call, incident response, and status pages eliminating the interrupt tax across your stack.
6
6
 
7
7
  ## Overview
8
8
 
9
- This plugin gives an overview about ongoing iLert incidents, on-call and uptime monitor status.
10
- See who is on-call, which incidents are active and trigger incidents directly from backstage for the configured alert sources.
9
+ This plugin integrates ilert into Backstage and provides an overview of operational information such as alerts, on-call schedules, services, and status pages.
11
10
 
12
- In detail this plugin provides:
11
+ It allows users to:
13
12
 
14
- - Information details about the person on-call (all escalation levels of the current time)
15
- - A way to override the current on-call person
16
- - A list of active incidents
17
- - A way to trigger a new incident
18
- - A way to reassign/acknowledge/resolve an incident
19
- - A way to trigger an incident action
20
- - A way to trigger an immediate maintenance
21
- - A way to disable/enable an alert source
22
- - A list of uptime monitors
13
+ - See who is currently on-call
14
+ - View active alerts
15
+ - Trigger alerts directly from Backstage for configured alert sources
16
+ - View services and their current status
17
+ - Access status pages
18
+
19
+ ### Features
20
+
21
+ This plugin provides the following functionality:
22
+
23
+ - View details about the current on-call person (including all escalation levels)
24
+ - Override the current on-call assignment
25
+ - View a list of active alerts
26
+ - Trigger a new alert
27
+ - Reassign, acknowledge, or resolve an alert
28
+ - Trigger alert actions
29
+ - Enable or disable an alert source
30
+ - Start immediate maintenance
31
+ - View services and their current status
32
+ - Access configured status pages
23
33
 
24
34
  ## Setup instructions
25
35
 
@@ -49,9 +59,9 @@ import {
49
59
  // ...
50
60
  ```
51
61
 
52
- > To force an iLert card for each entity just add the `<EntityILertCard />` component. An instruction card will appear if no integration key is set.
62
+ > To force an ilert card for each entity just add the `<EntityILertCard />` component. An instruction card will appear if no integration key is set.
53
63
 
54
- ## Add iLert explorer to the app sidebar
64
+ ## Add ilert explorer to the app sidebar
55
65
 
56
66
  Modify your app routes in [`App.tsx`](https://github.com/backstage/backstage/blob/master/packages/app/src/App.tsx) to include the Router component exported by the plugin - for example:
57
67
 
@@ -70,7 +80,7 @@ Modify your sidebar in [`Root.tsx`](https://github.com/backstage/backstage/blob/
70
80
  import { ILertIcon } from '@backstage-community/plugin-ilert';
71
81
  <Sidebar>
72
82
  // ...
73
- <SidebarItem icon={ILertIcon} to="ilert" text="iLert" />
83
+ <SidebarItem icon={ILertIcon} to="ilert" text="ilert" />
74
84
  // ...
75
85
  </Sidebar>;
76
86
  ```
@@ -88,7 +98,7 @@ ilert:
88
98
 
89
99
  ## Providing the Authorization Header
90
100
 
91
- In order to make the API calls, you need to provide a new proxy config which will redirect to the [iLert API](https://api.ilert.com/api-docs/) endpoint. It needs an [Authorization Header](https://api.ilert.com/api-docs/#section/Authentication).
101
+ In order to make the API calls, you need to provide a new proxy config which will redirect to the [ilert API](https://api.ilert.com/api-docs/) endpoint. It needs an [Authorization Header](https://api.ilert.com/api-docs/#section/Authentication).
92
102
 
93
103
  Add the proxy configuration in `app-config.yaml`
94
104
 
package/config.d.ts CHANGED
@@ -16,7 +16,7 @@
16
16
  export interface Config {
17
17
  ilert?: {
18
18
  /**
19
- * Domain used by users to access iLert web UI.
19
+ * Domain used by users to access ilert web UI.
20
20
  * Example: https://my-app.ilert.com/
21
21
  * @visibility frontend
22
22
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ILertIcon.esm.js","sources":["../src/ILertIcon.tsx"],"sourcesContent":["/*\n * Copyright 2022 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, { SvgIconProps } from '@material-ui/core/SvgIcon';\n\n/**\n * @public\n */\nexport const ILertIcon = (props: SvgIconProps) => (\n <SvgIcon {...props}>\n <g>\n <path\n stroke=\"none\"\n fillRule=\"nonzero\"\n fill=\"#fff\"\n fillOpacity=\"1\"\n d=\"M 0 9.277344 L 0 18.574219 C 0 20.832031 1.847656 22.679688 4.105469 22.679688 L 12.582031 22.679688 C 6.21875 21.007812 1.277344 15.792969 0 9.277344 Z M 0 9.277344\"\n />\n <path\n stroke=\"none\"\n fillRule=\"nonzero\"\n fill=\"#fff\"\n fillOpacity=\"1\"\n d=\"M 19.527344 22.5625 C 21.328125 22.128906 22.679688 20.503906 22.679688 18.574219 L 22.679688 16.273438 C 21.691406 16.820312 20.632812 17.222656 19.527344 17.46875 Z M 19.527344 22.5625\"\n />\n <path\n stroke=\"none\"\n fillRule=\"nonzero\"\n fill=\"#fff\"\n fillOpacity=\"1\"\n d=\"M 14.417969 17.46875 C 9.136719 16.296875 5.171875 11.578125 5.171875 5.945312 C 5.167969 3.855469 5.726562 1.804688 6.785156 0 L 4.105469 0 C 1.847656 0 0 1.847656 0 4.105469 L 0 6.882812 C 0.433594 14.816406 6.335938 21.316406 13.992188 22.679688 L 14.421875 22.679688 Z M 14.417969 17.46875\"\n />\n <path\n stroke=\"none\"\n fillRule=\"nonzero\"\n fill=\"#fff\"\n fillOpacity=\"1\"\n d=\"M 19.527344 12.375 L 19.527344 17.160156 C 20.632812 16.910156 21.695312 16.496094 22.679688 15.929688 L 22.679688 9.855469 C 21.902344 10.988281 20.804688 11.863281 19.527344 12.375 Z M 19.527344 12.375\"\n />\n <path\n stroke=\"none\"\n fillRule=\"nonzero\"\n fill=\"#fff\"\n fillOpacity=\"1\"\n d=\"M 14.417969 17.160156 L 14.417969 12.375 C 11.863281 11.355469 10.054688 8.859375 10.054688 5.945312 C 10.054688 3.503906 11.34375 1.246094 13.441406 0 L 7.128906 0 C 6.039062 1.792969 5.464844 3.847656 5.46875 5.945312 C 5.46875 11.410156 9.300781 15.996094 14.417969 17.160156 Z M 14.417969 17.160156\"\n />\n <path\n stroke=\"none\"\n fillRule=\"nonzero\"\n fill=\"#fff\"\n fillOpacity=\"1\"\n d=\"M 10.355469 5.945312 C 10.355469 8.613281 11.957031 11.019531 14.417969 12.050781 L 14.417969 9.917969 C 15.972656 10.925781 17.972656 10.925781 19.527344 9.917969 L 19.527344 12.050781 C 20.847656 11.496094 21.953125 10.53125 22.679688 9.300781 L 22.679688 4.105469 C 22.679688 1.847656 20.832031 0 18.574219 0 L 14.066406 0 C 11.796875 1.113281 10.355469 3.417969 10.355469 5.945312 Z M 16.972656 2.5625 C 18.84375 2.5625 20.355469 4.078125 20.355469 5.945312 C 20.355469 7.8125 18.84375 9.328125 16.972656 9.328125 C 15.105469 9.328125 13.589844 7.8125 13.589844 5.945312 C 13.59375 4.078125 15.105469 2.566406 16.972656 2.5625 Z M 16.972656 2.5625\"\n />\n </g>\n </SvgIcon>\n);\n"],"names":[],"mappings":";;;AAqBa,MAAA,SAAA,GAAY,CAAC,KACxB,qBAAA,GAAA,CAAC,WAAS,GAAG,KAAA,EACX,+BAAC,GACC,EAAA,EAAA,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,MAAO,EAAA,MAAA;AAAA,MACP,QAAS,EAAA,SAAA;AAAA,MACT,IAAK,EAAA,MAAA;AAAA,MACL,WAAY,EAAA,GAAA;AAAA,MACZ,CAAE,EAAA;AAAA;AAAA,GACJ;AAAA,kBACA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,MAAO,EAAA,MAAA;AAAA,MACP,QAAS,EAAA,SAAA;AAAA,MACT,IAAK,EAAA,MAAA;AAAA,MACL,WAAY,EAAA,GAAA;AAAA,MACZ,CAAE,EAAA;AAAA;AAAA,GACJ;AAAA,kBACA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,MAAO,EAAA,MAAA;AAAA,MACP,QAAS,EAAA,SAAA;AAAA,MACT,IAAK,EAAA,MAAA;AAAA,MACL,WAAY,EAAA,GAAA;AAAA,MACZ,CAAE,EAAA;AAAA;AAAA,GACJ;AAAA,kBACA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,MAAO,EAAA,MAAA;AAAA,MACP,QAAS,EAAA,SAAA;AAAA,MACT,IAAK,EAAA,MAAA;AAAA,MACL,WAAY,EAAA,GAAA;AAAA,MACZ,CAAE,EAAA;AAAA;AAAA,GACJ;AAAA,kBACA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,MAAO,EAAA,MAAA;AAAA,MACP,QAAS,EAAA,SAAA;AAAA,MACT,IAAK,EAAA,MAAA;AAAA,MACL,WAAY,EAAA,GAAA;AAAA,MACZ,CAAE,EAAA;AAAA;AAAA,GACJ;AAAA,kBACA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,MAAO,EAAA,MAAA;AAAA,MACP,QAAS,EAAA,SAAA;AAAA,MACT,IAAK,EAAA,MAAA;AAAA,MACL,WAAY,EAAA,GAAA;AAAA,MACZ,CAAE,EAAA;AAAA;AAAA;AACJ,CAAA,EACF,CACF,EAAA;;;;"}
1
+ {"version":3,"file":"ILertIcon.esm.js","sources":["../src/ILertIcon.tsx"],"sourcesContent":["/*\n * Copyright 2022 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, { SvgIconProps } from '@material-ui/core/SvgIcon';\n\n/**\n * @public\n */\nexport const ILertIcon = (props: SvgIconProps) => (\n <SvgIcon {...props}>\n <g>\n <path\n stroke=\"none\"\n fillRule=\"nonzero\"\n fill=\"#fff\"\n fillOpacity=\"1\"\n d=\"M 0 9.277344 L 0 18.574219 C 0 20.832031 1.847656 22.679688 4.105469 22.679688 L 12.582031 22.679688 C 6.21875 21.007812 1.277344 15.792969 0 9.277344 Z M 0 9.277344\"\n />\n <path\n stroke=\"none\"\n fillRule=\"nonzero\"\n fill=\"#fff\"\n fillOpacity=\"1\"\n d=\"M 19.527344 22.5625 C 21.328125 22.128906 22.679688 20.503906 22.679688 18.574219 L 22.679688 16.273438 C 21.691406 16.820312 20.632812 17.222656 19.527344 17.46875 Z M 19.527344 22.5625\"\n />\n <path\n stroke=\"none\"\n fillRule=\"nonzero\"\n fill=\"#fff\"\n fillOpacity=\"1\"\n d=\"M 14.417969 17.46875 C 9.136719 16.296875 5.171875 11.578125 5.171875 5.945312 C 5.167969 3.855469 5.726562 1.804688 6.785156 0 L 4.105469 0 C 1.847656 0 0 1.847656 0 4.105469 L 0 6.882812 C 0.433594 14.816406 6.335938 21.316406 13.992188 22.679688 L 14.421875 22.679688 Z M 14.417969 17.46875\"\n />\n <path\n stroke=\"none\"\n fillRule=\"nonzero\"\n fill=\"#fff\"\n fillOpacity=\"1\"\n d=\"M 19.527344 12.375 L 19.527344 17.160156 C 20.632812 16.910156 21.695312 16.496094 22.679688 15.929688 L 22.679688 9.855469 C 21.902344 10.988281 20.804688 11.863281 19.527344 12.375 Z M 19.527344 12.375\"\n />\n <path\n stroke=\"none\"\n fillRule=\"nonzero\"\n fill=\"#fff\"\n fillOpacity=\"1\"\n d=\"M 14.417969 17.160156 L 14.417969 12.375 C 11.863281 11.355469 10.054688 8.859375 10.054688 5.945312 C 10.054688 3.503906 11.34375 1.246094 13.441406 0 L 7.128906 0 C 6.039062 1.792969 5.464844 3.847656 5.46875 5.945312 C 5.46875 11.410156 9.300781 15.996094 14.417969 17.160156 Z M 14.417969 17.160156\"\n />\n <path\n stroke=\"none\"\n fillRule=\"nonzero\"\n fill=\"#fff\"\n fillOpacity=\"1\"\n d=\"M 10.355469 5.945312 C 10.355469 8.613281 11.957031 11.019531 14.417969 12.050781 L 14.417969 9.917969 C 15.972656 10.925781 17.972656 10.925781 19.527344 9.917969 L 19.527344 12.050781 C 20.847656 11.496094 21.953125 10.53125 22.679688 9.300781 L 22.679688 4.105469 C 22.679688 1.847656 20.832031 0 18.574219 0 L 14.066406 0 C 11.796875 1.113281 10.355469 3.417969 10.355469 5.945312 Z M 16.972656 2.5625 C 18.84375 2.5625 20.355469 4.078125 20.355469 5.945312 C 20.355469 7.8125 18.84375 9.328125 16.972656 9.328125 C 15.105469 9.328125 13.589844 7.8125 13.589844 5.945312 C 13.59375 4.078125 15.105469 2.566406 16.972656 2.5625 Z M 16.972656 2.5625\"\n />\n </g>\n </SvgIcon>\n);\n"],"names":[],"mappings":";;;AAqBO,MAAM,SAAA,GAAY,CAAC,KAAA,qBACxB,GAAA,CAAC,WAAS,GAAG,KAAA,EACX,+BAAC,GAAA,EAAA,EACC,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAO,MAAA;AAAA,MACP,QAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAK,MAAA;AAAA,MACL,WAAA,EAAY,GAAA;AAAA,MACZ,CAAA,EAAE;AAAA;AAAA,GACJ;AAAA,kBACA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAO,MAAA;AAAA,MACP,QAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAK,MAAA;AAAA,MACL,WAAA,EAAY,GAAA;AAAA,MACZ,CAAA,EAAE;AAAA;AAAA,GACJ;AAAA,kBACA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAO,MAAA;AAAA,MACP,QAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAK,MAAA;AAAA,MACL,WAAA,EAAY,GAAA;AAAA,MACZ,CAAA,EAAE;AAAA;AAAA,GACJ;AAAA,kBACA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAO,MAAA;AAAA,MACP,QAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAK,MAAA;AAAA,MACL,WAAA,EAAY,GAAA;AAAA,MACZ,CAAA,EAAE;AAAA;AAAA,GACJ;AAAA,kBACA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAO,MAAA;AAAA,MACP,QAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAK,MAAA;AAAA,MACL,WAAA,EAAY,GAAA;AAAA,MACZ,CAAA,EAAE;AAAA;AAAA,GACJ;AAAA,kBACA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAO,MAAA;AAAA,MACP,QAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAK,MAAA;AAAA,MACL,WAAA,EAAY,GAAA;AAAA,MACZ,CAAA,EAAE;AAAA;AAAA;AACJ,CAAA,EACF,CAAA,EACF;;;;"}
@@ -265,7 +265,7 @@ class ILertClient {
265
265
  body: JSON.stringify({
266
266
  start: DateTime.utc().toISO(),
267
267
  end: DateTime.utc().plus({ minutes }).toISO(),
268
- description: `Immediate maintenance window for ${minutes} minutes. Backstage \u2014 iLert plugin.`,
268
+ description: `Immediate maintenance window for ${minutes} minutes. Backstage \u2014 ilert plugin.`,
269
269
  createdBy: "Backstage",
270
270
  timezone: DateTime.local().zoneName,
271
271
  alertSources: [{ id: alertSourceId }]
@@ -1 +1 @@
1
- {"version":3,"file":"client.esm.js","sources":["../../src/api/client.ts"],"sourcesContent":["/*\n * Copyright 2021 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 { ConfigApi, DiscoveryApi, FetchApi } from '@backstage/core-plugin-api';\nimport { createApiRef } from '@backstage/frontend-plugin-api';\nimport { AuthenticationError, ResponseError } from '@backstage/errors';\nimport { DateTime as dt } from 'luxon';\nimport {\n Alert,\n AlertAction,\n AlertResponder,\n AlertSource,\n EscalationPolicy,\n OnCall,\n Schedule,\n Service,\n StatusPage,\n User,\n} from '../types';\nimport {\n EventRequest,\n GetAlertsCountOpts,\n GetAlertsOpts,\n GetServicesOpts,\n GetStatusPagesOpts,\n ILertApi,\n} from './types';\n\n/** @public */\nexport const ilertApiRef = createApiRef<ILertApi>().with({\n id: 'plugin.ilert.service',\n});\n\nconst DEFAULT_PROXY_PATH = '/ilert';\nconst JSON_HEADERS = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n};\n\n/** @public */\nexport class ILertClient implements ILertApi {\n private readonly discoveryApi: DiscoveryApi;\n private readonly fetchApi: FetchApi;\n private readonly proxyPath: string;\n private readonly baseUrl: string;\n\n static fromConfig(\n configApi: ConfigApi,\n discoveryApi: DiscoveryApi,\n fetchApi: FetchApi,\n ) {\n const baseUrl: string =\n configApi.getOptionalString('ilert.baseUrl') ?? 'https://app.ilert.com';\n\n return new ILertClient({\n discoveryApi,\n fetchApi,\n baseUrl,\n proxyPath:\n configApi.getOptionalString('ilert.proxyPath') ?? DEFAULT_PROXY_PATH,\n });\n }\n\n constructor(opts: {\n discoveryApi: DiscoveryApi;\n fetchApi: FetchApi;\n\n /**\n * URL used by users to access iLert web UI.\n * Example: https://my-org.ilert.com/\n */\n baseUrl: string;\n\n /**\n * Path to use for requests via the proxy, defaults to /ilert/api\n */\n proxyPath: string;\n }) {\n this.discoveryApi = opts.discoveryApi;\n this.fetchApi = opts.fetchApi;\n this.baseUrl = opts.baseUrl;\n this.proxyPath = opts.proxyPath;\n }\n\n private async fetch<T = any>(input: string, init?: RequestInit): Promise<T> {\n const apiUrl = await this.apiUrl();\n\n const response = await this.fetchApi.fetch(`${apiUrl}${input}`, init);\n if (response.status === 401) {\n throw new AuthenticationError(\n 'This request requires HTTP authentication.',\n );\n }\n if (!response.ok || response.status >= 400) {\n throw await ResponseError.fromResponse(response);\n }\n\n return await response.json();\n }\n\n async fetchAlerts(opts?: GetAlertsOpts): Promise<Alert[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n const query = new URLSearchParams();\n if (opts?.maxResults !== undefined) {\n query.append('max-results', String(opts.maxResults));\n }\n if (opts?.startIndex !== undefined) {\n query.append('start-index', String(opts.startIndex));\n }\n if (opts?.alertSources !== undefined && Array.isArray(opts.alertSources)) {\n opts.alertSources.forEach((a: number) => {\n if (a) {\n query.append('alert-source', String(a));\n }\n });\n }\n\n if (opts?.states !== undefined && Array.isArray(opts.states)) {\n opts.states.forEach(state => {\n query.append('state', state);\n });\n }\n const response = await this.fetch(`/api/alerts?${query.toString()}`, init);\n return response;\n }\n\n async fetchAlertsCount(opts?: GetAlertsCountOpts): Promise<number> {\n const init = {\n headers: JSON_HEADERS,\n };\n const query = new URLSearchParams();\n if (opts && opts.states && Array.isArray(opts.states)) {\n opts.states.forEach(state => {\n query.append('state', state);\n });\n }\n const response = await this.fetch(\n `/api/alerts/count?${query.toString()}`,\n init,\n );\n\n return response && response.count ? response.count : 0;\n }\n\n async fetchAlert(id: number): Promise<Alert> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch(\n `/api/alerts/${encodeURIComponent(id)}`,\n init,\n );\n\n return response;\n }\n\n async fetchAlertResponders(alert: Alert): Promise<AlertResponder[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch(\n `/api/alerts/${encodeURIComponent(alert.id)}/responders`,\n init,\n );\n\n return response;\n }\n\n async fetchAlertActions(alert: Alert): Promise<AlertAction[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch(\n `/api/alerts/${encodeURIComponent(alert.id)}/actions`,\n init,\n );\n\n return response;\n }\n\n async acceptAlert(alert: Alert, userName: string): Promise<Alert> {\n const init = {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({\n apiKey: alert.alertSource?.integrationKey || '',\n alertKey: alert.alertKey,\n summary: `from ${userName} via Backstage plugin`,\n eventType: 'ACCEPT',\n }),\n };\n\n await this.fetch('/api/events', init);\n return this.fetchAlert(alert.id);\n }\n\n async resolveAlert(alert: Alert, userName: string): Promise<Alert> {\n const init = {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({\n apiKey: alert.alertSource?.integrationKey || '',\n alertKey: alert.alertKey,\n summary: `from ${userName} via Backstage plugin`,\n eventType: 'RESOLVE',\n }),\n };\n\n await this.fetch('/api/events', init);\n return this.fetchAlert(alert.id);\n }\n\n async assignAlert(alert: Alert, responder: AlertResponder): Promise<Alert> {\n const init = {\n method: 'PUT',\n headers: JSON_HEADERS,\n };\n\n const query = new URLSearchParams();\n switch (responder.group) {\n case 'ESCALATION_POLICY':\n query.append('policy-id', String(responder.id));\n break;\n case 'ON_CALL_SCHEDULE':\n query.append('schedule-id', String(responder.id));\n break;\n default:\n query.append('user-id', String(responder.id));\n break;\n }\n\n const response = await this.fetch(\n `/api/alerts/${encodeURIComponent(alert.id)}/assign?${query.toString()}`,\n init,\n );\n\n return response;\n }\n\n async triggerAlertAction(alert: Alert, action: AlertAction): Promise<void> {\n const init = {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({\n webhookId: action.webhookId,\n extensionId: action.extensionId,\n type: action.type,\n name: action.name,\n }),\n };\n\n await this.fetch(\n `/api/alerts/${encodeURIComponent(alert.id)}/actions`,\n init,\n );\n }\n\n async createAlert(eventRequest: EventRequest): Promise<boolean> {\n const init = {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({\n apiKey: eventRequest.integrationKey,\n summary: eventRequest.summary,\n details: eventRequest.details,\n eventType: 'ALERT',\n links: [\n {\n href: eventRequest.source,\n text: 'Backstage Url',\n },\n ],\n customDetails: {\n userName: eventRequest.userName,\n },\n }),\n };\n\n const response = await this.fetch('/api/events', init);\n return response;\n }\n\n async fetchAlertSources(): Promise<AlertSource[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch('/api/alert-sources', init);\n\n return response;\n }\n\n async fetchAlertSource(\n idOrIntegrationKey: number | string,\n ): Promise<AlertSource> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch(\n `/api/alert-sources/${encodeURIComponent(idOrIntegrationKey)}`,\n init,\n );\n\n return response;\n }\n\n async fetchAlertSourceOnCalls(alertSource: AlertSource): Promise<OnCall[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch(\n `/api/on-calls?policies=${encodeURIComponent(\n alertSource.escalationPolicy.id,\n )}&expand=user&expand=escalationPolicy&timezone=${dt.local().zoneName}`,\n init,\n );\n\n return response;\n }\n\n async enableAlertSource(alertSource: AlertSource): Promise<AlertSource> {\n const init = {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify({ ...alertSource, active: true }),\n };\n\n const response = await this.fetch(\n `/api/alert-sources/${encodeURIComponent(alertSource.id)}`,\n init,\n );\n\n return response;\n }\n\n async disableAlertSource(alertSource: AlertSource): Promise<AlertSource> {\n const init = {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify({ ...alertSource, active: false }),\n };\n\n const response = await this.fetch(\n `/api/alert-sources/${encodeURIComponent(alertSource.id)}`,\n init,\n );\n\n return response;\n }\n\n async addImmediateMaintenance(\n alertSourceId: number,\n minutes: number,\n ): Promise<void> {\n const init = {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({\n start: dt.utc().toISO(),\n end: dt.utc().plus({ minutes }).toISO(),\n description: `Immediate maintenance window for ${minutes} minutes. Backstage — iLert plugin.`,\n createdBy: 'Backstage',\n timezone: dt.local().zoneName,\n alertSources: [{ id: alertSourceId }],\n }),\n };\n\n const response = await this.fetch('/api/maintenance-windows', init);\n\n return response;\n }\n\n async fetchOnCallSchedules(): Promise<Schedule[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch(\n '/api/schedules?include=currentShift&include=nextShift',\n init,\n );\n\n return response;\n }\n\n async fetchUsers(): Promise<User[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch('/api/users', init);\n\n return response;\n }\n\n async overrideShift(\n scheduleId: number,\n userId: number,\n start: string,\n end: string,\n ): Promise<Schedule> {\n const init = {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify({ user: { id: userId }, start, end }),\n };\n\n const response = await this.fetch(\n `/api/schedules/${encodeURIComponent(scheduleId)}/overrides`,\n init,\n );\n\n return response;\n }\n\n async fetchServices(opts?: GetServicesOpts): Promise<Service[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n const query = new URLSearchParams();\n if (opts?.maxResults !== undefined) {\n query.append('max-results', String(opts.maxResults));\n }\n if (opts?.startIndex !== undefined) {\n query.append('start-index', String(opts.startIndex));\n }\n\n query.append('include', 'uptime');\n\n const response = await this.fetch(\n `/api/services?${query.toString()}`,\n init,\n );\n return response;\n }\n\n async fetchStatusPages(opts?: GetStatusPagesOpts): Promise<StatusPage[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n const query = new URLSearchParams();\n if (opts?.maxResults !== undefined) {\n query.append('max-results', String(opts.maxResults));\n }\n if (opts?.startIndex !== undefined) {\n query.append('start-index', String(opts.startIndex));\n }\n\n query.append('include', 'subscribed');\n\n const response = await this.fetch(\n `/api/status-pages?${query.toString()}`,\n init,\n );\n return response;\n }\n\n getAlertDetailsURL(alert: Alert): string {\n return `${this.baseUrl}/alert/view.jsf?id=${encodeURIComponent(alert.id)}`;\n }\n\n getAlertSourceDetailsURL(alertSource: AlertSource | null): string {\n if (!alertSource) {\n return '';\n }\n return `${this.baseUrl}/source/view.jsf?id=${encodeURIComponent(\n alertSource.id,\n )}`;\n }\n\n getEscalationPolicyDetailsURL(escalationPolicy: EscalationPolicy): string {\n return `${this.baseUrl}/policy/view.jsf?id=${encodeURIComponent(\n escalationPolicy.id,\n )}`;\n }\n\n getScheduleDetailsURL(schedule: Schedule): string {\n return `${this.baseUrl}/schedule/view.jsf?id=${encodeURIComponent(\n schedule.id,\n )}`;\n }\n\n getServiceDetailsURL(service: Service): string {\n return `${this.baseUrl}/service/view.jsf?id=${encodeURIComponent(\n service.id,\n )}`;\n }\n\n getStatusPageDetailsURL(statusPage: StatusPage): string {\n return `${this.baseUrl}/status-page/view.jsf?id=${encodeURIComponent(\n statusPage.id,\n )}`;\n }\n\n getStatusPageURL(statusPage: StatusPage): string {\n return statusPage.domain ? statusPage.domain : statusPage.subdomain;\n }\n\n getUserPhoneNumber(user: User | null) {\n return user?.mobile?.number || user?.landline?.number || '';\n }\n\n getUserInitials(user: User | null) {\n if (!user) {\n return '';\n }\n if (!user.firstName && !user.lastName) {\n return user.username;\n }\n return `${user.firstName} ${user.lastName}`;\n }\n\n private async apiUrl() {\n const proxyUrl = await this.discoveryApi.getBaseUrl('proxy');\n return proxyUrl + this.proxyPath;\n }\n}\n"],"names":["dt"],"mappings":"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"}
1
+ {"version":3,"file":"client.esm.js","sources":["../../src/api/client.ts"],"sourcesContent":["/*\n * Copyright 2021 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 { ConfigApi, DiscoveryApi, FetchApi } from '@backstage/core-plugin-api';\nimport { createApiRef } from '@backstage/frontend-plugin-api';\nimport { AuthenticationError, ResponseError } from '@backstage/errors';\nimport { DateTime as dt } from 'luxon';\nimport {\n Alert,\n AlertAction,\n AlertResponder,\n AlertSource,\n EscalationPolicy,\n OnCall,\n Schedule,\n Service,\n StatusPage,\n User,\n} from '../types';\nimport {\n EventRequest,\n GetAlertsCountOpts,\n GetAlertsOpts,\n GetServicesOpts,\n GetStatusPagesOpts,\n ILertApi,\n} from './types';\n\n/** @public */\nexport const ilertApiRef = createApiRef<ILertApi>().with({\n id: 'plugin.ilert.service',\n});\n\nconst DEFAULT_PROXY_PATH = '/ilert';\nconst JSON_HEADERS = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n};\n\n/** @public */\nexport class ILertClient implements ILertApi {\n private readonly discoveryApi: DiscoveryApi;\n private readonly fetchApi: FetchApi;\n private readonly proxyPath: string;\n private readonly baseUrl: string;\n\n static fromConfig(\n configApi: ConfigApi,\n discoveryApi: DiscoveryApi,\n fetchApi: FetchApi,\n ) {\n const baseUrl: string =\n configApi.getOptionalString('ilert.baseUrl') ?? 'https://app.ilert.com';\n\n return new ILertClient({\n discoveryApi,\n fetchApi,\n baseUrl,\n proxyPath:\n configApi.getOptionalString('ilert.proxyPath') ?? DEFAULT_PROXY_PATH,\n });\n }\n\n constructor(opts: {\n discoveryApi: DiscoveryApi;\n fetchApi: FetchApi;\n\n /**\n * URL used by users to access ilert web UI.\n * Example: https://my-org.ilert.com/\n */\n baseUrl: string;\n\n /**\n * Path to use for requests via the proxy, defaults to /ilert/api\n */\n proxyPath: string;\n }) {\n this.discoveryApi = opts.discoveryApi;\n this.fetchApi = opts.fetchApi;\n this.baseUrl = opts.baseUrl;\n this.proxyPath = opts.proxyPath;\n }\n\n private async fetch<T = any>(input: string, init?: RequestInit): Promise<T> {\n const apiUrl = await this.apiUrl();\n\n const response = await this.fetchApi.fetch(`${apiUrl}${input}`, init);\n if (response.status === 401) {\n throw new AuthenticationError(\n 'This request requires HTTP authentication.',\n );\n }\n if (!response.ok || response.status >= 400) {\n throw await ResponseError.fromResponse(response);\n }\n\n return await response.json();\n }\n\n async fetchAlerts(opts?: GetAlertsOpts): Promise<Alert[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n const query = new URLSearchParams();\n if (opts?.maxResults !== undefined) {\n query.append('max-results', String(opts.maxResults));\n }\n if (opts?.startIndex !== undefined) {\n query.append('start-index', String(opts.startIndex));\n }\n if (opts?.alertSources !== undefined && Array.isArray(opts.alertSources)) {\n opts.alertSources.forEach((a: number) => {\n if (a) {\n query.append('alert-source', String(a));\n }\n });\n }\n\n if (opts?.states !== undefined && Array.isArray(opts.states)) {\n opts.states.forEach(state => {\n query.append('state', state);\n });\n }\n const response = await this.fetch(`/api/alerts?${query.toString()}`, init);\n return response;\n }\n\n async fetchAlertsCount(opts?: GetAlertsCountOpts): Promise<number> {\n const init = {\n headers: JSON_HEADERS,\n };\n const query = new URLSearchParams();\n if (opts && opts.states && Array.isArray(opts.states)) {\n opts.states.forEach(state => {\n query.append('state', state);\n });\n }\n const response = await this.fetch(\n `/api/alerts/count?${query.toString()}`,\n init,\n );\n\n return response && response.count ? response.count : 0;\n }\n\n async fetchAlert(id: number): Promise<Alert> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch(\n `/api/alerts/${encodeURIComponent(id)}`,\n init,\n );\n\n return response;\n }\n\n async fetchAlertResponders(alert: Alert): Promise<AlertResponder[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch(\n `/api/alerts/${encodeURIComponent(alert.id)}/responders`,\n init,\n );\n\n return response;\n }\n\n async fetchAlertActions(alert: Alert): Promise<AlertAction[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch(\n `/api/alerts/${encodeURIComponent(alert.id)}/actions`,\n init,\n );\n\n return response;\n }\n\n async acceptAlert(alert: Alert, userName: string): Promise<Alert> {\n const init = {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({\n apiKey: alert.alertSource?.integrationKey || '',\n alertKey: alert.alertKey,\n summary: `from ${userName} via Backstage plugin`,\n eventType: 'ACCEPT',\n }),\n };\n\n await this.fetch('/api/events', init);\n return this.fetchAlert(alert.id);\n }\n\n async resolveAlert(alert: Alert, userName: string): Promise<Alert> {\n const init = {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({\n apiKey: alert.alertSource?.integrationKey || '',\n alertKey: alert.alertKey,\n summary: `from ${userName} via Backstage plugin`,\n eventType: 'RESOLVE',\n }),\n };\n\n await this.fetch('/api/events', init);\n return this.fetchAlert(alert.id);\n }\n\n async assignAlert(alert: Alert, responder: AlertResponder): Promise<Alert> {\n const init = {\n method: 'PUT',\n headers: JSON_HEADERS,\n };\n\n const query = new URLSearchParams();\n switch (responder.group) {\n case 'ESCALATION_POLICY':\n query.append('policy-id', String(responder.id));\n break;\n case 'ON_CALL_SCHEDULE':\n query.append('schedule-id', String(responder.id));\n break;\n default:\n query.append('user-id', String(responder.id));\n break;\n }\n\n const response = await this.fetch(\n `/api/alerts/${encodeURIComponent(alert.id)}/assign?${query.toString()}`,\n init,\n );\n\n return response;\n }\n\n async triggerAlertAction(alert: Alert, action: AlertAction): Promise<void> {\n const init = {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({\n webhookId: action.webhookId,\n extensionId: action.extensionId,\n type: action.type,\n name: action.name,\n }),\n };\n\n await this.fetch(\n `/api/alerts/${encodeURIComponent(alert.id)}/actions`,\n init,\n );\n }\n\n async createAlert(eventRequest: EventRequest): Promise<boolean> {\n const init = {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({\n apiKey: eventRequest.integrationKey,\n summary: eventRequest.summary,\n details: eventRequest.details,\n eventType: 'ALERT',\n links: [\n {\n href: eventRequest.source,\n text: 'Backstage Url',\n },\n ],\n customDetails: {\n userName: eventRequest.userName,\n },\n }),\n };\n\n const response = await this.fetch('/api/events', init);\n return response;\n }\n\n async fetchAlertSources(): Promise<AlertSource[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch('/api/alert-sources', init);\n\n return response;\n }\n\n async fetchAlertSource(\n idOrIntegrationKey: number | string,\n ): Promise<AlertSource> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch(\n `/api/alert-sources/${encodeURIComponent(idOrIntegrationKey)}`,\n init,\n );\n\n return response;\n }\n\n async fetchAlertSourceOnCalls(alertSource: AlertSource): Promise<OnCall[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch(\n `/api/on-calls?policies=${encodeURIComponent(\n alertSource.escalationPolicy.id,\n )}&expand=user&expand=escalationPolicy&timezone=${dt.local().zoneName}`,\n init,\n );\n\n return response;\n }\n\n async enableAlertSource(alertSource: AlertSource): Promise<AlertSource> {\n const init = {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify({ ...alertSource, active: true }),\n };\n\n const response = await this.fetch(\n `/api/alert-sources/${encodeURIComponent(alertSource.id)}`,\n init,\n );\n\n return response;\n }\n\n async disableAlertSource(alertSource: AlertSource): Promise<AlertSource> {\n const init = {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify({ ...alertSource, active: false }),\n };\n\n const response = await this.fetch(\n `/api/alert-sources/${encodeURIComponent(alertSource.id)}`,\n init,\n );\n\n return response;\n }\n\n async addImmediateMaintenance(\n alertSourceId: number,\n minutes: number,\n ): Promise<void> {\n const init = {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({\n start: dt.utc().toISO(),\n end: dt.utc().plus({ minutes }).toISO(),\n description: `Immediate maintenance window for ${minutes} minutes. Backstage — ilert plugin.`,\n createdBy: 'Backstage',\n timezone: dt.local().zoneName,\n alertSources: [{ id: alertSourceId }],\n }),\n };\n\n const response = await this.fetch('/api/maintenance-windows', init);\n\n return response;\n }\n\n async fetchOnCallSchedules(): Promise<Schedule[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch(\n '/api/schedules?include=currentShift&include=nextShift',\n init,\n );\n\n return response;\n }\n\n async fetchUsers(): Promise<User[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n\n const response = await this.fetch('/api/users', init);\n\n return response;\n }\n\n async overrideShift(\n scheduleId: number,\n userId: number,\n start: string,\n end: string,\n ): Promise<Schedule> {\n const init = {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify({ user: { id: userId }, start, end }),\n };\n\n const response = await this.fetch(\n `/api/schedules/${encodeURIComponent(scheduleId)}/overrides`,\n init,\n );\n\n return response;\n }\n\n async fetchServices(opts?: GetServicesOpts): Promise<Service[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n const query = new URLSearchParams();\n if (opts?.maxResults !== undefined) {\n query.append('max-results', String(opts.maxResults));\n }\n if (opts?.startIndex !== undefined) {\n query.append('start-index', String(opts.startIndex));\n }\n\n query.append('include', 'uptime');\n\n const response = await this.fetch(\n `/api/services?${query.toString()}`,\n init,\n );\n return response;\n }\n\n async fetchStatusPages(opts?: GetStatusPagesOpts): Promise<StatusPage[]> {\n const init = {\n headers: JSON_HEADERS,\n };\n const query = new URLSearchParams();\n if (opts?.maxResults !== undefined) {\n query.append('max-results', String(opts.maxResults));\n }\n if (opts?.startIndex !== undefined) {\n query.append('start-index', String(opts.startIndex));\n }\n\n query.append('include', 'subscribed');\n\n const response = await this.fetch(\n `/api/status-pages?${query.toString()}`,\n init,\n );\n return response;\n }\n\n getAlertDetailsURL(alert: Alert): string {\n return `${this.baseUrl}/alert/view.jsf?id=${encodeURIComponent(alert.id)}`;\n }\n\n getAlertSourceDetailsURL(alertSource: AlertSource | null): string {\n if (!alertSource) {\n return '';\n }\n return `${this.baseUrl}/source/view.jsf?id=${encodeURIComponent(\n alertSource.id,\n )}`;\n }\n\n getEscalationPolicyDetailsURL(escalationPolicy: EscalationPolicy): string {\n return `${this.baseUrl}/policy/view.jsf?id=${encodeURIComponent(\n escalationPolicy.id,\n )}`;\n }\n\n getScheduleDetailsURL(schedule: Schedule): string {\n return `${this.baseUrl}/schedule/view.jsf?id=${encodeURIComponent(\n schedule.id,\n )}`;\n }\n\n getServiceDetailsURL(service: Service): string {\n return `${this.baseUrl}/service/view.jsf?id=${encodeURIComponent(\n service.id,\n )}`;\n }\n\n getStatusPageDetailsURL(statusPage: StatusPage): string {\n return `${this.baseUrl}/status-page/view.jsf?id=${encodeURIComponent(\n statusPage.id,\n )}`;\n }\n\n getStatusPageURL(statusPage: StatusPage): string {\n return statusPage.domain ? statusPage.domain : statusPage.subdomain;\n }\n\n getUserPhoneNumber(user: User | null) {\n return user?.mobile?.number || user?.landline?.number || '';\n }\n\n getUserInitials(user: User | null) {\n if (!user) {\n return '';\n }\n if (!user.firstName && !user.lastName) {\n return user.username;\n }\n return `${user.firstName} ${user.lastName}`;\n }\n\n private async apiUrl() {\n const proxyUrl = await this.discoveryApi.getBaseUrl('proxy');\n return proxyUrl + this.proxyPath;\n }\n}\n"],"names":["dt"],"mappings":"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"}
@@ -130,7 +130,7 @@ const AlertActionsMenu = ({
130
130
  alert.status !== "RESOLVED" ? /* @__PURE__ */ jsx(MenuItem, { onClick: handleResolve, children: /* @__PURE__ */ jsx(Typography, { variant: "inherit", noWrap: true, children: "Resolve" }) }, "close") : null,
131
131
  alert.status !== "RESOLVED" ? /* @__PURE__ */ jsx(MenuItem, { onClick: handleAssign, children: /* @__PURE__ */ jsx(Typography, { variant: "inherit", noWrap: true, children: "Assign" }) }, "assign") : null,
132
132
  isLoading ? /* @__PURE__ */ jsx(MenuItem, { children: /* @__PURE__ */ jsx(Progress, { style: { width: "100%" } }) }, "loading") : actions,
133
- /* @__PURE__ */ jsx(MenuItem, { onClick: handleCloseMenu, children: /* @__PURE__ */ jsx(Typography, { variant: "inherit", noWrap: true, children: /* @__PURE__ */ jsx(Link, { to: ilertApi.getAlertDetailsURL(alert), children: "View in iLert" }) }) }, "details")
133
+ /* @__PURE__ */ jsx(MenuItem, { onClick: handleCloseMenu, children: /* @__PURE__ */ jsx(Typography, { variant: "inherit", noWrap: true, children: /* @__PURE__ */ jsx(Link, { to: ilertApi.getAlertDetailsURL(alert), children: "View in ilert" }) }) }, "details")
134
134
  ]
135
135
  }
136
136
  ),
@@ -1 +1 @@
1
- {"version":3,"file":"AlertActionsMenu.esm.js","sources":["../../../src/components/Alert/AlertActionsMenu.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 IconButton from '@material-ui/core/IconButton';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Typography from '@material-ui/core/Typography';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport type { MouseEvent, ReactNode } from 'react';\nimport { useState } from 'react';\nimport { ilertApiRef } from '../../api';\nimport { useAlertActions } from '../../hooks/useAlertActions';\nimport { Alert, AlertAction } from '../../types';\nimport { AlertAssignModal } from './AlertAssignModal';\n\nimport { DEFAULT_NAMESPACE, parseEntityRef } from '@backstage/catalog-model';\nimport { Link, Progress } from '@backstage/core-components';\nimport { identityApiRef, useApi } from '@backstage/core-plugin-api';\nimport { toastApiRef } from '@backstage/frontend-plugin-api';\n\nexport const AlertActionsMenu = ({\n alert,\n onAlertChanged,\n setIsLoading,\n}: {\n alert: Alert;\n onAlertChanged?: (alert: Alert) => void;\n setIsLoading?: (isLoading: boolean) => void;\n}) => {\n const ilertApi = useApi(ilertApiRef);\n const alertApi = useApi(toastApiRef);\n const identityApi = useApi(identityApiRef);\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n const callback = onAlertChanged || ((_: Alert): void => {});\n const setProcessing = setIsLoading || ((_: boolean): void => {});\n const [isAssignAlertModalOpened, setIsAssignAlertModalOpened] =\n useState(false);\n\n const [{ alertActions, isLoading }] = useAlertActions(\n alert,\n Boolean(anchorEl),\n );\n\n const handleClick = (event: MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleCloseMenu = () => {\n setAnchorEl(null);\n };\n\n const handleAccept = async (): Promise<void> => {\n try {\n handleCloseMenu();\n setProcessing(true);\n\n const { userEntityRef } = await identityApi.getBackstageIdentity();\n const { name: userName } = parseEntityRef(userEntityRef, {\n defaultKind: 'User',\n defaultNamespace: DEFAULT_NAMESPACE,\n });\n const newAlert = await ilertApi.acceptAlert(alert, userName);\n alertApi.post({ title: 'Alert accepted.' });\n\n callback(newAlert);\n setProcessing(false);\n } catch (err) {\n setProcessing(false);\n alertApi.post({ title: err, status: 'danger' });\n }\n };\n\n const handleResolve = async (): Promise<void> => {\n try {\n handleCloseMenu();\n setProcessing(true);\n const { userEntityRef } = await identityApi.getBackstageIdentity();\n const { name: userName } = parseEntityRef(userEntityRef, {\n defaultKind: 'User',\n defaultNamespace: DEFAULT_NAMESPACE,\n });\n const newAlert = await ilertApi.resolveAlert(alert, userName);\n alertApi.post({ title: 'Alert resolved.' });\n\n callback(newAlert);\n setProcessing(false);\n } catch (err) {\n setProcessing(false);\n alertApi.post({ title: err, status: 'danger' });\n }\n };\n\n const handleAssign = () => {\n handleCloseMenu();\n setIsAssignAlertModalOpened(true);\n };\n\n const handleTriggerAction = (action: AlertAction) => async () => {\n try {\n handleCloseMenu();\n setProcessing(true);\n await ilertApi.triggerAlertAction(alert, action);\n alertApi.post({ title: 'Alert action triggered.' });\n setProcessing(false);\n } catch (err) {\n setProcessing(false);\n alertApi.post({ title: err, status: 'danger' });\n }\n };\n\n const actions: ReactNode[] = alertActions.map(a => {\n const successTrigger = a.history\n ? a.history.find(h => h.success)\n : undefined;\n const triggeredBy =\n successTrigger && successTrigger.actor\n ? `${successTrigger.actor.firstName} ${successTrigger.actor.lastName}`\n : '';\n return (\n <MenuItem\n key={a.webhookId}\n onClick={handleTriggerAction(a)}\n disabled={!!successTrigger}\n >\n <Typography variant=\"inherit\" noWrap>\n {triggeredBy ? `${a.name} (by ${triggeredBy})` : a.name}\n </Typography>\n </MenuItem>\n );\n });\n\n return (\n <>\n <IconButton\n aria-label=\"more\"\n aria-controls=\"long-menu\"\n aria-haspopup=\"true\"\n onClick={handleClick}\n size=\"small\"\n >\n <MoreVertIcon />\n </IconButton>\n <Menu\n id={`alert-actions-menu-${alert.id}`}\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={handleCloseMenu}\n PaperProps={{\n style: { maxHeight: 48 * 5.5 },\n }}\n >\n {alert.status === 'PENDING' ? (\n <MenuItem key=\"ack\" onClick={handleAccept}>\n <Typography variant=\"inherit\" noWrap>\n Accept\n </Typography>\n </MenuItem>\n ) : null}\n\n {alert.status !== 'RESOLVED' ? (\n <MenuItem key=\"close\" onClick={handleResolve}>\n <Typography variant=\"inherit\" noWrap>\n Resolve\n </Typography>\n </MenuItem>\n ) : null}\n\n {alert.status !== 'RESOLVED' ? (\n <MenuItem key=\"assign\" onClick={handleAssign}>\n <Typography variant=\"inherit\" noWrap>\n Assign\n </Typography>\n </MenuItem>\n ) : null}\n\n {isLoading ? (\n <MenuItem key=\"loading\">\n <Progress style={{ width: '100%' }} />\n </MenuItem>\n ) : (\n actions\n )}\n\n <MenuItem key=\"details\" onClick={handleCloseMenu}>\n <Typography variant=\"inherit\" noWrap>\n <Link to={ilertApi.getAlertDetailsURL(alert)}>View in iLert</Link>\n </Typography>\n </MenuItem>\n </Menu>\n <AlertAssignModal\n alert={alert}\n setIsModalOpened={setIsAssignAlertModalOpened}\n isModalOpened={isAssignAlertModalOpened}\n onAlertChanged={onAlertChanged}\n />\n </>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AlertActionsMenu.esm.js","sources":["../../../src/components/Alert/AlertActionsMenu.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 IconButton from '@material-ui/core/IconButton';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Typography from '@material-ui/core/Typography';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport type { MouseEvent, ReactNode } from 'react';\nimport { useState } from 'react';\nimport { ilertApiRef } from '../../api';\nimport { useAlertActions } from '../../hooks/useAlertActions';\nimport { Alert, AlertAction } from '../../types';\nimport { AlertAssignModal } from './AlertAssignModal';\n\nimport { DEFAULT_NAMESPACE, parseEntityRef } from '@backstage/catalog-model';\nimport { Link, Progress } from '@backstage/core-components';\nimport { identityApiRef, useApi } from '@backstage/core-plugin-api';\nimport { toastApiRef } from '@backstage/frontend-plugin-api';\n\nexport const AlertActionsMenu = ({\n alert,\n onAlertChanged,\n setIsLoading,\n}: {\n alert: Alert;\n onAlertChanged?: (alert: Alert) => void;\n setIsLoading?: (isLoading: boolean) => void;\n}) => {\n const ilertApi = useApi(ilertApiRef);\n const alertApi = useApi(toastApiRef);\n const identityApi = useApi(identityApiRef);\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n const callback = onAlertChanged || ((_: Alert): void => {});\n const setProcessing = setIsLoading || ((_: boolean): void => {});\n const [isAssignAlertModalOpened, setIsAssignAlertModalOpened] =\n useState(false);\n\n const [{ alertActions, isLoading }] = useAlertActions(\n alert,\n Boolean(anchorEl),\n );\n\n const handleClick = (event: MouseEvent<HTMLElement>) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleCloseMenu = () => {\n setAnchorEl(null);\n };\n\n const handleAccept = async (): Promise<void> => {\n try {\n handleCloseMenu();\n setProcessing(true);\n\n const { userEntityRef } = await identityApi.getBackstageIdentity();\n const { name: userName } = parseEntityRef(userEntityRef, {\n defaultKind: 'User',\n defaultNamespace: DEFAULT_NAMESPACE,\n });\n const newAlert = await ilertApi.acceptAlert(alert, userName);\n alertApi.post({ title: 'Alert accepted.' });\n\n callback(newAlert);\n setProcessing(false);\n } catch (err) {\n setProcessing(false);\n alertApi.post({ title: err, status: 'danger' });\n }\n };\n\n const handleResolve = async (): Promise<void> => {\n try {\n handleCloseMenu();\n setProcessing(true);\n const { userEntityRef } = await identityApi.getBackstageIdentity();\n const { name: userName } = parseEntityRef(userEntityRef, {\n defaultKind: 'User',\n defaultNamespace: DEFAULT_NAMESPACE,\n });\n const newAlert = await ilertApi.resolveAlert(alert, userName);\n alertApi.post({ title: 'Alert resolved.' });\n\n callback(newAlert);\n setProcessing(false);\n } catch (err) {\n setProcessing(false);\n alertApi.post({ title: err, status: 'danger' });\n }\n };\n\n const handleAssign = () => {\n handleCloseMenu();\n setIsAssignAlertModalOpened(true);\n };\n\n const handleTriggerAction = (action: AlertAction) => async () => {\n try {\n handleCloseMenu();\n setProcessing(true);\n await ilertApi.triggerAlertAction(alert, action);\n alertApi.post({ title: 'Alert action triggered.' });\n setProcessing(false);\n } catch (err) {\n setProcessing(false);\n alertApi.post({ title: err, status: 'danger' });\n }\n };\n\n const actions: ReactNode[] = alertActions.map(a => {\n const successTrigger = a.history\n ? a.history.find(h => h.success)\n : undefined;\n const triggeredBy =\n successTrigger && successTrigger.actor\n ? `${successTrigger.actor.firstName} ${successTrigger.actor.lastName}`\n : '';\n return (\n <MenuItem\n key={a.webhookId}\n onClick={handleTriggerAction(a)}\n disabled={!!successTrigger}\n >\n <Typography variant=\"inherit\" noWrap>\n {triggeredBy ? `${a.name} (by ${triggeredBy})` : a.name}\n </Typography>\n </MenuItem>\n );\n });\n\n return (\n <>\n <IconButton\n aria-label=\"more\"\n aria-controls=\"long-menu\"\n aria-haspopup=\"true\"\n onClick={handleClick}\n size=\"small\"\n >\n <MoreVertIcon />\n </IconButton>\n <Menu\n id={`alert-actions-menu-${alert.id}`}\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={handleCloseMenu}\n PaperProps={{\n style: { maxHeight: 48 * 5.5 },\n }}\n >\n {alert.status === 'PENDING' ? (\n <MenuItem key=\"ack\" onClick={handleAccept}>\n <Typography variant=\"inherit\" noWrap>\n Accept\n </Typography>\n </MenuItem>\n ) : null}\n\n {alert.status !== 'RESOLVED' ? (\n <MenuItem key=\"close\" onClick={handleResolve}>\n <Typography variant=\"inherit\" noWrap>\n Resolve\n </Typography>\n </MenuItem>\n ) : null}\n\n {alert.status !== 'RESOLVED' ? (\n <MenuItem key=\"assign\" onClick={handleAssign}>\n <Typography variant=\"inherit\" noWrap>\n Assign\n </Typography>\n </MenuItem>\n ) : null}\n\n {isLoading ? (\n <MenuItem key=\"loading\">\n <Progress style={{ width: '100%' }} />\n </MenuItem>\n ) : (\n actions\n )}\n\n <MenuItem key=\"details\" onClick={handleCloseMenu}>\n <Typography variant=\"inherit\" noWrap>\n <Link to={ilertApi.getAlertDetailsURL(alert)}>View in ilert</Link>\n </Typography>\n </MenuItem>\n </Menu>\n <AlertAssignModal\n alert={alert}\n setIsModalOpened={setIsAssignAlertModalOpened}\n isModalOpened={isAssignAlertModalOpened}\n onAlertChanged={onAlertChanged}\n />\n </>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AlertAssignModal.esm.js","sources":["../../../src/components/Alert/AlertAssignModal.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 { useApi } from '@backstage/core-plugin-api';\nimport { toastApiRef } from '@backstage/frontend-plugin-api';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport { makeStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport MUIAlert from '@material-ui/lab/Alert';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { ilertApiRef } from '../../api';\nimport { useAssignAlert } from '../../hooks/useAssignAlert';\nimport { Alert } from '../../types';\n\nconst useStyles = makeStyles(() => ({\n container: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n formControl: {\n minWidth: 120,\n width: '100%',\n },\n option: {\n fontSize: 15,\n '& > span': {\n marginRight: 10,\n fontSize: 18,\n },\n },\n optionWrapper: {\n display: 'flex',\n width: '100%',\n },\n sourceImage: {\n height: 22,\n paddingRight: 4,\n },\n}));\n\nexport const AlertAssignModal = ({\n alert,\n isModalOpened,\n setIsModalOpened,\n onAlertChanged,\n}: {\n alert: Alert | null;\n isModalOpened: boolean;\n setIsModalOpened: (open: boolean) => void;\n onAlertChanged?: (alert: Alert) => void;\n}) => {\n const [\n { alertRespondersList, alertResponder, isLoading },\n { setIsLoading, setAlertResponder, setAlertRespondersList },\n ] = useAssignAlert(alert, isModalOpened);\n const callback = onAlertChanged || ((_: Alert): void => {});\n const ilertApi = useApi(ilertApiRef);\n const alertApi = useApi(toastApiRef);\n const classes = useStyles();\n\n const handleClose = () => {\n setAlertRespondersList([]);\n setIsModalOpened(false);\n };\n\n const handleAssign = () => {\n if (!alert || !alertResponder) {\n return;\n }\n setIsLoading(true);\n setAlertRespondersList([]);\n setTimeout(async () => {\n try {\n const newAlert = await ilertApi.assignAlert(alert, alertResponder);\n callback(newAlert);\n alertApi.post({ title: 'Alert assigned.' });\n } catch (err) {\n alertApi.post({ title: err, status: 'danger' });\n }\n setIsLoading(false);\n setIsModalOpened(false);\n }, 250);\n };\n\n const canAssign = !!alertResponder;\n\n return (\n <Dialog\n open={isModalOpened}\n onClose={handleClose}\n aria-labelledby=\"assign-alert-form-title\"\n >\n <DialogTitle id=\"assign-alert-form-title\">\n Select responder to assign\n </DialogTitle>\n <DialogContent>\n <MUIAlert severity=\"info\">\n <Typography variant=\"body1\" gutterBottom align=\"justify\">\n This action will assign the alert to the selected responder.\n </Typography>\n </MUIAlert>\n <Autocomplete\n disabled={isLoading}\n options={alertRespondersList}\n value={alertResponder}\n classes={{\n root: classes.formControl,\n option: classes.option,\n }}\n onChange={(_event: any, newValue: any) => {\n setAlertResponder(newValue);\n }}\n autoHighlight\n groupBy={option => {\n switch (option.group) {\n case 'SUGGESTED':\n return 'Suggested responders';\n case 'USER':\n return 'Users';\n case 'ESCALATION_POLICY':\n return 'Escalation policies';\n case 'ON_CALL_SCHEDULE':\n return 'Schedules';\n default:\n return '';\n }\n }}\n getOptionLabel={a => a.name}\n renderOption={a => (\n <div className={classes.optionWrapper}>\n <Typography noWrap>{a.name}</Typography>\n </div>\n )}\n renderInput={params => (\n <TextField\n {...params}\n label=\"Responder\"\n variant=\"outlined\"\n margin=\"normal\"\n inputProps={{\n ...params.inputProps,\n autoComplete: 'new-password', // disable autocomplete and autofill\n }}\n />\n )}\n />\n </DialogContent>\n <DialogActions>\n <Button\n disabled={!canAssign}\n onClick={handleAssign}\n color=\"primary\"\n variant=\"contained\"\n >\n Assign\n </Button>\n <Button onClick={handleClose} color=\"primary\">\n Cancel\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":["MUIAlert"],"mappings":"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"}
1
+ {"version":3,"file":"AlertAssignModal.esm.js","sources":["../../../src/components/Alert/AlertAssignModal.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 { useApi } from '@backstage/core-plugin-api';\nimport { toastApiRef } from '@backstage/frontend-plugin-api';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport { makeStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport MUIAlert from '@material-ui/lab/Alert';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { ilertApiRef } from '../../api';\nimport { useAssignAlert } from '../../hooks/useAssignAlert';\nimport { Alert } from '../../types';\n\nconst useStyles = makeStyles(() => ({\n container: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n formControl: {\n minWidth: 120,\n width: '100%',\n },\n option: {\n fontSize: 15,\n '& > span': {\n marginRight: 10,\n fontSize: 18,\n },\n },\n optionWrapper: {\n display: 'flex',\n width: '100%',\n },\n sourceImage: {\n height: 22,\n paddingRight: 4,\n },\n}));\n\nexport const AlertAssignModal = ({\n alert,\n isModalOpened,\n setIsModalOpened,\n onAlertChanged,\n}: {\n alert: Alert | null;\n isModalOpened: boolean;\n setIsModalOpened: (open: boolean) => void;\n onAlertChanged?: (alert: Alert) => void;\n}) => {\n const [\n { alertRespondersList, alertResponder, isLoading },\n { setIsLoading, setAlertResponder, setAlertRespondersList },\n ] = useAssignAlert(alert, isModalOpened);\n const callback = onAlertChanged || ((_: Alert): void => {});\n const ilertApi = useApi(ilertApiRef);\n const alertApi = useApi(toastApiRef);\n const classes = useStyles();\n\n const handleClose = () => {\n setAlertRespondersList([]);\n setIsModalOpened(false);\n };\n\n const handleAssign = () => {\n if (!alert || !alertResponder) {\n return;\n }\n setIsLoading(true);\n setAlertRespondersList([]);\n setTimeout(async () => {\n try {\n const newAlert = await ilertApi.assignAlert(alert, alertResponder);\n callback(newAlert);\n alertApi.post({ title: 'Alert assigned.' });\n } catch (err) {\n alertApi.post({ title: err, status: 'danger' });\n }\n setIsLoading(false);\n setIsModalOpened(false);\n }, 250);\n };\n\n const canAssign = !!alertResponder;\n\n return (\n <Dialog\n open={isModalOpened}\n onClose={handleClose}\n aria-labelledby=\"assign-alert-form-title\"\n >\n <DialogTitle id=\"assign-alert-form-title\">\n Select responder to assign\n </DialogTitle>\n <DialogContent>\n <MUIAlert severity=\"info\">\n <Typography variant=\"body1\" gutterBottom align=\"justify\">\n This action will assign the alert to the selected responder.\n </Typography>\n </MUIAlert>\n <Autocomplete\n disabled={isLoading}\n options={alertRespondersList}\n value={alertResponder}\n classes={{\n root: classes.formControl,\n option: classes.option,\n }}\n onChange={(_event: any, newValue: any) => {\n setAlertResponder(newValue);\n }}\n autoHighlight\n groupBy={option => {\n switch (option.group) {\n case 'SUGGESTED':\n return 'Suggested responders';\n case 'USER':\n return 'Users';\n case 'ESCALATION_POLICY':\n return 'Escalation policies';\n case 'ON_CALL_SCHEDULE':\n return 'Schedules';\n default:\n return '';\n }\n }}\n getOptionLabel={a => a.name}\n renderOption={a => (\n <div className={classes.optionWrapper}>\n <Typography noWrap>{a.name}</Typography>\n </div>\n )}\n renderInput={params => (\n <TextField\n {...params}\n label=\"Responder\"\n variant=\"outlined\"\n margin=\"normal\"\n inputProps={{\n ...params.inputProps,\n autoComplete: 'new-password', // disable autocomplete and autofill\n }}\n />\n )}\n />\n </DialogContent>\n <DialogActions>\n <Button\n disabled={!canAssign}\n onClick={handleAssign}\n color=\"primary\"\n variant=\"contained\"\n >\n Assign\n </Button>\n <Button onClick={handleClose} color=\"primary\">\n Cancel\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":["MUIAlert"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AlertLink.esm.js","sources":["../../../src/components/Alert/AlertLink.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 { ilertApiRef } from '../../api';\nimport { Alert } from '../../types';\n\nimport { Link } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\n\nexport const AlertLink = ({ alert }: { alert: Alert | null }) => {\n const ilertApi = useApi(ilertApiRef);\n\n if (!alert) {\n return null;\n }\n\n return <Link to={ilertApi.getAlertDetailsURL(alert)}>#{alert.id}</Link>;\n};\n"],"names":[],"mappings":";;;;;AAqBO,MAAM,SAAY,GAAA,CAAC,EAAE,KAAA,EAAqC,KAAA;AAC/D,EAAM,MAAA,QAAA,GAAW,OAAO,WAAW,CAAA;AAEnC,EAAA,IAAI,CAAC,KAAO,EAAA;AACV,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,4BAAQ,IAAK,EAAA,EAAA,EAAA,EAAI,QAAS,CAAA,kBAAA,CAAmB,KAAK,CAAG,EAAA,QAAA,EAAA;AAAA,IAAA,GAAA;AAAA,IAAE,KAAM,CAAA;AAAA,GAAG,EAAA,CAAA;AAClE;;;;"}
1
+ {"version":3,"file":"AlertLink.esm.js","sources":["../../../src/components/Alert/AlertLink.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 { ilertApiRef } from '../../api';\nimport { Alert } from '../../types';\n\nimport { Link } from '@backstage/core-components';\nimport { useApi } from '@backstage/core-plugin-api';\n\nexport const AlertLink = ({ alert }: { alert: Alert | null }) => {\n const ilertApi = useApi(ilertApiRef);\n\n if (!alert) {\n return null;\n }\n\n return <Link to={ilertApi.getAlertDetailsURL(alert)}>#{alert.id}</Link>;\n};\n"],"names":[],"mappings":";;;;;AAqBO,MAAM,SAAA,GAAY,CAAC,EAAE,KAAA,EAAM,KAA+B;AAC/D,EAAA,MAAM,QAAA,GAAW,OAAO,WAAW,CAAA;AAEnC,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,4BAAQ,IAAA,EAAA,EAAK,EAAA,EAAI,QAAA,CAAS,kBAAA,CAAmB,KAAK,CAAA,EAAG,QAAA,EAAA;AAAA,IAAA,GAAA;AAAA,IAAE,KAAA,CAAM;AAAA,GAAA,EAAG,CAAA;AAClE;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"AlertNewModal.esm.js","sources":["../../../src/components/Alert/AlertNewModal.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 { DEFAULT_NAMESPACE, parseEntityRef } from '@backstage/catalog-model';\nimport { identityApiRef, useApi } from '@backstage/core-plugin-api';\nimport { toastApiRef } from '@backstage/frontend-plugin-api';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport { makeStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\nimport Alert from '@material-ui/lab/Alert';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { ilertApiRef } from '../../api';\nimport { useNewAlert } from '../../hooks/useNewAlert';\nimport { AlertSource } from '../../types';\n\nconst useStyles = makeStyles(() => ({\n container: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n formControl: {\n minWidth: 120,\n width: '100%',\n },\n option: {\n fontSize: 15,\n '& > span': {\n marginRight: 10,\n fontSize: 18,\n },\n },\n optionWrapper: {\n display: 'flex',\n width: '100%',\n },\n sourceImage: {\n height: 22,\n paddingRight: 4,\n },\n}));\n\nexport const AlertNewModal = ({\n isModalOpened,\n setIsModalOpened,\n refetchAlerts,\n initialAlertSource,\n entityName,\n}: {\n isModalOpened: boolean;\n setIsModalOpened: (open: boolean) => void;\n refetchAlerts: () => void;\n initialAlertSource?: AlertSource | null;\n entityName?: string;\n}) => {\n const [\n { alertSources, alertSource, summary, details, isLoading },\n { setAlertSource, setSummary, setDetails, setIsLoading },\n ] = useNewAlert(isModalOpened, initialAlertSource);\n const ilertApi = useApi(ilertApiRef);\n const alertApi = useApi(toastApiRef);\n const identityApi = useApi(identityApiRef);\n const source = window.location.toString();\n const classes = useStyles();\n const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');\n\n const handleClose = () => {\n setIsModalOpened(false);\n };\n\n let integrationKey = '';\n if (initialAlertSource && initialAlertSource.integrationKey) {\n integrationKey = initialAlertSource.integrationKey;\n } else if (alertSource && alertSource.integrationKey) {\n integrationKey = alertSource.integrationKey;\n }\n const handleCreate = () => {\n if (!integrationKey) {\n return;\n }\n setIsLoading(true);\n setTimeout(async () => {\n try {\n const { userEntityRef } = await identityApi.getBackstageIdentity();\n const { name: userName } = parseEntityRef(userEntityRef, {\n defaultKind: 'User',\n defaultNamespace: DEFAULT_NAMESPACE,\n });\n await ilertApi.createAlert({\n integrationKey,\n summary,\n details,\n userName,\n source,\n });\n alertApi.post({ title: 'Alert created.' });\n refetchAlerts();\n } catch (err) {\n alertApi.post({ title: err, status: 'danger' });\n }\n setIsModalOpened(false);\n }, 250);\n };\n\n const canCreate = !!integrationKey && !!summary;\n\n return (\n <Dialog\n open={isModalOpened}\n onClose={handleClose}\n aria-labelledby=\"create-alert-form-title\"\n >\n <DialogTitle id=\"create-alert-form-title\">\n {entityName ? (\n <div>\n This action will trigger an alert for{' '}\n <strong>\"{entityName}\"</strong>.\n </div>\n ) : (\n 'New alert'\n )}\n </DialogTitle>\n <DialogContent>\n <Alert severity=\"info\">\n <Typography variant=\"body1\" gutterBottom align=\"justify\">\n Please describe the problem you want to report. Be as descriptive as\n possible. Your signed in user and a reference to the current page\n will automatically be amended to the alarm so that the receiver can\n reach out to you if necessary.\n </Typography>\n </Alert>\n {!initialAlertSource ? (\n <Autocomplete\n disabled={isLoading}\n options={alertSources}\n value={alertSource}\n classes={{\n root: classes.formControl,\n option: classes.option,\n }}\n onChange={(_event: any, newValue: any) => {\n setAlertSource(newValue);\n }}\n autoHighlight\n getOptionLabel={a => a.name}\n renderOption={a => (\n <div className={classes.optionWrapper}>\n <img\n src={prefersDarkMode ? a.lightIconUrl : a.iconUrl}\n alt={a.name}\n className={classes.sourceImage}\n />\n <Typography noWrap>{a.name}</Typography>\n </div>\n )}\n renderInput={params => (\n <TextField\n {...params}\n label=\"Alert Source\"\n variant=\"outlined\"\n margin=\"normal\"\n inputProps={{\n ...params.inputProps,\n autoComplete: 'new-password', // disable autocomplete and autofill\n }}\n />\n )}\n />\n ) : null}\n <TextField\n disabled={isLoading}\n label=\"Summary\"\n fullWidth\n margin=\"normal\"\n variant=\"outlined\"\n classes={{\n root: classes.formControl,\n }}\n value={summary}\n onChange={event => {\n setSummary(event.target.value);\n }}\n />\n <TextField\n disabled={isLoading}\n label=\"Details\"\n fullWidth\n multiline\n rows={4}\n margin=\"normal\"\n variant=\"outlined\"\n classes={{\n root: classes.formControl,\n }}\n value={details}\n onChange={event => {\n setDetails(event.target.value);\n }}\n />\n </DialogContent>\n <DialogActions>\n <Button\n disabled={!canCreate}\n onClick={handleCreate}\n color=\"secondary\"\n variant=\"contained\"\n >\n Create\n </Button>\n <Button onClick={handleClose} color=\"primary\">\n Cancel\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AlertNewModal.esm.js","sources":["../../../src/components/Alert/AlertNewModal.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 { DEFAULT_NAMESPACE, parseEntityRef } from '@backstage/catalog-model';\nimport { identityApiRef, useApi } from '@backstage/core-plugin-api';\nimport { toastApiRef } from '@backstage/frontend-plugin-api';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport { makeStyles } from '@material-ui/core/styles';\nimport TextField from '@material-ui/core/TextField';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\nimport Alert from '@material-ui/lab/Alert';\nimport Autocomplete from '@material-ui/lab/Autocomplete';\nimport { ilertApiRef } from '../../api';\nimport { useNewAlert } from '../../hooks/useNewAlert';\nimport { AlertSource } from '../../types';\n\nconst useStyles = makeStyles(() => ({\n container: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n formControl: {\n minWidth: 120,\n width: '100%',\n },\n option: {\n fontSize: 15,\n '& > span': {\n marginRight: 10,\n fontSize: 18,\n },\n },\n optionWrapper: {\n display: 'flex',\n width: '100%',\n },\n sourceImage: {\n height: 22,\n paddingRight: 4,\n },\n}));\n\nexport const AlertNewModal = ({\n isModalOpened,\n setIsModalOpened,\n refetchAlerts,\n initialAlertSource,\n entityName,\n}: {\n isModalOpened: boolean;\n setIsModalOpened: (open: boolean) => void;\n refetchAlerts: () => void;\n initialAlertSource?: AlertSource | null;\n entityName?: string;\n}) => {\n const [\n { alertSources, alertSource, summary, details, isLoading },\n { setAlertSource, setSummary, setDetails, setIsLoading },\n ] = useNewAlert(isModalOpened, initialAlertSource);\n const ilertApi = useApi(ilertApiRef);\n const alertApi = useApi(toastApiRef);\n const identityApi = useApi(identityApiRef);\n const source = window.location.toString();\n const classes = useStyles();\n const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');\n\n const handleClose = () => {\n setIsModalOpened(false);\n };\n\n let integrationKey = '';\n if (initialAlertSource && initialAlertSource.integrationKey) {\n integrationKey = initialAlertSource.integrationKey;\n } else if (alertSource && alertSource.integrationKey) {\n integrationKey = alertSource.integrationKey;\n }\n const handleCreate = () => {\n if (!integrationKey) {\n return;\n }\n setIsLoading(true);\n setTimeout(async () => {\n try {\n const { userEntityRef } = await identityApi.getBackstageIdentity();\n const { name: userName } = parseEntityRef(userEntityRef, {\n defaultKind: 'User',\n defaultNamespace: DEFAULT_NAMESPACE,\n });\n await ilertApi.createAlert({\n integrationKey,\n summary,\n details,\n userName,\n source,\n });\n alertApi.post({ title: 'Alert created.' });\n refetchAlerts();\n } catch (err) {\n alertApi.post({ title: err, status: 'danger' });\n }\n setIsModalOpened(false);\n }, 250);\n };\n\n const canCreate = !!integrationKey && !!summary;\n\n return (\n <Dialog\n open={isModalOpened}\n onClose={handleClose}\n aria-labelledby=\"create-alert-form-title\"\n >\n <DialogTitle id=\"create-alert-form-title\">\n {entityName ? (\n <div>\n This action will trigger an alert for{' '}\n <strong>\"{entityName}\"</strong>.\n </div>\n ) : (\n 'New alert'\n )}\n </DialogTitle>\n <DialogContent>\n <Alert severity=\"info\">\n <Typography variant=\"body1\" gutterBottom align=\"justify\">\n Please describe the problem you want to report. Be as descriptive as\n possible. Your signed in user and a reference to the current page\n will automatically be amended to the alarm so that the receiver can\n reach out to you if necessary.\n </Typography>\n </Alert>\n {!initialAlertSource ? (\n <Autocomplete\n disabled={isLoading}\n options={alertSources}\n value={alertSource}\n classes={{\n root: classes.formControl,\n option: classes.option,\n }}\n onChange={(_event: any, newValue: any) => {\n setAlertSource(newValue);\n }}\n autoHighlight\n getOptionLabel={a => a.name}\n renderOption={a => (\n <div className={classes.optionWrapper}>\n <img\n src={prefersDarkMode ? a.lightIconUrl : a.iconUrl}\n alt={a.name}\n className={classes.sourceImage}\n />\n <Typography noWrap>{a.name}</Typography>\n </div>\n )}\n renderInput={params => (\n <TextField\n {...params}\n label=\"Alert Source\"\n variant=\"outlined\"\n margin=\"normal\"\n inputProps={{\n ...params.inputProps,\n autoComplete: 'new-password', // disable autocomplete and autofill\n }}\n />\n )}\n />\n ) : null}\n <TextField\n disabled={isLoading}\n label=\"Summary\"\n fullWidth\n margin=\"normal\"\n variant=\"outlined\"\n classes={{\n root: classes.formControl,\n }}\n value={summary}\n onChange={event => {\n setSummary(event.target.value);\n }}\n />\n <TextField\n disabled={isLoading}\n label=\"Details\"\n fullWidth\n multiline\n rows={4}\n margin=\"normal\"\n variant=\"outlined\"\n classes={{\n root: classes.formControl,\n }}\n value={details}\n onChange={event => {\n setDetails(event.target.value);\n }}\n />\n </DialogContent>\n <DialogActions>\n <Button\n disabled={!canCreate}\n onClick={handleCreate}\n color=\"secondary\"\n variant=\"contained\"\n >\n Create\n </Button>\n <Button onClick={handleClose} color=\"primary\">\n Cancel\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AlertSourceLink.esm.js","sources":["../../../src/components/AlertSource/AlertSourceLink.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 Grid from '@material-ui/core/Grid';\nimport { AlertSource } from '../../types';\nimport { ilertApiRef } from '../../api';\nimport { makeStyles } from '@material-ui/core/styles';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\n\nimport { useApi } from '@backstage/core-plugin-api';\nimport { Link } from '@backstage/core-components';\n\nconst useStyles = makeStyles({\n root: {\n display: 'flex',\n maxWidth: '100%',\n },\n image: {\n height: 22,\n paddingRight: 4,\n },\n link: {\n lineHeight: '22px',\n },\n});\n\nexport const AlertSourceLink = ({\n alertSource,\n}: {\n alertSource: AlertSource | null;\n}) => {\n const ilertApi = useApi(ilertApiRef);\n const classes = useStyles();\n const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');\n\n if (!alertSource) {\n return null;\n }\n\n return (\n <Grid container spacing={0}>\n <Grid item xs={2}>\n <img\n src={prefersDarkMode ? alertSource.lightIconUrl : alertSource.iconUrl}\n alt={alertSource.name}\n className={classes.image}\n />\n </Grid>\n <Grid item xs={10}>\n <Link\n className={classes.link}\n to={ilertApi.getAlertSourceDetailsURL(alertSource)}\n >\n {alertSource.name}\n </Link>\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAwBA,MAAM,YAAY,UAAW,CAAA;AAAA,EAC3B,IAAM,EAAA;AAAA,IACJ,OAAS,EAAA,MAAA;AAAA,IACT,QAAU,EAAA;AAAA,GACZ;AAAA,EACA,KAAO,EAAA;AAAA,IACL,MAAQ,EAAA,EAAA;AAAA,IACR,YAAc,EAAA;AAAA,GAChB;AAAA,EACA,IAAM,EAAA;AAAA,IACJ,UAAY,EAAA;AAAA;AAEhB,CAAC,CAAA;AAEM,MAAM,kBAAkB,CAAC;AAAA,EAC9B;AACF,CAEM,KAAA;AACJ,EAAM,MAAA,QAAA,GAAW,OAAO,WAAW,CAAA;AACnC,EAAA,MAAM,UAAU,SAAU,EAAA;AAC1B,EAAM,MAAA,eAAA,GAAkB,cAAc,8BAA8B,CAAA;AAEpE,EAAA,IAAI,CAAC,WAAa,EAAA;AAChB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,uBACG,IAAA,CAAA,IAAA,EAAA,EAAK,SAAS,EAAA,IAAA,EAAC,SAAS,CACvB,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAK,EAAA,EAAA,IAAA,EAAI,IAAC,EAAA,EAAA,EAAI,CACb,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAK,EAAA,eAAA,GAAkB,WAAY,CAAA,YAAA,GAAe,WAAY,CAAA,OAAA;AAAA,QAC9D,KAAK,WAAY,CAAA,IAAA;AAAA,QACjB,WAAW,OAAQ,CAAA;AAAA;AAAA,KAEvB,EAAA,CAAA;AAAA,oBACC,GAAA,CAAA,IAAA,EAAA,EAAK,IAAI,EAAA,IAAA,EAAC,IAAI,EACb,EAAA,QAAA,kBAAA,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,WAAW,OAAQ,CAAA,IAAA;AAAA,QACnB,EAAA,EAAI,QAAS,CAAA,wBAAA,CAAyB,WAAW,CAAA;AAAA,QAEhD,QAAY,EAAA,WAAA,CAAA;AAAA;AAAA,KAEjB,EAAA;AAAA,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"AlertSourceLink.esm.js","sources":["../../../src/components/AlertSource/AlertSourceLink.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 Grid from '@material-ui/core/Grid';\nimport { AlertSource } from '../../types';\nimport { ilertApiRef } from '../../api';\nimport { makeStyles } from '@material-ui/core/styles';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\n\nimport { useApi } from '@backstage/core-plugin-api';\nimport { Link } from '@backstage/core-components';\n\nconst useStyles = makeStyles({\n root: {\n display: 'flex',\n maxWidth: '100%',\n },\n image: {\n height: 22,\n paddingRight: 4,\n },\n link: {\n lineHeight: '22px',\n },\n});\n\nexport const AlertSourceLink = ({\n alertSource,\n}: {\n alertSource: AlertSource | null;\n}) => {\n const ilertApi = useApi(ilertApiRef);\n const classes = useStyles();\n const prefersDarkMode = useMediaQuery('(prefers-color-scheme: dark)');\n\n if (!alertSource) {\n return null;\n }\n\n return (\n <Grid container spacing={0}>\n <Grid item xs={2}>\n <img\n src={prefersDarkMode ? alertSource.lightIconUrl : alertSource.iconUrl}\n alt={alertSource.name}\n className={classes.image}\n />\n </Grid>\n <Grid item xs={10}>\n <Link\n className={classes.link}\n to={ilertApi.getAlertSourceDetailsURL(alertSource)}\n >\n {alertSource.name}\n </Link>\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AAwBA,MAAM,YAAY,UAAA,CAAW;AAAA,EAC3B,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS,MAAA;AAAA,IACT,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,KAAA,EAAO;AAAA,IACL,MAAA,EAAQ,EAAA;AAAA,IACR,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,UAAA,EAAY;AAAA;AAEhB,CAAC,CAAA;AAEM,MAAM,kBAAkB,CAAC;AAAA,EAC9B;AACF,CAAA,KAEM;AACJ,EAAA,MAAM,QAAA,GAAW,OAAO,WAAW,CAAA;AACnC,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM,eAAA,GAAkB,cAAc,8BAA8B,CAAA;AAEpE,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAS,IAAA,EAAC,SAAS,CAAA,EACvB,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,CAAA,EACb,QAAA,kBAAA,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,eAAA,GAAkB,WAAA,CAAY,YAAA,GAAe,WAAA,CAAY,OAAA;AAAA,QAC9D,KAAK,WAAA,CAAY,IAAA;AAAA,QACjB,WAAW,OAAA,CAAQ;AAAA;AAAA,KACrB,EACF,CAAA;AAAA,oBACA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,IAAI,EAAA,EACb,QAAA,kBAAA,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,WAAW,OAAA,CAAQ,IAAA;AAAA,QACnB,EAAA,EAAI,QAAA,CAAS,wBAAA,CAAyB,WAAW,CAAA;AAAA,QAEhD,QAAA,EAAA,WAAA,CAAY;AAAA;AAAA,KACf,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -51,7 +51,7 @@ const AlertsPage = () => {
51
51
  refetchAlerts
52
52
  }
53
53
  ),
54
- /* @__PURE__ */ jsx(SupportButton, { children: "This helps you to bring iLert into your developer portal." })
54
+ /* @__PURE__ */ jsx(SupportButton, { children: "This helps you to bring ilert into your developer portal." })
55
55
  ] }),
56
56
  /* @__PURE__ */ jsx(
57
57
  AlertsTable,
@@ -1 +1 @@
1
- {"version":3,"file":"AlertsPage.esm.js","sources":["../../../src/components/AlertsPage/AlertsPage.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 Content,\n ContentHeader,\n ResponseErrorPanel,\n SupportButton,\n} from '@backstage/core-components';\nimport Button from '@material-ui/core/Button';\nimport AddIcon from '@material-ui/icons/Add';\nimport { useState } from 'react';\nimport { useAlerts } from '../../hooks/useAlerts';\nimport { AlertNewModal } from '../Alert/AlertNewModal';\nimport { MissingAuthorizationHeaderError } from '../Errors';\nimport { AlertsTable } from './AlertsTable';\n\nexport const AlertsPage = () => {\n const [\n { tableState, states, alerts, alertsCount, isLoading, error },\n {\n onAlertStatesChange,\n onChangePage,\n onChangeRowsPerPage,\n onAlertChanged,\n refetchAlerts,\n setIsLoading,\n },\n ] = useAlerts(true);\n\n const [isModalOpened, setIsModalOpened] = useState(false);\n\n const handleCreateNewAlertClick = () => {\n setIsModalOpened(true);\n };\n\n if (error) {\n if (error.name === 'AuthenticationError') {\n return (\n <Content>\n <MissingAuthorizationHeaderError />\n </Content>\n );\n }\n\n return (\n <Content>\n <ResponseErrorPanel error={error} />\n </Content>\n );\n }\n\n return (\n <Content>\n <ContentHeader title=\"Alerts\">\n <Button\n variant=\"contained\"\n color=\"primary\"\n size=\"small\"\n startIcon={<AddIcon />}\n onClick={handleCreateNewAlertClick}\n >\n Create Alert\n </Button>\n <AlertNewModal\n isModalOpened={isModalOpened}\n setIsModalOpened={setIsModalOpened}\n refetchAlerts={refetchAlerts}\n />\n <SupportButton>\n This helps you to bring iLert into your developer portal.\n </SupportButton>\n </ContentHeader>\n <AlertsTable\n alerts={alerts}\n alertsCount={alertsCount}\n tableState={tableState}\n states={states}\n onAlertChanged={onAlertChanged}\n onAlertStatesChange={onAlertStatesChange}\n onChangePage={onChangePage}\n onChangeRowsPerPage={onChangeRowsPerPage}\n isLoading={isLoading}\n setIsLoading={setIsLoading}\n />\n </Content>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AA6BO,MAAM,aAAa,MAAM;AAC9B,EAAM,MAAA;AAAA,IACJ,EAAE,UAAY,EAAA,MAAA,EAAQ,MAAQ,EAAA,WAAA,EAAa,WAAW,KAAM,EAAA;AAAA,IAC5D;AAAA,MACE,mBAAA;AAAA,MACA,YAAA;AAAA,MACA,mBAAA;AAAA,MACA,cAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA;AACF,GACF,GAAI,UAAU,IAAI,CAAA;AAElB,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AAExD,EAAA,MAAM,4BAA4B,MAAM;AACtC,IAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,GACvB;AAEA,EAAA,IAAI,KAAO,EAAA;AACT,IAAI,IAAA,KAAA,CAAM,SAAS,qBAAuB,EAAA;AACxC,MAAA,uBACG,GAAA,CAAA,OAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,+BAAA,EAAA,EAAgC,CACnC,EAAA,CAAA;AAAA;AAIJ,IAAA,uBACG,GAAA,CAAA,OAAA,EAAA,EACC,QAAC,kBAAA,GAAA,CAAA,kBAAA,EAAA,EAAmB,OAAc,CACpC,EAAA,CAAA;AAAA;AAIJ,EAAA,4BACG,OACC,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAC,IAAA,CAAA,aAAA,EAAA,EAAc,OAAM,QACnB,EAAA,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAQ,EAAA,WAAA;AAAA,UACR,KAAM,EAAA,SAAA;AAAA,UACN,IAAK,EAAA,OAAA;AAAA,UACL,SAAA,sBAAY,OAAQ,EAAA,EAAA,CAAA;AAAA,UACpB,OAAS,EAAA,yBAAA;AAAA,UACV,QAAA,EAAA;AAAA;AAAA,OAED;AAAA,sBACA,GAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,aAAA;AAAA,UACA,gBAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,sBACA,GAAA,CAAC,iBAAc,QAEf,EAAA,2DAAA,EAAA;AAAA,KACF,EAAA,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,MAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAA;AAAA,QACA,MAAA;AAAA,QACA,cAAA;AAAA,QACA,mBAAA;AAAA,QACA,YAAA;AAAA,QACA,mBAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA;AAAA;AACF,GACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"AlertsPage.esm.js","sources":["../../../src/components/AlertsPage/AlertsPage.tsx"],"sourcesContent":["/*\n * Copyright 2021 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 Content,\n ContentHeader,\n ResponseErrorPanel,\n SupportButton,\n} from '@backstage/core-components';\nimport Button from '@material-ui/core/Button';\nimport AddIcon from '@material-ui/icons/Add';\nimport { useState } from 'react';\nimport { useAlerts } from '../../hooks/useAlerts';\nimport { AlertNewModal } from '../Alert/AlertNewModal';\nimport { MissingAuthorizationHeaderError } from '../Errors';\nimport { AlertsTable } from './AlertsTable';\n\nexport const AlertsPage = () => {\n const [\n { tableState, states, alerts, alertsCount, isLoading, error },\n {\n onAlertStatesChange,\n onChangePage,\n onChangeRowsPerPage,\n onAlertChanged,\n refetchAlerts,\n setIsLoading,\n },\n ] = useAlerts(true);\n\n const [isModalOpened, setIsModalOpened] = useState(false);\n\n const handleCreateNewAlertClick = () => {\n setIsModalOpened(true);\n };\n\n if (error) {\n if (error.name === 'AuthenticationError') {\n return (\n <Content>\n <MissingAuthorizationHeaderError />\n </Content>\n );\n }\n\n return (\n <Content>\n <ResponseErrorPanel error={error} />\n </Content>\n );\n }\n\n return (\n <Content>\n <ContentHeader title=\"Alerts\">\n <Button\n variant=\"contained\"\n color=\"primary\"\n size=\"small\"\n startIcon={<AddIcon />}\n onClick={handleCreateNewAlertClick}\n >\n Create Alert\n </Button>\n <AlertNewModal\n isModalOpened={isModalOpened}\n setIsModalOpened={setIsModalOpened}\n refetchAlerts={refetchAlerts}\n />\n <SupportButton>\n This helps you to bring ilert into your developer portal.\n </SupportButton>\n </ContentHeader>\n <AlertsTable\n alerts={alerts}\n alertsCount={alertsCount}\n tableState={tableState}\n states={states}\n onAlertChanged={onAlertChanged}\n onAlertStatesChange={onAlertStatesChange}\n onChangePage={onChangePage}\n onChangeRowsPerPage={onChangeRowsPerPage}\n isLoading={isLoading}\n setIsLoading={setIsLoading}\n />\n </Content>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AA6BO,MAAM,aAAa,MAAM;AAC9B,EAAA,MAAM;AAAA,IACJ,EAAE,UAAA,EAAY,MAAA,EAAQ,MAAA,EAAQ,WAAA,EAAa,WAAW,KAAA,EAAM;AAAA,IAC5D;AAAA,MACE,mBAAA;AAAA,MACA,YAAA;AAAA,MACA,mBAAA;AAAA,MACA,cAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA;AACF,GACF,GAAI,UAAU,IAAI,CAAA;AAElB,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AAExD,EAAA,MAAM,4BAA4B,MAAM;AACtC,IAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,EACvB,CAAA;AAEA,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,IAAI,KAAA,CAAM,SAAS,qBAAA,EAAuB;AACxC,MAAA,uBACE,GAAA,CAAC,OAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,+BAAA,EAAA,EAAgC,CAAA,EACnC,CAAA;AAAA,IAEJ;AAEA,IAAA,uBACE,GAAA,CAAC,OAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,kBAAA,EAAA,EAAmB,OAAc,CAAA,EACpC,CAAA;AAAA,EAEJ;AAEA,EAAA,4BACG,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,aAAA,EAAA,EAAc,OAAM,QAAA,EACnB,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,WAAA;AAAA,UACR,KAAA,EAAM,SAAA;AAAA,UACN,IAAA,EAAK,OAAA;AAAA,UACL,SAAA,sBAAY,OAAA,EAAA,EAAQ,CAAA;AAAA,UACpB,OAAA,EAAS,yBAAA;AAAA,UACV,QAAA,EAAA;AAAA;AAAA,OAED;AAAA,sBACA,GAAA;AAAA,QAAC,aAAA;AAAA,QAAA;AAAA,UACC,aAAA;AAAA,UACA,gBAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,sBACA,GAAA,CAAC,iBAAc,QAAA,EAAA,2DAAA,EAEf;AAAA,KAAA,EACF,CAAA;AAAA,oBACA,GAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,MAAA;AAAA,QACA,WAAA;AAAA,QACA,UAAA;AAAA,QACA,MAAA;AAAA,QACA,cAAA;AAAA,QACA,mBAAA;AAAA,QACA,YAAA;AAAA,QACA,mBAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;;;;"}