@backstage/plugin-kubernetes-react 0.5.13 → 0.5.14-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/alpha.d.ts +77 -0
  3. package/dist/components/Cluster/Cluster.esm.js +6 -9
  4. package/dist/components/Cluster/Cluster.esm.js.map +1 -1
  5. package/dist/components/ConfigmapsAccordions/ConfigmapsDrawer.esm.js +10 -1
  6. package/dist/components/ConfigmapsAccordions/ConfigmapsDrawer.esm.js.map +1 -1
  7. package/dist/components/CronJobsAccordions/CronJobsDrawer.esm.js +10 -1
  8. package/dist/components/CronJobsAccordions/CronJobsDrawer.esm.js.map +1 -1
  9. package/dist/components/CustomResources/ArgoRollouts/Rollout.esm.js +15 -27
  10. package/dist/components/CustomResources/ArgoRollouts/Rollout.esm.js.map +1 -1
  11. package/dist/components/CustomResources/ArgoRollouts/RolloutDrawer.esm.js +10 -1
  12. package/dist/components/CustomResources/ArgoRollouts/RolloutDrawer.esm.js.map +1 -1
  13. package/dist/components/CustomResources/DefaultCustomResourceDrawer.esm.js +2 -0
  14. package/dist/components/CustomResources/DefaultCustomResourceDrawer.esm.js.map +1 -1
  15. package/dist/components/DaemonSetsAccordions/DaemonSetsAccordions.esm.js +5 -10
  16. package/dist/components/DaemonSetsAccordions/DaemonSetsAccordions.esm.js.map +1 -1
  17. package/dist/components/DaemonSetsAccordions/DaemonSetsDrawer.esm.js +10 -1
  18. package/dist/components/DaemonSetsAccordions/DaemonSetsDrawer.esm.js.map +1 -1
  19. package/dist/components/DeploymentsAccordions/DeploymentDrawer.esm.js +10 -1
  20. package/dist/components/DeploymentsAccordions/DeploymentDrawer.esm.js.map +1 -1
  21. package/dist/components/DeploymentsAccordions/DeploymentsAccordions.esm.js +15 -27
  22. package/dist/components/DeploymentsAccordions/DeploymentsAccordions.esm.js.map +1 -1
  23. package/dist/components/ErrorPanel/ErrorPanel.esm.js +37 -20
  24. package/dist/components/ErrorPanel/ErrorPanel.esm.js.map +1 -1
  25. package/dist/components/ErrorReporting/ErrorReporting.esm.js +41 -34
  26. package/dist/components/ErrorReporting/ErrorReporting.esm.js.map +1 -1
  27. package/dist/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.esm.js +2 -0
  28. package/dist/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.esm.js.map +1 -1
  29. package/dist/components/IngressesAccordions/IngressDrawer.esm.js +4 -1
  30. package/dist/components/IngressesAccordions/IngressDrawer.esm.js.map +1 -1
  31. package/dist/components/JobsAccordions/JobsAccordions.esm.js +2 -0
  32. package/dist/components/JobsAccordions/JobsAccordions.esm.js.map +1 -1
  33. package/dist/components/JobsAccordions/JobsDrawer.esm.js +2 -0
  34. package/dist/components/JobsAccordions/JobsDrawer.esm.js.map +1 -1
  35. package/dist/components/KubernetesDialog/KubernetesDialog.esm.js +4 -1
  36. package/dist/components/KubernetesDialog/KubernetesDialog.esm.js.map +1 -1
  37. package/dist/components/KubernetesDrawer/KubernetesDrawer.esm.js +6 -3
  38. package/dist/components/KubernetesDrawer/KubernetesDrawer.esm.js.map +1 -1
  39. package/dist/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.esm.js +25 -15
  40. package/dist/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.esm.js.map +1 -1
  41. package/dist/components/KubernetesDrawer/ManifestYaml.esm.js +5 -2
  42. package/dist/components/KubernetesDrawer/ManifestYaml.esm.js.map +1 -1
  43. package/dist/components/PodExecTerminal/PodExecTerminalDialog.esm.js +10 -3
  44. package/dist/components/PodExecTerminal/PodExecTerminalDialog.esm.js.map +1 -1
  45. package/dist/components/Pods/Events/Events.esm.js +4 -1
  46. package/dist/components/Pods/Events/Events.esm.js.map +1 -1
  47. package/dist/components/Pods/FixDialog/FixDialog.esm.js +26 -16
  48. package/dist/components/Pods/FixDialog/FixDialog.esm.js.map +1 -1
  49. package/dist/components/Pods/PodDrawer/ContainerCard.esm.js +8 -5
  50. package/dist/components/Pods/PodDrawer/ContainerCard.esm.js.map +1 -1
  51. package/dist/components/Pods/PodDrawer/PodDrawer.esm.js +8 -5
  52. package/dist/components/Pods/PodDrawer/PodDrawer.esm.js.map +1 -1
  53. package/dist/components/Pods/PodLogs/PodLogs.esm.js +5 -2
  54. package/dist/components/Pods/PodLogs/PodLogs.esm.js.map +1 -1
  55. package/dist/components/Pods/PodLogs/PodLogsDialog.esm.js +10 -3
  56. package/dist/components/Pods/PodLogs/PodLogsDialog.esm.js.map +1 -1
  57. package/dist/components/Pods/PodsTable.esm.js +30 -25
  58. package/dist/components/Pods/PodsTable.esm.js.map +1 -1
  59. package/dist/components/ServicesAccordions/ServiceDrawer.esm.js +4 -1
  60. package/dist/components/ServicesAccordions/ServiceDrawer.esm.js.map +1 -1
  61. package/dist/components/StatefulSetsAccordions/StatefulSetDrawer.esm.js +4 -1
  62. package/dist/components/StatefulSetsAccordions/StatefulSetDrawer.esm.js.map +1 -1
  63. package/dist/components/StatefulSetsAccordions/StatefulSetsAccordions.esm.js +14 -14
  64. package/dist/components/StatefulSetsAccordions/StatefulSetsAccordions.esm.js.map +1 -1
  65. package/dist/translation.esm.js +113 -0
  66. package/dist/translation.esm.js.map +1 -1
  67. package/package.json +10 -10
@@ -28,6 +28,8 @@ import '../../hooks/useMatchingErrors.esm.js';
28
28
  import '@material-ui/icons/OpenInBrowser';
29
29
  import '../KubernetesDialog/KubernetesDialog.esm.js';
30
30
  import '../PodExecTerminal/PodExecTerminal.esm.js';
31
+ import '@backstage/core-plugin-api/alpha';
32
+ import '../../translation.esm.js';
31
33
  import '@material-ui/core/Paper';
32
34
  import '@material-ui/lab/Skeleton';
33
35
  import '@material-ui/icons/Subject';
