@pagerduty/backstage-plugin 0.12.1-next.97 → 0.12.1-next.99

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/api/client.esm.js +151 -0
  2. package/dist/api/client.esm.js.map +1 -0
  3. package/dist/components/ChangeEvents/ChangeEventEmptyState.esm.js +17 -0
  4. package/dist/components/ChangeEvents/ChangeEventEmptyState.esm.js.map +1 -0
  5. package/dist/components/ChangeEvents/ChangeEventForbiddenState.esm.js +17 -0
  6. package/dist/components/ChangeEvents/ChangeEventForbiddenState.esm.js.map +1 -0
  7. package/dist/components/ChangeEvents/ChangeEventListItem.esm.js +70 -0
  8. package/dist/components/ChangeEvents/ChangeEventListItem.esm.js.map +1 -0
  9. package/dist/components/ChangeEvents/ChangeEvents.esm.js +45 -0
  10. package/dist/components/ChangeEvents/ChangeEvents.esm.js.map +1 -0
  11. package/dist/components/EntityPagerDutyCard/index.esm.js +29 -0
  12. package/dist/components/EntityPagerDutyCard/index.esm.js.map +1 -0
  13. package/dist/components/EntityPagerDutySmallCard/index.esm.js +29 -0
  14. package/dist/components/EntityPagerDutySmallCard/index.esm.js.map +1 -0
  15. package/dist/components/Errors/ForbiddenError.esm.js +24 -0
  16. package/dist/components/Errors/ForbiddenError.esm.js.map +1 -0
  17. package/dist/components/Errors/MissingTokenError.esm.js +24 -0
  18. package/dist/components/Errors/MissingTokenError.esm.js.map +1 -0
  19. package/dist/components/Errors/ServiceNotFoundError.esm.js +24 -0
  20. package/dist/components/Errors/ServiceNotFoundError.esm.js.map +1 -0
  21. package/dist/components/Escalation/EscalationPolicy.esm.js +64 -0
  22. package/dist/components/Escalation/EscalationPolicy.esm.js.map +1 -0
  23. package/dist/components/Escalation/EscalationUser.esm.js +98 -0
  24. package/dist/components/Escalation/EscalationUser.esm.js.map +1 -0
  25. package/dist/components/Escalation/EscalationUsersEmptyState.esm.js +20 -0
  26. package/dist/components/Escalation/EscalationUsersEmptyState.esm.js.map +1 -0
  27. package/dist/components/Escalation/EscalationUsersForbiddenState.esm.js +20 -0
  28. package/dist/components/Escalation/EscalationUsersForbiddenState.esm.js.map +1 -0
  29. package/dist/components/HomePagePagerDutyCard/Content.esm.js +9 -0
  30. package/dist/components/HomePagePagerDutyCard/Content.esm.js.map +1 -0
  31. package/dist/components/HomePagePagerDutyCard/index.esm.js +2 -0
  32. package/dist/components/HomePagePagerDutyCard/index.esm.js.map +1 -0
  33. package/dist/components/Incident/IncidentEmptyState.esm.js +27 -0
  34. package/dist/components/Incident/IncidentEmptyState.esm.js.map +1 -0
  35. package/dist/components/Incident/IncidentForbiddenState.esm.js +17 -0
  36. package/dist/components/Incident/IncidentForbiddenState.esm.js.map +1 -0
  37. package/dist/components/Incident/IncidentListItem.esm.js +114 -0
  38. package/dist/components/Incident/IncidentListItem.esm.js.map +1 -0
  39. package/dist/components/Incident/Incidents.esm.js +41 -0
  40. package/dist/components/Incident/Incidents.esm.js.map +1 -0
  41. package/dist/components/PagerDutyCard/index.esm.js +193 -0
  42. package/dist/components/PagerDutyCard/index.esm.js.map +1 -0
  43. package/dist/components/PagerDutyCardCommon/InsightsCard.esm.js +35 -0
  44. package/dist/components/PagerDutyCardCommon/InsightsCard.esm.js.map +1 -0
  45. package/dist/components/PagerDutyCardCommon/OpenServiceButton.esm.js +42 -0
  46. package/dist/components/PagerDutyCardCommon/OpenServiceButton.esm.js.map +1 -0
  47. package/dist/components/PagerDutyCardCommon/ServiceStandardsCard.esm.js +95 -0
  48. package/dist/components/PagerDutyCardCommon/ServiceStandardsCard.esm.js.map +1 -0
  49. package/dist/components/PagerDutyCardCommon/StatusCard.esm.js +102 -0
  50. package/dist/components/PagerDutyCardCommon/StatusCard.esm.js.map +1 -0
  51. package/dist/components/PagerDutyCardCommon/TriggerIncidentButton.esm.js +59 -0
  52. package/dist/components/PagerDutyCardCommon/TriggerIncidentButton.esm.js.map +1 -0
  53. package/dist/components/PagerDutySmallCard/index.esm.js +209 -0
  54. package/dist/components/PagerDutySmallCard/index.esm.js.map +1 -0
  55. package/dist/components/TriggerButton/index.esm.js +48 -0
  56. package/dist/components/TriggerButton/index.esm.js.map +1 -0
  57. package/dist/components/TriggerDialog/TriggerDialog.esm.js +94 -0
  58. package/dist/components/TriggerDialog/TriggerDialog.esm.js.map +1 -0
  59. package/dist/components/constants.esm.js +5 -0
  60. package/dist/components/constants.esm.js.map +1 -0
  61. package/dist/components/pagerDutyEntity.esm.js +13 -0
  62. package/dist/components/pagerDutyEntity.esm.js.map +1 -0
  63. package/dist/deprecated.esm.js +10 -0
  64. package/dist/deprecated.esm.js.map +1 -0
  65. package/dist/hooks/index.esm.js +10 -0
  66. package/dist/hooks/index.esm.js.map +1 -0
  67. package/dist/index.d.ts +9 -24
  68. package/dist/index.esm.js +6 -30
  69. package/dist/index.esm.js.map +1 -1
  70. package/dist/plugin.esm.js +71 -0
  71. package/dist/plugin.esm.js.map +1 -0
  72. package/package.json +19 -24
  73. package/dist/esm/index-84a03966.esm.js +0 -1626
  74. package/dist/esm/index-84a03966.esm.js.map +0 -1
  75. package/dist/esm/index-be994860.esm.js +0 -37
  76. package/dist/esm/index-be994860.esm.js.map +0 -1
  77. package/dist/esm/index-df69ef10.esm.js +0 -292
  78. package/dist/esm/index-df69ef10.esm.js.map +0 -1
