@pagerduty/backstage-plugin 0.15.5 → 0.15.6
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/config.d.ts +1 -1
- package/dist/api/client.esm.js.map +1 -1
- package/dist/components/ChangeEvents/ChangeEventEmptyState.esm.js +12 -9
- package/dist/components/ChangeEvents/ChangeEventEmptyState.esm.js.map +1 -1
- package/dist/components/ChangeEvents/ChangeEventForbiddenState.esm.js +12 -9
- package/dist/components/ChangeEvents/ChangeEventForbiddenState.esm.js.map +1 -1
- package/dist/components/ChangeEvents/ChangeEventListItem.esm.js +37 -25
- package/dist/components/ChangeEvents/ChangeEventListItem.esm.js.map +1 -1
- package/dist/components/ChangeEvents/ChangeEvents.esm.js +13 -9
- package/dist/components/ChangeEvents/ChangeEvents.esm.js.map +1 -1
- package/dist/components/EntityPagerDutyCard/index.esm.js +2 -2
- package/dist/components/EntityPagerDutyCard/index.esm.js.map +1 -1
- package/dist/components/EntityPagerDutySmallCard/index.esm.js +2 -2
- package/dist/components/EntityPagerDutySmallCard/index.esm.js.map +1 -1
- package/dist/components/Errors/ForbiddenError.esm.js +6 -6
- package/dist/components/Errors/ForbiddenError.esm.js.map +1 -1
- package/dist/components/Errors/MissingTokenError.esm.js +6 -6
- package/dist/components/Errors/MissingTokenError.esm.js.map +1 -1
- package/dist/components/Errors/ServiceNotFoundError.esm.js +6 -6
- package/dist/components/Errors/ServiceNotFoundError.esm.js.map +1 -1
- package/dist/components/Escalation/EscalationPolicy.esm.js +21 -18
- package/dist/components/Escalation/EscalationPolicy.esm.js.map +1 -1
- package/dist/components/Escalation/EscalationUser.esm.js +48 -39
- package/dist/components/Escalation/EscalationUser.esm.js.map +1 -1
- package/dist/components/Escalation/EscalationUsersEmptyState.esm.js +5 -2
- package/dist/components/Escalation/EscalationUsersEmptyState.esm.js.map +1 -1
- package/dist/components/Escalation/EscalationUsersForbiddenState.esm.js +5 -2
- package/dist/components/Escalation/EscalationUsersForbiddenState.esm.js.map +1 -1
- package/dist/components/HomePagePagerDutyCard/Content.esm.js +2 -2
- package/dist/components/HomePagePagerDutyCard/Content.esm.js.map +1 -1
- package/dist/components/Icons/index.esm.js +2 -2
- package/dist/components/Icons/index.esm.js.map +1 -1
- package/dist/components/Incident/IncidentEmptyState.esm.js +15 -13
- package/dist/components/Incident/IncidentEmptyState.esm.js.map +1 -1
- package/dist/components/Incident/IncidentForbiddenState.esm.js +12 -9
- package/dist/components/Incident/IncidentForbiddenState.esm.js.map +1 -1
- package/dist/components/Incident/IncidentListItem.esm.js +53 -40
- package/dist/components/Incident/IncidentListItem.esm.js.map +1 -1
- package/dist/components/Incident/Incidents.esm.js +10 -6
- package/dist/components/Incident/Incidents.esm.js.map +1 -1
- package/dist/components/PagerDutyCard/index.esm.js +115 -81
- package/dist/components/PagerDutyCard/index.esm.js.map +1 -1
- package/dist/components/PagerDutyCardCommon/InsightsCard.esm.js +8 -2
- package/dist/components/PagerDutyCardCommon/InsightsCard.esm.js.map +1 -1
- package/dist/components/PagerDutyCardCommon/OpenServiceButton.esm.js +9 -6
- package/dist/components/PagerDutyCardCommon/OpenServiceButton.esm.js.map +1 -1
- package/dist/components/PagerDutyCardCommon/ServiceStandardsCard.esm.js +34 -16
- package/dist/components/PagerDutyCardCommon/ServiceStandardsCard.esm.js.map +1 -1
- package/dist/components/PagerDutyCardCommon/StatusCard.esm.js +10 -6
- package/dist/components/PagerDutyCardCommon/StatusCard.esm.js.map +1 -1
- package/dist/components/PagerDutyCardCommon/TriggerIncidentButton.esm.js +27 -20
- package/dist/components/PagerDutyCardCommon/TriggerIncidentButton.esm.js.map +1 -1
- package/dist/components/PagerDutyPage/MappingTable.esm.js +39 -31
- package/dist/components/PagerDutyPage/MappingTable.esm.js.map +1 -1
- package/dist/components/PagerDutyPage/ServiceMappingComponent.esm.js +3 -2
- package/dist/components/PagerDutyPage/ServiceMappingComponent.esm.js.map +1 -1
- package/dist/components/PagerDutyPage/index.esm.js +85 -50
- package/dist/components/PagerDutyPage/index.esm.js.map +1 -1
- package/dist/components/PagerDutySmallCard/index.esm.js +116 -89
- package/dist/components/PagerDutySmallCard/index.esm.js.map +1 -1
- package/dist/components/TriggerButton/index.esm.js +23 -19
- package/dist/components/TriggerButton/index.esm.js.map +1 -1
- package/dist/components/TriggerDialog/TriggerDialog.esm.js +56 -36
- package/dist/components/TriggerDialog/TriggerDialog.esm.js.map +1 -1
- package/dist/components/constants.esm.js.map +1 -1
- package/dist/components/pagerDutyEntity.esm.js +1 -1
- package/dist/components/pagerDutyEntity.esm.js.map +1 -1
- package/dist/deprecated.esm.js +1 -2
- package/dist/deprecated.esm.js.map +1 -1
- package/dist/hooks/index.esm.js.map +1 -1
- package/dist/index.d.ts +12 -12
- package/dist/plugin.esm.js +2 -2
- package/dist/plugin.esm.js.map +1 -1
- package/package.json +19 -28
- package/CHANGELOG.md +0 -1390
- package/LICENSE +0 -201
- package/README.md +0 -51
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IncidentListItem.esm.js","sources":["../../../src/components/Incident/IncidentListItem.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
|
|
1
|
+
{"version":3,"file":"IncidentListItem.esm.js","sources":["../../../src/components/Incident/IncidentListItem.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 {\n ListItem,\n ListItemSecondaryAction,\n Tooltip,\n ListItemText,\n makeStyles,\n IconButton,\n Typography,\n Chip,\n} from '@material-ui/core';\nimport { DateTime, Duration } from 'luxon';\nimport { PagerDutyIncident } from 'common';\nimport OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser';\nimport { BackstageTheme } from '@backstage/theme';\nimport { Link } from '@backstage/core-components';\n\nconst useStyles = makeStyles<BackstageTheme>((theme) => ({\n denseListIcon: {\n marginRight: 0,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n listItemPrimary: {\n fontWeight: \"bold\",\n },\n warning: {\n borderColor: theme.palette.warning.main,\n color: \"#fff\",\n backgroundColor: theme.palette.warning.main,\n boxShadow: \"0 4px 4px 0 rgba(0,0,0,0.2)\",\n textTransform: \"uppercase\",\n \"& *\": {\n color: \"#fff\",\n },\n },\n error: {\n borderColor: theme.palette.error.main,\n color: \"#fff\",\n backgroundColor: theme.palette.error.main,\n boxShadow: \"0 4px 4px 0 rgba(0,0,0,0.2)\",\n textTransform: \"uppercase\",\n \"& *\": {\n color: \"#fff\",\n },\n },\n lowUrgency: {\n borderColor: theme.palette.warning.main,\n color: theme.palette.warning.main,\n backgroundColor: \"#fff\",\n boxShadow: \"0 4px 4px 0 rgba(0,0,0,0.2)\",\n textTransform: \"uppercase\",\n \"& *\": {\n color: theme.palette.warning.main,\n },\n },\n highUrgency: {\n borderColor: theme.palette.error.main,\n color: theme.palette.error.main,\n backgroundColor: \"#fff\",\n boxShadow: \"0 4px 4px 0 rgba(0,0,0,0.2)\",\n textTransform: \"uppercase\",\n \"& *\": {\n color: theme.palette.error.main,\n },\n },\n textContainer: {\n display: \"flex\",\n alignItems: \"baseline\",\n },\n smallIconStyle: {\n color: theme.palette.text.primary,\n marginRight: \"-20px\",\n },\n}));\n\ntype Props = {\n incident: PagerDutyIncident;\n};\n\nexport const IncidentListItem = ({ incident }: Props) => {\n const classes = useStyles();\n const duration =\n new Date().getTime() - new Date(incident.created_at).getTime();\n const createdAt = DateTime.local()\n .minus(Duration.fromMillis(duration))\n .toRelative({ locale: 'en' });\n const user = incident.assignments[0]?.assignee;\n\n return (\n <ListItem dense key={incident.id}>\n <ListItemText\n primary={\n <div className={classes.textContainer}>\n <Chip\n data-testid={`chip-${incident.status}`}\n label={incident.status}\n size=\"small\"\n variant=\"outlined\"\n className={\n incident.status === \"triggered\"\n ? classes.error\n : classes.warning\n }\n />\n <Chip\n data-testid={`chip-${incident.urgency}`}\n label={`${incident.urgency} urgency`}\n size=\"small\"\n variant=\"outlined\"\n className={\n incident.urgency === \"high\"\n ? classes.highUrgency\n : classes.lowUrgency\n }\n />\n {incident.title}\n </div>\n }\n primaryTypographyProps={{\n variant: \"body1\",\n className: classes.listItemPrimary,\n }}\n secondary={\n <Typography noWrap variant=\"body2\" color=\"textSecondary\">\n Created {createdAt} and assigned to{\" \"}\n <Link to={user?.html_url ?? \"#\"}>{user?.summary ?? \"nobody\"}</Link>\n </Typography>\n }\n />\n <ListItemSecondaryAction>\n <Tooltip title=\"View in PagerDuty\" placement=\"top\">\n <IconButton\n href={incident.html_url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={classes.smallIconStyle}\n >\n <OpenInBrowserIcon />\n </IconButton>\n </Tooltip>\n </ListItemSecondaryAction>\n </ListItem>\n );\n};\n"],"names":[],"mappings":";;;;;;AAgCA,MAAM,SAAA,GAAY,UAAA,CAA2B,CAAC,KAAA,MAAW;AAAA,EACvD,aAAA,EAAe;AAAA,IACb,WAAA,EAAa,CAAA;AAAA,IACb,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB;AAAA,GAClB;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,UAAA,EAAY;AAAA,GACd;AAAA,EACA,OAAA,EAAS;AAAA,IACP,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA;AAAA,IACnC,KAAA,EAAO,MAAA;AAAA,IACP,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA;AAAA,IACvC,SAAA,EAAW,6BAAA;AAAA,IACX,aAAA,EAAe,WAAA;AAAA,IACf,KAAA,EAAO;AAAA,MACL,KAAA,EAAO;AAAA;AACT,GACF;AAAA,EACA,KAAA,EAAO;AAAA,IACL,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,IAAA;AAAA,IACjC,KAAA,EAAO,MAAA;AAAA,IACP,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,IAAA;AAAA,IACrC,SAAA,EAAW,6BAAA;AAAA,IACX,aAAA,EAAe,WAAA;AAAA,IACf,KAAA,EAAO;AAAA,MACL,KAAA,EAAO;AAAA;AACT,GACF;AAAA,EACA,UAAA,EAAY;AAAA,IACV,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA;AAAA,IACnC,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA;AAAA,IAC7B,eAAA,EAAiB,MAAA;AAAA,IACjB,SAAA,EAAW,6BAAA;AAAA,IACX,aAAA,EAAe,WAAA;AAAA,IACf,KAAA,EAAO;AAAA,MACL,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ;AAAA;AAC/B,GACF;AAAA,EACA,WAAA,EAAa;AAAA,IACX,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,IAAA;AAAA,IACjC,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,IAAA;AAAA,IAC3B,eAAA,EAAiB,MAAA;AAAA,IACjB,SAAA,EAAW,6BAAA;AAAA,IACX,aAAA,EAAe,WAAA;AAAA,IACf,KAAA,EAAO;AAAA,MACL,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM;AAAA;AAC7B,GACF;AAAA,EACA,aAAA,EAAe;AAAA,IACb,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAA;AAAA,IAC1B,WAAA,EAAa;AAAA;AAEjB,CAAA,CAAE,CAAA;AAMK,MAAM,gBAAA,GAAmB,CAAC,EAAE,QAAA,EAAS,KAAa;AACvD,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM,QAAA,GAAA,iBACJ,IAAI,IAAA,EAAK,EAAE,OAAA,EAAQ,GAAI,IAAI,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA,CAAE,OAAA,EAAQ;AAC/D,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,KAAA,EAAM,CAC9B,MAAM,QAAA,CAAS,UAAA,CAAW,QAAQ,CAAC,CAAA,CACnC,UAAA,CAAW,EAAE,MAAA,EAAQ,MAAM,CAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,WAAA,CAAY,CAAC,CAAA,EAAG,QAAA;AAEtC,EAAA,uBACE,IAAA,CAAC,QAAA,EAAA,EAAS,KAAA,EAAK,IAAA,EACb,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,OAAA,kBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,QAAQ,aAAA,EACtB,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,aAAA,EAAa,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,CAAA;AAAA,cACpC,OAAO,QAAA,CAAS,MAAA;AAAA,cAChB,IAAA,EAAK,OAAA;AAAA,cACL,OAAA,EAAQ,UAAA;AAAA,cACR,WACE,QAAA,CAAS,MAAA,KAAW,WAAA,GAChB,OAAA,CAAQ,QACR,OAAA,CAAQ;AAAA;AAAA,WAEhB;AAAA,0BACA,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,aAAA,EAAa,CAAA,KAAA,EAAQ,QAAA,CAAS,OAAO,CAAA,CAAA;AAAA,cACrC,KAAA,EAAO,CAAA,EAAG,QAAA,CAAS,OAAO,CAAA,QAAA,CAAA;AAAA,cAC1B,IAAA,EAAK,OAAA;AAAA,cACL,OAAA,EAAQ,UAAA;AAAA,cACR,WACE,QAAA,CAAS,OAAA,KAAY,MAAA,GACjB,OAAA,CAAQ,cACR,OAAA,CAAQ;AAAA;AAAA,WAEhB;AAAA,UACC,QAAA,CAAS;AAAA,SAAA,EACZ,CAAA;AAAA,QAEF,sBAAA,EAAwB;AAAA,UACtB,OAAA,EAAS,OAAA;AAAA,UACT,WAAW,OAAA,CAAQ;AAAA,SACrB;AAAA,QACA,SAAA,uBACG,UAAA,EAAA,EAAW,MAAA,EAAM,MAAC,OAAA,EAAQ,OAAA,EAAQ,OAAM,eAAA,EAAgB,QAAA,EAAA;AAAA,UAAA,UAAA;AAAA,UAC9C,SAAA;AAAA,UAAU,kBAAA;AAAA,UAAiB,GAAA;AAAA,0BACpC,GAAA,CAAC,QAAK,EAAA,EAAI,IAAA,EAAM,YAAY,GAAA,EAAM,QAAA,EAAA,IAAA,EAAM,WAAW,QAAA,EAAS;AAAA,SAAA,EAC9D;AAAA;AAAA,KAEJ;AAAA,wBACC,uBAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,WAAQ,KAAA,EAAM,mBAAA,EAAoB,WAAU,KAAA,EAC3C,QAAA,kBAAA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,MAAM,QAAA,CAAS,QAAA;AAAA,QACf,MAAA,EAAO,QAAA;AAAA,QACP,GAAA,EAAI,qBAAA;AAAA,QACJ,WAAW,OAAA,CAAQ,cAAA;AAAA,QAEnB,8BAAC,iBAAA,EAAA,EAAkB;AAAA;AAAA,OAEvB,CAAA,EACF;AAAA,GAAA,EAAA,EAnDmB,SAAS,EAoD9B,CAAA;AAEJ;;;;"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { useEffect } from 'react';
|
|
2
3
|
import { List } from '@material-ui/core';
|
|
3
4
|
import { IncidentListItem } from './IncidentListItem.esm.js';
|
|
4
5
|
import { IncidentsEmptyState } from './IncidentEmptyState.esm.js';
|
|
@@ -25,17 +26,20 @@ const Incidents = ({ serviceId, account, refreshIncidents }) => {
|
|
|
25
26
|
}, [refreshIncidents, getIncidents]);
|
|
26
27
|
if (error) {
|
|
27
28
|
if (error.message.includes("Forbidden")) {
|
|
28
|
-
return /* @__PURE__ */
|
|
29
|
+
return /* @__PURE__ */ jsx(IncidentForbiddenState, {});
|
|
29
30
|
}
|
|
30
|
-
return /* @__PURE__ */
|
|
31
|
+
return /* @__PURE__ */ jsxs(Alert, { severity: "error", children: [
|
|
32
|
+
"Error encountered while fetching information. ",
|
|
33
|
+
error.message
|
|
34
|
+
] });
|
|
31
35
|
}
|
|
32
36
|
if (loading) {
|
|
33
|
-
return /* @__PURE__ */
|
|
37
|
+
return /* @__PURE__ */ jsx(Progress, {});
|
|
34
38
|
}
|
|
35
39
|
if (!incidents?.length) {
|
|
36
|
-
return /* @__PURE__ */
|
|
40
|
+
return /* @__PURE__ */ jsx(IncidentsEmptyState, {});
|
|
37
41
|
}
|
|
38
|
-
return /* @__PURE__ */
|
|
42
|
+
return /* @__PURE__ */ jsx(List, { dense: true, children: incidents.map((incident, index) => /* @__PURE__ */ jsx(IncidentListItem, { incident }, incident.id + index)) });
|
|
39
43
|
};
|
|
40
44
|
|
|
41
45
|
export { Incidents };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Incidents.esm.js","sources":["../../../src/components/Incident/Incidents.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
|
|
1
|
+
{"version":3,"file":"Incidents.esm.js","sources":["../../../src/components/Incident/Incidents.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 { useEffect } from 'react';\nimport { List } from '@material-ui/core';\nimport { IncidentListItem } from './IncidentListItem';\nimport { IncidentsEmptyState } from './IncidentEmptyState';\nimport useAsyncFn from 'react-use/lib/useAsyncFn';\nimport { pagerDutyApiRef } from '../../api';\nimport { Alert } from '@material-ui/lab';\n\nimport { useApi } from '@backstage/core-plugin-api';\nimport { Progress } from '@backstage/core-components';\nimport { IncidentForbiddenState } from './IncidentForbiddenState';\n\ntype Props = {\n serviceId: string;\n account?: string;\n refreshIncidents: boolean;\n};\n\nexport const Incidents = ({ serviceId, account, refreshIncidents }: Props) => {\n const api = useApi(pagerDutyApiRef);\n\n const [{ value: incidents, loading, error }, getIncidents] = useAsyncFn(\n async () => {\n const { incidents: foundIncidents } = await api.getIncidentsByServiceId(\n serviceId,\n account\n );\n return foundIncidents;\n },\n );\n\n useEffect(() => {\n getIncidents();\n }, [refreshIncidents, getIncidents]);\n\n if (error) {\n if (error.message.includes('Forbidden')) {\n return <IncidentForbiddenState />;\n }\n\n return (\n <Alert severity=\"error\">\n Error encountered while fetching information. {error.message}\n </Alert>\n );\n }\n\n if (loading) {\n return <Progress />;\n }\n\n if (!incidents?.length) {\n return <IncidentsEmptyState />;\n }\n\n return (\n <List dense>\n {incidents!.map((incident, index) => (\n <IncidentListItem key={incident.id + index} incident={incident} />\n ))}\n </List>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;AAkCO,MAAM,YAAY,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,kBAAiB,KAAa;AAC5E,EAAA,MAAM,GAAA,GAAM,OAAO,eAAe,CAAA;AAElC,EAAA,MAAM,CAAC,EAAE,KAAA,EAAO,SAAA,EAAW,SAAS,KAAA,EAAM,EAAG,YAAY,CAAA,GAAI,UAAA;AAAA,IAC3D,YAAY;AACV,MAAA,MAAM,EAAE,SAAA,EAAW,cAAA,EAAe,GAAI,MAAM,GAAA,CAAI,uBAAA;AAAA,QAC9C,SAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,OAAO,cAAA;AAAA,IACT;AAAA,GACF;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,YAAA,EAAa;AAAA,EACf,CAAA,EAAG,CAAC,gBAAA,EAAkB,YAAY,CAAC,CAAA;AAEnC,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA,EAAG;AACvC,MAAA,2BAAQ,sBAAA,EAAA,EAAuB,CAAA;AAAA,IACjC;AAEA,IAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAM,QAAA,EAAS,OAAA,EAAQ,QAAA,EAAA;AAAA,MAAA,gDAAA;AAAA,MACyB,KAAA,CAAM;AAAA,KAAA,EACvD,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,2BAAQ,QAAA,EAAA,EAAS,CAAA;AAAA,EACnB;AAEA,EAAA,IAAI,CAAC,WAAW,MAAA,EAAQ;AACtB,IAAA,2BAAQ,mBAAA,EAAA,EAAoB,CAAA;AAAA,EAC9B;AAEA,EAAA,2BACG,IAAA,EAAA,EAAK,KAAA,EAAK,IAAA,EACR,QAAA,EAAA,SAAA,CAAW,IAAI,CAAC,QAAA,EAAU,KAAA,qBACzB,GAAA,CAAC,oBAA2C,QAAA,EAAA,EAArB,QAAA,CAAS,EAAA,GAAK,KAA2B,CACjE,CAAA,EACH,CAAA;AAEJ;;;;"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useCallback } from 'react';
|
|
2
3
|
import { Card, CardHeader, Grid, Typography, Divider, CardContent } from '@material-ui/core';
|
|
3
4
|
import { Incidents } from '../Incident/Incidents.esm.js';
|
|
4
5
|
import { EscalationPolicy } from '../Escalation/EscalationPolicy.esm.js';
|
|
@@ -18,7 +19,7 @@ import { OpenServiceButton } from '../PagerDutyCardCommon/OpenServiceButton.esm.
|
|
|
18
19
|
import ServiceStandardsCard from '../PagerDutyCardCommon/ServiceStandardsCard.esm.js';
|
|
19
20
|
import StatusCard from '../PagerDutyCardCommon/StatusCard.esm.js';
|
|
20
21
|
import { TriggerIncidentButton } from '../PagerDutyCardCommon/TriggerIncidentButton.esm.js';
|
|
21
|
-
import { makeStyles,
|
|
22
|
+
import { makeStyles, useTheme, createStyles } from '@material-ui/core/styles';
|
|
22
23
|
|
|
23
24
|
const useStyles = makeStyles(
|
|
24
25
|
(theme) => createStyles({
|
|
@@ -63,7 +64,7 @@ const useStyles = makeStyles(
|
|
|
63
64
|
}
|
|
64
65
|
})
|
|
65
66
|
);
|
|
66
|
-
const BasicCard = ({ children }) => /* @__PURE__ */
|
|
67
|
+
const BasicCard = ({ children }) => /* @__PURE__ */ jsx(InfoCard, { title: "PagerDuty", children });
|
|
67
68
|
const PagerDutyCard = (props) => {
|
|
68
69
|
const classes = useStyles();
|
|
69
70
|
const theme = useTheme();
|
|
@@ -111,94 +112,127 @@ const PagerDutyCard = (props) => {
|
|
|
111
112
|
let errorNode;
|
|
112
113
|
switch (error.constructor) {
|
|
113
114
|
case UnauthorizedError:
|
|
114
|
-
errorNode = /* @__PURE__ */
|
|
115
|
+
errorNode = /* @__PURE__ */ jsx(MissingTokenError, {});
|
|
115
116
|
break;
|
|
116
117
|
case NotFoundError:
|
|
117
|
-
errorNode = /* @__PURE__ */
|
|
118
|
+
errorNode = /* @__PURE__ */ jsx(ServiceNotFoundError, {});
|
|
118
119
|
break;
|
|
119
120
|
default:
|
|
120
|
-
errorNode = /* @__PURE__ */
|
|
121
|
+
errorNode = /* @__PURE__ */ jsx(ForbiddenError, {});
|
|
121
122
|
}
|
|
122
|
-
return /* @__PURE__ */
|
|
123
|
+
return /* @__PURE__ */ jsx(BasicCard, { children: errorNode });
|
|
123
124
|
}
|
|
124
125
|
if (loading) {
|
|
125
|
-
return /* @__PURE__ */
|
|
126
|
+
return /* @__PURE__ */ jsx(BasicCard, { children: /* @__PURE__ */ jsx(Progress, {}) });
|
|
126
127
|
}
|
|
127
|
-
return /* @__PURE__ */
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
128
|
+
return /* @__PURE__ */ jsxs(Card, { "data-testid": "pagerduty-card", children: [
|
|
129
|
+
/* @__PURE__ */ jsx(
|
|
130
|
+
CardHeader,
|
|
131
|
+
{
|
|
132
|
+
className: classes.headerStyle,
|
|
133
|
+
title: theme.palette.type === "dark" ? /* @__PURE__ */ jsx("img", { src: PDWhiteImage, alt: "PagerDuty", height: "35" }) : /* @__PURE__ */ jsx("img", { src: PDGreenImage, alt: "PagerDuty", height: "35" }),
|
|
134
|
+
action: !readOnly && props.integrationKey ? /* @__PURE__ */ jsxs("div", { children: [
|
|
135
|
+
/* @__PURE__ */ jsx(
|
|
136
|
+
TriggerIncidentButton,
|
|
137
|
+
{
|
|
138
|
+
"data-testid": "trigger-incident-button",
|
|
139
|
+
integrationKey: props.integrationKey,
|
|
140
|
+
entityName: props.name,
|
|
141
|
+
handleRefresh
|
|
142
|
+
}
|
|
143
|
+
),
|
|
144
|
+
/* @__PURE__ */ jsx(OpenServiceButton, { serviceUrl: service.url })
|
|
145
|
+
] }) : /* @__PURE__ */ jsx(OpenServiceButton, { serviceUrl: service.url })
|
|
146
|
+
}
|
|
147
|
+
),
|
|
148
|
+
/* @__PURE__ */ jsxs(Grid, { item: true, md: 12, className: classes.overviewHeaderContainerStyle, children: [
|
|
149
|
+
/* @__PURE__ */ jsx(Grid, { item: true, md: 3, children: /* @__PURE__ */ jsx(Typography, { className: classes.overviewHeaderTextStyle, children: "STATUS" }) }),
|
|
150
|
+
/* @__PURE__ */ jsx(Grid, { item: true, md: 6, children: /* @__PURE__ */ jsxs("span", { className: classes.headerWithSubheaderContainerStyle, children: [
|
|
151
|
+
/* @__PURE__ */ jsx(Typography, { className: classes.overviewHeaderTextStyle, children: "INSIGHTS" }),
|
|
152
|
+
/* @__PURE__ */ jsx(Typography, { className: classes.subheaderTextStyle, children: "(last 30 days)" })
|
|
153
|
+
] }) }),
|
|
154
|
+
/* @__PURE__ */ jsx(Grid, { item: true, md: 3, children: /* @__PURE__ */ jsx(Typography, { className: classes.overviewHeaderTextStyle, children: "STANDARDS" }) })
|
|
155
|
+
] }),
|
|
156
|
+
/* @__PURE__ */ jsxs(Grid, { item: true, md: 12, className: classes.overviewCardsContainerStyle, children: [
|
|
157
|
+
/* @__PURE__ */ jsx(Grid, { item: true, md: 3, children: /* @__PURE__ */ jsx(
|
|
158
|
+
StatusCard,
|
|
134
159
|
{
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
handleRefresh
|
|
160
|
+
serviceId: service.id,
|
|
161
|
+
account: service.account,
|
|
162
|
+
refreshStatus
|
|
139
163
|
}
|
|
140
|
-
)
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
164
|
+
) }),
|
|
165
|
+
/* @__PURE__ */ jsxs(Grid, { item: true, md: 6, className: classes.incidentMetricsContainerStyle, children: [
|
|
166
|
+
/* @__PURE__ */ jsx(Grid, { item: true, md: 4, children: /* @__PURE__ */ jsx(
|
|
167
|
+
IncidentCounterCard,
|
|
168
|
+
{
|
|
169
|
+
count: service?.metrics !== void 0 && service.metrics.length > 0 ? service?.metrics[0].total_interruptions : void 0,
|
|
170
|
+
label: "interruptions",
|
|
171
|
+
color: theme.palette.textSubtle
|
|
172
|
+
}
|
|
173
|
+
) }),
|
|
174
|
+
/* @__PURE__ */ jsx(Grid, { item: true, md: 4, children: /* @__PURE__ */ jsx(
|
|
175
|
+
IncidentCounterCard,
|
|
176
|
+
{
|
|
177
|
+
count: service?.metrics !== void 0 && service.metrics.length > 0 ? service?.metrics[0].total_high_urgency_incidents : void 0,
|
|
178
|
+
label: "high urgency",
|
|
179
|
+
color: theme.palette.warning.main
|
|
180
|
+
}
|
|
181
|
+
) }),
|
|
182
|
+
/* @__PURE__ */ jsx(Grid, { item: true, md: 4, children: /* @__PURE__ */ jsx(
|
|
183
|
+
IncidentCounterCard,
|
|
184
|
+
{
|
|
185
|
+
count: service?.metrics !== void 0 && service?.metrics?.length > 0 ? service?.metrics[0].total_incident_count : void 0,
|
|
186
|
+
label: "incidents",
|
|
187
|
+
color: theme.palette.error.main
|
|
188
|
+
}
|
|
189
|
+
) })
|
|
190
|
+
] }),
|
|
191
|
+
/* @__PURE__ */ jsx(Grid, { item: true, md: 3, children: /* @__PURE__ */ jsx(
|
|
192
|
+
ServiceStandardsCard,
|
|
193
|
+
{
|
|
194
|
+
total: service?.standards?.score !== void 0 ? service?.standards?.score?.total : void 0,
|
|
195
|
+
completed: service?.standards?.score !== void 0 ? service?.standards?.score?.passing : void 0,
|
|
196
|
+
standards: service?.standards !== void 0 ? service?.standards?.standards : void 0
|
|
197
|
+
}
|
|
198
|
+
) })
|
|
199
|
+
] }),
|
|
200
|
+
/* @__PURE__ */ jsx(Divider, {}),
|
|
201
|
+
/* @__PURE__ */ jsxs(CardContent, { children: [
|
|
202
|
+
/* @__PURE__ */ jsxs(TabbedCard, { children: [
|
|
203
|
+
/* @__PURE__ */ jsx(CardTab, { label: "Incidents", children: /* @__PURE__ */ jsx(
|
|
204
|
+
Incidents,
|
|
205
|
+
{
|
|
206
|
+
serviceId: service.id,
|
|
207
|
+
refreshIncidents,
|
|
208
|
+
account: service.account
|
|
209
|
+
}
|
|
210
|
+
) }),
|
|
211
|
+
disableChangeEvents !== true ? /* @__PURE__ */ jsx(CardTab, { label: "Change Events", children: /* @__PURE__ */ jsx(
|
|
212
|
+
ChangeEvents,
|
|
213
|
+
{
|
|
214
|
+
"data-testid": "change-events",
|
|
215
|
+
serviceId: service.id,
|
|
216
|
+
refreshEvents: refreshChangeEvents,
|
|
217
|
+
account: service.account
|
|
218
|
+
}
|
|
219
|
+
) }) : /* @__PURE__ */ jsx(Fragment, {})
|
|
220
|
+
] }),
|
|
221
|
+
disableOnCall !== true ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
222
|
+
/* @__PURE__ */ jsx(Typography, { className: classes.oncallHeaderTextStyle, children: "ON CALL" }),
|
|
223
|
+
/* @__PURE__ */ jsx(
|
|
224
|
+
EscalationPolicy,
|
|
225
|
+
{
|
|
226
|
+
"data-testid": "oncall-card",
|
|
227
|
+
policyId: service.policyId,
|
|
228
|
+
policyUrl: service.policyLink,
|
|
229
|
+
policyName: service.policyName,
|
|
230
|
+
account: service.account
|
|
231
|
+
}
|
|
232
|
+
)
|
|
233
|
+
] }) : /* @__PURE__ */ jsx(Fragment, {})
|
|
234
|
+
] })
|
|
235
|
+
] });
|
|
202
236
|
};
|
|
203
237
|
|
|
204
238
|
export { PagerDutyCard };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../../src/components/PagerDutyCard/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 Card,\n CardHeader,\n Divider,\n CardContent,\n Grid,\n Typography,\n} from \"@material-ui/core\";\nimport { Incidents } from \"../Incident\";\nimport { EscalationPolicy } from \"../Escalation\";\nimport useAsync from \"react-use/lib/useAsync\";\nimport { pagerDutyApiRef, UnauthorizedError } from \"../../api\";\nimport { MissingTokenError, ServiceNotFoundError } from \"../Errors\";\nimport { ChangeEvents } from \"../ChangeEvents\";\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 {\n Progress,\n TabbedCard,\n CardTab,\n InfoCard,\n} 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\";\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 oncallHeaderTextStyle: {\n fontSize: \"14px\",\n fontWeight: 500,\n marginTop: \"10px\",\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: \"15px\",\n marginBottom: \"20px\",\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 incidentMetricsContainerStyle: {\n display: \"flex\",\n height: \"100%\",\n justifyContent: \"center\",\n columnSpan: \"all\",\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 disableChangeEvents?: boolean;\n disableOnCall?: boolean;\n};\n\n/** @public */\nexport const PagerDutyCard = (props: PagerDutyCardProps) => {\n const classes = useStyles();\n\n const theme = useTheme();\n const { readOnly, disableChangeEvents, disableOnCall } = props;\n const api = useApi(pagerDutyApiRef);\n const [refreshIncidents, setRefreshIncidents] = useState<boolean>(false);\n const [refreshChangeEvents, setRefreshChangeEvents] =\n useState<boolean>(false);\n const [refreshStatus, setRefreshStatus] = useState<boolean>(false);\n\n const handleRefresh = useCallback(() => {\n setRefreshIncidents((x) => !x);\n setRefreshChangeEvents((x) => !x);\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 props.account\n );\n\n const serviceMetrics = await api.getServiceMetricsByServiceId(\n foundService.id,\n props.account\n );\n\n const result: PagerDutyCardServiceResponse = {\n id: foundService.id,\n account: props.account,\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=\"35\" />\n ) : (\n <img src={PDGreenImage} alt=\"PagerDuty\" height=\"35\" />\n )\n }\n action={\n !readOnly && props.integrationKey ? (\n <div>\n <TriggerIncidentButton\n data-testid=\"trigger-incident-button\"\n integrationKey={props.integrationKey}\n entityName={props.name}\n handleRefresh={handleRefresh}\n />\n <OpenServiceButton serviceUrl={service!.url} />\n </div>\n ) : (\n <OpenServiceButton serviceUrl={service!.url} />\n )\n }\n />\n <Grid item md={12} className={classes.overviewHeaderContainerStyle}>\n <Grid item md={3}>\n <Typography className={classes.overviewHeaderTextStyle}>\n STATUS\n </Typography>\n </Grid>\n <Grid item md={6}>\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 </Grid>\n <Grid item md={3}>\n <Typography className={classes.overviewHeaderTextStyle}>\n STANDARDS\n </Typography>\n </Grid>\n </Grid>\n <Grid item md={12} className={classes.overviewCardsContainerStyle}>\n <Grid item md={3}>\n <StatusCard\n serviceId={service!.id}\n account={service!.account}\n refreshStatus={refreshStatus}\n />\n </Grid>\n <Grid item md={6} className={classes.incidentMetricsContainerStyle}>\n <Grid item md={4}>\n <InsightsCard\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 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 count={\n service?.metrics !== undefined && 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 <Grid item md={3}>\n <ServiceStandardsCard\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\n <Divider />\n <CardContent>\n <TabbedCard>\n <CardTab label=\"Incidents\">\n <Incidents\n serviceId={service!.id}\n refreshIncidents={refreshIncidents}\n account={service!.account}\n />\n </CardTab>\n {disableChangeEvents !== true ? (\n <CardTab label=\"Change Events\">\n <ChangeEvents\n data-testid=\"change-events\"\n serviceId={service!.id}\n refreshEvents={refreshChangeEvents}\n account={service!.account}\n />\n </CardTab>\n ) : (\n <></>\n )}\n </TabbedCard>\n {disableOnCall !== true ? (\n <>\n <Typography className={classes.oncallHeaderTextStyle}>\n ON CALL\n </Typography>\n <EscalationPolicy\n data-testid=\"oncall-card\"\n policyId={service!.policyId}\n policyUrl={service!.policyLink}\n policyName={service!.policyName}\n account={service!.account}\n />\n </>\n ) : (\n <></>\n )}\n </CardContent>\n </Card>\n );\n};\n"],"names":["InsightsCard"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../src/components/PagerDutyCard/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 { ReactNode, useCallback, useState } from \"react\";\nimport {\n Card,\n CardHeader,\n Divider,\n CardContent,\n Grid,\n Typography,\n} from \"@material-ui/core\";\nimport { Incidents } from \"../Incident\";\nimport { EscalationPolicy } from \"../Escalation\";\nimport useAsync from \"react-use/lib/useAsync\";\nimport { pagerDutyApiRef, UnauthorizedError } from \"../../api\";\nimport { MissingTokenError, ServiceNotFoundError } from \"../Errors\";\nimport { ChangeEvents } from \"../ChangeEvents\";\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 {\n Progress,\n TabbedCard,\n CardTab,\n InfoCard,\n} 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\";\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 oncallHeaderTextStyle: {\n fontSize: \"14px\",\n fontWeight: 500,\n marginTop: \"10px\",\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: \"15px\",\n marginBottom: \"20px\",\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 incidentMetricsContainerStyle: {\n display: \"flex\",\n height: \"100%\",\n justifyContent: \"center\",\n columnSpan: \"all\",\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 disableChangeEvents?: boolean;\n disableOnCall?: boolean;\n};\n\n/** @public */\nexport const PagerDutyCard = (props: PagerDutyCardProps) => {\n const classes = useStyles();\n\n const theme = useTheme();\n const { readOnly, disableChangeEvents, disableOnCall } = props;\n const api = useApi(pagerDutyApiRef);\n const [refreshIncidents, setRefreshIncidents] = useState<boolean>(false);\n const [refreshChangeEvents, setRefreshChangeEvents] =\n useState<boolean>(false);\n const [refreshStatus, setRefreshStatus] = useState<boolean>(false);\n\n const handleRefresh = useCallback(() => {\n setRefreshIncidents((x) => !x);\n setRefreshChangeEvents((x) => !x);\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 props.account\n );\n\n const serviceMetrics = await api.getServiceMetricsByServiceId(\n foundService.id,\n props.account\n );\n\n const result: PagerDutyCardServiceResponse = {\n id: foundService.id,\n account: props.account,\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=\"35\" />\n ) : (\n <img src={PDGreenImage} alt=\"PagerDuty\" height=\"35\" />\n )\n }\n action={\n !readOnly && props.integrationKey ? (\n <div>\n <TriggerIncidentButton\n data-testid=\"trigger-incident-button\"\n integrationKey={props.integrationKey}\n entityName={props.name}\n handleRefresh={handleRefresh}\n />\n <OpenServiceButton serviceUrl={service!.url} />\n </div>\n ) : (\n <OpenServiceButton serviceUrl={service!.url} />\n )\n }\n />\n <Grid item md={12} className={classes.overviewHeaderContainerStyle}>\n <Grid item md={3}>\n <Typography className={classes.overviewHeaderTextStyle}>\n STATUS\n </Typography>\n </Grid>\n <Grid item md={6}>\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 </Grid>\n <Grid item md={3}>\n <Typography className={classes.overviewHeaderTextStyle}>\n STANDARDS\n </Typography>\n </Grid>\n </Grid>\n <Grid item md={12} className={classes.overviewCardsContainerStyle}>\n <Grid item md={3}>\n <StatusCard\n serviceId={service!.id}\n account={service!.account}\n refreshStatus={refreshStatus}\n />\n </Grid>\n <Grid item md={6} className={classes.incidentMetricsContainerStyle}>\n <Grid item md={4}>\n <InsightsCard\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 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 count={\n service?.metrics !== undefined && 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 <Grid item md={3}>\n <ServiceStandardsCard\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\n <Divider />\n <CardContent>\n <TabbedCard>\n <CardTab label=\"Incidents\">\n <Incidents\n serviceId={service!.id}\n refreshIncidents={refreshIncidents}\n account={service!.account}\n />\n </CardTab>\n {disableChangeEvents !== true ? (\n <CardTab label=\"Change Events\">\n <ChangeEvents\n data-testid=\"change-events\"\n serviceId={service!.id}\n refreshEvents={refreshChangeEvents}\n account={service!.account}\n />\n </CardTab>\n ) : (\n <></>\n )}\n </TabbedCard>\n {disableOnCall !== true ? (\n <>\n <Typography className={classes.oncallHeaderTextStyle}>\n ON CALL\n </Typography>\n <EscalationPolicy\n data-testid=\"oncall-card\"\n policyId={service!.policyId}\n policyUrl={service!.policyLink}\n policyName={service!.policyName}\n account={service!.account}\n />\n </>\n ) : (\n <></>\n )}\n </CardContent>\n </Card>\n );\n};\n"],"names":["InsightsCard"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
1
2
|
import { makeStyles, Card, Typography } from '@material-ui/core';
|
|
2
|
-
import React from 'react';
|
|
3
3
|
import validateColor from 'validate-color';
|
|
4
4
|
|
|
5
5
|
function IncidentCounterCard({ count, label, color, compact }) {
|
|
@@ -28,7 +28,13 @@ function IncidentCounterCard({ count, label, color, compact }) {
|
|
|
28
28
|
}
|
|
29
29
|
}));
|
|
30
30
|
const { cardStyle, largeTextStyle, smallTextStyle } = useStyles();
|
|
31
|
-
return /* @__PURE__ */
|
|
31
|
+
return /* @__PURE__ */ jsx(Card, { className: cardStyle, children: count !== void 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
32
|
+
/* @__PURE__ */ jsx(Typography, { className: largeTextStyle, children: count }),
|
|
33
|
+
/* @__PURE__ */ jsx(Typography, { className: smallTextStyle, children: label })
|
|
34
|
+
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
35
|
+
/* @__PURE__ */ jsx(Typography, { className: largeTextStyle, children: "-" }),
|
|
36
|
+
/* @__PURE__ */ jsx(Typography, { className: smallTextStyle, children: label })
|
|
37
|
+
] }) });
|
|
32
38
|
}
|
|
33
39
|
|
|
34
40
|
export { IncidentCounterCard as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InsightsCard.esm.js","sources":["../../../src/components/PagerDutyCardCommon/InsightsCard.tsx"],"sourcesContent":["import { BackstageTheme } from \"@backstage/theme\";\nimport { Card, Typography, makeStyles } from \"@material-ui/core\";\nimport
|
|
1
|
+
{"version":3,"file":"InsightsCard.esm.js","sources":["../../../src/components/PagerDutyCardCommon/InsightsCard.tsx"],"sourcesContent":["import { BackstageTheme } from \"@backstage/theme\";\nimport { Card, Typography, makeStyles } from \"@material-ui/core\";\nimport validateColor from \"validate-color\";\n\ntype Props = {\n count: number | undefined;\n label: string;\n color: string;\n compact?: boolean;\n};\n\nfunction IncidentCounterCard({ count, label, color, compact }: Props) {\n\n const textColor = color && validateColor(color) ? color : \"black\";\n\n const useStyles = makeStyles<BackstageTheme>(() => ({\n cardStyle: {\n marginRight: \"10px\",\n height: compact !== true ? \"120px\" : \"80px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0, 0, 0, 0.03)\",\n },\n largeTextStyle: {\n color: textColor,\n fontSize: \"30px\",\n marginTop: \"-10px\",\n },\n smallTextStyle: {\n color: textColor,\n fontWeight: \"bold\",\n fontSize: \"10px\",\n marginTop: \"-5px\",\n textTransform: \"uppercase\",\n flexWrap: \"wrap\",\n },\n }));\n\n const { cardStyle, largeTextStyle, smallTextStyle } = useStyles();\n\n return (\n <Card className={cardStyle}>\n {(count !== undefined) ? (\n <>\n <Typography className={largeTextStyle}>{count}</Typography>\n <Typography className={smallTextStyle}>{label}</Typography>\n </>\n ) : (\n <>\n <Typography className={largeTextStyle}>-</Typography>\n <Typography className={smallTextStyle}>{label}</Typography>\n </>\n )}\n </Card>\n );\n}\n\nexport default IncidentCounterCard;\n"],"names":[],"mappings":";;;;AAWA,SAAS,oBAAoB,EAAE,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,SAAQ,EAAU;AAEpE,EAAA,MAAM,SAAA,GAAY,KAAA,IAAS,aAAA,CAAc,KAAK,IAAI,KAAA,GAAQ,OAAA;AAE1D,EAAA,MAAM,SAAA,GAAY,WAA2B,OAAO;AAAA,IAClD,SAAA,EAAW;AAAA,MACT,WAAA,EAAa,MAAA;AAAA,MACb,MAAA,EAAQ,OAAA,KAAY,IAAA,GAAO,OAAA,GAAU,MAAA;AAAA,MACrC,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,QAAA;AAAA,MACZ,cAAA,EAAgB,QAAA;AAAA,MAChB,eAAA,EAAiB;AAAA,KACnB;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,KAAA,EAAO,SAAA;AAAA,MACP,QAAA,EAAU,MAAA;AAAA,MACV,SAAA,EAAW;AAAA,KACb;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,KAAA,EAAO,SAAA;AAAA,MACP,UAAA,EAAY,MAAA;AAAA,MACZ,QAAA,EAAU,MAAA;AAAA,MACV,SAAA,EAAW,MAAA;AAAA,MACX,aAAA,EAAe,WAAA;AAAA,MACf,QAAA,EAAU;AAAA;AACZ,GACF,CAAE,CAAA;AAEF,EAAA,MAAM,EAAE,SAAA,EAAW,cAAA,EAAgB,cAAA,KAAmB,SAAA,EAAU;AAEhE,EAAA,2BACG,IAAA,EAAA,EAAK,SAAA,EAAW,SAAA,EACb,QAAA,EAAA,KAAA,KAAU,yBACV,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,cAAA,EAAiB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAC9C,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,cAAA,EAAiB,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EAChD,oBAEA,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,cAAA,EAAgB,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,oBACxC,GAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,cAAA,EAAiB,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EAChD,CAAA,EAEJ,CAAA;AAEJ;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { makeStyles, IconButton } from '@material-ui/core';
|
|
3
3
|
import OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser';
|
|
4
4
|
|
|
@@ -27,15 +27,18 @@ function OpenServiceButton({ serviceUrl, compact }) {
|
|
|
27
27
|
function navigateToService() {
|
|
28
28
|
window.open(serviceUrl, "_blank");
|
|
29
29
|
}
|
|
30
|
-
return /* @__PURE__ */
|
|
30
|
+
return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx(
|
|
31
31
|
IconButton,
|
|
32
32
|
{
|
|
33
33
|
"aria-label": "open-service-in-browser",
|
|
34
34
|
onClick: navigateToService,
|
|
35
|
-
className: buttonStyle
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
className: buttonStyle,
|
|
36
|
+
children: /* @__PURE__ */ jsxs("div", { className: containerStyle, children: [
|
|
37
|
+
/* @__PURE__ */ jsx(OpenInBrowserIcon, { className: iconStyle }),
|
|
38
|
+
/* @__PURE__ */ jsx("p", { className: textStyle, children: "Open service in PagerDuty" })
|
|
39
|
+
] })
|
|
40
|
+
}
|
|
41
|
+
) });
|
|
39
42
|
}
|
|
40
43
|
|
|
41
44
|
export { OpenServiceButton };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenServiceButton.esm.js","sources":["../../../src/components/PagerDutyCardCommon/OpenServiceButton.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
|
|
1
|
+
{"version":3,"file":"OpenServiceButton.esm.js","sources":["../../../src/components/PagerDutyCardCommon/OpenServiceButton.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 { makeStyles, IconButton } from \"@material-ui/core\";\nimport { BackstageTheme } from \"@backstage/theme\";\n\nimport OpenInBrowser from \"@material-ui/icons/OpenInBrowser\";\n\ntype OpenServiceButtonProps = {\n serviceUrl: string;\n compact?: boolean;\n};\n\n/** @public */\nexport function OpenServiceButton({ serviceUrl, compact }: OpenServiceButtonProps) {\n const useStyles = makeStyles<BackstageTheme>((theme) => ({\n buttonStyle: {\n color: theme.palette.text.primary,\n \"&:hover\": {\n backgroundColor: \"transparent\",\n textDecoration: \"underline\",\n },\n },\n containerStyle: {\n fontSize: compact !== true ? \"12px\" : \"10px\",\n width: compact !== true ? \"85px\" : \"70px\",\n },\n iconStyle: {\n fontSize: \"30px\",\n marginBottom: \"-10px\",\n },\n textStyle: {\n marginBottom: \"-10px\",\n },\n }));\n\n const { buttonStyle, containerStyle, iconStyle, textStyle } = useStyles();\n\n function navigateToService() {\n window.open(serviceUrl, \"_blank\");\n }\n\n return (\n <>\n <IconButton\n aria-label=\"open-service-in-browser\"\n onClick={navigateToService}\n className={buttonStyle}\n >\n <div className={containerStyle}>\n <OpenInBrowser className={iconStyle} />\n <p className={textStyle}>Open service in PagerDuty</p>\n </div>\n </IconButton>\n </>\n );\n}\n"],"names":["OpenInBrowser"],"mappings":";;;;AA4BO,SAAS,iBAAA,CAAkB,EAAE,UAAA,EAAY,OAAA,EAAQ,EAA2B;AACjF,EAAA,MAAM,SAAA,GAAY,UAAA,CAA2B,CAAC,KAAA,MAAW;AAAA,IACvD,WAAA,EAAa;AAAA,MACX,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAA;AAAA,MAC1B,SAAA,EAAW;AAAA,QACT,eAAA,EAAiB,aAAA;AAAA,QACjB,cAAA,EAAgB;AAAA;AAClB,KACF;AAAA,IACA,cAAA,EAAgB;AAAA,MACd,QAAA,EAAU,OAAA,KAAY,IAAA,GAAO,MAAA,GAAS,MAAA;AAAA,MACtC,KAAA,EAAO,OAAA,KAAY,IAAA,GAAO,MAAA,GAAS;AAAA,KACrC;AAAA,IACA,SAAA,EAAW;AAAA,MACT,QAAA,EAAU,MAAA;AAAA,MACV,YAAA,EAAc;AAAA,KAChB;AAAA,IACA,SAAA,EAAW;AAAA,MACT,YAAA,EAAc;AAAA;AAChB,GACF,CAAE,CAAA;AAEF,EAAA,MAAM,EAAE,WAAA,EAAa,cAAA,EAAgB,SAAA,EAAW,SAAA,KAAc,SAAA,EAAU;AAExE,EAAA,SAAS,iBAAA,GAAoB;AAC3B,IAAA,MAAA,CAAO,IAAA,CAAK,YAAY,QAAQ,CAAA;AAAA,EAClC;AAEA,EAAA,uBACE,GAAA,CAAA,QAAA,EAAA,EACE,QAAA,kBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAW,yBAAA;AAAA,MACX,OAAA,EAAS,iBAAA;AAAA,MACT,SAAA,EAAW,WAAA;AAAA,MAEX,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,cAAA,EACd,QAAA,EAAA;AAAA,wBAAA,GAAA,CAACA,iBAAA,EAAA,EAAc,WAAW,SAAA,EAAW,CAAA;AAAA,wBACrC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,SAAA,EAAW,QAAA,EAAA,2BAAA,EAAyB;AAAA,OAAA,EACpD;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;;;;"}
|