@backstage-community/plugin-ilert 0.18.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/ILertIcon.esm.js.map +1 -1
- package/dist/api/client.esm.js +2 -2
- package/dist/api/client.esm.js.map +1 -1
- package/dist/components/Alert/AlertActionsMenu.esm.js +9 -8
- package/dist/components/Alert/AlertActionsMenu.esm.js.map +1 -1
- package/dist/components/Alert/AlertAssignModal.esm.js +5 -4
- package/dist/components/Alert/AlertAssignModal.esm.js.map +1 -1
- package/dist/components/Alert/AlertLink.esm.js.map +1 -1
- package/dist/components/Alert/AlertNewModal.esm.js +5 -4
- package/dist/components/Alert/AlertNewModal.esm.js.map +1 -1
- package/dist/components/AlertSource/AlertSourceLink.esm.js.map +1 -1
- package/dist/components/AlertsPage/AlertsPage.esm.js.map +1 -1
- package/dist/components/AlertsPage/AlertsTable.esm.js.map +1 -1
- package/dist/components/AlertsPage/StatusChip.esm.js +1 -1
- package/dist/components/AlertsPage/StatusChip.esm.js.map +1 -1
- package/dist/components/AlertsPage/TableTitle.esm.js.map +1 -1
- package/dist/components/Errors/MissingAuthorizationHeaderError.esm.js.map +1 -1
- package/dist/components/ILertCard/ILertCard.esm.js.map +1 -1
- package/dist/components/ILertCard/ILertCardActionsHeader.esm.js +8 -7
- package/dist/components/ILertCard/ILertCardActionsHeader.esm.js.map +1 -1
- package/dist/components/ILertCard/ILertCardEmptyState.esm.js.map +1 -1
- package/dist/components/ILertCard/ILertCardHeaderStatus.esm.js.map +1 -1
- package/dist/components/ILertCard/ILertCardMaintenanceModal.esm.js +5 -4
- package/dist/components/ILertCard/ILertCardMaintenanceModal.esm.js.map +1 -1
- package/dist/components/ILertCard/ILertCardOnCall.esm.js +1 -1
- package/dist/components/ILertCard/ILertCardOnCall.esm.js.map +1 -1
- package/dist/components/ILertCard/ILertCardOnCallEmptyState.esm.js.map +1 -1
- package/dist/components/ILertCard/ILertCardOnCallItem.esm.js.map +1 -1
- package/dist/components/ILertCard/index.esm.js +6 -1
- package/dist/components/ILertCard/index.esm.js.map +1 -1
- package/dist/components/ILertPage/ILertPage.esm.js +1 -1
- package/dist/components/ILertPage/ILertPage.esm.js.map +1 -1
- package/dist/components/OnCallSchedulesPage/OnCallSchedulesGrid.esm.js.map +1 -1
- package/dist/components/OnCallSchedulesPage/OnCallSchedulesPage.esm.js.map +1 -1
- package/dist/components/OnCallSchedulesPage/OnCallShiftItem.esm.js.map +1 -1
- package/dist/components/Service/ServiceActionsMenu.esm.js.map +1 -1
- package/dist/components/Service/ServiceLink.esm.js.map +1 -1
- package/dist/components/ServicesPage/ServicesPage.esm.js.map +1 -1
- package/dist/components/ServicesPage/ServicesTable.esm.js.map +1 -1
- package/dist/components/ServicesPage/StatusChip.esm.js.map +1 -1
- package/dist/components/Shift/ShiftOverrideModal.esm.js +5 -4
- package/dist/components/Shift/ShiftOverrideModal.esm.js.map +1 -1
- package/dist/components/StatusPage/StatusPageActionsMenu.esm.js.map +1 -1
- package/dist/components/StatusPage/StatusPageLink.esm.js.map +1 -1
- package/dist/components/StatusPage/StatusPageURL.esm.js.map +1 -1
- package/dist/components/StatusPagePage/StatusChip.esm.js.map +1 -1
- package/dist/components/StatusPagePage/StatusPagesPage.esm.js.map +1 -1
- package/dist/components/StatusPagePage/StatusPagesTable.esm.js.map +1 -1
- package/dist/components/StatusPagePage/VisibilityChip.esm.js.map +1 -1
- package/dist/components/index.esm.js +5 -1
- package/dist/components/index.esm.js.map +1 -1
- package/dist/constants.esm.js.map +1 -1
- package/dist/hooks/index.esm.js.map +1 -1
- package/dist/hooks/useAlertActions.esm.js.map +1 -1
- package/dist/hooks/useAlertSource.esm.js.map +1 -1
- package/dist/hooks/useAlertSourceOnCalls.esm.js.map +1 -1
- package/dist/hooks/useAlerts.esm.js.map +1 -1
- package/dist/hooks/useAssignAlert.esm.js.map +1 -1
- package/dist/hooks/useNewAlert.esm.js.map +1 -1
- package/dist/hooks/useOnCallSchedules.esm.js.map +1 -1
- package/dist/hooks/useServices.esm.js.map +1 -1
- package/dist/hooks/useShiftOverride.esm.js.map +1 -1
- package/dist/hooks/useStatusPages.esm.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/plugin.esm.js +1 -1
- package/dist/plugin.esm.js.map +1 -1
- package/dist/route-refs.esm.js.map +1 -1
- package/dist/types.esm.js.map +1 -1
- package/package.json +9 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @backstage-community/plugin-ilert
|
|
2
2
|
|
|
3
|
+
## 0.20.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 8db2f72: Backstage version bump to v1.50.2
|
|
8
|
+
|
|
9
|
+
## 0.19.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- cb0c039: Backstage version bump to v1.49.2
|
|
14
|
+
|
|
3
15
|
## 0.18.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
|
@@ -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":";;;
|
|
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;;;;"}
|
package/dist/api/client.esm.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { createApiRef } from '@backstage/
|
|
1
|
+
import { createApiRef } from '@backstage/frontend-plugin-api';
|
|
2
2
|
import { AuthenticationError, ResponseError } from '@backstage/errors';
|
|
3
3
|
import { DateTime } from 'luxon';
|
|
4
4
|
|
|
5
|
-
const ilertApiRef = createApiRef({
|
|
5
|
+
const ilertApiRef = createApiRef().with({
|
|
6
6
|
id: "plugin.ilert.service"
|
|
7
7
|
});
|
|
8
8
|
const DEFAULT_PROXY_PATH = "/ilert";
|
|
@@ -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 {\n ConfigApi,\n createApiRef,\n DiscoveryApi,\n FetchApi,\n} from '@backstage/core-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>({\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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"}
|
|
@@ -10,7 +10,8 @@ import { useAlertActions } from '../../hooks/useAlertActions.esm.js';
|
|
|
10
10
|
import { AlertAssignModal } from './AlertAssignModal.esm.js';
|
|
11
11
|
import { parseEntityRef, DEFAULT_NAMESPACE } from '@backstage/catalog-model';
|
|
12
12
|
import { Progress, Link } from '@backstage/core-components';
|
|
13
|
-
import { useApi,
|
|
13
|
+
import { useApi, identityApiRef } from '@backstage/core-plugin-api';
|
|
14
|
+
import { toastApiRef } from '@backstage/frontend-plugin-api';
|
|
14
15
|
|
|
15
16
|
const AlertActionsMenu = ({
|
|
16
17
|
alert,
|
|
@@ -18,7 +19,7 @@ const AlertActionsMenu = ({
|
|
|
18
19
|
setIsLoading
|
|
19
20
|
}) => {
|
|
20
21
|
const ilertApi = useApi(ilertApiRef);
|
|
21
|
-
const alertApi = useApi(
|
|
22
|
+
const alertApi = useApi(toastApiRef);
|
|
22
23
|
const identityApi = useApi(identityApiRef);
|
|
23
24
|
const [anchorEl, setAnchorEl] = useState(null);
|
|
24
25
|
const callback = onAlertChanged || ((_) => {
|
|
@@ -46,12 +47,12 @@ const AlertActionsMenu = ({
|
|
|
46
47
|
defaultNamespace: DEFAULT_NAMESPACE
|
|
47
48
|
});
|
|
48
49
|
const newAlert = await ilertApi.acceptAlert(alert, userName);
|
|
49
|
-
alertApi.post({
|
|
50
|
+
alertApi.post({ title: "Alert accepted." });
|
|
50
51
|
callback(newAlert);
|
|
51
52
|
setProcessing(false);
|
|
52
53
|
} catch (err) {
|
|
53
54
|
setProcessing(false);
|
|
54
|
-
alertApi.post({
|
|
55
|
+
alertApi.post({ title: err, status: "danger" });
|
|
55
56
|
}
|
|
56
57
|
};
|
|
57
58
|
const handleResolve = async () => {
|
|
@@ -64,12 +65,12 @@ const AlertActionsMenu = ({
|
|
|
64
65
|
defaultNamespace: DEFAULT_NAMESPACE
|
|
65
66
|
});
|
|
66
67
|
const newAlert = await ilertApi.resolveAlert(alert, userName);
|
|
67
|
-
alertApi.post({
|
|
68
|
+
alertApi.post({ title: "Alert resolved." });
|
|
68
69
|
callback(newAlert);
|
|
69
70
|
setProcessing(false);
|
|
70
71
|
} catch (err) {
|
|
71
72
|
setProcessing(false);
|
|
72
|
-
alertApi.post({
|
|
73
|
+
alertApi.post({ title: err, status: "danger" });
|
|
73
74
|
}
|
|
74
75
|
};
|
|
75
76
|
const handleAssign = () => {
|
|
@@ -81,11 +82,11 @@ const AlertActionsMenu = ({
|
|
|
81
82
|
handleCloseMenu();
|
|
82
83
|
setProcessing(true);
|
|
83
84
|
await ilertApi.triggerAlertAction(alert, action);
|
|
84
|
-
alertApi.post({
|
|
85
|
+
alertApi.post({ title: "Alert action triggered." });
|
|
85
86
|
setProcessing(false);
|
|
86
87
|
} catch (err) {
|
|
87
88
|
setProcessing(false);
|
|
88
|
-
alertApi.post({
|
|
89
|
+
alertApi.post({ title: err, status: "danger" });
|
|
89
90
|
}
|
|
90
91
|
};
|
|
91
92
|
const actions = alertActions.map((a) => {
|
|
@@ -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 {\n alertApiRef,\n identityApiRef,\n useApi,\n} from '@backstage/core-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(alertApiRef);\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({ message: 'Alert accepted.' });\n\n callback(newAlert);\n setProcessing(false);\n } catch (err) {\n setProcessing(false);\n alertApi.post({ message: err, severity: 'error' });\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({ message: 'Alert resolved.' });\n\n callback(newAlert);\n setProcessing(false);\n } catch (err) {\n setProcessing(false);\n alertApi.post({ message: err, severity: 'error' });\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({ message: 'Alert action triggered.' });\n setProcessing(false);\n } catch (err) {\n setProcessing(false);\n alertApi.post({ message: err, severity: 'error' });\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":";;;;;;;;;;;;;;;AAgCO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,KAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,KAIM;AACJ,EAAA,MAAM,QAAA,GAAW,OAAO,WAAW,CAAA;AACnC,EAAA,MAAM,QAAA,GAAW,OAAO,WAAW,CAAA;AACnC,EAAA,MAAM,WAAA,GAAc,OAAO,cAAc,CAAA;AACzC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAA6B,IAAI,CAAA;AACjE,EAAA,MAAM,QAAA,GAAW,cAAA,KAAmB,CAAC,CAAA,KAAmB;AAAA,EAAC,CAAA,CAAA;AACzD,EAAA,MAAM,aAAA,GAAgB,YAAA,KAAiB,CAAC,CAAA,KAAqB;AAAA,EAAC,CAAA,CAAA;AAC9D,EAAA,MAAM,CAAC,wBAAA,EAA0B,2BAA2B,CAAA,GAC1D,SAAS,KAAK,CAAA;AAEhB,EAAA,MAAM,CAAC,EAAE,YAAA,EAAc,SAAA,EAAW,CAAA,GAAI,eAAA;AAAA,IACpC,KAAA;AAAA,IACA,QAAQ,QAAQ;AAAA,GAClB;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAmC;AACtD,IAAA,WAAA,CAAY,MAAM,aAAa,CAAA;AAAA,EACjC,CAAA;AAEA,EAAA,MAAM,kBAAkB,MAAM;AAC5B,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,MAAM,eAAe,YAA2B;AAC9C,IAAA,IAAI;AACF,MAAA,eAAA,EAAgB;AAChB,MAAA,aAAA,CAAc,IAAI,CAAA;AAElB,MAAA,MAAM,EAAE,aAAA,EAAc,GAAI,MAAM,YAAY,oBAAA,EAAqB;AACjE,MAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,eAAe,aAAA,EAAe;AAAA,QACvD,WAAA,EAAa,MAAA;AAAA,QACb,gBAAA,EAAkB;AAAA,OACnB,CAAA;AACD,MAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,WAAA,CAAY,OAAO,QAAQ,CAAA;AAC3D,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,KAAA,EAAO,iBAAA,EAAmB,CAAA;AAE1C,MAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB,SAAS,GAAA,EAAK;AACZ,MAAA,aAAA,CAAc,KAAK,CAAA;AACnB,MAAA,QAAA,CAAS,KAAK,EAAE,KAAA,EAAO,GAAA,EAAK,MAAA,EAAQ,UAAU,CAAA;AAAA,IAChD;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,gBAAgB,YAA2B;AAC/C,IAAA,IAAI;AACF,MAAA,eAAA,EAAgB;AAChB,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,MAAM,EAAE,aAAA,EAAc,GAAI,MAAM,YAAY,oBAAA,EAAqB;AACjE,MAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,eAAe,aAAA,EAAe;AAAA,QACvD,WAAA,EAAa,MAAA;AAAA,QACb,gBAAA,EAAkB;AAAA,OACnB,CAAA;AACD,MAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,YAAA,CAAa,OAAO,QAAQ,CAAA;AAC5D,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,KAAA,EAAO,iBAAA,EAAmB,CAAA;AAE1C,MAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB,SAAS,GAAA,EAAK;AACZ,MAAA,aAAA,CAAc,KAAK,CAAA;AACnB,MAAA,QAAA,CAAS,KAAK,EAAE,KAAA,EAAO,GAAA,EAAK,MAAA,EAAQ,UAAU,CAAA;AAAA,IAChD;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,eAAA,EAAgB;AAChB,IAAA,2BAAA,CAA4B,IAAI,CAAA;AAAA,EAClC,CAAA;AAEA,EAAA,MAAM,mBAAA,GAAsB,CAAC,MAAA,KAAwB,YAAY;AAC/D,IAAA,IAAI;AACF,MAAA,eAAA,EAAgB;AAChB,MAAA,aAAA,CAAc,IAAI,CAAA;AAClB,MAAA,MAAM,QAAA,CAAS,kBAAA,CAAmB,KAAA,EAAO,MAAM,CAAA;AAC/C,MAAA,QAAA,CAAS,IAAA,CAAK,EAAE,KAAA,EAAO,yBAAA,EAA2B,CAAA;AAClD,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB,SAAS,GAAA,EAAK;AACZ,MAAA,aAAA,CAAc,KAAK,CAAA;AACnB,MAAA,QAAA,CAAS,KAAK,EAAE,KAAA,EAAO,GAAA,EAAK,MAAA,EAAQ,UAAU,CAAA;AAAA,IAChD;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,OAAA,GAAuB,YAAA,CAAa,GAAA,CAAI,CAAA,CAAA,KAAK;AACjD,IAAA,MAAM,cAAA,GAAiB,EAAE,OAAA,GACrB,CAAA,CAAE,QAAQ,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,CAAA,GAC7B,MAAA;AACJ,IAAA,MAAM,WAAA,GACJ,cAAA,IAAkB,cAAA,CAAe,KAAA,GAC7B,CAAA,EAAG,cAAA,CAAe,KAAA,CAAM,SAAS,CAAA,CAAA,EAAI,cAAA,CAAe,KAAA,CAAM,QAAQ,CAAA,CAAA,GAClE,EAAA;AACN,IAAA,uBACE,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,OAAA,EAAS,oBAAoB,CAAC,CAAA;AAAA,QAC9B,QAAA,EAAU,CAAC,CAAC,cAAA;AAAA,QAEZ,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,SAAA,EAAU,QAAM,IAAA,EACjC,QAAA,EAAA,WAAA,GAAc,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,KAAA,EAAQ,WAAW,CAAA,CAAA,CAAA,GAAM,EAAE,IAAA,EACrD;AAAA,OAAA;AAAA,MANK,CAAA,CAAE;AAAA,KAOT;AAAA,EAEJ,CAAC,CAAA;AAED,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAW,MAAA;AAAA,QACX,eAAA,EAAc,WAAA;AAAA,QACd,eAAA,EAAc,MAAA;AAAA,QACd,OAAA,EAAS,WAAA;AAAA,QACT,IAAA,EAAK,OAAA;AAAA,QAEL,8BAAC,YAAA,EAAA,EAAa;AAAA;AAAA,KAChB;AAAA,oBACA,IAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,CAAA,mBAAA,EAAsB,KAAA,CAAM,EAAE,CAAA,CAAA;AAAA,QAClC,QAAA;AAAA,QACA,WAAA,EAAW,IAAA;AAAA,QACX,IAAA,EAAM,QAAQ,QAAQ,CAAA;AAAA,QACtB,OAAA,EAAS,eAAA;AAAA,QACT,UAAA,EAAY;AAAA,UACV,KAAA,EAAO,EAAE,SAAA,EAAW,EAAA,GAAK,GAAA;AAAI,SAC/B;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,KAAA,CAAM,MAAA,KAAW,SAAA,mBAChB,GAAA,CAAC,QAAA,EAAA,EAAmB,SAAS,YAAA,EAC3B,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,WAAU,MAAA,EAAM,IAAA,EAAC,QAAA,EAAA,QAAA,EAErC,CAAA,EAAA,EAHY,KAId,CAAA,GACE,IAAA;AAAA,UAEH,MAAM,MAAA,KAAW,UAAA,mBAChB,GAAA,CAAC,QAAA,EAAA,EAAqB,SAAS,aAAA,EAC7B,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,WAAU,MAAA,EAAM,IAAA,EAAC,QAAA,EAAA,SAAA,EAErC,CAAA,EAAA,EAHY,OAId,CAAA,GACE,IAAA;AAAA,UAEH,MAAM,MAAA,KAAW,UAAA,mBAChB,GAAA,CAAC,QAAA,EAAA,EAAsB,SAAS,YAAA,EAC9B,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,WAAU,MAAA,EAAM,IAAA,EAAC,QAAA,EAAA,QAAA,EAErC,CAAA,EAAA,EAHY,QAId,CAAA,GACE,IAAA;AAAA,UAEH,SAAA,mBACC,GAAA,CAAC,QAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAO,EAAG,CAAA,EAAA,EADxB,SAEd,CAAA,GAEA,OAAA;AAAA,0BAGF,GAAA,CAAC,YAAuB,OAAA,EAAS,eAAA,EAC/B,8BAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,WAAU,MAAA,EAAM,IAAA,EAClC,8BAAC,IAAA,EAAA,EAAK,EAAA,EAAI,SAAS,kBAAA,CAAmB,KAAK,GAAG,QAAA,EAAA,eAAA,EAAa,CAAA,EAC7D,KAHY,SAId;AAAA;AAAA;AAAA,KACF;AAAA,oBACA,GAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,gBAAA,EAAkB,2BAAA;AAAA,QAClB,aAAA,EAAe,wBAAA;AAAA,QACf;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { useApi
|
|
2
|
+
import { useApi } from '@backstage/core-plugin-api';
|
|
3
|
+
import { toastApiRef } from '@backstage/frontend-plugin-api';
|
|
3
4
|
import Typography from '@material-ui/core/Typography';
|
|
4
5
|
import Button from '@material-ui/core/Button';
|
|
5
6
|
import Dialog from '@material-ui/core/Dialog';
|
|
@@ -51,7 +52,7 @@ const AlertAssignModal = ({
|
|
|
51
52
|
const callback = onAlertChanged || ((_) => {
|
|
52
53
|
});
|
|
53
54
|
const ilertApi = useApi(ilertApiRef);
|
|
54
|
-
const alertApi = useApi(
|
|
55
|
+
const alertApi = useApi(toastApiRef);
|
|
55
56
|
const classes = useStyles();
|
|
56
57
|
const handleClose = () => {
|
|
57
58
|
setAlertRespondersList([]);
|
|
@@ -67,9 +68,9 @@ const AlertAssignModal = ({
|
|
|
67
68
|
try {
|
|
68
69
|
const newAlert = await ilertApi.assignAlert(alert, alertResponder);
|
|
69
70
|
callback(newAlert);
|
|
70
|
-
alertApi.post({
|
|
71
|
+
alertApi.post({ title: "Alert assigned." });
|
|
71
72
|
} catch (err) {
|
|
72
|
-
alertApi.post({
|
|
73
|
+
alertApi.post({ title: err, status: "danger" });
|
|
73
74
|
}
|
|
74
75
|
setIsLoading(false);
|
|
75
76
|
setIsModalOpened(false);
|
|
@@ -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 {
|
|
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,
|
|
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,6 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { parseEntityRef, DEFAULT_NAMESPACE } from '@backstage/catalog-model';
|
|
3
|
-
import { useApi,
|
|
3
|
+
import { useApi, identityApiRef } from '@backstage/core-plugin-api';
|
|
4
|
+
import { toastApiRef } from '@backstage/frontend-plugin-api';
|
|
4
5
|
import Typography from '@material-ui/core/Typography';
|
|
5
6
|
import Button from '@material-ui/core/Button';
|
|
6
7
|
import Dialog from '@material-ui/core/Dialog';
|
|
@@ -52,7 +53,7 @@ const AlertNewModal = ({
|
|
|
52
53
|
{ setAlertSource, setSummary, setDetails, setIsLoading }
|
|
53
54
|
] = useNewAlert(isModalOpened, initialAlertSource);
|
|
54
55
|
const ilertApi = useApi(ilertApiRef);
|
|
55
|
-
const alertApi = useApi(
|
|
56
|
+
const alertApi = useApi(toastApiRef);
|
|
56
57
|
const identityApi = useApi(identityApiRef);
|
|
57
58
|
const source = window.location.toString();
|
|
58
59
|
const classes = useStyles();
|
|
@@ -85,10 +86,10 @@ const AlertNewModal = ({
|
|
|
85
86
|
userName,
|
|
86
87
|
source
|
|
87
88
|
});
|
|
88
|
-
alertApi.post({
|
|
89
|
+
alertApi.post({ title: "Alert created." });
|
|
89
90
|
refetchAlerts();
|
|
90
91
|
} catch (err) {
|
|
91
|
-
alertApi.post({
|
|
92
|
+
alertApi.post({ title: err, status: "danger" });
|
|
92
93
|
}
|
|
93
94
|
setIsModalOpened(false);
|
|
94
95
|
}, 250);
|
|
@@ -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 {\n alertApiRef,\n identityApiRef,\n useApi,\n} from '@backstage/core-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(alertApiRef);\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({ message: 'Alert created.' });\n refetchAlerts();\n } catch (err) {\n alertApi.post({ message: err, severity: 'error' });\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,
|
|
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;;;;"}
|
|
@@ -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,
|
|
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;;;;"}
|