@@ -0,0 +1,209 @@
1
+ import React, { useState, useCallback } from 'react';
2
+ import { Card, CardHeader, Grid, Typography, Accordion, AccordionSummary, AccordionDetails } from '@material-ui/core';
3
+ import useAsync from 'react-use/lib/useAsync';
4
+ import { pagerDutyApiRef, UnauthorizedError } from '../../api/client.esm.js';
5
+ import { MissingTokenError } from '../Errors/MissingTokenError.esm.js';
6
+ import { ServiceNotFoundError } from '../Errors/ServiceNotFoundError.esm.js';
7
+ import PDGreenImage from '../../assets/PD-Green.svg';
8
+ import PDWhiteImage from '../../assets/PD-White.svg';
9
+ import { useApi } from '@backstage/core-plugin-api';
10
+ import { NotFoundError } from '@backstage/errors';
11
+ import { Progress, InfoCard } from '@backstage/core-components';
12
+ import { ForbiddenError } from '../Errors/ForbiddenError.esm.js';
13
+ import IncidentCounterCard from '../PagerDutyCardCommon/InsightsCard.esm.js';
14
+ import { OpenServiceButton } from '../PagerDutyCardCommon/OpenServiceButton.esm.js';
15
+ import ServiceStandardsCard from '../PagerDutyCardCommon/ServiceStandardsCard.esm.js';
16
+ import StatusCard from '../PagerDutyCardCommon/StatusCard.esm.js';
17
+ import { TriggerIncidentButton } from '../PagerDutyCardCommon/TriggerIncidentButton.esm.js';
18
+ import { makeStyles, createStyles, useTheme } from '@material-ui/core/styles';
19
+ import { EscalationPolicy } from '../Escalation/EscalationPolicy.esm.js';
20
+ import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
21
+
22
+ const useStyles = makeStyles(
23
+ (theme) => createStyles({
24
+ overviewHeaderTextStyle: {
25
+ fontSize: "14px",
26
+ fontWeight: 500,
27
+ color: theme.palette.type === "light" ? "rgba(0, 0, 0, 0.54)" : "rgba(255, 255, 255, 0.7)"
28
+ },
29
+ headerStyle: {
30
+ marginBottom: "0px",
31
+ fontSize: "0px"
32
+ },
33
+ overviewHeaderContainerStyle: {
34
+ display: "flex",
35
+ margin: "0px",
36
+ padding: "15px",
37
+ marginBottom: "5px"
38
+ },
39
+ headerWithSubheaderContainerStyle: {
40
+ display: "flex",
41
+ alignItems: "center"
42
+ },
43
+ subheaderTextStyle: {
44
+ fontSize: "10px",
45
+ marginLeft: "5px"
46
+ },
47
+ overviewCardsContainerStyle: {
48
+ display: "flex",
49
+ margin: "15px",
50
+ marginTop: "-15px"
51
+ },
52
+ onCallAccordionDetails: {
53
+ display: "flex",
54
+ width: "100%",
55
+ marginTop: "-25px",
56
+ marginBottom: "-15px"
57
+ },
58
+ incidentMetricsContainerStyle: {
59
+ display: "flex",
60
+ height: "100%",
61
+ justifyContent: "center",
62
+ columnSpan: "all",
63
+ margin: "15px",
64
+ marginTop: "-15px"
65
+ }
66
+ })
67
+ );
68
+ const BasicCard = ({ children }) => /* @__PURE__ */ React.createElement(InfoCard, { title: "PagerDuty" }, children);
69
+ const PagerDutySmallCard = (props) => {
70
+ var _a, _b, _c, _d, _e, _f, _g, _h;
71
+ const classes = useStyles();
72
+ const theme = useTheme();
73
+ const { readOnly, disableInsights, disableOnCall } = props;
74
+ const api = useApi(pagerDutyApiRef);
75
+ const [refreshStatus, setRefreshStatus] = useState(false);
76
+ const handleRefresh = useCallback(() => {
77
+ setRefreshStatus((x) => !x);
78
+ }, []);
79
+ const {
80
+ value: service,
81
+ loading,
82
+ error
83
+ } = useAsync(async () => {
84
+ const { service: foundService } = await api.getServiceByPagerDutyEntity(
85
+ props
86
+ );
87
+ const serviceStandards = await api.getServiceStandardsByServiceId(
88
+ foundService.id
89
+ );
90
+ const serviceMetrics = await api.getServiceMetricsByServiceId(
91
+ foundService.id
92
+ );
93
+ const result = {
94
+ id: foundService.id,
95
+ name: foundService.name,
96
+ url: foundService.html_url,
97
+ policyId: foundService.escalation_policy.id,
98
+ policyLink: foundService.escalation_policy.html_url,
99
+ policyName: foundService.escalation_policy.name,
100
+ status: foundService.status,
101
+ standards: serviceStandards !== void 0 ? serviceStandards.standards : void 0,
102
+ metrics: serviceMetrics !== void 0 ? serviceMetrics.metrics : void 0
103
+ };
104
+ return result;
105
+ }, [props]);
106
+ if (error) {
107
+ let errorNode;
108
+ switch (error.constructor) {
109
+ case UnauthorizedError:
110
+ errorNode = /* @__PURE__ */ React.createElement(MissingTokenError, null);
111
+ break;
112
+ case NotFoundError:
113
+ errorNode = /* @__PURE__ */ React.createElement(ServiceNotFoundError, null);
114
+ break;
115
+ default:
116
+ errorNode = /* @__PURE__ */ React.createElement(ForbiddenError, null);
117
+ }
118
+ return /* @__PURE__ */ React.createElement(BasicCard, null, errorNode);
119
+ }
120
+ if (loading) {
121
+ return /* @__PURE__ */ React.createElement(BasicCard, null, /* @__PURE__ */ React.createElement(Progress, null));
122
+ }
123
+ return /* @__PURE__ */ React.createElement(Card, { "data-testid": "pagerduty-card" }, /* @__PURE__ */ React.createElement(
124
+ CardHeader,
125
+ {
126
+ className: classes.headerStyle,
127
+ title: theme.palette.type === "dark" ? /* @__PURE__ */ React.createElement("img", { src: PDWhiteImage, alt: "PagerDuty", height: "25" }) : /* @__PURE__ */ React.createElement("img", { src: PDGreenImage, alt: "PagerDuty", height: "25" }),
128
+ action: !readOnly && props.integrationKey ? /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(
129
+ TriggerIncidentButton,
130
+ {
131
+ compact: true,
132
+ "data-testid": "trigger-incident-button",
133
+ integrationKey: props.integrationKey,
134
+ entityName: props.name,
135
+ handleRefresh
136
+ }
137
+ ), /* @__PURE__ */ React.createElement(OpenServiceButton, { compact: true, serviceUrl: service.url })) : /* @__PURE__ */ React.createElement(OpenServiceButton, { compact: true, serviceUrl: service.url })
138
+ }
139
+ ), /* @__PURE__ */ React.createElement(Grid, { item: true, md: 12, className: classes.overviewHeaderContainerStyle }, /* @__PURE__ */ React.createElement(Grid, { item: true, md: 6 }, /* @__PURE__ */ React.createElement(Typography, { className: classes.overviewHeaderTextStyle }, "STATUS")), /* @__PURE__ */ React.createElement(Grid, { item: true, md: 6 }, /* @__PURE__ */ React.createElement(Typography, { className: classes.overviewHeaderTextStyle }, "STANDARDS"))), /* @__PURE__ */ React.createElement(Grid, { item: true, md: 12, className: classes.overviewCardsContainerStyle }, /* @__PURE__ */ React.createElement(Grid, { item: true, md: 6 }, /* @__PURE__ */ React.createElement(StatusCard, { compact: true, serviceId: service.id, refreshStatus })), /* @__PURE__ */ React.createElement(Grid, { item: true, md: 6 }, /* @__PURE__ */ React.createElement(
140
+ ServiceStandardsCard,
141
+ {
142
+ compact: true,
143
+ total: ((_a = service == null ? void 0 : service.standards) == null ? void 0 : _a.score) !== void 0 ? (_c = (_b = service == null ? void 0 : service.standards) == null ? void 0 : _b.score) == null ? void 0 : _c.total : void 0,
144
+ completed: ((_d = service == null ? void 0 : service.standards) == null ? void 0 : _d.score) !== void 0 ? (_f = (_e = service == null ? void 0 : service.standards) == null ? void 0 : _e.score) == null ? void 0 : _f.passing : void 0,
145
+ standards: (service == null ? void 0 : service.standards) !== void 0 ? (_g = service == null ? void 0 : service.standards) == null ? void 0 : _g.standards : void 0
146
+ }
147
+ ))), disableInsights !== true ? /* @__PURE__ */ React.createElement(Accordion, null, /* @__PURE__ */ React.createElement(
148
+ AccordionSummary,
149
+ {
150
+ expandIcon: /* @__PURE__ */ React.createElement(ExpandMoreIcon, null),
151
+ "aria-controls": "panel1a-content",
152
+ id: "panel1a-header"
153
+ },
154
+ /* @__PURE__ */ React.createElement("span", { className: classes.headerWithSubheaderContainerStyle }, /* @__PURE__ */ React.createElement(Typography, { className: classes.overviewHeaderTextStyle }, "INSIGHTS"), /* @__PURE__ */ React.createElement(Typography, { className: classes.subheaderTextStyle }, "(last 30 days)"))
155
+ ), /* @__PURE__ */ React.createElement(AccordionDetails, null, /* @__PURE__ */ React.createElement(
156
+ Grid,
157
+ {
158
+ item: true,
159
+ md: 12,
160
+ className: classes.incidentMetricsContainerStyle
161
+ },
162
+ /* @__PURE__ */ React.createElement(Grid, { item: true, md: 4 }, /* @__PURE__ */ React.createElement(
163
+ IncidentCounterCard,
164
+ {
165
+ compact: true,
166
+ count: (service == null ? void 0 : service.metrics) !== void 0 && service.metrics.length > 0 ? service == null ? void 0 : service.metrics[0].total_interruptions : void 0,
167
+ label: "interruptions",
168
+ color: theme.palette.textSubtle
169
+ }
170
+ )),
171
+ /* @__PURE__ */ React.createElement(Grid, { item: true, md: 4 }, /* @__PURE__ */ React.createElement(
172
+ IncidentCounterCard,
173
+ {
174
+ compact: true,
175
+ count: (service == null ? void 0 : service.metrics) !== void 0 && service.metrics.length > 0 ? service == null ? void 0 : service.metrics[0].total_high_urgency_incidents : void 0,
176
+ label: "high urgency",
177
+ color: theme.palette.warning.main
178
+ }
179
+ )),
180
+ /* @__PURE__ */ React.createElement(Grid, { item: true, md: 4 }, /* @__PURE__ */ React.createElement(
181
+ IncidentCounterCard,
182
+ {
183
+ compact: true,
184
+ count: (service == null ? void 0 : service.metrics) !== void 0 && ((_h = service == null ? void 0 : service.metrics) == null ? void 0 : _h.length) > 0 ? service == null ? void 0 : service.metrics[0].total_incident_count : void 0,
185
+ label: "incidents",
186
+ color: theme.palette.error.main
187
+ }
188
+ ))
189
+ ))) : /* @__PURE__ */ React.createElement(React.Fragment, null), disableOnCall !== true ? /* @__PURE__ */ React.createElement(Accordion, null, /* @__PURE__ */ React.createElement(
190
+ AccordionSummary,
191
+ {
192
+ expandIcon: /* @__PURE__ */ React.createElement(ExpandMoreIcon, null),
193
+ "aria-controls": "panel1a-content",
194
+ id: "panel1a-header"
195
+ },
196
+ /* @__PURE__ */ React.createElement(Typography, { className: classes.overviewHeaderTextStyle }, "ON CALL")
197
+ ), /* @__PURE__ */ React.createElement(AccordionDetails, { className: classes.onCallAccordionDetails }, /* @__PURE__ */ React.createElement(
198
+ EscalationPolicy,
199
+ {
200
+ "data-testid": "oncall-card",
201
+ policyId: service.policyId,
202
+ policyUrl: service.policyLink,
203
+ policyName: service.policyName
204
+ }
205
+ ))) : /* @__PURE__ */ React.createElement(React.Fragment, null));
206
+ };
207
+
208
+ export { PagerDutySmallCard };
209
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../../../src/components/PagerDutySmallCard/index.tsx"],"sourcesContent":["/*\n * Copyright 2020 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// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React, { ReactNode, useCallback, useState } from \"react\";\nimport {\n Accordion,\n AccordionDetails,\n AccordionSummary,\n Card,\n CardHeader,\n Grid,\n Typography,\n} from \"@material-ui/core\";\nimport useAsync from \"react-use/lib/useAsync\";\nimport { pagerDutyApiRef, UnauthorizedError } from \"../../api\";\nimport { MissingTokenError, ServiceNotFoundError } from \"../Errors\";\nimport PDGreenImage from \"../../assets/PD-Green.svg\";\nimport PDWhiteImage from \"../../assets/PD-White.svg\";\n\nimport { useApi } from \"@backstage/core-plugin-api\";\nimport { NotFoundError } from \"@backstage/errors\";\nimport { Progress, InfoCard } from \"@backstage/core-components\";\nimport { PagerDutyEntity } from \"../../types\";\nimport { ForbiddenError } from \"../Errors/ForbiddenError\";\nimport {\n InsightsCard,\n OpenServiceButton,\n ServiceStandardsCard,\n StatusCard,\n TriggerIncidentButton,\n} from \"../PagerDutyCardCommon\";\nimport { createStyles, makeStyles, useTheme } from \"@material-ui/core/styles\";\nimport { BackstageTheme } from \"@backstage/theme\";\nimport { PagerDutyCardServiceResponse } from \"../../api/types\";\nimport { EscalationPolicy } from \"../Escalation\";\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandMore\";\n\nconst useStyles = makeStyles<BackstageTheme>((theme) =>\n createStyles({\n overviewHeaderTextStyle: {\n fontSize: \"14px\",\n fontWeight: 500,\n color:\n theme.palette.type === \"light\"\n ? \"rgba(0, 0, 0, 0.54)\"\n : \"rgba(255, 255, 255, 0.7)\",\n },\n headerStyle: {\n marginBottom: \"0px\",\n fontSize: \"0px\",\n },\n overviewHeaderContainerStyle: {\n display: \"flex\",\n margin: \"0px\",\n padding: \"15px\",\n marginBottom: \"5px\",\n },\n headerWithSubheaderContainerStyle: {\n display: \"flex\",\n alignItems: \"center\",\n },\n subheaderTextStyle: {\n fontSize: \"10px\",\n marginLeft: \"5px\",\n },\n overviewCardsContainerStyle: {\n display: \"flex\",\n margin: \"15px\",\n marginTop: \"-15px\",\n },\n onCallAccordionDetails: {\n display: \"flex\",\n width: \"100%\",\n marginTop: \"-25px\",\n marginBottom: \"-15px\",\n },\n incidentMetricsContainerStyle: {\n display: \"flex\",\n height: \"100%\",\n justifyContent: \"center\",\n columnSpan: \"all\",\n margin: \"15px\",\n marginTop: \"-15px\",\n },\n })\n);\n\nconst BasicCard = ({ children }: { children: ReactNode }) => (\n <InfoCard title=\"PagerDuty\">{children}</InfoCard>\n);\n\n/** @public */\nexport type PagerDutyCardProps = PagerDutyEntity & {\n readOnly?: boolean;\n disableInsights?: boolean;\n disableOnCall?: boolean;\n};\n\n/** @public */\nexport const PagerDutySmallCard = (props: PagerDutyCardProps) => {\n const classes = useStyles();\n\n const theme = useTheme();\n const { readOnly, disableInsights, disableOnCall } = props;\n const api = useApi(pagerDutyApiRef);\n const [refreshStatus, setRefreshStatus] = useState<boolean>(false);\n\n const handleRefresh = useCallback(() => {\n setRefreshStatus((x) => !x);\n }, []);\n\n const {\n value: service,\n loading,\n error,\n } = useAsync(async () => {\n const { service: foundService } = await api.getServiceByPagerDutyEntity(\n props\n );\n\n const serviceStandards = await api.getServiceStandardsByServiceId(\n foundService.id\n );\n\n const serviceMetrics = await api.getServiceMetricsByServiceId(\n foundService.id\n );\n\n const result: PagerDutyCardServiceResponse = {\n id: foundService.id,\n name: foundService.name,\n url: foundService.html_url,\n policyId: foundService.escalation_policy.id,\n policyLink: foundService.escalation_policy.html_url as string,\n policyName: foundService.escalation_policy.name,\n status: foundService.status,\n standards:\n serviceStandards !== undefined ? serviceStandards.standards : undefined,\n metrics:\n serviceMetrics !== undefined ? serviceMetrics.metrics : undefined,\n };\n\n return result;\n }, [props]);\n\n if (error) {\n let errorNode: ReactNode;\n\n switch (error.constructor) {\n case UnauthorizedError:\n errorNode = <MissingTokenError />;\n break;\n case NotFoundError:\n errorNode = <ServiceNotFoundError />;\n break;\n default:\n errorNode = <ForbiddenError />;\n }\n\n return <BasicCard>{errorNode}</BasicCard>;\n }\n\n if (loading) {\n return (\n <BasicCard>\n <Progress />\n </BasicCard>\n );\n }\n\n return (\n <Card data-testid=\"pagerduty-card\">\n <CardHeader\n className={classes.headerStyle}\n title={\n theme.palette.type === \"dark\" ? (\n <img src={PDWhiteImage} alt=\"PagerDuty\" height=\"25\" />\n ) : (\n <img src={PDGreenImage} alt=\"PagerDuty\" height=\"25\" />\n )\n }\n action={\n !readOnly && props.integrationKey ? (\n <div>\n <TriggerIncidentButton\n compact\n data-testid=\"trigger-incident-button\"\n integrationKey={props.integrationKey}\n entityName={props.name}\n handleRefresh={handleRefresh}\n />\n <OpenServiceButton compact serviceUrl={service!.url} />\n </div>\n ) : (\n <OpenServiceButton compact serviceUrl={service!.url} />\n )\n }\n />\n <Grid item md={12} className={classes.overviewHeaderContainerStyle}>\n <Grid item md={6}>\n <Typography className={classes.overviewHeaderTextStyle}>\n STATUS\n </Typography>\n </Grid>\n <Grid item md={6}>\n <Typography className={classes.overviewHeaderTextStyle}>\n STANDARDS\n </Typography>\n </Grid>\n </Grid>\n\n <Grid item md={12} className={classes.overviewCardsContainerStyle}>\n <Grid item md={6}>\n <StatusCard compact serviceId={service!.id} refreshStatus={refreshStatus} />\n </Grid>\n <Grid item md={6}>\n <ServiceStandardsCard\n compact\n total={\n service?.standards?.score !== undefined\n ? service?.standards?.score?.total\n : undefined\n }\n completed={\n service?.standards?.score !== undefined\n ? service?.standards?.score?.passing\n : undefined\n }\n standards={\n service?.standards !== undefined\n ? service?.standards?.standards\n : undefined\n }\n />\n </Grid>\n </Grid>\n {disableInsights !== true ? (\n <Accordion>\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n aria-controls=\"panel1a-content\"\n id=\"panel1a-header\"\n >\n <span className={classes.headerWithSubheaderContainerStyle}>\n <Typography className={classes.overviewHeaderTextStyle}>\n INSIGHTS\n </Typography>\n <Typography className={classes.subheaderTextStyle}>\n (last 30 days)\n </Typography>\n </span>\n </AccordionSummary>\n <AccordionDetails>\n <Grid\n item\n md={12}\n className={classes.incidentMetricsContainerStyle}\n >\n <Grid item md={4}>\n <InsightsCard\n compact\n count={\n service?.metrics !== undefined && service.metrics.length > 0\n ? service?.metrics[0].total_interruptions\n : undefined\n }\n label=\"interruptions\"\n color={theme.palette.textSubtle}\n />\n </Grid>\n <Grid item md={4}>\n <InsightsCard\n compact\n count={\n service?.metrics !== undefined && service.metrics.length > 0\n ? service?.metrics[0].total_high_urgency_incidents\n : undefined\n }\n label=\"high urgency\"\n color={theme.palette.warning.main}\n />\n </Grid>\n <Grid item md={4}>\n <InsightsCard\n compact\n count={\n service?.metrics !== undefined &&\n service?.metrics?.length > 0\n ? service?.metrics[0].total_incident_count\n : undefined\n }\n label=\"incidents\"\n color={theme.palette.error.main}\n />\n </Grid>\n </Grid>\n </AccordionDetails>\n </Accordion>\n ) : (\n <></>\n )}\n\n {disableOnCall !== true ? (\n <Accordion>\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n aria-controls=\"panel1a-content\"\n id=\"panel1a-header\"\n >\n <Typography className={classes.overviewHeaderTextStyle}>\n ON CALL\n </Typography>\n </AccordionSummary>\n <AccordionDetails className={classes.onCallAccordionDetails}>\n <EscalationPolicy\n data-testid=\"oncall-card\"\n policyId={service!.policyId}\n policyUrl={service!.policyLink}\n policyName={service!.policyName}\n />\n </AccordionDetails>\n </Accordion>\n ) : (\n <></>\n )}\n </Card>\n );\n};\n"],"names":["InsightsCard"],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import React, { useState, useCallback } from 'react';
2
+ import { makeStyles, Button } from '@material-ui/core';
3
+ import { usePagerdutyEntity } from '../../hooks/index.esm.js';
4
+ import { TriggerDialog } from '../TriggerDialog/TriggerDialog.esm.js';
5
+
6
+ const useStyles = makeStyles((theme) => ({
7
+ buttonStyle: {
8
+ backgroundColor: theme.palette.error.main,
9
+ color: theme.palette.error.contrastText,
10
+ "&:hover": {
11
+ backgroundColor: theme.palette.error.dark
12
+ }
13
+ }
14
+ }));
15
+ function TriggerButton(props) {
16
+ var _a;
17
+ const { buttonStyle } = useStyles();
18
+ const { integrationKey, name } = usePagerdutyEntity();
19
+ const [dialogShown, setDialogShown] = useState(false);
20
+ const showDialog = useCallback(() => {
21
+ setDialogShown(true);
22
+ }, [setDialogShown]);
23
+ const hideDialog = useCallback(() => {
24
+ setDialogShown(false);
25
+ }, [setDialogShown]);
26
+ const disabled = !integrationKey;
27
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
28
+ Button,
29
+ {
30
+ onClick: showDialog,
31
+ variant: "contained",
32
+ className: disabled ? "" : buttonStyle,
33
+ disabled
34
+ },
35
+ integrationKey ? (_a = props.children) != null ? _a : "Create new incident" : "Missing integration key"
36
+ ), integrationKey && /* @__PURE__ */ React.createElement(
37
+ TriggerDialog,
38
+ {
39
+ showDialog: dialogShown,
40
+ handleDialog: hideDialog,
41
+ integrationKey,
42
+ serviceName: name
43
+ }
44
+ ));
45
+ }
46
+
47
+ export { TriggerButton };
48
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../../../src/components/TriggerButton/index.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 */\n\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React, { useCallback, ReactNode, useState } from 'react';\nimport { makeStyles, Button } from '@material-ui/core';\nimport { BackstageTheme } from '@backstage/theme';\n\nimport { usePagerdutyEntity } from '../../hooks';\nimport { TriggerDialog } from '../TriggerDialog';\n\nconst useStyles = makeStyles<BackstageTheme>(theme => ({\n buttonStyle: {\n backgroundColor: theme.palette.error.main,\n color: theme.palette.error.contrastText,\n '&:hover': {\n backgroundColor: theme.palette.error.dark,\n },\n },\n}));\n\n/** @public */\nexport function TriggerButton(props: { children?: ReactNode }) {\n const { buttonStyle } = useStyles();\n const { integrationKey, name } = usePagerdutyEntity();\n const [dialogShown, setDialogShown] = useState<boolean>(false);\n\n const showDialog = useCallback(() => {\n setDialogShown(true);\n }, [setDialogShown]);\n const hideDialog = useCallback(() => {\n setDialogShown(false);\n }, [setDialogShown]);\n\n const disabled = !integrationKey;\n return (\n <>\n <Button\n onClick={showDialog}\n variant=\"contained\"\n className={disabled ? '' : buttonStyle}\n disabled={disabled}\n >\n {integrationKey\n ? props.children ?? 'Create new incident'\n : 'Missing integration key'}\n </Button>\n {integrationKey && (\n <TriggerDialog\n showDialog={dialogShown}\n handleDialog={hideDialog}\n integrationKey={integrationKey}\n serviceName={name}\n />\n )}\n </>\n );\n}\n"],"names":[],"mappings":";;;;;AAwBA,MAAM,SAAA,GAAY,WAA2B,CAAU,KAAA,MAAA;AAAA,EACrD,WAAa,EAAA;AAAA,IACX,eAAA,EAAiB,KAAM,CAAA,OAAA,CAAQ,KAAM,CAAA,IAAA;AAAA,IACrC,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,KAAM,CAAA,YAAA;AAAA,IAC3B,SAAW,EAAA;AAAA,MACT,eAAA,EAAiB,KAAM,CAAA,OAAA,CAAQ,KAAM,CAAA,IAAA;AAAA,KACvC;AAAA,GACF;AACF,CAAE,CAAA,CAAA,CAAA;AAGK,SAAS,cAAc,KAAiC,EAAA;AAnC/D,EAAA,IAAA,EAAA,CAAA;AAoCE,EAAM,MAAA,EAAE,WAAY,EAAA,GAAI,SAAU,EAAA,CAAA;AAClC,EAAA,MAAM,EAAE,cAAA,EAAgB,IAAK,EAAA,GAAI,kBAAmB,EAAA,CAAA;AACpD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAkB,KAAK,CAAA,CAAA;AAE7D,EAAM,MAAA,UAAA,GAAa,YAAY,MAAM;AACnC,IAAA,cAAA,CAAe,IAAI,CAAA,CAAA;AAAA,GACrB,EAAG,CAAC,cAAc,CAAC,CAAA,CAAA;AACnB,EAAM,MAAA,UAAA,GAAa,YAAY,MAAM;AACnC,IAAA,cAAA,CAAe,KAAK,CAAA,CAAA;AAAA,GACtB,EAAG,CAAC,cAAc,CAAC,CAAA,CAAA;AAEnB,EAAA,MAAM,WAAW,CAAC,cAAA,CAAA;AAClB,EAAA,uBAEI,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAS,EAAA,UAAA;AAAA,MACT,OAAQ,EAAA,WAAA;AAAA,MACR,SAAA,EAAW,WAAW,EAAK,GAAA,WAAA;AAAA,MAC3B,QAAA;AAAA,KAAA;AAAA,IAEC,cACG,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,QAAN,KAAA,IAAA,GAAA,EAAA,GAAkB,qBAClB,GAAA,yBAAA;AAAA,KAEL,cACC,oBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,UAAY,EAAA,WAAA;AAAA,MACZ,YAAc,EAAA,UAAA;AAAA,MACd,cAAA;AAAA,MACA,WAAa,EAAA,IAAA;AAAA,KAAA;AAAA,GAGnB,CAAA,CAAA;AAEJ;;;;"}
@@ -0,0 +1,94 @@
1
+ import React, { useState, useEffect } from 'react';
2
+ import { Dialog, DialogTitle, DialogContent, Typography, TextField, DialogActions, Button, CircularProgress } from '@material-ui/core';
3
+ import useAsyncFn from 'react-use/lib/useAsyncFn';
4
+ import { pagerDutyApiRef } from '../../api/client.esm.js';
5
+ import { Alert } from '@material-ui/lab';
6
+ import { useApi, alertApiRef, identityApiRef } from '@backstage/core-plugin-api';
7
+ import { parseEntityRef, DEFAULT_NAMESPACE } from '@backstage/catalog-model';
8
+
9
+ const TriggerDialog = ({
10
+ showDialog,
11
+ handleDialog,
12
+ onIncidentCreated,
13
+ serviceName,
14
+ integrationKey
15
+ }) => {
16
+ const alertApi = useApi(alertApiRef);
17
+ const identityApi = useApi(identityApiRef);
18
+ const api = useApi(pagerDutyApiRef);
19
+ const [description, setDescription] = useState("");
20
+ const [{ value, loading, error }, handleTriggerAlarm] = useAsyncFn(
21
+ async (descriptions) => {
22
+ const { userEntityRef } = await identityApi.getBackstageIdentity();
23
+ const { name: userName } = parseEntityRef(userEntityRef, {
24
+ defaultKind: "User",
25
+ defaultNamespace: DEFAULT_NAMESPACE
26
+ });
27
+ return await api.triggerAlarm({
28
+ integrationKey,
29
+ source: window.location.toString(),
30
+ description: descriptions,
31
+ userName
32
+ });
33
+ }
34
+ );
35
+ const descriptionChanged = (event) => {
36
+ setDescription(event.target.value);
37
+ };
38
+ useEffect(() => {
39
+ if (value) {
40
+ (async () => {
41
+ alertApi.post({
42
+ message: `Alarm successfully triggered`
43
+ });
44
+ handleDialog();
45
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
46
+ onIncidentCreated == null ? void 0 : onIncidentCreated();
47
+ })();
48
+ }
49
+ }, [value, alertApi, handleDialog, onIncidentCreated]);
50
+ if (error) {
51
+ alertApi.post({
52
+ message: `Failed to trigger alarm. ${error.message}`,
53
+ severity: "error"
54
+ });
55
+ }
56
+ return /* @__PURE__ */ React.createElement(Dialog, { maxWidth: "md", open: showDialog, onClose: handleDialog, fullWidth: true }, /* @__PURE__ */ React.createElement(DialogTitle, null, "This action will trigger an incident for ", /* @__PURE__ */ React.createElement("strong", null, '"', serviceName, '"'), "."), /* @__PURE__ */ React.createElement(DialogContent, null, /* @__PURE__ */ React.createElement(Alert, { severity: "info" }, /* @__PURE__ */ React.createElement(Typography, { variant: "body1", align: "justify" }, `If the issue you are seeing does not need urgent attention, please get in touch with the responsible team using their preferred communications channel. You can find information about the owner of this entity in the "About" card. If the issue is urgent, please don't hesitate to trigger the alert.`)), /* @__PURE__ */ React.createElement(
57
+ Typography,
58
+ {
59
+ variant: "body1",
60
+ style: { marginTop: "1em" },
61
+ gutterBottom: true,
62
+ align: "justify"
63
+ },
64
+ "Please describe the problem you want to report. Be as descriptive as possible. Your signed in user and a reference to the current page will automatically be amended to the alarm so that the receiver can reach out to you if necessary."
65
+ ), /* @__PURE__ */ React.createElement(
66
+ TextField,
67
+ {
68
+ inputProps: { "data-testid": "trigger-input" },
69
+ id: "description",
70
+ multiline: true,
71
+ fullWidth: true,
72
+ minRows: 4,
73
+ margin: "normal",
74
+ label: "Problem description",
75
+ variant: "outlined",
76
+ onChange: descriptionChanged
77
+ }
78
+ )), /* @__PURE__ */ React.createElement(DialogActions, null, /* @__PURE__ */ React.createElement(
79
+ Button,
80
+ {
81
+ "data-testid": "trigger-button",
82
+ id: "trigger",
83
+ color: "secondary",
84
+ disabled: !description || loading,
85
+ variant: "contained",
86
+ onClick: () => handleTriggerAlarm(description),
87
+ endIcon: loading && /* @__PURE__ */ React.createElement(CircularProgress, { size: 16 })
88
+ },
89
+ "Trigger Incident"
90
+ ), /* @__PURE__ */ React.createElement(Button, { id: "close", color: "primary", onClick: handleDialog }, "Close")));
91
+ };
92
+
93
+ export { TriggerDialog };
94
+ //# sourceMappingURL=TriggerDialog.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerDialog.esm.js","sources":["../../../src/components/TriggerDialog/TriggerDialog.tsx"],"sourcesContent":["/*\n * Copyright 2020 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\n// eslint-disable-next-line @backstage/no-undeclared-imports\nimport React, { useState, useEffect } from 'react';\nimport {\n Dialog,\n DialogTitle,\n TextField,\n DialogActions,\n Button,\n DialogContent,\n Typography,\n CircularProgress,\n} from '@material-ui/core';\nimport useAsyncFn from 'react-use/lib/useAsyncFn';\nimport { pagerDutyApiRef } from '../../api';\nimport { Alert } from '@material-ui/lab';\nimport {\n useApi,\n alertApiRef,\n identityApiRef,\n} from '@backstage/core-plugin-api';\nimport { DEFAULT_NAMESPACE, parseEntityRef } from '@backstage/catalog-model';\n\ntype Props = {\n showDialog: boolean;\n handleDialog: () => void;\n onIncidentCreated?: () => void;\n serviceName: string;\n integrationKey: string;\n};\n\nexport const TriggerDialog = ({\n showDialog,\n handleDialog,\n onIncidentCreated: onIncidentCreated,\n serviceName,\n integrationKey,\n}: Props) => {\n const alertApi = useApi(alertApiRef);\n const identityApi = useApi(identityApiRef);\n const api = useApi(pagerDutyApiRef);\n const [description, setDescription] = useState<string>('');\n\n const [{ value, loading, error }, handleTriggerAlarm] = useAsyncFn(\n async (descriptions: string) => {\n const { userEntityRef } = await identityApi.getBackstageIdentity();\n const { name: userName } = parseEntityRef(userEntityRef, {\n defaultKind: 'User',\n defaultNamespace: DEFAULT_NAMESPACE,\n });\n return await api.triggerAlarm({\n integrationKey: integrationKey as string,\n source: window.location.toString(),\n description: descriptions,\n userName,\n });\n },\n );\n\n const descriptionChanged = (\n event: React.ChangeEvent<HTMLTextAreaElement>,\n ) => {\n setDescription(event.target.value);\n };\n\n useEffect(() => {\n if (value) {\n (async () => {\n alertApi.post({\n message: `Alarm successfully triggered`,\n });\n\n handleDialog();\n\n // The pager duty API isn't always returning the newly created alarm immediately\n await new Promise(resolve => setTimeout(resolve, 1000));\n onIncidentCreated?.();\n })();\n }\n }, [value, alertApi, handleDialog, onIncidentCreated]);\n\n if (error) {\n alertApi.post({\n message: `Failed to trigger alarm. ${error.message}`,\n severity: 'error',\n });\n }\n\n return (\n <Dialog maxWidth=\"md\" open={showDialog} onClose={handleDialog} fullWidth>\n <DialogTitle>\n This action will trigger an incident for <strong>\"{serviceName}\"</strong>.\n </DialogTitle>\n <DialogContent>\n <Alert severity=\"info\">\n <Typography variant=\"body1\" align=\"justify\">\n If the issue you are seeing does not need urgent attention, please\n get in touch with the responsible team using their preferred\n communications channel. You can find information about the owner of\n this entity in the \"About\" card. If the issue is urgent, please\n don't hesitate to trigger the alert.\n </Typography>\n </Alert>\n <Typography\n variant=\"body1\"\n style={{ marginTop: '1em' }}\n gutterBottom\n align=\"justify\"\n >\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 will\n automatically be amended to the alarm so that the receiver can reach\n out to you if necessary.\n </Typography>\n <TextField\n inputProps={{ 'data-testid': 'trigger-input' }}\n id=\"description\"\n multiline\n fullWidth\n minRows={4}\n margin=\"normal\"\n label=\"Problem description\"\n variant=\"outlined\"\n onChange={descriptionChanged}\n />\n </DialogContent>\n <DialogActions>\n <Button\n data-testid=\"trigger-button\"\n id=\"trigger\"\n color=\"secondary\"\n disabled={!description || loading}\n variant=\"contained\"\n onClick={() => handleTriggerAlarm(description)}\n endIcon={loading && <CircularProgress size={16} />}\n >\n Trigger Incident\n </Button>\n <Button id=\"close\" color=\"primary\" onClick={handleDialog}>\n Close\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n"],"names":[],"mappings":";;;;;;;;AA8CO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,UAAA;AAAA,EACA,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AACF,CAAa,KAAA;AACX,EAAM,MAAA,QAAA,GAAW,OAAO,WAAW,CAAA,CAAA;AACnC,EAAM,MAAA,WAAA,GAAc,OAAO,cAAc,CAAA,CAAA;AACzC,EAAM,MAAA,GAAA,GAAM,OAAO,eAAe,CAAA,CAAA;AAClC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAiB,EAAE,CAAA,CAAA;AAEzD,EAAA,MAAM,CAAC,EAAE,KAAA,EAAO,SAAS,KAAM,EAAA,EAAG,kBAAkB,CAAI,GAAA,UAAA;AAAA,IACtD,OAAO,YAAyB,KAAA;AAC9B,MAAA,MAAM,EAAE,aAAA,EAAkB,GAAA,MAAM,YAAY,oBAAqB,EAAA,CAAA;AACjE,MAAA,MAAM,EAAE,IAAA,EAAM,QAAS,EAAA,GAAI,eAAe,aAAe,EAAA;AAAA,QACvD,WAAa,EAAA,MAAA;AAAA,QACb,gBAAkB,EAAA,iBAAA;AAAA,OACnB,CAAA,CAAA;AACD,MAAO,OAAA,MAAM,IAAI,YAAa,CAAA;AAAA,QAC5B,cAAA;AAAA,QACA,MAAA,EAAQ,MAAO,CAAA,QAAA,CAAS,QAAS,EAAA;AAAA,QACjC,WAAa,EAAA,YAAA;AAAA,QACb,QAAA;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,kBAAA,GAAqB,CACzB,KACG,KAAA;AACH,IAAe,cAAA,CAAA,KAAA,CAAM,OAAO,KAAK,CAAA,CAAA;AAAA,GACnC,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,KAAO,EAAA;AACT,MAAA,CAAC,YAAY;AACX,QAAA,QAAA,CAAS,IAAK,CAAA;AAAA,UACZ,OAAS,EAAA,CAAA,4BAAA,CAAA;AAAA,SACV,CAAA,CAAA;AAED,QAAa,YAAA,EAAA,CAAA;AAGb,QAAA,MAAM,IAAI,OAAQ,CAAA,CAAA,OAAA,KAAW,UAAW,CAAA,OAAA,EAAS,GAAI,CAAC,CAAA,CAAA;AACtD,QAAA,iBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,iBAAA,EAAA,CAAA;AAAA,OACC,GAAA,CAAA;AAAA,KACL;AAAA,KACC,CAAC,KAAA,EAAO,QAAU,EAAA,YAAA,EAAc,iBAAiB,CAAC,CAAA,CAAA;AAErD,EAAA,IAAI,KAAO,EAAA;AACT,IAAA,QAAA,CAAS,IAAK,CAAA;AAAA,MACZ,OAAA,EAAS,CAA4B,yBAAA,EAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAAA,MAClD,QAAU,EAAA,OAAA;AAAA,KACX,CAAA,CAAA;AAAA,GACH;AAEA,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,QAAS,EAAA,IAAA,EAAK,MAAM,UAAY,EAAA,OAAA,EAAS,YAAc,EAAA,SAAA,EAAS,wBACrE,KAAA,CAAA,aAAA,CAAA,WAAA,EAAA,IAAA,EAAY,2CAC8B,kBAAA,KAAA,CAAA,aAAA,CAAC,gBAAO,GAAE,EAAA,WAAA,EAAY,GAAC,CAAA,EAAS,GAC3E,CACA,kBAAA,KAAA,CAAA,aAAA,CAAC,aACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,SAAM,QAAS,EAAA,MAAA,EAAA,kBACb,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,SAAQ,OAAQ,EAAA,KAAA,EAAM,SAAU,EAAA,EAAA,CAAA,wSAAA,CAM5C,CACF,CACA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,OAAQ,EAAA,OAAA;AAAA,MACR,KAAA,EAAO,EAAE,SAAA,EAAW,KAAM,EAAA;AAAA,MAC1B,YAAY,EAAA,IAAA;AAAA,MACZ,KAAM,EAAA,SAAA;AAAA,KAAA;AAAA,IACP,2OAAA;AAAA,GAMD,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,UAAA,EAAY,EAAE,aAAA,EAAe,eAAgB,EAAA;AAAA,MAC7C,EAAG,EAAA,aAAA;AAAA,MACH,SAAS,EAAA,IAAA;AAAA,MACT,SAAS,EAAA,IAAA;AAAA,MACT,OAAS,EAAA,CAAA;AAAA,MACT,MAAO,EAAA,QAAA;AAAA,MACP,KAAM,EAAA,qBAAA;AAAA,MACN,OAAQ,EAAA,UAAA;AAAA,MACR,QAAU,EAAA,kBAAA;AAAA,KAAA;AAAA,GAEd,CACA,kBAAA,KAAA,CAAA,aAAA,CAAC,aACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,aAAY,EAAA,gBAAA;AAAA,MACZ,EAAG,EAAA,SAAA;AAAA,MACH,KAAM,EAAA,WAAA;AAAA,MACN,QAAA,EAAU,CAAC,WAAe,IAAA,OAAA;AAAA,MAC1B,OAAQ,EAAA,WAAA;AAAA,MACR,OAAA,EAAS,MAAM,kBAAA,CAAmB,WAAW,CAAA;AAAA,MAC7C,OAAS,EAAA,OAAA,oBAAY,KAAA,CAAA,aAAA,CAAA,gBAAA,EAAA,EAAiB,MAAM,EAAI,EAAA,CAAA;AAAA,KAAA;AAAA,IACjD,kBAAA;AAAA,GAED,kBACC,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAO,EAAG,EAAA,OAAA,EAAQ,KAAM,EAAA,SAAA,EAAU,OAAS,EAAA,YAAA,EAAA,EAAc,OAE1D,CACF,CACF,CAAA,CAAA;AAEJ;;;;"}
@@ -0,0 +1,5 @@
1
+ const PAGERDUTY_INTEGRATION_KEY = "pagerduty.com/integration-key";
2
+ const PAGERDUTY_SERVICE_ID = "pagerduty.com/service-id";
3
+
4
+ export { PAGERDUTY_INTEGRATION_KEY, PAGERDUTY_SERVICE_ID };
5
+ //# sourceMappingURL=constants.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.esm.js","sources":["../../src/components/constants.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 */\nexport const PAGERDUTY_INTEGRATION_KEY = 'pagerduty.com/integration-key';\nexport const PAGERDUTY_SERVICE_ID = 'pagerduty.com/service-id';\n"],"names":[],"mappings":"AAeO,MAAM,yBAA4B,GAAA,gCAAA;AAClC,MAAM,oBAAuB,GAAA;;;;"}
@@ -0,0 +1,13 @@
1
+ import { PAGERDUTY_INTEGRATION_KEY, PAGERDUTY_SERVICE_ID } from './constants.esm.js';
2
+
3
+ function getPagerDutyEntity(entity) {
4
+ const {
5
+ [PAGERDUTY_INTEGRATION_KEY]: integrationKey,
6
+ [PAGERDUTY_SERVICE_ID]: serviceId
7
+ } = entity.metadata.annotations || {};
8
+ const name = entity.metadata.name;
9
+ return { integrationKey, serviceId, name };
10
+ }
11
+
12
+ export { getPagerDutyEntity };
13
+ //# sourceMappingURL=pagerDutyEntity.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagerDutyEntity.esm.js","sources":["../../src/components/pagerDutyEntity.ts"],"sourcesContent":["/*\n * Copyright 2020 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 { Entity } from '@backstage/catalog-model';\nimport { PagerDutyEntity } from '../types';\nimport { PAGERDUTY_INTEGRATION_KEY, PAGERDUTY_SERVICE_ID } from './constants';\n\nexport function getPagerDutyEntity(entity: Entity): PagerDutyEntity {\n const {\n [PAGERDUTY_INTEGRATION_KEY]: integrationKey,\n [PAGERDUTY_SERVICE_ID]: serviceId,\n } = entity.metadata.annotations || ({} as Record<string, string>);\n const name = entity.metadata.name;\n\n return { integrationKey, serviceId, name };\n}\n"],"names":[],"mappings":";;AAoBO,SAAS,mBAAmB,MAAiC,EAAA;AAClE,EAAM,MAAA;AAAA,IACJ,CAAC,yBAAyB,GAAG,cAAA;AAAA,IAC7B,CAAC,oBAAoB,GAAG,SAAA;AAAA,GACtB,GAAA,MAAA,CAAO,QAAS,CAAA,WAAA,IAAgB,EAAC,CAAA;AACrC,EAAM,MAAA,IAAA,GAAO,OAAO,QAAS,CAAA,IAAA,CAAA;AAE7B,EAAO,OAAA,EAAE,cAAgB,EAAA,SAAA,EAAW,IAAK,EAAA,CAAA;AAC3C;;;;"}
@@ -0,0 +1,10 @@
1
+ import { EntityPagerDutyCard } from './components/EntityPagerDutyCard/index.esm.js';
2
+ import 'react';
3
+ import '@backstage/plugin-catalog-react';
4
+ import './components/PagerDutySmallCard/index.esm.js';
5
+ import './components/TriggerButton/index.esm.js';
6
+
7
+ const PagerDutyCard = EntityPagerDutyCard;
8
+
9
+ export { PagerDutyCard };
10
+ //# sourceMappingURL=deprecated.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deprecated.esm.js","sources":["../src/deprecated.ts"],"sourcesContent":["/*\n * Copyright 2023 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 { EntityPagerDutyCardProps, EntityPagerDutyCard } from './components';\n\n/**\n * @public\n * @deprecated Please use EntityPagerDutyCard\n */\nexport const PagerDutyCard = EntityPagerDutyCard;\n\n/**\n * @public\n * @deprecated Please use EntityPagerDutyCardProps\n */\nexport type PagerDutyCardProps = EntityPagerDutyCardProps;\n"],"names":[],"mappings":";;;;;;AAsBO,MAAM,aAAgB,GAAA;;;;"}
@@ -0,0 +1,10 @@
1
+ import { useEntity } from '@backstage/plugin-catalog-react';
2
+ import { getPagerDutyEntity } from '../components/pagerDutyEntity.esm.js';
3
+
4
+ function usePagerdutyEntity() {
5
+ const { entity } = useEntity();
6
+ return getPagerDutyEntity(entity);
7
+ }
8
+
9
+ export { usePagerdutyEntity };
10
+ //# sourceMappingURL=index.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.esm.js","sources":["../../src/hooks/index.ts"],"sourcesContent":["/*\n * Copyright 2020 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 { useEntity } from '@backstage/plugin-catalog-react';\nimport { PagerDutyEntity } from '../types';\nimport { getPagerDutyEntity } from '../components/pagerDutyEntity';\n\nexport function usePagerdutyEntity(): PagerDutyEntity {\n const { entity } = useEntity();\n\n return getPagerDutyEntity(entity);\n}\n"],"names":[],"mappings":";;;AAoBO,SAAS,kBAAsC,GAAA;AACpD,EAAM,MAAA,EAAE,MAAO,EAAA,GAAI,SAAU,EAAA,CAAA;AAE7B,EAAA,OAAO,mBAAmB,MAAM,CAAA,CAAA;AAClC;;;;"}
package/dist/index.d.ts CHANGED
@@ -1,11 +1,10 @@
1
- /// <reference types="react" />
2
1
  import * as _backstage_plugin_home_react from '@backstage/plugin-home-react';
