@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 @@
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 );\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=\"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 serviceId={service!.id} refreshStatus={refreshStatus} />\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 />\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 />\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 />\n </>\n ) : (\n <></>\n )}\n </CardContent>\n </Card>\n );\n};\n"],"names":["InsightsCard"],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { makeStyles, Card, Typography } from '@material-ui/core';
2
+ import React from 'react';
3
+ import validateColor from 'validate-color';
4
+
5
+ function IncidentCounterCard({ count, label, color, compact }) {
6
+ const textColor = color && validateColor(color) ? color : "black";
7
+ const useStyles = makeStyles(() => ({
8
+ cardStyle: {
9
+ marginRight: "10px",
10
+ height: compact !== true ? "120px" : "80px",
11
+ display: "flex",
12
+ alignItems: "center",
13
+ justifyContent: "center",
14
+ backgroundColor: "rgba(0, 0, 0, 0.03)"
15
+ },
16
+ largeTextStyle: {
17
+ color: textColor,
18
+ fontSize: "30px",
19
+ marginTop: "-10px"
20
+ },
21
+ smallTextStyle: {
22
+ color: textColor,
23
+ fontWeight: "bold",
24
+ fontSize: "10px",
25
+ marginTop: "-5px",
26
+ textTransform: "uppercase",
27
+ flexWrap: "wrap"
28
+ }
29
+ }));
30
+ const { cardStyle, largeTextStyle, smallTextStyle } = useStyles();
31
+ return /* @__PURE__ */ React.createElement(Card, { className: cardStyle }, count !== void 0 ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Typography, { className: largeTextStyle }, count), /* @__PURE__ */ React.createElement(Typography, { className: smallTextStyle }, label)) : /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Typography, { className: largeTextStyle }, "-"), /* @__PURE__ */ React.createElement(Typography, { className: smallTextStyle }, label)));
32
+ }
33
+
34
+ export { IncidentCounterCard as default };
35
+ //# sourceMappingURL=InsightsCard.esm.js.map
@@ -0,0 +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 React from \"react\";\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":";;;;AAYA,SAAS,oBAAoB,EAAE,KAAA,EAAO,KAAO,EAAA,KAAA,EAAO,SAAkB,EAAA;AAEpE,EAAA,MAAM,SAAY,GAAA,KAAA,IAAS,aAAc,CAAA,KAAK,IAAI,KAAQ,GAAA,OAAA,CAAA;AAE1D,EAAM,MAAA,SAAA,GAAY,WAA2B,OAAO;AAAA,IAClD,SAAW,EAAA;AAAA,MACT,WAAa,EAAA,MAAA;AAAA,MACb,MAAA,EAAQ,OAAY,KAAA,IAAA,GAAO,OAAU,GAAA,MAAA;AAAA,MACrC,OAAS,EAAA,MAAA;AAAA,MACT,UAAY,EAAA,QAAA;AAAA,MACZ,cAAgB,EAAA,QAAA;AAAA,MAChB,eAAiB,EAAA,qBAAA;AAAA,KACnB;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,KAAO,EAAA,SAAA;AAAA,MACP,QAAU,EAAA,MAAA;AAAA,MACV,SAAW,EAAA,OAAA;AAAA,KACb;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,KAAO,EAAA,SAAA;AAAA,MACP,UAAY,EAAA,MAAA;AAAA,MACZ,QAAU,EAAA,MAAA;AAAA,MACV,SAAW,EAAA,MAAA;AAAA,MACX,aAAe,EAAA,WAAA;AAAA,MACf,QAAU,EAAA,MAAA;AAAA,KACZ;AAAA,GACA,CAAA,CAAA,CAAA;AAEF,EAAA,MAAM,EAAE,SAAA,EAAW,cAAgB,EAAA,cAAA,KAAmB,SAAU,EAAA,CAAA;AAEhE,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAK,SAAW,EAAA,SAAA,EAAA,EACb,UAAU,KACV,CAAA,mBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBACG,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAW,SAAW,EAAA,cAAA,EAAA,EAAiB,KAAM,CAAA,sCAC7C,UAAW,EAAA,EAAA,SAAA,EAAW,cAAiB,EAAA,EAAA,KAAM,CAChD,CAAA,mBAGE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,cAAW,SAAW,EAAA,cAAA,EAAA,EAAgB,GAAC,CAAA,sCACvC,UAAW,EAAA,EAAA,SAAA,EAAW,cAAiB,EAAA,EAAA,KAAM,CAChD,CAEJ,CAAA,CAAA;AAEJ;;;;"}
@@ -0,0 +1,42 @@
1
+ import React from 'react';
2
+ import { makeStyles, IconButton } from '@material-ui/core';
3
+ import OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser';
4
+
5
+ function OpenServiceButton({ serviceUrl, compact }) {
6
+ const useStyles = makeStyles((theme) => ({
7
+ buttonStyle: {
8
+ color: theme.palette.text.primary,
9
+ "&:hover": {
10
+ backgroundColor: "transparent",
11
+ textDecoration: "underline"
12
+ }
13
+ },
14
+ containerStyle: {
15
+ fontSize: compact !== true ? "12px" : "10px",
16
+ width: compact !== true ? "85px" : "70px"
17
+ },
18
+ iconStyle: {
19
+ fontSize: "30px",
20
+ marginBottom: "-10px"
21
+ },
22
+ textStyle: {
23
+ marginBottom: "-10px"
24
+ }
25
+ }));
26
+ const { buttonStyle, containerStyle, iconStyle, textStyle } = useStyles();
27
+ function navigateToService() {
28
+ window.open(serviceUrl, "_blank");
29
+ }
30
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
31
+ IconButton,
32
+ {
33
+ "aria-label": "open-service-in-browser",
34
+ onClick: navigateToService,
35
+ className: buttonStyle
36
+ },
37
+ /* @__PURE__ */ React.createElement("div", { className: containerStyle }, /* @__PURE__ */ React.createElement(OpenInBrowserIcon, { className: iconStyle }), /* @__PURE__ */ React.createElement("p", { className: textStyle }, "Open service in PagerDuty"))
38
+ ));
39
+ }
40
+
41
+ export { OpenServiceButton };
42
+ //# sourceMappingURL=OpenServiceButton.esm.js.map
@@ -0,0 +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 React from \"react\";\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":";;;;AA6BO,SAAS,iBAAkB,CAAA,EAAE,UAAY,EAAA,OAAA,EAAmC,EAAA;AACjF,EAAM,MAAA,SAAA,GAAY,UAA2B,CAAA,CAAC,KAAW,MAAA;AAAA,IACvD,WAAa,EAAA;AAAA,MACX,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,OAAA;AAAA,MAC1B,SAAW,EAAA;AAAA,QACT,eAAiB,EAAA,aAAA;AAAA,QACjB,cAAgB,EAAA,WAAA;AAAA,OAClB;AAAA,KACF;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,QAAA,EAAU,OAAY,KAAA,IAAA,GAAO,MAAS,GAAA,MAAA;AAAA,MACtC,KAAA,EAAO,OAAY,KAAA,IAAA,GAAO,MAAS,GAAA,MAAA;AAAA,KACrC;AAAA,IACA,SAAW,EAAA;AAAA,MACT,QAAU,EAAA,MAAA;AAAA,MACV,YAAc,EAAA,OAAA;AAAA,KAChB;AAAA,IACA,SAAW,EAAA;AAAA,MACT,YAAc,EAAA,OAAA;AAAA,KAChB;AAAA,GACA,CAAA,CAAA,CAAA;AAEF,EAAA,MAAM,EAAE,WAAa,EAAA,cAAA,EAAgB,SAAW,EAAA,SAAA,KAAc,SAAU,EAAA,CAAA;AAExE,EAAA,SAAS,iBAAoB,GAAA;AAC3B,IAAO,MAAA,CAAA,IAAA,CAAK,YAAY,QAAQ,CAAA,CAAA;AAAA,GAClC;AAEA,EAAA,uBAEI,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,YAAW,EAAA,yBAAA;AAAA,MACX,OAAS,EAAA,iBAAA;AAAA,MACT,SAAW,EAAA,WAAA;AAAA,KAAA;AAAA,oBAEV,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,cAAA,EAAA,sCACbA,iBAAc,EAAA,EAAA,SAAA,EAAW,SAAW,EAAA,CAAA,kBACpC,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAE,SAAW,EAAA,SAAA,EAAA,EAAW,2BAAyB,CACpD,CAAA;AAAA,GAEJ,CAAA,CAAA;AAEJ;;;;"}
@@ -0,0 +1,95 @@
1
+ import { makeStyles, withStyles, LinearProgress, Card, Typography, IconButton, Tooltip } from '@material-ui/core';
2
+ import React from 'react';
3
+ import InfoIcon from '@material-ui/icons/Info';
4
+ import CheckCircle from '@material-ui/icons/CheckCircle';
5
+ import RadioButtonUncheckedIcon from '@material-ui/icons/RadioButtonUnchecked';
6
+
7
+ function colorFromPercentage(theme, percentage) {
8
+ if (percentage < 0.5) {
9
+ return theme.palette.error.main;
10
+ } else if (percentage < 0.8) {
11
+ return theme.palette.warning.main;
12
+ }
13
+ return theme.palette.success.main;
14
+ }
15
+ function ServiceStandardsCard({ total, completed, standards, compact }) {
16
+ const useStyles = makeStyles((theme) => ({
17
+ cardStyle: {
18
+ height: compact !== true ? "120px" : "80px",
19
+ display: "grid",
20
+ gridTemplateRows: "1fr auto auto",
21
+ backgroundColor: "rgba(0, 0, 0, 0.03)"
22
+ },
23
+ containerStyle: {
24
+ display: "flex",
25
+ justifyContent: "center",
26
+ marginTop: compact !== true ? "-100px" : "-50px"
27
+ },
28
+ largeTextStyle: {
29
+ fontSize: compact !== true ? "50px" : "40px",
30
+ color: completed !== void 0 && total !== void 0 ? colorFromPercentage(theme, completed / total) : colorFromPercentage(theme, 0),
31
+ alignSelf: "center",
32
+ justifyContent: "center"
33
+ },
34
+ smallTextStyle: {
35
+ color: theme.palette.textSubtle,
36
+ fontSize: compact !== true ? "14px" : "12px",
37
+ fontWeight: "bold",
38
+ alignSelf: "center",
39
+ justifyContent: "center",
40
+ marginLeft: "-2px",
41
+ marginTop: compact !== true ? "25px" : "20px"
42
+ },
43
+ tooltipContainer: {},
44
+ tooltipIcon: {
45
+ marginRight: "5px"
46
+ },
47
+ standardItem: {
48
+ display: "flex",
49
+ alignItems: "center"
50
+ }
51
+ }));
52
+ const BorderLinearProgress = withStyles((theme) => ({
53
+ root: {
54
+ height: 10,
55
+ borderRadius: 5,
56
+ margin: 5
57
+ },
58
+ colorPrimary: {
59
+ backgroundColor: theme.palette.grey[theme.palette.type === "light" ? 200 : 700]
60
+ },
61
+ bar: {
62
+ borderRadius: 5,
63
+ backgroundColor: completed !== void 0 && total !== void 0 ? colorFromPercentage(theme, completed / total) : colorFromPercentage(theme, 0)
64
+ }
65
+ }))(LinearProgress);
66
+ const {
67
+ cardStyle,
68
+ containerStyle,
69
+ largeTextStyle,
70
+ smallTextStyle,
71
+ tooltipContainer,
72
+ tooltipIcon,
73
+ standardItem
74
+ } = useStyles();
75
+ if (standards === void 0 || completed === void 0 || total === void 0) {
76
+ return /* @__PURE__ */ React.createElement(Card, { className: cardStyle }, /* @__PURE__ */ React.createElement("div", { className: containerStyle }, /* @__PURE__ */ React.createElement(Typography, { className: smallTextStyle }, "Unable to retrieve Scores")));
77
+ }
78
+ return /* @__PURE__ */ React.createElement(Card, { className: cardStyle }, completed !== void 0 && total !== void 0 ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { className: tooltipContainer }, /* @__PURE__ */ React.createElement(IconButton, null, /* @__PURE__ */ React.createElement(
79
+ Tooltip,
80
+ {
81
+ interactive: true,
82
+ title: /* @__PURE__ */ React.createElement(React.Fragment, null, standards == null ? void 0 : standards.map((standard, key) => /* @__PURE__ */ React.createElement("p", { key }, standard.pass ? /* @__PURE__ */ React.createElement("span", { className: standardItem }, /* @__PURE__ */ React.createElement(CheckCircle, { className: tooltipIcon }), " ", standard.name) : /* @__PURE__ */ React.createElement("span", { className: standardItem }, /* @__PURE__ */ React.createElement(RadioButtonUncheckedIcon, { className: tooltipIcon }), " ", standard.name))))
83
+ },
84
+ /* @__PURE__ */ React.createElement(InfoIcon, null)
85
+ ))), /* @__PURE__ */ React.createElement("div", { className: containerStyle }, /* @__PURE__ */ React.createElement(Typography, { className: largeTextStyle }, completed), /* @__PURE__ */ React.createElement(Typography, { className: smallTextStyle }, "/", total)), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement(
86
+ BorderLinearProgress,
87
+ {
88
+ variant: "determinate",
89
+ value: completed / total * 100
90
+ }
91
+ ))) : /* @__PURE__ */ React.createElement("div", { className: containerStyle }, /* @__PURE__ */ React.createElement(Typography, { className: smallTextStyle }, "Unable to retrieve Scores")));
92
+ }
93
+
94
+ export { ServiceStandardsCard as default };
95
+ //# sourceMappingURL=ServiceStandardsCard.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceStandardsCard.esm.js","sources":["../../../src/components/PagerDutyCardCommon/ServiceStandardsCard.tsx"],"sourcesContent":["import { BackstageTheme } from \"@backstage/theme\";\nimport {\n Card,\n IconButton,\n LinearProgress,\n Theme,\n Tooltip,\n Typography,\n makeStyles,\n withStyles,\n} from \"@material-ui/core\";\nimport React from \"react\";\nimport InfoIcon from \"@material-ui/icons/Info\";\nimport { PagerDutyServiceStandard } from \"@pagerduty/backstage-plugin-common\";\nimport CheckCircle from \"@material-ui/icons/CheckCircle\";\nimport RadioButtonUncheckedIcon from \"@material-ui/icons/RadioButtonUnchecked\";\n\ntype Props = {\n total: number | undefined;\n completed: number | undefined;\n standards: PagerDutyServiceStandard[] | undefined;\n compact?: boolean;\n};\n\nfunction colorFromPercentage(theme: Theme, percentage: number) {\n if (percentage < 0.5) {\n return theme.palette.error.main;\n } else if (percentage < 0.8) {\n return theme.palette.warning.main;\n }\n return theme.palette.success.main;\n}\n\nfunction ServiceStandardsCard({ total, completed, standards, compact }: Props) {\n const useStyles = makeStyles<BackstageTheme>((theme) => ({\n cardStyle: {\n height: compact !== true ? \"120px\" : \"80px\",\n display: \"grid\",\n gridTemplateRows: \"1fr auto auto\",\n backgroundColor: \"rgba(0, 0, 0, 0.03)\",\n },\n containerStyle: {\n display: \"flex\",\n justifyContent: \"center\",\n marginTop: compact !== true ? \"-100px\" : \"-50px\",\n },\n largeTextStyle: {\n fontSize: compact !== true ? \"50px\" : \"40px\",\n color:\n completed !== undefined && total !== undefined\n ? colorFromPercentage(theme, completed / total)\n : colorFromPercentage(theme, 0),\n alignSelf: \"center\",\n justifyContent: \"center\",\n },\n smallTextStyle: {\n color: theme.palette.textSubtle,\n fontSize: compact !== true ? \"14px\" : \"12px\",\n fontWeight: \"bold\",\n alignSelf: \"center\",\n justifyContent: \"center\",\n marginLeft: \"-2px\",\n marginTop: compact !== true ? \"25px\" : \"20px\",\n },\n tooltipContainer: {},\n tooltipIcon: {\n marginRight: \"5px\",\n },\n standardItem: {\n display: \"flex\",\n alignItems: \"center\",\n },\n }));\n\n const BorderLinearProgress = withStyles((theme) => ({\n root: {\n height: 10,\n borderRadius: 5,\n margin: 5,\n },\n colorPrimary: {\n backgroundColor:\n theme.palette.grey[theme.palette.type === \"light\" ? 200 : 700],\n },\n bar: {\n borderRadius: 5,\n backgroundColor:\n completed !== undefined && total !== undefined\n ? colorFromPercentage(theme, completed / total)\n : colorFromPercentage(theme, 0),\n },\n }))(LinearProgress);\n\n const {\n cardStyle,\n containerStyle,\n largeTextStyle,\n smallTextStyle,\n tooltipContainer,\n tooltipIcon,\n standardItem,\n } = useStyles();\n\n if (standards === undefined || completed === undefined || total === undefined) {\n return (\n <Card className={cardStyle}>\n <div className={containerStyle}>\n <Typography className={smallTextStyle}>\n Unable to retrieve Scores\n </Typography>\n </div>\n </Card>\n );\n }\n \n return (\n <Card className={cardStyle}>\n {completed !== undefined && total !== undefined ? (\n <>\n <div className={tooltipContainer}>\n <IconButton>\n <Tooltip\n interactive\n title={\n <>\n {standards?.map((standard, key) => (\n <p key={key}>\n {standard.pass ? (\n <span className={standardItem}>\n <CheckCircle className={tooltipIcon} />{\" \"}\n {standard.name}\n </span>\n ) : (\n <span className={standardItem}>\n <RadioButtonUncheckedIcon className={tooltipIcon} />{\" \"}\n {standard.name}\n </span>\n )}\n </p>\n ))}\n </>\n }\n >\n <InfoIcon />\n </Tooltip>\n </IconButton>\n </div>\n <div className={containerStyle}>\n <Typography className={largeTextStyle}>{completed}</Typography>\n <Typography className={smallTextStyle}>/{total}</Typography>\n </div>\n <div>\n <BorderLinearProgress\n variant=\"determinate\"\n value={(completed! / total!) * 100}\n />\n </div>\n </>\n ) : (\n <div className={containerStyle}>\n <Typography className={smallTextStyle}>\n Unable to retrieve Scores\n </Typography>\n </div>\n )}\n </Card>\n );\n}\n\nexport default ServiceStandardsCard;\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import { Card, Typography } from '@material-ui/core';
2
+ import React, { useEffect } from 'react';
3
+ import { makeStyles } from '@material-ui/core/styles';
4
+ import { useApi } from '@backstage/core-plugin-api';
5
+ import { pagerDutyApiRef } from '../../api/client.esm.js';
6
+ import { useAsyncFn } from 'react-use';
7
+ import Alert from '@material-ui/lab/Alert/Alert';
8
+ import { Progress } from '@backstage/core-components';
9
+
10
+ function labelFromStatus(status) {
11
+ let label;
12
+ switch (status) {
13
+ case "active":
14
+ label = "OK";
15
+ break;
16
+ case "warning":
17
+ label = "ACTIVE";
18
+ break;
19
+ case "critical":
20
+ label = "ALARM";
21
+ break;
22
+ case "maintenance":
23
+ label = "MAINTENANCE";
24
+ break;
25
+ case "disabled":
26
+ label = "DISABLED";
27
+ break;
28
+ default:
29
+ label = "OK";
30
+ break;
31
+ }
32
+ return label;
33
+ }
34
+ function colorFromStatus(theme, status) {
35
+ let color;
36
+ switch (status) {
37
+ case "active":
38
+ color = theme.palette.success.main;
39
+ break;
40
+ case "warning":
41
+ color = theme.palette.warningBackground;
42
+ break;
43
+ case "critical":
44
+ color = theme.palette.error.main;
45
+ break;
46
+ case "maintenance":
47
+ color = "#ebdc00";
48
+ break;
49
+ case "disabled":
50
+ color = "#A9A9A9";
51
+ break;
52
+ default:
53
+ color = theme.palette.success.main;
54
+ break;
55
+ }
56
+ return color;
57
+ }
58
+ function StatusCard({ serviceId, refreshStatus, compact }) {
59
+ const api = useApi(pagerDutyApiRef);
60
+ const [{ value: status, loading, error }, getStatus] = useAsyncFn(
61
+ async () => {
62
+ const { service: foundService } = await api.getServiceById(serviceId);
63
+ return foundService.status;
64
+ }
65
+ );
66
+ const useStyles = makeStyles((theme) => ({
67
+ cardStyle: {
68
+ height: compact !== true ? "120px" : "80px",
69
+ display: "flex",
70
+ alignItems: "center",
71
+ justifyContent: "center",
72
+ backgroundColor: status !== void 0 ? colorFromStatus(theme, status) : colorFromStatus(theme, "active"),
73
+ marginRight: "10px"
74
+ },
75
+ largeTextStyle: {
76
+ color: "white",
77
+ fontWeight: "bold",
78
+ fontSize: "20px",
79
+ wordWrap: "break-word"
80
+ }
81
+ }));
82
+ const { cardStyle, largeTextStyle } = useStyles();
83
+ useEffect(() => {
84
+ getStatus();
85
+ }, [refreshStatus, getStatus]);
86
+ if (error) {
87
+ if (error.message.includes("Forbidden")) {
88
+ return /* @__PURE__ */ React.createElement("p", null, "forbidden");
89
+ }
90
+ return /* @__PURE__ */ React.createElement(Alert, { severity: "error" }, "Error encountered while fetching information. ", error.message);
91
+ }
92
+ if (loading) {
93
+ return /* @__PURE__ */ React.createElement(Progress, null);
94
+ }
95
+ if (!status) {
96
+ return /* @__PURE__ */ React.createElement("p", null, "not found");
97
+ }
98
+ return /* @__PURE__ */ React.createElement(Card, { className: cardStyle }, status !== void 0 ? /* @__PURE__ */ React.createElement(Typography, { className: largeTextStyle }, labelFromStatus(status)) : /* @__PURE__ */ React.createElement(Typography, { className: largeTextStyle }, "Unable to get status"));
99
+ }
100
+
101
+ export { StatusCard as default };
102
+ //# sourceMappingURL=StatusCard.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StatusCard.esm.js","sources":["../../../src/components/PagerDutyCardCommon/StatusCard.tsx"],"sourcesContent":["import { Card, Typography } from \"@material-ui/core\";\nimport React, { useEffect } from \"react\";\nimport { Theme, makeStyles } from \"@material-ui/core/styles\";\nimport { BackstageTheme } from \"@backstage/theme\";\nimport { useApi } from \"@backstage/core-plugin-api\";\nimport { pagerDutyApiRef } from \"../../api\";\nimport { useAsyncFn } from \"react-use\";\nimport Alert from \"@material-ui/lab/Alert/Alert\";\nimport { Progress } from \"@backstage/core-components\";\n\ntype Props = {\n serviceId: string;\n refreshStatus: boolean;\n compact?: boolean;\n};\n\nfunction labelFromStatus(status: string) {\n let label;\n switch (status) {\n case \"active\":\n label = \"OK\";\n break;\n case \"warning\":\n label = \"ACTIVE\";\n break;\n case \"critical\":\n label = \"ALARM\";\n break;\n case \"maintenance\":\n label = \"MAINTENANCE\";\n break;\n case \"disabled\":\n label = \"DISABLED\";\n break;\n default:\n label = \"OK\";\n break;\n }\n\n return label;\n}\n\nfunction colorFromStatus(theme: Theme, status: string) {\n let color;\n switch (status) {\n case \"active\":\n color = theme.palette.success.main;\n break;\n case \"warning\":\n color = theme.palette.warningBackground;\n break;\n case \"critical\":\n color = theme.palette.error.main;\n break;\n case \"maintenance\":\n color = \"#ebdc00\";\n break;\n case \"disabled\":\n color = \"#A9A9A9\";\n break;\n default:\n color = theme.palette.success.main;\n break;\n }\n\n return color;\n}\n\nfunction StatusCard({ serviceId, refreshStatus, compact}: Props) {\n const api = useApi(pagerDutyApiRef);\n const [{ value: status, loading, error }, getStatus] = useAsyncFn(\n async () => {\n const { service: foundService } = await api.getServiceById(serviceId);\n return foundService.status;\n }\n );\n\n const useStyles = makeStyles<BackstageTheme>((theme) => ({\n cardStyle: {\n height: compact !== true ? \"120px\" : \"80px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor:\n status !== undefined\n ? colorFromStatus(theme, status)\n : colorFromStatus(theme, \"active\"),\n marginRight: \"10px\",\n },\n largeTextStyle: {\n color: \"white\",\n fontWeight: \"bold\",\n fontSize: \"20px\",\n wordWrap: \"break-word\",\n },\n }));\n\n const { cardStyle, largeTextStyle } = useStyles();\n\n useEffect(() => {\n getStatus();\n }, [refreshStatus, getStatus]);\n\n if (error) {\n if (error.message.includes(\"Forbidden\")) {\n return <p>forbidden</p>;\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 (!status) {\n return <p>not found</p>;\n }\n\n return (\n <Card className={cardStyle}>\n {status !== undefined ? (\n <Typography className={largeTextStyle}>\n {labelFromStatus(status)}\n </Typography>\n ) : (\n <Typography className={largeTextStyle}>Unable to get status</Typography>\n )}\n </Card>\n );\n}\n\nexport default StatusCard;\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import React, { useState, useCallback } from 'react';
2
+ import { makeStyles, IconButton } from '@material-ui/core';
3
+ import { TriggerDialog } from '../TriggerDialog/TriggerDialog.esm.js';
4
+ import AddAlert from '@material-ui/icons/AddAlert';
5
+
6
+ function TriggerIncidentButton({ integrationKey, entityName, compact, handleRefresh }) {
7
+ const useStyles = makeStyles((theme) => ({
8
+ buttonStyle: {
9
+ color: theme.palette.text.primary,
10
+ "&:hover": {
11
+ backgroundColor: "transparent",
12
+ textDecoration: "underline"
13
+ }
14
+ },
15
+ containerStyle: {
16
+ fontSize: compact !== true ? "12px" : "10px",
17
+ width: compact !== true ? "80px" : "60px",
18
+ marginRight: "-10px"
19
+ },
20
+ iconStyle: {
21
+ fontSize: "30px",
22
+ marginBottom: "-10px"
23
+ },
24
+ textStyle: {
25
+ marginBottom: "-10px"
26
+ }
27
+ }));
28
+ const { buttonStyle, containerStyle, iconStyle, textStyle } = useStyles();
29
+ const [dialogShown, setDialogShown] = useState(false);
30
+ const showDialog = useCallback(() => {
31
+ setDialogShown(true);
32
+ }, [setDialogShown]);
33
+ const hideDialog = useCallback(() => {
34
+ setDialogShown(false);
35
+ }, [setDialogShown]);
36
+ const disabled = !integrationKey;
37
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
38
+ IconButton,
39
+ {
40
+ "aria-label": "create-incident",
41
+ onClick: showDialog,
42
+ className: disabled ? "" : buttonStyle,
43
+ disabled
44
+ },
45
+ /* @__PURE__ */ React.createElement("div", { className: containerStyle }, /* @__PURE__ */ React.createElement(AddAlert, { className: iconStyle }), /* @__PURE__ */ React.createElement("p", { className: textStyle }, "Create new incident"))
46
+ ), integrationKey && /* @__PURE__ */ React.createElement(
47
+ TriggerDialog,
48
+ {
49
+ showDialog: dialogShown,
50
+ handleDialog: hideDialog,
51
+ integrationKey,
52
+ serviceName: entityName,
53
+ onIncidentCreated: handleRefresh
54
+ }
55
+ ));
56
+ }
57
+
58
+ export { TriggerIncidentButton };
59
+ //# sourceMappingURL=TriggerIncidentButton.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerIncidentButton.esm.js","sources":["../../../src/components/PagerDutyCardCommon/TriggerIncidentButton.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, useState } from \"react\";\nimport { makeStyles, IconButton } from \"@material-ui/core\";\nimport { BackstageTheme } from \"@backstage/theme\";\n\nimport { TriggerDialog } from \"../TriggerDialog\";\nimport AddAlert from \"@material-ui/icons/AddAlert\";\n\n/** @public */\nexport type TriggerIncidentButtonProps = {\n integrationKey: string | undefined;\n entityName: string;\n compact?: boolean;\n handleRefresh: () => void;\n}\n\n/** @public */\nexport function TriggerIncidentButton({ integrationKey, entityName, compact, handleRefresh } : TriggerIncidentButtonProps) {\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 ? \"80px\" : \"60px\",\n marginRight: \"-10px\",\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 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 \n return (\n <>\n <IconButton\n aria-label=\"create-incident\"\n onClick={showDialog}\n className={disabled ? \"\" : buttonStyle}\n disabled={disabled}\n >\n <div className={containerStyle}>\n <AddAlert className={iconStyle} />\n <p className={textStyle}>Create new incident</p>\n </div>\n </IconButton>\n {integrationKey && (\n <TriggerDialog\n showDialog={dialogShown}\n handleDialog={hideDialog}\n integrationKey={integrationKey}\n serviceName={entityName}\n onIncidentCreated={handleRefresh}\n />\n )}\n </>\n );\n}\n"],"names":[],"mappings":";;;;;AAiCO,SAAS,sBAAsB,EAAE,cAAA,EAAgB,UAAY,EAAA,OAAA,EAAS,eAA8C,EAAA;AACzH,EAAM,MAAA,SAAA,GAAY,UAA2B,CAAA,CAAC,KAAW,MAAA;AAAA,IACvD,WAAa,EAAA;AAAA,MACX,KAAA,EAAO,KAAM,CAAA,OAAA,CAAQ,IAAK,CAAA,OAAA;AAAA,MAC1B,SAAW,EAAA;AAAA,QACT,eAAiB,EAAA,aAAA;AAAA,QACjB,cAAgB,EAAA,WAAA;AAAA,OAClB;AAAA,KACF;AAAA,IACA,cAAgB,EAAA;AAAA,MACd,QAAA,EAAU,OAAY,KAAA,IAAA,GAAO,MAAS,GAAA,MAAA;AAAA,MACtC,KAAA,EAAO,OAAY,KAAA,IAAA,GAAO,MAAS,GAAA,MAAA;AAAA,MACnC,WAAa,EAAA,OAAA;AAAA,KACf;AAAA,IACA,SAAW,EAAA;AAAA,MACT,QAAU,EAAA,MAAA;AAAA,MACV,YAAc,EAAA,OAAA;AAAA,KAChB;AAAA,IACA,SAAW,EAAA;AAAA,MACT,YAAc,EAAA,OAAA;AAAA,KAChB;AAAA,GACA,CAAA,CAAA,CAAA;AAEF,EAAA,MAAM,EAAE,WAAa,EAAA,cAAA,EAAgB,SAAW,EAAA,SAAA,KAAc,SAAU,EAAA,CAAA;AACxE,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;AAElB,EAAA,uBAEI,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,YAAW,EAAA,iBAAA;AAAA,MACX,OAAS,EAAA,UAAA;AAAA,MACT,SAAA,EAAW,WAAW,EAAK,GAAA,WAAA;AAAA,MAC3B,QAAA;AAAA,KAAA;AAAA,oBAEC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,cAAA,EAAA,sCACb,QAAS,EAAA,EAAA,SAAA,EAAW,SAAW,EAAA,CAAA,kBAC/B,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAE,SAAW,EAAA,SAAA,EAAA,EAAW,qBAAmB,CAC9C,CAAA;AAAA,KAED,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,UAAA;AAAA,MACb,iBAAmB,EAAA,aAAA;AAAA,KAAA;AAAA,GAGzB,CAAA,CAAA;AAEJ;;;;"}