@@ -1 +1 @@
1
- {"version":3,"file":"JobsAccordions.esm.js","sources":["../../../src/components/JobsAccordions/JobsAccordions.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ReactNode, useContext } from 'react';\nimport Accordion from '@material-ui/core/Accordion';\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport Grid from '@material-ui/core/Grid';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport type { V1Job, V1Pod } from '@kubernetes/client-node';\nimport { PodsTable } from '../Pods';\nimport { JobDrawer } from './JobsDrawer';\nimport { getOwnedResources } from '../../utils/owner';\nimport { GroupedResponsesContext } from '../../hooks';\nimport {\n StatusError,\n StatusOK,\n StatusPending,\n} from '@backstage/core-components';\n\n/**\n *\n *\n * @public\n */\nexport type JobsAccordionsProps = {\n jobs: V1Job[];\n children?: ReactNode;\n};\n\ntype JobAccordionProps = {\n job: V1Job;\n ownedPods: V1Pod[];\n children?: ReactNode;\n};\n\ntype JobSummaryProps = {\n job: V1Job;\n children?: ReactNode;\n};\n\nconst JobSummary = ({ job }: JobSummaryProps) => {\n return (\n <Grid\n container\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n spacing={0}\n >\n <Grid xs={6} item>\n <JobDrawer job={job} />\n </Grid>\n <Grid\n item\n container\n xs={6}\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-end\"\n spacing={0}\n >\n <Grid item>\n {job.status?.succeeded && <StatusOK>Succeeded</StatusOK>}\n {job.status?.active && <StatusPending>Running</StatusPending>}\n {job.status?.failed && <StatusError>Failed</StatusError>}\n </Grid>\n <Grid item>Start time: {job.status?.startTime?.toString()}</Grid>\n {job.status?.completionTime && (\n <Grid item>\n Completion time: {job.status.completionTime.toString()}\n </Grid>\n )}\n </Grid>\n </Grid>\n );\n};\n\nconst JobAccordion = ({ job, ownedPods }: JobAccordionProps) => {\n return (\n <Accordion TransitionProps={{ unmountOnExit: true }} variant=\"outlined\">\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <JobSummary job={job} />\n </AccordionSummary>\n <AccordionDetails>\n <PodsTable pods={ownedPods} />\n </AccordionDetails>\n </Accordion>\n );\n};\n\n/**\n *\n *\n * @public\n */\nexport const JobsAccordions = ({ jobs }: JobsAccordionsProps) => {\n const groupedResponses = useContext(GroupedResponsesContext);\n\n return (\n <Grid\n container\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n >\n {jobs.map((job, i) => (\n <Grid container item key={i} xs>\n <Grid item xs>\n <JobAccordion\n ownedPods={getOwnedResources(job, groupedResponses.pods)}\n job={job}\n />\n </Grid>\n </Grid>\n ))}\n </Grid>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JobsAccordions.esm.js","sources":["../../../src/components/JobsAccordions/JobsAccordions.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ReactNode, useContext } from 'react';\nimport Accordion from '@material-ui/core/Accordion';\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\nimport Grid from '@material-ui/core/Grid';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport type { V1Job, V1Pod } from '@kubernetes/client-node';\nimport { PodsTable } from '../Pods';\nimport { JobDrawer } from './JobsDrawer';\nimport { getOwnedResources } from '../../utils/owner';\nimport { GroupedResponsesContext } from '../../hooks';\nimport {\n StatusError,\n StatusOK,\n StatusPending,\n} from '@backstage/core-components';\n\n/**\n *\n *\n * @public\n */\nexport type JobsAccordionsProps = {\n jobs: V1Job[];\n children?: ReactNode;\n};\n\ntype JobAccordionProps = {\n job: V1Job;\n ownedPods: V1Pod[];\n children?: ReactNode;\n};\n\ntype JobSummaryProps = {\n job: V1Job;\n children?: ReactNode;\n};\n\nconst JobSummary = ({ job }: JobSummaryProps) => {\n return (\n <Grid\n container\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n spacing={0}\n >\n <Grid xs={6} item>\n <JobDrawer job={job} />\n </Grid>\n <Grid\n item\n container\n xs={6}\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-end\"\n spacing={0}\n >\n <Grid item>\n {job.status?.succeeded && <StatusOK>Succeeded</StatusOK>}\n {job.status?.active && <StatusPending>Running</StatusPending>}\n {job.status?.failed && <StatusError>Failed</StatusError>}\n </Grid>\n <Grid item>Start time: {job.status?.startTime?.toString()}</Grid>\n {job.status?.completionTime && (\n <Grid item>\n Completion time: {job.status.completionTime.toString()}\n </Grid>\n )}\n </Grid>\n </Grid>\n );\n};\n\nconst JobAccordion = ({ job, ownedPods }: JobAccordionProps) => {\n return (\n <Accordion TransitionProps={{ unmountOnExit: true }} variant=\"outlined\">\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <JobSummary job={job} />\n </AccordionSummary>\n <AccordionDetails>\n <PodsTable pods={ownedPods} />\n </AccordionDetails>\n </Accordion>\n );\n};\n\n/**\n *\n *\n * @public\n */\nexport const JobsAccordions = ({ jobs }: JobsAccordionsProps) => {\n const groupedResponses = useContext(GroupedResponsesContext);\n\n return (\n <Grid\n container\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n >\n {jobs.map((job, i) => (\n <Grid container item key={i} xs>\n <Grid item xs>\n <JobAccordion\n ownedPods={getOwnedResources(job, groupedResponses.pods)}\n job={job}\n />\n </Grid>\n </Grid>\n ))}\n </Grid>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -6,6 +6,8 @@ import '@material-ui/core/FormControlLabel';
6
6
  import '@material-ui/core/Switch';
7
7
  import 'js-yaml';
8
8
  import 'react';
9
+ import '@backstage/core-plugin-api/alpha';
10
+ import '../../translation.esm.js';
9
11
  import Typography from '@material-ui/core/Typography';
10
12
  import Grid from '@material-ui/core/Grid';
11
13
 
@@ -1 +1 @@
1
- {"version":3,"file":"JobsDrawer.esm.js","sources":["../../../src/components/JobsAccordions/JobsDrawer.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { V1Job } from '@kubernetes/client-node';\nimport { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer';\nimport Typography from '@material-ui/core/Typography';\nimport Grid from '@material-ui/core/Grid';\n\nexport const JobDrawer = ({\n job,\n expanded,\n}: {\n job: V1Job;\n expanded?: boolean;\n}) => {\n return (\n <KubernetesStructuredMetadataTableDrawer\n object={job}\n expanded={expanded}\n kind=\"Job\"\n renderObject={(jobObj: V1Job) => {\n return {\n parallelism: jobObj.spec?.parallelism ?? '???',\n completions: jobObj.spec?.completions ?? '???',\n backoffLimit: jobObj.spec?.backoffLimit ?? '???',\n startTime: jobObj.status?.startTime ?? '???',\n };\n }}\n >\n <Grid\n container\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n spacing={0}\n >\n <Grid item>\n <Typography variant=\"body1\">\n {job.metadata?.name ?? 'unknown object'}\n </Typography>\n </Grid>\n <Grid item>\n <Typography color=\"textSecondary\" variant=\"subtitle1\">\n Job\n </Typography>\n </Grid>\n </Grid>\n </KubernetesStructuredMetadataTableDrawer>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAoBO,MAAM,YAAY,CAAC;AAAA,EACxB,GAAA;AAAA,EACA;AACF,CAAA,KAGM;AACJ,EAAA,uBACE,GAAA;AAAA,IAAC,uCAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,GAAA;AAAA,MACR,QAAA;AAAA,MACA,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAc,CAAC,MAAA,KAAkB;AAC/B,QAAA,OAAO;AAAA,UACL,WAAA,EAAa,MAAA,CAAO,IAAA,EAAM,WAAA,IAAe,KAAA;AAAA,UACzC,WAAA,EAAa,MAAA,CAAO,IAAA,EAAM,WAAA,IAAe,KAAA;AAAA,UACzC,YAAA,EAAc,MAAA,CAAO,IAAA,EAAM,YAAA,IAAgB,KAAA;AAAA,UAC3C,SAAA,EAAW,MAAA,CAAO,MAAA,EAAQ,SAAA,IAAa;AAAA,SACzC;AAAA,MACF,CAAA;AAAA,MAEA,QAAA,kBAAA,IAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAS,IAAA;AAAA,UACT,SAAA,EAAU,QAAA;AAAA,UACV,cAAA,EAAe,YAAA;AAAA,UACf,UAAA,EAAW,YAAA;AAAA,UACX,OAAA,EAAS,CAAA;AAAA,UAET,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EACR,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EACjB,QAAA,EAAA,GAAA,CAAI,QAAA,EAAU,IAAA,IAAQ,gBAAA,EACzB,CAAA,EACF,CAAA;AAAA,4BACA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EACR,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,eAAA,EAAgB,OAAA,EAAQ,WAAA,EAAY,QAAA,EAAA,KAAA,EAEtD,CAAA,EACF;AAAA;AAAA;AAAA;AACF;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"JobsDrawer.esm.js","sources":["../../../src/components/JobsAccordions/JobsDrawer.tsx"],"sourcesContent":["/*\n * Copyright 2021 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type { V1Job } from '@kubernetes/client-node';\nimport { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer';\nimport Typography from '@material-ui/core/Typography';\nimport Grid from '@material-ui/core/Grid';\n\nexport const JobDrawer = ({\n job,\n expanded,\n}: {\n job: V1Job;\n expanded?: boolean;\n}) => {\n return (\n <KubernetesStructuredMetadataTableDrawer\n object={job}\n expanded={expanded}\n kind=\"Job\"\n renderObject={(jobObj: V1Job) => {\n return {\n parallelism: jobObj.spec?.parallelism ?? '???',\n completions: jobObj.spec?.completions ?? '???',\n backoffLimit: jobObj.spec?.backoffLimit ?? '???',\n startTime: jobObj.status?.startTime ?? '???',\n };\n }}\n >\n <Grid\n container\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-start\"\n spacing={0}\n >\n <Grid item>\n <Typography variant=\"body1\">\n {job.metadata?.name ?? 'unknown object'}\n </Typography>\n </Grid>\n <Grid item>\n <Typography color=\"textSecondary\" variant=\"subtitle1\">\n Job\n </Typography>\n </Grid>\n </Grid>\n </KubernetesStructuredMetadataTableDrawer>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;AAoBO,MAAM,YAAY,CAAC;AAAA,EACxB,GAAA;AAAA,EACA;AACF,CAAA,KAGM;AACJ,EAAA,uBACE,GAAA;AAAA,IAAC,uCAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,GAAA;AAAA,MACR,QAAA;AAAA,MACA,IAAA,EAAK,KAAA;AAAA,MACL,YAAA,EAAc,CAAC,MAAA,KAAkB;AAC/B,QAAA,OAAO;AAAA,UACL,WAAA,EAAa,MAAA,CAAO,IAAA,EAAM,WAAA,IAAe,KAAA;AAAA,UACzC,WAAA,EAAa,MAAA,CAAO,IAAA,EAAM,WAAA,IAAe,KAAA;AAAA,UACzC,YAAA,EAAc,MAAA,CAAO,IAAA,EAAM,YAAA,IAAgB,KAAA;AAAA,UAC3C,SAAA,EAAW,MAAA,CAAO,MAAA,EAAQ,SAAA,IAAa;AAAA,SACzC;AAAA,MACF,CAAA;AAAA,MAEA,QAAA,kBAAA,IAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAS,IAAA;AAAA,UACT,SAAA,EAAU,QAAA;AAAA,UACV,cAAA,EAAe,YAAA;AAAA,UACf,UAAA,EAAW,YAAA;AAAA,UACX,OAAA,EAAS,CAAA;AAAA,UAET,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EACR,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,OAAA,EACjB,QAAA,EAAA,GAAA,CAAI,QAAA,EAAU,IAAA,IAAQ,gBAAA,EACzB,CAAA,EACF,CAAA;AAAA,4BACA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EACR,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,KAAA,EAAM,eAAA,EAAgB,OAAA,EAAQ,WAAA,EAAY,QAAA,EAAA,KAAA,EAEtD,CAAA,EACF;AAAA;AAAA;AAAA;AACF;AAAA,GACF;AAEJ;;;;"}
@@ -7,6 +7,8 @@ import IconButton from '@material-ui/core/IconButton';
7
7
  import { makeStyles, createStyles } from '@material-ui/core/styles';
8
8
  import CloseIcon from '@material-ui/icons/Close';
9
9
  import { useState } from 'react';
10
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
11
+ import { kubernetesReactTranslationRef } from '../../translation.esm.js';
10
12
 
11
13
  const useStyles = makeStyles(
12
14
  (theme) => createStyles({
@@ -29,6 +31,7 @@ const KubernetesDialog = ({
29
31
  title
30
32
  }) => {
31
33
  const classes = useStyles();
34
+ const { t } = useTranslationRef(kubernetesReactTranslationRef);
32
35
  const [open, setOpen] = useState(false);
33
36
  const openDialog = () => {
34
37
  setOpen(true);
@@ -51,7 +54,7 @@ const KubernetesDialog = ({
51
54
  /* @__PURE__ */ jsx(
52
55
  IconButton,
53
56
  {
54
- "aria-label": "close",
57
+ "aria-label": t("kubernetesDialog.closeAriaLabel"),
55
58
  className: classes.closeButton,
56
59
  onClick: closeDialog,
57
60
  children: /* @__PURE__ */ jsx(CloseIcon, {})
@@ -1 +1 @@
1
- {"version":3,"file":"KubernetesDialog.esm.js","sources":["../../../src/components/KubernetesDialog/KubernetesDialog.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport IconButton from '@material-ui/core/IconButton';\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { ReactNode, useState } from 'react';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n dialogPaper: { minHeight: 'calc(100% - 64px)' },\n dialogContent: { flexBasis: 0 },\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n }),\n);\n\nexport interface KubernetesDialogProps {\n buttonAriaLabel: string;\n buttonIcon: ReactNode;\n buttonText: string;\n children?: ReactNode;\n disabled?: boolean;\n title: string;\n}\n\n/**\n * Dialog component for use in the Kubernetes plugin\n *\n * @public\n */\nexport const KubernetesDialog = ({\n buttonAriaLabel,\n buttonIcon,\n buttonText,\n children,\n disabled,\n title,\n}: KubernetesDialogProps) => {\n const classes = useStyles();\n\n const [open, setOpen] = useState(false);\n const openDialog = () => {\n setOpen(true);\n };\n const closeDialog = () => {\n setOpen(false);\n };\n\n return (\n <>\n <Dialog\n maxWidth=\"xl\"\n fullWidth\n open={open}\n onClose={closeDialog}\n PaperProps={{ className: classes.dialogPaper }}\n >\n <DialogTitle id=\"dialog-title\">\n {title}\n <IconButton\n aria-label=\"close\"\n className={classes.closeButton}\n onClick={closeDialog}\n >\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n <DialogContent className={classes.dialogContent}>\n {children}\n </DialogContent>\n </Dialog>\n <Button\n variant=\"outlined\"\n aria-label={buttonAriaLabel}\n component=\"label\"\n disabled={disabled}\n onClick={openDialog}\n startIcon={buttonIcon}\n >\n {buttonText}\n </Button>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAyBA,MAAM,SAAA,GAAY,UAAA;AAAA,EAAW,CAAC,UAC5B,YAAA,CAAa;AAAA,IACX,WAAA,EAAa,EAAE,SAAA,EAAW,mBAAA,EAAoB;AAAA,IAC9C,aAAA,EAAe,EAAE,SAAA,EAAW,CAAA,EAAE;AAAA,IAC9B,WAAA,EAAa;AAAA,MACX,QAAA,EAAU,UAAA;AAAA,MACV,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,MACtB,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,MACpB,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,GAAG;AAAA;AAC/B,GACD;AACH,CAAA;AAgBO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,eAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAA6B;AAC3B,EAAA,MAAM,UAAU,SAAA,EAAU;AAE1B,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,KAAK,CAAA;AACtC,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,EACd,CAAA;AACA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAS,IAAA;AAAA,QACT,IAAA;AAAA,QACA,OAAA,EAAS,WAAA;AAAA,QACT,UAAA,EAAY,EAAE,SAAA,EAAW,OAAA,CAAQ,WAAA,EAAY;AAAA,QAE7C,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,WAAA,EAAA,EAAY,IAAG,cAAA,EACb,QAAA,EAAA;AAAA,YAAA,KAAA;AAAA,4BACD,GAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,YAAA,EAAW,OAAA;AAAA,gBACX,WAAW,OAAA,CAAQ,WAAA;AAAA,gBACnB,OAAA,EAAS,WAAA;AAAA,gBAET,8BAAC,SAAA,EAAA,EAAU;AAAA;AAAA;AACb,WAAA,EACF,CAAA;AAAA,0BACA,GAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAW,OAAA,CAAQ,eAC/B,QAAA,EACH;AAAA;AAAA;AAAA,KACF;AAAA,oBACA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,UAAA;AAAA,QACR,YAAA,EAAY,eAAA;AAAA,QACZ,SAAA,EAAU,OAAA;AAAA,QACV,QAAA;AAAA,QACA,OAAA,EAAS,UAAA;AAAA,QACT,SAAA,EAAW,UAAA;AAAA,QAEV,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"KubernetesDialog.esm.js","sources":["../../../src/components/KubernetesDialog/KubernetesDialog.tsx"],"sourcesContent":["/*\n * Copyright 2024 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport IconButton from '@material-ui/core/IconButton';\nimport { Theme, createStyles, makeStyles } from '@material-ui/core/styles';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { ReactNode, useState } from 'react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { kubernetesReactTranslationRef } from '../../translation';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n dialogPaper: { minHeight: 'calc(100% - 64px)' },\n dialogContent: { flexBasis: 0 },\n closeButton: {\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n color: theme.palette.grey[500],\n },\n }),\n);\n\nexport interface KubernetesDialogProps {\n buttonAriaLabel: string;\n buttonIcon: ReactNode;\n buttonText: string;\n children?: ReactNode;\n disabled?: boolean;\n title: string;\n}\n\n/**\n * Dialog component for use in the Kubernetes plugin\n *\n * @public\n */\nexport const KubernetesDialog = ({\n buttonAriaLabel,\n buttonIcon,\n buttonText,\n children,\n disabled,\n title,\n}: KubernetesDialogProps) => {\n const classes = useStyles();\n const { t } = useTranslationRef(kubernetesReactTranslationRef);\n\n const [open, setOpen] = useState(false);\n const openDialog = () => {\n setOpen(true);\n };\n const closeDialog = () => {\n setOpen(false);\n };\n\n return (\n <>\n <Dialog\n maxWidth=\"xl\"\n fullWidth\n open={open}\n onClose={closeDialog}\n PaperProps={{ className: classes.dialogPaper }}\n >\n <DialogTitle id=\"dialog-title\">\n {title}\n <IconButton\n aria-label={t('kubernetesDialog.closeAriaLabel')}\n className={classes.closeButton}\n onClick={closeDialog}\n >\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n <DialogContent className={classes.dialogContent}>\n {children}\n </DialogContent>\n </Dialog>\n <Button\n variant=\"outlined\"\n aria-label={buttonAriaLabel}\n component=\"label\"\n disabled={disabled}\n onClick={openDialog}\n startIcon={buttonIcon}\n >\n {buttonText}\n </Button>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;AA2BA,MAAM,SAAA,GAAY,UAAA;AAAA,EAAW,CAAC,UAC5B,YAAA,CAAa;AAAA,IACX,WAAA,EAAa,EAAE,SAAA,EAAW,mBAAA,EAAoB;AAAA,IAC9C,aAAA,EAAe,EAAE,SAAA,EAAW,CAAA,EAAE;AAAA,IAC9B,WAAA,EAAa;AAAA,MACX,QAAA,EAAU,UAAA;AAAA,MACV,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,MACtB,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,MACpB,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,GAAG;AAAA;AAC/B,GACD;AACH,CAAA;AAgBO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,eAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAA6B;AAC3B,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,6BAA6B,CAAA;AAE7D,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,SAAS,KAAK,CAAA;AACtC,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,EACd,CAAA;AACA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,IAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAS,IAAA;AAAA,QACT,IAAA;AAAA,QACA,OAAA,EAAS,WAAA;AAAA,QACT,UAAA,EAAY,EAAE,SAAA,EAAW,OAAA,CAAQ,WAAA,EAAY;AAAA,QAE7C,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,WAAA,EAAA,EAAY,IAAG,cAAA,EACb,QAAA,EAAA;AAAA,YAAA,KAAA;AAAA,4BACD,GAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,YAAA,EAAY,EAAE,iCAAiC,CAAA;AAAA,gBAC/C,WAAW,OAAA,CAAQ,WAAA;AAAA,gBACnB,OAAA,EAAS,WAAA;AAAA,gBAET,8BAAC,SAAA,EAAA,EAAU;AAAA;AAAA;AACb,WAAA,EACF,CAAA;AAAA,0BACA,GAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAW,OAAA,CAAQ,eAC/B,QAAA,EACH;AAAA;AAAA;AAAA,KACF;AAAA,oBACA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,UAAA;AAAA,QACR,YAAA,EAAY,eAAA;AAAA,QACZ,SAAA,EAAU,OAAA;AAAA,QACV,QAAA;AAAA,QACA,OAAA,EAAS,UAAA;AAAA,QACT,SAAA,EAAW,UAAA;AAAA,QAEV,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -10,6 +10,8 @@ import FormControlLabel from '@material-ui/core/FormControlLabel';
10
10
  import { makeStyles, createStyles, withStyles } from '@material-ui/core/styles';
11
11
  import CloseIcon from '@material-ui/icons/Close';
12
12
  import { ManifestYaml } from './ManifestYaml.esm.js';
13
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
14
+ import { kubernetesReactTranslationRef } from '../../translation.esm.js';
13
15
 
14
16
  const useDrawerContentStyles = makeStyles(
15
17
  (_theme) => createStyles({
@@ -33,6 +35,7 @@ const KubernetesDrawerContent = ({
33
35
  close
34
36
  }) => {
35
37
  const classes = useDrawerContentStyles();
38
+ const { t } = useTranslationRef(kubernetesReactTranslationRef);
36
39
  const [isYaml, setIsYaml] = useState(false);
37
40
  return /* @__PURE__ */ jsxs(Fragment, { children: [
38
41
  /* @__PURE__ */ jsx("div", { className: classes.header, children: /* @__PURE__ */ jsxs(Grid, { container: true, justifyContent: "flex-start", alignItems: "flex-start", children: [
@@ -40,7 +43,7 @@ const KubernetesDrawerContent = ({
40
43
  /* @__PURE__ */ jsx(Grid, { item: true, xs: 1, children: /* @__PURE__ */ jsx(
41
44
  IconButton,
42
45
  {
43
- title: "Close the drawer",
46
+ title: t("kubernetesDrawer.closeDrawer"),
44
47
  onClick: () => close(),
45
48
  color: "inherit",
46
49
  children: /* @__PURE__ */ jsx(CloseIcon, { className: classes.icon })
@@ -58,10 +61,10 @@ const KubernetesDrawerContent = ({
58
61
  onChange: (event) => {
59
62
  setIsYaml(event.target.checked);
60
63
  },
61
- name: "YAML"
64
+ name: t("kubernetesDrawer.yaml")
62
65
  }
63
66
  ),
64
- label: "YAML"
67
+ label: t("kubernetesDrawer.yaml")
65
68
  }
66
69
  ) })
67
70
  ] }) }),
@@ -1 +1 @@
1
- {"version":3,"file":"KubernetesDrawer.esm.js","sources":["../../../src/components/KubernetesDrawer/KubernetesDrawer.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ReactNode, ChangeEvent, useState } from 'react';\n\nimport type { IObjectMeta } from '@kubernetes-models/apimachinery/apis/meta/v1/ObjectMeta';\nimport Drawer from '@material-ui/core/Drawer';\nimport Grid from '@material-ui/core/Grid';\nimport IconButton from '@material-ui/core/IconButton';\nimport Switch from '@material-ui/core/Switch';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport {\n createStyles,\n makeStyles,\n Theme,\n withStyles,\n} from '@material-ui/core/styles';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { ManifestYaml } from './ManifestYaml';\n\nconst useDrawerContentStyles = makeStyles((_theme: Theme) =>\n createStyles({\n header: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n content: {\n height: '80%',\n },\n icon: {\n fontSize: 20,\n },\n }),\n);\n\n/**\n * The type of object that can be represented by the Drawer\n *\n * @public\n */\nexport interface KubernetesObject {\n kind: string;\n metadata?: IObjectMeta;\n}\n\ninterface KubernetesDrawerContentProps {\n close: () => void;\n kubernetesObject: KubernetesObject;\n header?: ReactNode;\n children?: ReactNode;\n}\n\nconst KubernetesDrawerContent = ({\n children,\n header,\n kubernetesObject,\n close,\n}: KubernetesDrawerContentProps) => {\n const classes = useDrawerContentStyles();\n const [isYaml, setIsYaml] = useState<boolean>(false);\n\n return (\n <>\n <div className={classes.header}>\n <Grid container justifyContent=\"flex-start\" alignItems=\"flex-start\">\n <Grid item xs={11}>\n <Typography variant=\"h5\">\n {kubernetesObject.metadata?.name}\n </Typography>\n </Grid>\n <Grid item xs={1}>\n <IconButton\n key=\"dismiss\"\n title=\"Close the drawer\"\n onClick={() => close()}\n color=\"inherit\"\n >\n <CloseIcon className={classes.icon} />\n </IconButton>\n </Grid>\n <Grid item xs={12}>\n {header}\n </Grid>\n <Grid item xs={12}>\n <FormControlLabel\n control={\n <Switch\n checked={isYaml}\n onChange={event => {\n setIsYaml(event.target.checked);\n }}\n name=\"YAML\"\n />\n }\n label=\"YAML\"\n />\n </Grid>\n </Grid>\n </div>\n <div className={classes.content}>\n {isYaml && <ManifestYaml object={kubernetesObject} />}\n {!isYaml && children}\n </div>\n </>\n );\n};\n\n/**\n * Props of KubernetesDrawer\n *\n * @public\n */\nexport interface KubernetesDrawerProps {\n open?: boolean;\n kubernetesObject: KubernetesObject;\n label: ReactNode;\n drawerContentsHeader?: ReactNode;\n children?: ReactNode;\n}\n\nconst useDrawerStyles = makeStyles((theme: Theme) =>\n createStyles({\n paper: {\n width: '50%',\n justifyContent: 'space-between',\n padding: theme.spacing(2.5),\n },\n }),\n);\n\nconst DrawerButton = withStyles({\n root: {\n padding: '6px 5px',\n },\n label: {\n textTransform: 'none',\n },\n})(Button);\n\n/**\n * Button/Drawer component for Kubernetes Objects\n *\n * @public\n */\nexport const KubernetesDrawer = ({\n open,\n label,\n drawerContentsHeader,\n kubernetesObject,\n children,\n}: KubernetesDrawerProps) => {\n const classes = useDrawerStyles();\n const [isOpen, setIsOpen] = useState<boolean>(open ?? false);\n\n const toggleDrawer = (e: ChangeEvent<{}>, newValue: boolean) => {\n e.stopPropagation();\n setIsOpen(newValue);\n };\n\n return (\n <>\n <DrawerButton onClick={() => setIsOpen(true)}>{label}</DrawerButton>\n <Drawer\n classes={{\n paper: classes.paper,\n }}\n anchor=\"right\"\n open={isOpen}\n onClose={(e: any) => toggleDrawer(e, false)}\n onClick={event => event.stopPropagation()}\n >\n {isOpen && (\n <KubernetesDrawerContent\n header={drawerContentsHeader}\n kubernetesObject={kubernetesObject}\n children={children}\n close={() => setIsOpen(false)}\n />\n )}\n </Drawer>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KubernetesDrawer.esm.js","sources":["../../../src/components/KubernetesDrawer/KubernetesDrawer.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { ReactNode, ChangeEvent, useState } from 'react';\n\nimport type { IObjectMeta } from '@kubernetes-models/apimachinery/apis/meta/v1/ObjectMeta';\nimport Drawer from '@material-ui/core/Drawer';\nimport Grid from '@material-ui/core/Grid';\nimport IconButton from '@material-ui/core/IconButton';\nimport Switch from '@material-ui/core/Switch';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport {\n createStyles,\n makeStyles,\n Theme,\n withStyles,\n} from '@material-ui/core/styles';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { ManifestYaml } from './ManifestYaml';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { kubernetesReactTranslationRef } from '../../translation';\n\nconst useDrawerContentStyles = makeStyles((_theme: Theme) =>\n createStyles({\n header: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n content: {\n height: '80%',\n },\n icon: {\n fontSize: 20,\n },\n }),\n);\n\n/**\n * The type of object that can be represented by the Drawer\n *\n * @public\n */\nexport interface KubernetesObject {\n kind: string;\n metadata?: IObjectMeta;\n}\n\ninterface KubernetesDrawerContentProps {\n close: () => void;\n kubernetesObject: KubernetesObject;\n header?: ReactNode;\n children?: ReactNode;\n}\n\nconst KubernetesDrawerContent = ({\n children,\n header,\n kubernetesObject,\n close,\n}: KubernetesDrawerContentProps) => {\n const classes = useDrawerContentStyles();\n const { t } = useTranslationRef(kubernetesReactTranslationRef);\n const [isYaml, setIsYaml] = useState<boolean>(false);\n\n return (\n <>\n <div className={classes.header}>\n <Grid container justifyContent=\"flex-start\" alignItems=\"flex-start\">\n <Grid item xs={11}>\n <Typography variant=\"h5\">\n {kubernetesObject.metadata?.name}\n </Typography>\n </Grid>\n <Grid item xs={1}>\n <IconButton\n key=\"dismiss\"\n title={t('kubernetesDrawer.closeDrawer')}\n onClick={() => close()}\n color=\"inherit\"\n >\n <CloseIcon className={classes.icon} />\n </IconButton>\n </Grid>\n <Grid item xs={12}>\n {header}\n </Grid>\n <Grid item xs={12}>\n <FormControlLabel\n control={\n <Switch\n checked={isYaml}\n onChange={event => {\n setIsYaml(event.target.checked);\n }}\n name={t('kubernetesDrawer.yaml')}\n />\n }\n label={t('kubernetesDrawer.yaml')}\n />\n </Grid>\n </Grid>\n </div>\n <div className={classes.content}>\n {isYaml && <ManifestYaml object={kubernetesObject} />}\n {!isYaml && children}\n </div>\n </>\n );\n};\n\n/**\n * Props of KubernetesDrawer\n *\n * @public\n */\nexport interface KubernetesDrawerProps {\n open?: boolean;\n kubernetesObject: KubernetesObject;\n label: ReactNode;\n drawerContentsHeader?: ReactNode;\n children?: ReactNode;\n}\n\nconst useDrawerStyles = makeStyles((theme: Theme) =>\n createStyles({\n paper: {\n width: '50%',\n justifyContent: 'space-between',\n padding: theme.spacing(2.5),\n },\n }),\n);\n\nconst DrawerButton = withStyles({\n root: {\n padding: '6px 5px',\n },\n label: {\n textTransform: 'none',\n },\n})(Button);\n\n/**\n * Button/Drawer component for Kubernetes Objects\n *\n * @public\n */\nexport const KubernetesDrawer = ({\n open,\n label,\n drawerContentsHeader,\n kubernetesObject,\n children,\n}: KubernetesDrawerProps) => {\n const classes = useDrawerStyles();\n const [isOpen, setIsOpen] = useState<boolean>(open ?? false);\n\n const toggleDrawer = (e: ChangeEvent<{}>, newValue: boolean) => {\n e.stopPropagation();\n setIsOpen(newValue);\n };\n\n return (\n <>\n <DrawerButton onClick={() => setIsOpen(true)}>{label}</DrawerButton>\n <Drawer\n classes={{\n paper: classes.paper,\n }}\n anchor=\"right\"\n open={isOpen}\n onClose={(e: any) => toggleDrawer(e, false)}\n onClick={event => event.stopPropagation()}\n >\n {isOpen && (\n <KubernetesDrawerContent\n header={drawerContentsHeader}\n kubernetesObject={kubernetesObject}\n children={children}\n close={() => setIsOpen(false)}\n />\n )}\n </Drawer>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -26,6 +26,8 @@ import '../../hooks/useMatchingErrors.esm.js';
26
26
  import { ManifestYaml } from './ManifestYaml.esm.js';
27
27
  import '@backstage/catalog-model';
28
28
  import '@backstage/errors';
29
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
30
+ import { kubernetesReactTranslationRef } from '../../translation.esm.js';
29
31
 
30
32
  const useDrawerStyles = makeStyles(
31
33
  (theme) => createStyles({
@@ -71,17 +73,24 @@ const PodDrawerButton = withStyles({
71
73
  const LinkErrorPanel = ({
72
74
  cluster,
73
75
  errorMessage
74
- }) => /* @__PURE__ */ jsx(
75
- WarningPanel,
76
- {
77
- title: "There was a problem formatting the link to the Kubernetes dashboard",
78
- message: `Could not format the link to the dashboard of your cluster named '${cluster.name}'. Its dashboardApp property has been set to '${cluster.dashboardApp || "standard"}.'`,
79
- children: errorMessage && /* @__PURE__ */ jsxs(Typography, { variant: "body2", children: [
80
- "Errors: ",
81
- errorMessage
82
- ] })
83
- }
84
- );
76
+ }) => {
77
+ const { t } = useTranslationRef(kubernetesReactTranslationRef);
78
+ return /* @__PURE__ */ jsx(
79
+ WarningPanel,
80
+ {
81
+ title: t("linkErrorPanel.title"),
82
+ message: t("linkErrorPanel.message", {
83
+ clusterName: cluster.name,
84
+ dashboardApp: cluster.dashboardApp || "standard"
85
+ }),
86
+ children: errorMessage && /* @__PURE__ */ jsxs(Typography, { variant: "body2", children: [
87
+ t("linkErrorPanel.errorsLabel"),
88
+ " ",
89
+ errorMessage
90
+ ] })
91
+ }
92
+ );
93
+ };
85
94
  function replaceNullsWithUndefined(someObj) {
86
95
  const replacer = (_, value) => String(value) === "null" || String(value) === "undefined" ? void 0 : value;
87
96
  return JSON.parse(JSON.stringify(someObj, replacer));
@@ -92,6 +101,7 @@ const KubernetesStructuredMetadataTableDrawerContent = ({
92
101
  renderObject,
93
102
  kind
94
103
  }) => {
104
+ const { t } = useTranslationRef(kubernetesReactTranslationRef);
95
105
  const [isYaml, setIsYaml] = useState(false);
96
106
  const formatter = useApi(kubernetesClusterLinkFormatterApiRef);
97
107
  const classes = useDrawerContentStyles();
@@ -108,11 +118,11 @@ const KubernetesStructuredMetadataTableDrawerContent = ({
108
118
  );
109
119
  return /* @__PURE__ */ jsxs(Fragment, { children: [
110
120
  /* @__PURE__ */ jsx("div", { className: classes.header, children: /* @__PURE__ */ jsxs(Grid, { container: true, justifyContent: "flex-start", alignItems: "flex-start", children: [
111
- /* @__PURE__ */ jsx(Grid, { item: true, xs: 11, children: /* @__PURE__ */ jsx(Typography, { variant: "h5", children: object.metadata?.name ?? "unknown name" }) }),
121
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 11, children: /* @__PURE__ */ jsx(Typography, { variant: "h5", children: object.metadata?.name ?? t("kubernetesDrawer.unknownName") }) }),
112
122
  /* @__PURE__ */ jsx(Grid, { item: true, xs: 1, children: /* @__PURE__ */ jsx(
113
123
  IconButton,
114
124
  {
115
- title: "Close the drawer",
125
+ title: t("kubernetesDrawer.closeDrawer"),
116
126
  onClick: (e) => toggleDrawer(e, false),
117
127
  color: "inherit",
118
128
  children: /* @__PURE__ */ jsx(CloseIcon, { className: classes.icon })
@@ -130,10 +140,10 @@ const KubernetesStructuredMetadataTableDrawerContent = ({
130
140
  onChange: (event) => {
131
141
  setIsYaml(event.target.checked);
132
142
  },
133
- name: "YAML"
143
+ name: t("kubernetesDrawer.yaml")
134
144
  }
135
145
  ),
136
- label: "YAML"
146
+ label: t("kubernetesDrawer.yaml")
137
147
  }
138
148
  ) })
139
149
  ] }) }),
@@ -1 +1 @@
1
- {"version":3,"file":"KubernetesStructuredMetadataTableDrawer.esm.js","sources":["../../../src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.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\nimport { ReactNode, ChangeEvent, useContext, useState } from 'react';\nimport Button from '@material-ui/core/Button';\nimport Typography from '@material-ui/core/Typography';\nimport IconButton from '@material-ui/core/IconButton';\nimport Drawer from '@material-ui/core/Drawer';\nimport Switch from '@material-ui/core/Switch';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Grid from '@material-ui/core/Grid';\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\nimport Close from '@material-ui/icons/Close';\nimport OpenInNewIcon from '@material-ui/icons/OpenInNew';\nimport type { V1ObjectMeta } from '@kubernetes/client-node';\nimport { withStyles } from '@material-ui/core/styles';\nimport {\n LinkButton as BackstageButton,\n StructuredMetadataTable,\n WarningPanel,\n} from '@backstage/core-components';\nimport { ClusterContext } from '../../hooks';\nimport { ClusterAttributes } from '@backstage/plugin-kubernetes-common';\nimport { ManifestYaml } from './ManifestYaml';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { kubernetesClusterLinkFormatterApiRef } from '../../api';\nimport useAsync from 'react-use/esm/useAsync';\n\nconst useDrawerStyles = makeStyles((theme: Theme) =>\n createStyles({\n paper: {\n width: '50%',\n justifyContent: 'space-between',\n padding: theme.spacing(2.5),\n },\n }),\n);\n\nconst useDrawerContentStyles = makeStyles((_: Theme) =>\n createStyles({\n header: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n errorMessage: {\n marginTop: '1em',\n marginBottom: '1em',\n },\n options: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n icon: {\n fontSize: 20,\n },\n content: {\n height: '80%',\n },\n }),\n);\n\nconst PodDrawerButton = withStyles({\n root: {\n padding: '6px 5px',\n },\n label: {\n textTransform: 'none',\n },\n})(Button);\n\n/**\n *\n *\n * @public\n */\nexport type LinkErrorPanelProps = {\n cluster: ClusterAttributes;\n errorMessage?: string;\n children?: ReactNode;\n};\n\n/**\n *\n *\n * @public\n */\nexport const LinkErrorPanel = ({\n cluster,\n errorMessage,\n}: LinkErrorPanelProps) => (\n <WarningPanel\n title=\"There was a problem formatting the link to the Kubernetes dashboard\"\n message={`Could not format the link to the dashboard of your cluster named '${\n cluster.name\n }'. Its dashboardApp property has been set to '${\n cluster.dashboardApp || 'standard'\n }.'`}\n >\n {errorMessage && (\n <Typography variant=\"body2\">Errors: {errorMessage}</Typography>\n )}\n </WarningPanel>\n);\n\n/**\n *\n *\n * @public\n */\nexport interface KubernetesDrawerable {\n metadata?: V1ObjectMeta;\n}\n\ninterface KubernetesStructuredMetadataTableDrawerContentProps<\n T extends KubernetesDrawerable,\n> {\n toggleDrawer: (e: ChangeEvent<{}>, isOpen: boolean) => void;\n object: T;\n renderObject: (obj: T) => object;\n kind: string;\n}\n\nfunction replaceNullsWithUndefined(someObj: any) {\n const replacer = (_: any, value: any) =>\n String(value) === 'null' || String(value) === 'undefined'\n ? undefined\n : value;\n\n return JSON.parse(JSON.stringify(someObj, replacer));\n}\n\nconst KubernetesStructuredMetadataTableDrawerContent = <\n T extends KubernetesDrawerable,\n>({\n toggleDrawer,\n object,\n renderObject,\n kind,\n}: KubernetesStructuredMetadataTableDrawerContentProps<T>) => {\n const [isYaml, setIsYaml] = useState<boolean>(false);\n\n const formatter = useApi(kubernetesClusterLinkFormatterApiRef);\n const classes = useDrawerContentStyles();\n const cluster = useContext(ClusterContext);\n const { value: clusterLink, error } = useAsync(\n async () =>\n formatter.formatClusterLink({\n dashboardUrl: cluster.dashboardUrl,\n dashboardApp: cluster.dashboardApp,\n dashboardParameters: cluster.dashboardParameters,\n object,\n kind,\n }),\n [cluster, object, kind, formatter],\n );\n\n return (\n <>\n <div className={classes.header}>\n <Grid container justifyContent=\"flex-start\" alignItems=\"flex-start\">\n <Grid item xs={11}>\n <Typography variant=\"h5\">\n {object.metadata?.name ?? 'unknown name'}\n </Typography>\n </Grid>\n <Grid item xs={1}>\n <IconButton\n key=\"dismiss\"\n title=\"Close the drawer\"\n onClick={e => toggleDrawer(e, false)}\n color=\"inherit\"\n >\n <Close className={classes.icon} />\n </IconButton>\n </Grid>\n <Grid item xs={11}>\n <Typography color=\"textSecondary\" variant=\"body1\">\n {kind}\n </Typography>\n </Grid>\n <Grid item xs={11}>\n <FormControlLabel\n control={\n <Switch\n checked={isYaml}\n onChange={event => {\n setIsYaml(event.target.checked);\n }}\n name=\"YAML\"\n />\n }\n label=\"YAML\"\n />\n </Grid>\n </Grid>\n </div>\n {error && (\n <div className={classes.errorMessage}>\n <LinkErrorPanel\n cluster={cluster}\n errorMessage={error.message || error.toString()}\n />\n </div>\n )}\n <div className={classes.options}>\n <div>\n {clusterLink && (\n <BackstageButton\n variant=\"outlined\"\n color=\"primary\"\n size=\"small\"\n to={clusterLink}\n endIcon={<OpenInNewIcon />}\n >\n Open Kubernetes Dashboard\n </BackstageButton>\n )}\n </div>\n </div>\n <div className={classes.content}>\n {isYaml && <ManifestYaml object={object} />}\n {!isYaml && (\n <StructuredMetadataTable\n metadata={renderObject(replaceNullsWithUndefined(object))}\n options={{ nestedValuesAsYaml: true }}\n />\n )}\n </div>\n </>\n );\n};\n\n/**\n *\n * @public\n */\nexport interface KubernetesStructuredMetadataTableDrawerProps<\n T extends KubernetesDrawerable,\n> {\n object: T;\n renderObject: (obj: T) => object;\n buttonVariant?: 'h5' | 'subtitle2';\n kind: string;\n expanded?: boolean;\n children?: ReactNode;\n}\n\n/**\n *\n * @public\n */\nexport const KubernetesStructuredMetadataTableDrawer = <\n T extends KubernetesDrawerable,\n>({\n object,\n renderObject,\n kind,\n buttonVariant = 'subtitle2',\n expanded = false,\n children,\n}: KubernetesStructuredMetadataTableDrawerProps<T>) => {\n const [isOpen, setIsOpen] = useState(expanded);\n const classes = useDrawerStyles();\n\n const toggleDrawer = (e: ChangeEvent<{}>, newValue: boolean) => {\n e.stopPropagation();\n setIsOpen(newValue);\n };\n\n return (\n <>\n <PodDrawerButton\n onClick={e => toggleDrawer(e, true)}\n onFocus={event => event.stopPropagation()}\n >\n {children === undefined ? (\n <Typography variant={buttonVariant}>\n {object.metadata?.name ?? 'unknown object'}\n </Typography>\n ) : (\n children\n )}\n </PodDrawerButton>\n <Drawer\n classes={{\n paper: classes.paper,\n }}\n anchor=\"right\"\n open={isOpen}\n onClose={(e: any) => toggleDrawer(e, false)}\n onClick={event => event.stopPropagation()}\n >\n <KubernetesStructuredMetadataTableDrawerContent\n kind={kind}\n toggleDrawer={toggleDrawer}\n object={object}\n renderObject={renderObject}\n />\n </Drawer>\n </>\n );\n};\n"],"names":["Close","BackstageButton"],"mappings":"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"}
1
+ {"version":3,"file":"KubernetesStructuredMetadataTableDrawer.esm.js","sources":["../../../src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.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\nimport { ReactNode, ChangeEvent, useContext, useState } from 'react';\nimport Button from '@material-ui/core/Button';\nimport Typography from '@material-ui/core/Typography';\nimport IconButton from '@material-ui/core/IconButton';\nimport Drawer from '@material-ui/core/Drawer';\nimport Switch from '@material-ui/core/Switch';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Grid from '@material-ui/core/Grid';\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\nimport Close from '@material-ui/icons/Close';\nimport OpenInNewIcon from '@material-ui/icons/OpenInNew';\nimport type { V1ObjectMeta } from '@kubernetes/client-node';\nimport { withStyles } from '@material-ui/core/styles';\nimport {\n LinkButton as BackstageButton,\n StructuredMetadataTable,\n WarningPanel,\n} from '@backstage/core-components';\nimport { ClusterContext } from '../../hooks';\nimport { ClusterAttributes } from '@backstage/plugin-kubernetes-common';\nimport { ManifestYaml } from './ManifestYaml';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { kubernetesClusterLinkFormatterApiRef } from '../../api';\nimport useAsync from 'react-use/esm/useAsync';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { kubernetesReactTranslationRef } from '../../translation';\n\nconst useDrawerStyles = makeStyles((theme: Theme) =>\n createStyles({\n paper: {\n width: '50%',\n justifyContent: 'space-between',\n padding: theme.spacing(2.5),\n },\n }),\n);\n\nconst useDrawerContentStyles = makeStyles((_: Theme) =>\n createStyles({\n header: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n errorMessage: {\n marginTop: '1em',\n marginBottom: '1em',\n },\n options: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n },\n icon: {\n fontSize: 20,\n },\n content: {\n height: '80%',\n },\n }),\n);\n\nconst PodDrawerButton = withStyles({\n root: {\n padding: '6px 5px',\n },\n label: {\n textTransform: 'none',\n },\n})(Button);\n\n/**\n *\n *\n * @public\n */\nexport type LinkErrorPanelProps = {\n cluster: ClusterAttributes;\n errorMessage?: string;\n children?: ReactNode;\n};\n\n/**\n *\n *\n * @public\n */\nexport const LinkErrorPanel = ({\n cluster,\n errorMessage,\n}: LinkErrorPanelProps) => {\n const { t } = useTranslationRef(kubernetesReactTranslationRef);\n return (\n <WarningPanel\n title={t('linkErrorPanel.title')}\n message={t('linkErrorPanel.message', {\n clusterName: cluster.name,\n dashboardApp: cluster.dashboardApp || 'standard',\n })}\n >\n {errorMessage && (\n <Typography variant=\"body2\">\n {t('linkErrorPanel.errorsLabel')} {errorMessage}\n </Typography>\n )}\n </WarningPanel>\n );\n};\n\n/**\n *\n *\n * @public\n */\nexport interface KubernetesDrawerable {\n metadata?: V1ObjectMeta;\n}\n\ninterface KubernetesStructuredMetadataTableDrawerContentProps<\n T extends KubernetesDrawerable,\n> {\n toggleDrawer: (e: ChangeEvent<{}>, isOpen: boolean) => void;\n object: T;\n renderObject: (obj: T) => object;\n kind: string;\n}\n\nfunction replaceNullsWithUndefined(someObj: any) {\n const replacer = (_: any, value: any) =>\n String(value) === 'null' || String(value) === 'undefined'\n ? undefined\n : value;\n\n return JSON.parse(JSON.stringify(someObj, replacer));\n}\n\nconst KubernetesStructuredMetadataTableDrawerContent = <\n T extends KubernetesDrawerable,\n>({\n toggleDrawer,\n object,\n renderObject,\n kind,\n}: KubernetesStructuredMetadataTableDrawerContentProps<T>) => {\n const { t } = useTranslationRef(kubernetesReactTranslationRef);\n const [isYaml, setIsYaml] = useState<boolean>(false);\n\n const formatter = useApi(kubernetesClusterLinkFormatterApiRef);\n const classes = useDrawerContentStyles();\n const cluster = useContext(ClusterContext);\n const { value: clusterLink, error } = useAsync(\n async () =>\n formatter.formatClusterLink({\n dashboardUrl: cluster.dashboardUrl,\n dashboardApp: cluster.dashboardApp,\n dashboardParameters: cluster.dashboardParameters,\n object,\n kind,\n }),\n [cluster, object, kind, formatter],\n );\n\n return (\n <>\n <div className={classes.header}>\n <Grid container justifyContent=\"flex-start\" alignItems=\"flex-start\">\n <Grid item xs={11}>\n <Typography variant=\"h5\">\n {object.metadata?.name ?? t('kubernetesDrawer.unknownName')}\n </Typography>\n </Grid>\n <Grid item xs={1}>\n <IconButton\n key=\"dismiss\"\n title={t('kubernetesDrawer.closeDrawer')}\n onClick={e => toggleDrawer(e, false)}\n color=\"inherit\"\n >\n <Close className={classes.icon} />\n </IconButton>\n </Grid>\n <Grid item xs={11}>\n <Typography color=\"textSecondary\" variant=\"body1\">\n {kind}\n </Typography>\n </Grid>\n <Grid item xs={11}>\n <FormControlLabel\n control={\n <Switch\n checked={isYaml}\n onChange={event => {\n setIsYaml(event.target.checked);\n }}\n name={t('kubernetesDrawer.yaml')}\n />\n }\n label={t('kubernetesDrawer.yaml')}\n />\n </Grid>\n </Grid>\n </div>\n {error && (\n <div className={classes.errorMessage}>\n <LinkErrorPanel\n cluster={cluster}\n errorMessage={error.message || error.toString()}\n />\n </div>\n )}\n <div className={classes.options}>\n <div>\n {clusterLink && (\n <BackstageButton\n variant=\"outlined\"\n color=\"primary\"\n size=\"small\"\n to={clusterLink}\n endIcon={<OpenInNewIcon />}\n >\n Open Kubernetes Dashboard\n </BackstageButton>\n )}\n </div>\n </div>\n <div className={classes.content}>\n {isYaml && <ManifestYaml object={object} />}\n {!isYaml && (\n <StructuredMetadataTable\n metadata={renderObject(replaceNullsWithUndefined(object))}\n options={{ nestedValuesAsYaml: true }}\n />\n )}\n </div>\n </>\n );\n};\n\n/**\n *\n * @public\n */\nexport interface KubernetesStructuredMetadataTableDrawerProps<\n T extends KubernetesDrawerable,\n> {\n object: T;\n renderObject: (obj: T) => object;\n buttonVariant?: 'h5' | 'subtitle2';\n kind: string;\n expanded?: boolean;\n children?: ReactNode;\n}\n\n/**\n *\n * @public\n */\nexport const KubernetesStructuredMetadataTableDrawer = <\n T extends KubernetesDrawerable,\n>({\n object,\n renderObject,\n kind,\n buttonVariant = 'subtitle2',\n expanded = false,\n children,\n}: KubernetesStructuredMetadataTableDrawerProps<T>) => {\n const [isOpen, setIsOpen] = useState(expanded);\n const classes = useDrawerStyles();\n\n const toggleDrawer = (e: ChangeEvent<{}>, newValue: boolean) => {\n e.stopPropagation();\n setIsOpen(newValue);\n };\n\n return (\n <>\n <PodDrawerButton\n onClick={e => toggleDrawer(e, true)}\n onFocus={event => event.stopPropagation()}\n >\n {children === undefined ? (\n <Typography variant={buttonVariant}>\n {object.metadata?.name ?? 'unknown object'}\n </Typography>\n ) : (\n children\n )}\n </PodDrawerButton>\n <Drawer\n classes={{\n paper: classes.paper,\n }}\n anchor=\"right\"\n open={isOpen}\n onClose={(e: any) => toggleDrawer(e, false)}\n onClick={event => event.stopPropagation()}\n >\n <KubernetesStructuredMetadataTableDrawerContent\n kind={kind}\n toggleDrawer={toggleDrawer}\n object={object}\n renderObject={renderObject}\n />\n </Drawer>\n </>\n );\n};\n"],"names":["Close","BackstageButton"],"mappings":"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"}
@@ -4,8 +4,11 @@ import FormControlLabel from '@material-ui/core/FormControlLabel';
4
4
  import Switch from '@material-ui/core/Switch';
5
5
  import jsyaml from 'js-yaml';
6
6
  import { useState } from 'react';
7
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
8
+ import { kubernetesReactTranslationRef } from '../../translation.esm.js';
7
9
 
8
10
  const ManifestYaml = ({ object }) => {
11
+ const { t } = useTranslationRef(kubernetesReactTranslationRef);
9
12
  const [managedFields, setManagedFields] = useState(false);
10
13
  return /* @__PURE__ */ jsxs(Fragment, { children: [
11
14
  /* @__PURE__ */ jsx(
@@ -18,10 +21,10 @@ const ManifestYaml = ({ object }) => {
18
21
  onChange: (event) => {
19
22
  setManagedFields(event.target.checked);
20
23
  },
21
- name: "Managed Fields"
24
+ name: t("kubernetesDrawer.managedFields")
22
25
  }
23
26
  ),
24
- label: "Managed Fields"
27
+ label: t("kubernetesDrawer.managedFields")
25
28
  }
26
29
  ),
27
30
  /* @__PURE__ */ jsx(
@@ -1 +1 @@
1
- {"version":3,"file":"ManifestYaml.esm.js","sources":["../../../src/components/KubernetesDrawer/ManifestYaml.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { CodeSnippet } from '@backstage/core-components';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Switch from '@material-ui/core/Switch';\nimport jsyaml from 'js-yaml';\nimport { useState } from 'react';\n\n/**\n * Props of ManifestYaml\n *\n * @public\n */\nexport interface ManifestYamlProps {\n object: object;\n}\n\n/**\n * Renders a Kubernetes object as a YAML code snippet\n *\n * @public\n */\nexport const ManifestYaml = ({ object }: ManifestYamlProps) => {\n // Toggle whether the Kubernetes resource managed fields should be shown in\n // the YAML display. This toggle is only available when the YAML is being\n // shown because managed fields are never visible in the structured display.\n const [managedFields, setManagedFields] = useState<boolean>(false);\n return (\n <>\n <FormControlLabel\n control={\n <Switch\n checked={managedFields}\n onChange={event => {\n setManagedFields(event.target.checked);\n }}\n name=\"Managed Fields\"\n />\n }\n label=\"Managed Fields\"\n />\n <CodeSnippet\n language=\"yaml\"\n text={jsyaml.dump(object, {\n // NOTE: this will remove any field called `managedFields`\n // not just the metadata one\n // TODO: @mclarke make this only remove the `metadata.managedFields`\n replacer: (key: string, value: string): any => {\n if (!managedFields) {\n return key === 'managedFields' ? undefined : value;\n }\n return value;\n },\n })}\n />\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;AAmCO,MAAM,YAAA,GAAe,CAAC,EAAE,MAAA,EAAO,KAAyB;AAI7D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAkB,KAAK,CAAA;AACjE,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,OAAA,kBACE,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,aAAA;AAAA,YACT,UAAU,CAAA,KAAA,KAAS;AACjB,cAAA,gBAAA,CAAiB,KAAA,CAAM,OAAO,OAAO,CAAA;AAAA,YACvC,CAAA;AAAA,YACA,IAAA,EAAK;AAAA;AAAA,SACP;AAAA,QAEF,KAAA,EAAM;AAAA;AAAA,KACR;AAAA,oBACA,GAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,MAAA;AAAA,QACT,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ;AAAA;AAAA;AAAA;AAAA,UAIxB,QAAA,EAAU,CAAC,GAAA,EAAa,KAAA,KAAuB;AAC7C,YAAA,IAAI,CAAC,aAAA,EAAe;AAClB,cAAA,OAAO,GAAA,KAAQ,kBAAkB,MAAA,GAAY,KAAA;AAAA,YAC/C;AACA,YAAA,OAAO,KAAA;AAAA,UACT;AAAA,SACD;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"ManifestYaml.esm.js","sources":["../../../src/components/KubernetesDrawer/ManifestYaml.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { CodeSnippet } from '@backstage/core-components';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Switch from '@material-ui/core/Switch';\nimport jsyaml from 'js-yaml';\nimport { useState } from 'react';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { kubernetesReactTranslationRef } from '../../translation';\n\n/**\n * Props of ManifestYaml\n *\n * @public\n */\nexport interface ManifestYamlProps {\n object: object;\n}\n\n/**\n * Renders a Kubernetes object as a YAML code snippet\n *\n * @public\n */\nexport const ManifestYaml = ({ object }: ManifestYamlProps) => {\n const { t } = useTranslationRef(kubernetesReactTranslationRef);\n // Toggle whether the Kubernetes resource managed fields should be shown in\n // the YAML display. This toggle is only available when the YAML is being\n // shown because managed fields are never visible in the structured display.\n const [managedFields, setManagedFields] = useState<boolean>(false);\n return (\n <>\n <FormControlLabel\n control={\n <Switch\n checked={managedFields}\n onChange={event => {\n setManagedFields(event.target.checked);\n }}\n name={t('kubernetesDrawer.managedFields')}\n />\n }\n label={t('kubernetesDrawer.managedFields')}\n />\n <CodeSnippet\n language=\"yaml\"\n text={jsyaml.dump(object, {\n // NOTE: this will remove any field called `managedFields`\n // not just the metadata one\n // TODO: @mclarke make this only remove the `metadata.managedFields`\n replacer: (key: string, value: string): any => {\n if (!managedFields) {\n return key === 'managedFields' ? undefined : value;\n }\n return value;\n },\n })}\n />\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAqCO,MAAM,YAAA,GAAe,CAAC,EAAE,MAAA,EAAO,KAAyB;AAC7D,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,6BAA6B,CAAA;AAI7D,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAkB,KAAK,CAAA;AACjE,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,OAAA,kBACE,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,aAAA;AAAA,YACT,UAAU,CAAA,KAAA,KAAS;AACjB,cAAA,gBAAA,CAAiB,KAAA,CAAM,OAAO,OAAO,CAAA;AAAA,YACvC,CAAA;AAAA,YACA,IAAA,EAAM,EAAE,gCAAgC;AAAA;AAAA,SAC1C;AAAA,QAEF,KAAA,EAAO,EAAE,gCAAgC;AAAA;AAAA,KAC3C;AAAA,oBACA,GAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,MAAA;AAAA,QACT,IAAA,EAAM,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ;AAAA;AAAA;AAAA;AAAA,UAIxB,QAAA,EAAU,CAAC,GAAA,EAAa,KAAA,KAAuB;AAC7C,YAAA,IAAI,CAAC,aAAA,EAAe;AAClB,cAAA,OAAO,GAAA,KAAQ,kBAAkB,MAAA,GAAY,KAAA;AAAA,YAC/C;AACA,YAAA,OAAO,KAAA;AAAA,UACT;AAAA,SACD;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;;;;"}
@@ -15,18 +15,25 @@ import '../../hooks/Cluster.esm.js';
15
15
  import '../../hooks/usePodMetrics.esm.js';
16
16
  import '../../hooks/useMatchingErrors.esm.js';
17
17
  import { PodExecTerminal } from './PodExecTerminal.esm.js';
18
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
19
+ import { kubernetesReactTranslationRef } from '../../translation.esm.js';
18
20
 
19
21
  const PodExecTerminalDialog = (props) => {
20
22
  const { cluster, containerName, podName } = props;
23
+ const { t } = useTranslationRef(kubernetesReactTranslationRef);
21
24
  const isPodExecTerminalSupported = useIsPodExecTerminalSupported();
22
25
  return !isPodExecTerminalSupported.loading && isPodExecTerminalSupported.value && /* @__PURE__ */ jsx(
23
26
  KubernetesDialog,
24
27
  {
25
- buttonAriaLabel: "open terminal",
28
+ buttonAriaLabel: t("podExecTerminal.buttonAriaLabel"),
26
29
  buttonIcon: /* @__PURE__ */ jsx(OpenInBrowserIcon, {}),
27
- buttonText: "Terminal",
30
+ buttonText: t("podExecTerminal.buttonText"),
28
31
  disabled: isPodExecTerminalSupported.loading || !isPodExecTerminalSupported.value,
29
- title: `${podName} - ${containerName} terminal shell on cluster ${cluster.title || cluster.name}`,
32
+ title: t("podExecTerminal.titleTemplate", {
33
+ podName,
34
+ containerName,
35
+ clusterName: cluster.title || cluster.name
36
+ }),
30
37
  children: /* @__PURE__ */ jsx(PodExecTerminal, { ...props })
31
38
  }
32
39
  );
@@ -1 +1 @@
1
- {"version":3,"file":"PodExecTerminalDialog.esm.js","sources":["../../../src/components/PodExecTerminal/PodExecTerminalDialog.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser';\n\nimport { KubernetesDialog } from '../KubernetesDialog';\nimport { useIsPodExecTerminalSupported } from '../../hooks';\nimport { PodExecTerminal, PodExecTerminalProps } from './PodExecTerminal';\n\n/**\n * Opens a terminal connected to the given pod's container in a dialog\n *\n * @public\n */\nexport const PodExecTerminalDialog = (props: PodExecTerminalProps) => {\n const { cluster, containerName, podName } = props;\n\n const isPodExecTerminalSupported = useIsPodExecTerminalSupported();\n\n return (\n !isPodExecTerminalSupported.loading &&\n isPodExecTerminalSupported.value && (\n <KubernetesDialog\n buttonAriaLabel=\"open terminal\"\n buttonIcon={<OpenInBrowserIcon />}\n buttonText=\"Terminal\"\n disabled={\n isPodExecTerminalSupported.loading ||\n !isPodExecTerminalSupported.value\n }\n title={`${podName} - ${containerName} terminal shell on cluster ${\n cluster.title || cluster.name\n }`}\n >\n <PodExecTerminal {...props} />\n </KubernetesDialog>\n )\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AA2BO,MAAM,qBAAA,GAAwB,CAAC,KAAA,KAAgC;AACpE,EAAA,MAAM,EAAE,OAAA,EAAS,aAAA,EAAe,OAAA,EAAQ,GAAI,KAAA;AAE5C,EAAA,MAAM,6BAA6B,6BAAA,EAA8B;AAEjE,EAAA,OACE,CAAC,0BAAA,CAA2B,OAAA,IAC5B,0BAAA,CAA2B,KAAA,oBACzB,GAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,eAAA,EAAgB,eAAA;AAAA,MAChB,UAAA,sBAAa,iBAAA,EAAA,EAAkB,CAAA;AAAA,MAC/B,UAAA,EAAW,UAAA;AAAA,MACX,QAAA,EACE,0BAAA,CAA2B,OAAA,IAC3B,CAAC,0BAAA,CAA2B,KAAA;AAAA,MAE9B,KAAA,EAAO,GAAG,OAAO,CAAA,GAAA,EAAM,aAAa,CAAA,2BAAA,EAClC,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,IAC3B,CAAA,CAAA;AAAA,MAEA,QAAA,kBAAA,GAAA,CAAC,eAAA,EAAA,EAAiB,GAAG,KAAA,EAAO;AAAA;AAAA,GAC9B;AAGN;;;;"}
1
+ {"version":3,"file":"PodExecTerminalDialog.esm.js","sources":["../../../src/components/PodExecTerminal/PodExecTerminalDialog.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser';\n\nimport { KubernetesDialog } from '../KubernetesDialog';\nimport { useIsPodExecTerminalSupported } from '../../hooks';\nimport { PodExecTerminal, PodExecTerminalProps } from './PodExecTerminal';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { kubernetesReactTranslationRef } from '../../translation';\n\n/**\n * Opens a terminal connected to the given pod's container in a dialog\n *\n * @public\n */\nexport const PodExecTerminalDialog = (props: PodExecTerminalProps) => {\n const { cluster, containerName, podName } = props;\n const { t } = useTranslationRef(kubernetesReactTranslationRef);\n const isPodExecTerminalSupported = useIsPodExecTerminalSupported();\n\n return (\n !isPodExecTerminalSupported.loading &&\n isPodExecTerminalSupported.value && (\n <KubernetesDialog\n buttonAriaLabel={t('podExecTerminal.buttonAriaLabel')}\n buttonIcon={<OpenInBrowserIcon />}\n buttonText={t('podExecTerminal.buttonText')}\n disabled={\n isPodExecTerminalSupported.loading ||\n !isPodExecTerminalSupported.value\n }\n title={t('podExecTerminal.titleTemplate', {\n podName,\n containerName,\n clusterName: cluster.title || cluster.name,\n })}\n >\n <PodExecTerminal {...props} />\n </KubernetesDialog>\n )\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AA6BO,MAAM,qBAAA,GAAwB,CAAC,KAAA,KAAgC;AACpE,EAAA,MAAM,EAAE,OAAA,EAAS,aAAA,EAAe,OAAA,EAAQ,GAAI,KAAA;AAC5C,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,6BAA6B,CAAA;AAC7D,EAAA,MAAM,6BAA6B,6BAAA,EAA8B;AAEjE,EAAA,OACE,CAAC,0BAAA,CAA2B,OAAA,IAC5B,0BAAA,CAA2B,KAAA,oBACzB,GAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,eAAA,EAAiB,EAAE,iCAAiC,CAAA;AAAA,MACpD,UAAA,sBAAa,iBAAA,EAAA,EAAkB,CAAA;AAAA,MAC/B,UAAA,EAAY,EAAE,4BAA4B,CAAA;AAAA,MAC1C,QAAA,EACE,0BAAA,CAA2B,OAAA,IAC3B,CAAC,0BAAA,CAA2B,KAAA;AAAA,MAE9B,KAAA,EAAO,EAAE,+BAAA,EAAiC;AAAA,QACxC,OAAA;AAAA,QACA,aAAA;AAAA,QACA,WAAA,EAAa,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ;AAAA,OACvC,CAAA;AAAA,MAED,QAAA,kBAAA,GAAA,CAAC,eAAA,EAAA,EAAiB,GAAG,KAAA,EAAO;AAAA;AAAA,GAC9B;AAGN;;;;"}
@@ -14,6 +14,8 @@ import { DateTime } from 'luxon';
14
14
  import { useEvents } from './useEvents.esm.js';
15
15
  import Skeleton from '@material-ui/lab/Skeleton';
16
16
  import { DismissableBanner } from '@backstage/core-components';
17
+ import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
18
+ import { kubernetesReactTranslationRef } from '../../../translation.esm.js';
17
19
 
18
20
  const getAvatarByType = (type) => {
19
21
  return /* @__PURE__ */ jsx(ListItemAvatar, { children: /* @__PURE__ */ jsx(Avatar, { children: type === "Warning" ? /* @__PURE__ */ jsx(WarningIcon, {}) : /* @__PURE__ */ jsx(InfoIcon, {}) }) });
@@ -22,8 +24,9 @@ const EventsContent = ({
22
24
  events,
23
25
  warningEventsOnly
24
26
  }) => {
27
+ const { t } = useTranslationRef(kubernetesReactTranslationRef);
25
28
  if (events.length === 0) {
26
- return /* @__PURE__ */ jsx(Typography, { children: "No events found" });
29
+ return /* @__PURE__ */ jsx(Typography, { children: t("events.noEventsFound") });
27
30
  }
28
31
  return /* @__PURE__ */ jsx(Container, { children: /* @__PURE__ */ jsx(Grid, { children: /* @__PURE__ */ jsx(List, { children: events.filter((event) => {
29
32
  if (warningEventsOnly) {
@@ -1 +1 @@
1
- {"version":3,"file":"Events.esm.js","sources":["../../../../src/components/Pods/Events/Events.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Avatar from '@material-ui/core/Avatar';\nimport Container from '@material-ui/core/Container';\nimport Grid from '@material-ui/core/Grid';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Typography from '@material-ui/core/Typography';\n\nimport InfoIcon from '@material-ui/icons/Info';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport { DateTime } from 'luxon';\n\nimport { useEvents } from './useEvents';\nimport Skeleton from '@material-ui/lab/Skeleton';\nimport { DismissableBanner } from '@backstage/core-components';\nimport { Event } from 'kubernetes-models/v1';\n\n/**\n * Props for Events\n *\n * @public\n */\nexport interface EventsContentProps {\n warningEventsOnly?: boolean;\n events: Event[];\n}\n\nconst getAvatarByType = (type?: string) => {\n return (\n <ListItemAvatar>\n <Avatar>{type === 'Warning' ? <WarningIcon /> : <InfoIcon />}</Avatar>\n </ListItemAvatar>\n );\n};\n\n/**\n * Shows given Kubernetes events\n *\n * @public\n */\nexport const EventsContent = ({\n events,\n warningEventsOnly,\n}: EventsContentProps) => {\n if (events.length === 0) {\n return <Typography>No events found</Typography>;\n }\n\n return (\n <Container>\n <Grid>\n <List>\n {events\n .filter(event => {\n if (warningEventsOnly) {\n return event.type === 'Warning';\n }\n return true;\n })\n .map((event, index) => {\n const timeAgo = event.metadata.creationTimestamp\n ? DateTime.fromISO(event.metadata.creationTimestamp).toRelative(\n {\n locale: 'en',\n },\n )\n : 'unknown';\n return (\n <ListItem key={`${event.metadata.name}-${index}`}>\n <Tooltip title={`${event.type ?? ''} event`}>\n {getAvatarByType(event.type)}\n </Tooltip>\n <ListItemText\n primary={`First event ${timeAgo} (count: ${event.count})`}\n secondary={`${event.reason}: ${event.message}`}\n />\n </ListItem>\n );\n })}\n </List>\n </Grid>\n </Container>\n );\n};\n\n/**\n * Props for Events\n *\n * @public\n */\nexport interface EventsProps {\n involvedObjectName: string;\n namespace: string;\n clusterName: string;\n warningEventsOnly?: boolean;\n}\n\n/**\n * Retrieves and shows Kubernetes events for the given object\n *\n * @public\n */\nexport const Events = ({\n involvedObjectName,\n namespace,\n clusterName,\n warningEventsOnly,\n}: EventsProps) => {\n const { value, error, loading } = useEvents({\n involvedObjectName,\n namespace,\n clusterName,\n });\n\n return (\n <>\n {error && (\n <DismissableBanner\n {...{\n message: error.message,\n variant: 'error',\n fixed: false,\n }}\n id=\"events\"\n />\n )}\n {loading && <Skeleton variant=\"rect\" width=\"100%\" height=\"100%\" />}\n {!loading && value !== undefined && (\n <EventsContent warningEventsOnly={warningEventsOnly} events={value} />\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Events.esm.js","sources":["../../../../src/components/Pods/Events/Events.tsx"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Avatar from '@material-ui/core/Avatar';\nimport Container from '@material-ui/core/Container';\nimport Grid from '@material-ui/core/Grid';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Typography from '@material-ui/core/Typography';\n\nimport InfoIcon from '@material-ui/icons/Info';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport { DateTime } from 'luxon';\n\nimport { useEvents } from './useEvents';\nimport Skeleton from '@material-ui/lab/Skeleton';\nimport { DismissableBanner } from '@backstage/core-components';\nimport { Event } from 'kubernetes-models/v1';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { kubernetesReactTranslationRef } from '../../../translation';\n\n/**\n * Props for Events\n *\n * @public\n */\nexport interface EventsContentProps {\n warningEventsOnly?: boolean;\n events: Event[];\n}\n\nconst getAvatarByType = (type?: string) => {\n return (\n <ListItemAvatar>\n <Avatar>{type === 'Warning' ? <WarningIcon /> : <InfoIcon />}</Avatar>\n </ListItemAvatar>\n );\n};\n\n/**\n * Shows given Kubernetes events\n *\n * @public\n */\nexport const EventsContent = ({\n events,\n warningEventsOnly,\n}: EventsContentProps) => {\n const { t } = useTranslationRef(kubernetesReactTranslationRef);\n if (events.length === 0) {\n return <Typography>{t('events.noEventsFound')}</Typography>;\n }\n\n return (\n <Container>\n <Grid>\n <List>\n {events\n .filter(event => {\n if (warningEventsOnly) {\n return event.type === 'Warning';\n }\n return true;\n })\n .map((event, index) => {\n const timeAgo = event.metadata.creationTimestamp\n ? DateTime.fromISO(event.metadata.creationTimestamp).toRelative(\n {\n locale: 'en',\n },\n )\n : 'unknown';\n return (\n <ListItem key={`${event.metadata.name}-${index}`}>\n <Tooltip title={`${event.type ?? ''} event`}>\n {getAvatarByType(event.type)}\n </Tooltip>\n <ListItemText\n primary={`First event ${timeAgo} (count: ${event.count})`}\n secondary={`${event.reason}: ${event.message}`}\n />\n </ListItem>\n );\n })}\n </List>\n </Grid>\n </Container>\n );\n};\n\n/**\n * Props for Events\n *\n * @public\n */\nexport interface EventsProps {\n involvedObjectName: string;\n namespace: string;\n clusterName: string;\n warningEventsOnly?: boolean;\n}\n\n/**\n * Retrieves and shows Kubernetes events for the given object\n *\n * @public\n */\nexport const Events = ({\n involvedObjectName,\n namespace,\n clusterName,\n warningEventsOnly,\n}: EventsProps) => {\n const { value, error, loading } = useEvents({\n involvedObjectName,\n namespace,\n clusterName,\n });\n\n return (\n <>\n {error && (\n <DismissableBanner\n {...{\n message: error.message,\n variant: 'error',\n fixed: false,\n }}\n id=\"events\"\n />\n )}\n {loading && <Skeleton variant=\"rect\" width=\"100%\" height=\"100%\" />}\n {!loading && value !== undefined && (\n <EventsContent warningEventsOnly={warningEventsOnly} events={value} />\n )}\n </>\n );\n};\n"],"names":[],"mappings":"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"}