3
2
  import { Entity } from '@backstage/catalog-model';
4
- import * as react from 'react';
5
- import react__default, { ReactNode } from 'react';
3
+ import * as React from 'react';
4
+ import React__default, { ReactNode } from 'react';
6
5
  import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
7
6
  import { DiscoveryApi, FetchApi, ConfigApi } from '@backstage/core-plugin-api';
8
- import { PagerDutyEntityMappingResponse, PagerDutyServiceResponse, PagerDutyIncidentsResponse, PagerDutyChangeEventsResponse, PagerDutyServiceStandardsResponse, PagerDutyServiceMetricsResponse, PagerDutyUser } from '@pagerduty/backstage-plugin-common';
7
+ import { PagerDutyServiceResponse, PagerDutyIncidentsResponse, PagerDutyChangeEventsResponse, PagerDutyServiceStandardsResponse, PagerDutyServiceMetricsResponse, PagerDutyUser } from '@pagerduty/backstage-plugin-common';
9
8
 
10
9
  /** @public */
11
10
  declare const isPluginApplicableToEntity$1: (entity: Entity) => boolean;
@@ -40,18 +39,16 @@ type HomePagePagerDutyCardProps = PagerDutyEntity & {
40
39
  /** @public */
41
40
  declare const pagerDutyPlugin: _backstage_core_plugin_api.BackstagePlugin<{}, {}, {}>;
42
41
  /** @public */
43
- declare const PagerDutyPage: () => react.JSX.Element;
42
+ declare const EntityPagerDutyCard: (props: EntityPagerDutyCardProps) => React.JSX.Element;
44
43
  /** @public */
45
- declare const EntityPagerDutyCard: (props: EntityPagerDutyCardProps) => react.JSX.Element;
44
+ declare const EntityPagerDutySmallCard: (props: EntityPagerDutySmallCardProps) => React.JSX.Element;
46
45
  /** @public */
47
- declare const EntityPagerDutySmallCard: (props: EntityPagerDutySmallCardProps) => react.JSX.Element;
48
- /** @public */
49
- declare const HomePagePagerDutyCard: (props: _backstage_plugin_home_react.CardExtensionProps<HomePagePagerDutyCardProps>) => react.JSX.Element;
46
+ declare const HomePagePagerDutyCard: (props: _backstage_plugin_home_react.CardExtensionProps<HomePagePagerDutyCardProps>) => React.JSX.Element;
50
47
 
51
48
  /** @public */
52
49
  declare function TriggerButton(props: {
53
50
  children?: ReactNode;
54
- }): react__default.JSX.Element;
51
+ }): React__default.JSX.Element;
55
52
 
56
53
  /** @public */
57
54
  type PagerDutyTriggerAlarmRequest = {
@@ -62,16 +59,6 @@ type PagerDutyTriggerAlarmRequest = {
62
59
  };
63
60
  /** @public */
64
61
  interface PagerDutyApi {
65
- /**
66
- * Fetches all entity mappings.
67
- *
68
- */
69
- getEntityMappings(): Promise<PagerDutyEntityMappingResponse>;
70
- /**
71
- * Stores the service mapping in the database.
72
- *
73
- */
74
- storeServiceMapping(serviceId: string, entityId: string): Promise<Response>;
75
62
  /**
76
63
  * Fetches the service for the provided pager duty Entity.
77
64
  *
@@ -138,8 +125,6 @@ declare class PagerDutyClient implements PagerDutyApi {
138
125
  static fromConfig(configApi: ConfigApi, dependencies: PagerDutyClientApiDependencies): PagerDutyClient;
139
126
  constructor(config: PagerDutyClientApiConfig);
140
127
  getServiceByPagerDutyEntity(pagerDutyEntity: PagerDutyEntity): Promise<PagerDutyServiceResponse>;
141
- getEntityMappings(): Promise<PagerDutyEntityMappingResponse>;
142
- storeServiceMapping(serviceId: string, backstageEntityId: string): Promise<Response>;
143
128
  getServiceByEntity(entity: Entity): Promise<PagerDutyServiceResponse>;
144
129
  getServiceById(serviceId: string): Promise<PagerDutyServiceResponse>;
145
130
  getIncidentsByServiceId(serviceId: string): Promise<PagerDutyIncidentsResponse>;
@@ -156,11 +141,11 @@ declare class PagerDutyClient implements PagerDutyApi {
156
141
  * @public
157
142
  * @deprecated Please use EntityPagerDutyCard
158
143
  */
159
- declare const PagerDutyCard: (props: EntityPagerDutyCardProps) => react.JSX.Element;
144
+ declare const PagerDutyCard: (props: EntityPagerDutyCardProps) => React.JSX.Element;
160
145
  /**
161
146
  * @public
162
147
  * @deprecated Please use EntityPagerDutyCardProps
163
148
  */
164
149
  type PagerDutyCardProps = EntityPagerDutyCardProps;
165
150
 
166
- export { EntityPagerDutyCard, EntityPagerDutyCardProps, EntityPagerDutySmallCard, EntityPagerDutySmallCardProps, HomePagePagerDutyCard, HomePagePagerDutyCardProps, PagerDutyApi, PagerDutyCard, PagerDutyCardProps, PagerDutyClient, PagerDutyClientApiConfig, PagerDutyClientApiDependencies, PagerDutyEntity, PagerDutyPage, PagerDutyTriggerAlarmRequest, TriggerButton, UnauthorizedError, isPluginApplicableToEntity as isPagerDutyAvailable, isPluginApplicableToEntity$1 as isPagerDutySmallCardAvailable, isPluginApplicableToEntity, pagerDutyApiRef, pagerDutyPlugin, pagerDutyPlugin as plugin };
151
+ export { EntityPagerDutyCard, type EntityPagerDutyCardProps, EntityPagerDutySmallCard, type EntityPagerDutySmallCardProps, HomePagePagerDutyCard, type HomePagePagerDutyCardProps, type PagerDutyApi, PagerDutyCard, type PagerDutyCardProps, PagerDutyClient, type PagerDutyClientApiConfig, type PagerDutyClientApiDependencies, type PagerDutyEntity, type PagerDutyTriggerAlarmRequest, TriggerButton, UnauthorizedError, isPluginApplicableToEntity as isPagerDutyAvailable, isPluginApplicableToEntity$1 as isPagerDutySmallCardAvailable, isPluginApplicableToEntity, pagerDutyApiRef, pagerDutyPlugin, pagerDutyPlugin as plugin };
package/dist/index.esm.js CHANGED
@@ -1,31 +1,7 @@
1
- export { E as EntityPagerDutyCard, c as EntityPagerDutySmallCard, H as HomePagePagerDutyCard, f as PagerDutyCard, e as PagerDutyClient, b as PagerDutyPage, T as TriggerButton, U as UnauthorizedError, i as isPagerDutyAvailable, d as isPagerDutySmallCardAvailable, i as isPluginApplicableToEntity, p as pagerDutyApiRef, a as pagerDutyPlugin, a as plugin } from './esm/index-84a03966.esm.js';
2
- import '@backstage/core-plugin-api';
3
- import '@backstage/errors';
4
- import '@backstage/plugin-home-react';
5
- import 'react';
6
- import '@backstage/plugin-catalog-react';
7
- import '@material-ui/core';
8
- import 'luxon';
9
- import '@material-ui/icons/OpenInBrowser';
10
- import '@backstage/core-components';
11
- import './assets/emptystate.svg';
12
- import 'react-use/lib/useAsyncFn';
13
- import '@material-ui/lab';
14
- import './assets/forbiddenstate.svg';
15
- import '@material-ui/core/Avatar';
16
- import '@material-ui/icons/Notifications';
17
- import 'react-use/lib/useAsync';
18
- import '@material-ui/icons/Link';
19
- import './assets/PD-Green.svg';
20
- import './assets/PD-White.svg';
21
- import 'validate-color';
22
- import '@material-ui/icons/Info';
23
- import '@material-ui/icons/CheckCircle';
24
- import '@material-ui/icons/RadioButtonUnchecked';
25
- import '@material-ui/core/styles';
26
- import 'react-use';
27
- import '@material-ui/lab/Alert/Alert';
28
- import '@backstage/catalog-model';
29
- import '@material-ui/icons/AddAlert';
30
- import '@material-ui/icons/ExpandMore';
1
+ export { EntityPagerDutyCard, EntityPagerDutySmallCard, HomePagePagerDutyCard, pagerDutyPlugin, pagerDutyPlugin as plugin } from './plugin.esm.js';
2
+ export { isPluginApplicableToEntity as isPagerDutyAvailable, isPluginApplicableToEntity } from './components/EntityPagerDutyCard/index.esm.js';
3
+ export { isPluginApplicableToEntity as isPagerDutySmallCardAvailable } from './components/EntityPagerDutySmallCard/index.esm.js';
4
+ export { TriggerButton } from './components/TriggerButton/index.esm.js';
5
+ export { PagerDutyClient, UnauthorizedError, pagerDutyApiRef } from './api/client.esm.js';
6
+ export { PagerDutyCard } from './deprecated.esm.js';
31
7
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}