@backstage/plugin-kubernetes-react 0.0.0-nightly-20260919022921 → 0.0.0-nightly-20260920023043
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -6
- package/dist/alpha.esm.js.map +1 -1
- package/dist/api/KubernetesBackendClient.esm.js.map +1 -1
- package/dist/api/KubernetesClusterLinkFormatter.esm.js.map +1 -1
- package/dist/api/KubernetesProxyClient.esm.js.map +1 -1
- package/dist/api/formatters/AksClusterLinksFormatter.esm.js.map +1 -1
- package/dist/api/formatters/EksClusterLinksFormatter.esm.js.map +1 -1
- package/dist/api/formatters/GkeClusterLinksFormatter.esm.js.map +1 -1
- package/dist/api/formatters/HeadlampClusterLinksFormatter.esm.js.map +1 -1
- package/dist/api/formatters/OpenshiftClusterLinksFormatter.esm.js.map +1 -1
- package/dist/api/formatters/RancherClusterLinksFormatter.esm.js.map +1 -1
- package/dist/api/formatters/StandardClusterLinksFormatter.esm.js.map +1 -1
- package/dist/api/formatters/index.esm.js.map +1 -1
- package/dist/api/types.esm.js.map +1 -1
- package/dist/components/Cluster/Cluster.esm.js.map +1 -1
- package/dist/components/ConfigmapsAccordions/ConfigmapsAccordions.esm.js.map +1 -1
- package/dist/components/ConfigmapsAccordions/ConfigmapsDrawer.esm.js.map +1 -1
- package/dist/components/CronJobsAccordions/CronJobsAccordions.esm.js.map +1 -1
- package/dist/components/CronJobsAccordions/CronJobsDrawer.esm.js.map +1 -1
- package/dist/components/CustomResources/ArgoRollouts/Rollout.esm.js.map +1 -1
- package/dist/components/CustomResources/ArgoRollouts/RolloutDrawer.esm.js.map +1 -1
- package/dist/components/CustomResources/ArgoRollouts/StepsProgress.esm.js.map +1 -1
- package/dist/components/CustomResources/CustomResources.esm.js.map +1 -1
- package/dist/components/CustomResources/DefaultCustomResource.esm.js.map +1 -1
- package/dist/components/CustomResources/DefaultCustomResourceDrawer.esm.js.map +1 -1
- package/dist/components/DaemonSetsAccordions/DaemonSetsAccordions.esm.js.map +1 -1
- package/dist/components/DaemonSetsAccordions/DaemonSetsDrawer.esm.js.map +1 -1
- package/dist/components/DeploymentsAccordions/DeploymentDrawer.esm.js.map +1 -1
- package/dist/components/DeploymentsAccordions/DeploymentsAccordions.esm.js.map +1 -1
- package/dist/components/ErrorPanel/ErrorPanel.esm.js.map +1 -1
- package/dist/components/ErrorReporting/ErrorReporting.esm.js.map +1 -1
- package/dist/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.esm.js.map +1 -1
- package/dist/components/IngressesAccordions/IngressDrawer.esm.js.map +1 -1
- package/dist/components/IngressesAccordions/IngressesAccordions.esm.js.map +1 -1
- package/dist/components/JobsAccordions/JobsAccordions.esm.js.map +1 -1
- package/dist/components/JobsAccordions/JobsDrawer.esm.js.map +1 -1
- package/dist/components/KubernetesDialog/KubernetesDialog.esm.js.map +1 -1
- package/dist/components/KubernetesDrawer/KubernetesDrawer.esm.js.map +1 -1
- package/dist/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.esm.js.map +1 -1
- package/dist/components/KubernetesDrawer/ManifestYaml.esm.js.map +1 -1
- package/dist/components/PersistentVolumesAccordions/PersistentVolumesAccordions.esm.js.map +1 -1
- package/dist/components/PersistentVolumesAccordions/PersistentVolumesDrawer.esm.js.map +1 -1
- package/dist/components/PersistentVolumesAccordions/PersistentVolumesTable.esm.js.map +1 -1
- package/dist/components/PersistentVolumesClaimsAccordions/PersistentVolumeClaimsAccordions.esm.js.map +1 -1
- package/dist/components/PersistentVolumesClaimsAccordions/PersistentVolumeClaimsDrawer.esm.js.map +1 -1
- package/dist/components/PersistentVolumesClaimsAccordions/PersistentVolumeClaimsTable.esm.js.map +1 -1
- package/dist/components/PodExecTerminal/PodExecTerminal.esm.js.map +1 -1
- package/dist/components/PodExecTerminal/PodExecTerminalAttachAddon.esm.js.map +1 -1
- package/dist/components/PodExecTerminal/PodExecTerminalContent.esm.js.map +1 -1
- package/dist/components/PodExecTerminal/PodExecTerminalDialog.esm.js.map +1 -1
- package/dist/components/Pods/ErrorList/ErrorList.esm.js.map +1 -1
- package/dist/components/Pods/Events/Events.esm.js.map +1 -1
- package/dist/components/Pods/Events/useEvents.esm.js.map +1 -1
- package/dist/components/Pods/FixDialog/FixDialog.esm.js.map +1 -1
- package/dist/components/Pods/PodDelete/PodDeleteButton.esm.js.map +1 -1
- package/dist/components/Pods/PodDelete/usePodDelete.esm.js.map +1 -1
- package/dist/components/Pods/PodDrawer/ContainerCard.esm.js.map +1 -1
- package/dist/components/Pods/PodDrawer/PendingPodContent.esm.js.map +1 -1
- package/dist/components/Pods/PodDrawer/PodDrawer.esm.js.map +1 -1
- package/dist/components/Pods/PodLogs/PodLogs.esm.js.map +1 -1
- package/dist/components/Pods/PodLogs/PodLogsDialog.esm.js.map +1 -1
- package/dist/components/Pods/PodLogs/usePodLogs.esm.js.map +1 -1
- package/dist/components/Pods/PodsTable.esm.js.map +1 -1
- package/dist/components/ResourceUtilization/ResourceUtilization.esm.js.map +1 -1
- package/dist/components/SecretsAccordions/SecretsAccordions.esm.js.map +1 -1
- package/dist/components/SecretsAccordions/SecretsDrawer.esm.js.map +1 -1
- package/dist/components/ServicesAccordions/ServiceDrawer.esm.js.map +1 -1
- package/dist/components/ServicesAccordions/ServicesAccordions.esm.js.map +1 -1
- package/dist/components/StatefulSetsAccordions/StatefulSetDrawer.esm.js.map +1 -1
- package/dist/components/StatefulSetsAccordions/StatefulSetsAccordions.esm.js.map +1 -1
- package/dist/hooks/Cluster.esm.js.map +1 -1
- package/dist/hooks/GroupedResponses.esm.js.map +1 -1
- package/dist/hooks/PodNamesWithErrors.esm.js.map +1 -1
- package/dist/hooks/PodNamesWithMetrics.esm.js.map +1 -1
- package/dist/hooks/auth.esm.js.map +1 -1
- package/dist/hooks/useCustomResources.esm.js.map +1 -1
- package/dist/hooks/useIsPodDeleteEnabled.esm.js.map +1 -1
- package/dist/hooks/useIsPodExecTerminalEnabled.esm.js.map +1 -1
- package/dist/hooks/useIsPodExecTerminalSupported.esm.js.map +1 -1
- package/dist/hooks/useKubernetesObjects.esm.js.map +1 -1
- package/dist/hooks/useMatchingErrors.esm.js.map +1 -1
- package/dist/hooks/usePodMetrics.esm.js.map +1 -1
- package/dist/kubernetes-auth-provider/AksKubernetesAuthProvider.esm.js.map +1 -1
- package/dist/kubernetes-auth-provider/GoogleKubernetesAuthProvider.esm.js.map +1 -1
- package/dist/kubernetes-auth-provider/KubernetesAuthProviders.esm.js.map +1 -1
- package/dist/kubernetes-auth-provider/OidcKubernetesAuthProvider.esm.js.map +1 -1
- package/dist/kubernetes-auth-provider/ServerSideAuthProvider.esm.js.map +1 -1
- package/dist/kubernetes-auth-provider/types.esm.js.map +1 -1
- package/dist/translation.esm.js.map +1 -1
- package/dist/utils/crons.esm.js.map +1 -1
- package/dist/utils/owner.esm.js.map +1 -1
- package/dist/utils/persistentVolumes.esm.js.map +1 -1
- package/dist/utils/pod.esm.js.map +1 -1
- package/dist/utils/resources.esm.js.map +1 -1
- package/package.json +9 -9
|
@@ -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';\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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
|
|
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":";;;;;;;;;;;;;;;AAoCA,MAAM,sBAAA,GAAyB,UAAA;AAAA,EAAW,CAAC,WACzC,YAAA,CAAa;AAAA,IACX,MAAA,EAAQ;AAAA,MACN,OAAA,EAAS,MAAA;AAAA,MACT,aAAA,EAAe,KAAA;AAAA,MACf,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA,OAAA,EAAS;AAAA,MACP,MAAA,EAAQ;AAAA,KACV;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,QAAA,EAAU;AAAA;AACZ,GACD;AACH,CAAA;AAmBA,MAAM,0BAA0B,CAAC;AAAA,EAC/B,QAAA;AAAA,EACA,MAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,KAAoC;AAClC,EAAA,MAAM,UAAU,sBAAA,EAAuB;AACvC,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,6BAA6B,CAAA;AAC7D,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAkB,KAAK,CAAA;AAEnD,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,MAAA,EACtB,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAS,IAAA,EAAC,cAAA,EAAe,YAAA,EAAa,UAAA,EAAW,YAAA,EACrD,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,EAAA,EACb,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,IAAA,EACjB,QAAA,EAAA,gBAAA,CAAiB,QAAA,EAAU,IAAA,EAC9B,CAAA,EACF,CAAA;AAAA,sBACA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,IAAI,CAAA,EACb,QAAA,kBAAA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UAEC,KAAA,EAAO,EAAE,8BAA8B,CAAA;AAAA,UACvC,OAAA,EAAS,MAAM,KAAA,EAAM;AAAA,UACrB,KAAA,EAAM,SAAA;AAAA,UAEN,QAAA,kBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAW,OAAA,CAAQ,IAAA,EAAM;AAAA,SAAA;AAAA,QALhC;AAAA,OAMN,EACF,CAAA;AAAA,0BACC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,IACZ,QAAA,EAAA,MAAA,EACH,CAAA;AAAA,sBACA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,IAAI,EAAA,EACb,QAAA,kBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,OAAA,kBACE,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,MAAA;AAAA,cACT,UAAU,CAAA,KAAA,KAAS;AACjB,gBAAA,SAAA,CAAU,KAAA,CAAM,OAAO,OAAO,CAAA;AAAA,cAChC,CAAA;AAAA,cACA,IAAA,EAAM,EAAE,uBAAuB;AAAA;AAAA,WACjC;AAAA,UAEF,KAAA,EAAO,EAAE,uBAAuB;AAAA;AAAA,OAClC,EACF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,oBACA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,CAAQ,OAAA,EACrB,QAAA,EAAA;AAAA,MAAA,MAAA,oBAAU,GAAA,CAAC,YAAA,EAAA,EAAa,MAAA,EAAQ,gBAAA,EAAkB,CAAA;AAAA,MAClD,CAAC,MAAA,IAAU;AAAA,KAAA,EACd;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AAeA,MAAM,eAAA,GAAkB,UAAA;AAAA,EAAW,CAAC,UAClC,YAAA,CAAa;AAAA,IACX,KAAA,EAAO;AAAA,MACL,KAAA,EAAO,KAAA;AAAA,MACP,cAAA,EAAgB,eAAA;AAAA,MAChB,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,GAAG;AAAA;AAC5B,GACD;AACH,CAAA;AAEA,MAAM,eAAe,UAAA,CAAW;AAAA,EAC9B,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS;AAAA,GACX;AAAA,EACA,KAAA,EAAO;AAAA,IACL,aAAA,EAAe;AAAA;AAEnB,CAAC,EAAE,MAAM,CAAA;AAOF,MAAM,mBAAmB,CAAC;AAAA,EAC/B,IAAA;AAAA,EACA,KAAA;AAAA,EACA,oBAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,KAA6B;AAC3B,EAAA,MAAM,UAAU,eAAA,EAAgB;AAChC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,QAAA,CAAkB,QAAQ,KAAK,CAAA;AAE3D,EAAA,MAAM,YAAA,GAAe,CAAC,CAAA,EAAoB,QAAA,KAAsB;AAC9D,IAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,IAAA,SAAA,CAAU,QAAQ,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,gBAAa,OAAA,EAAS,MAAM,SAAA,CAAU,IAAI,GAAI,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACrD,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS;AAAA,UACP,OAAO,OAAA,CAAQ;AAAA,SACjB;AAAA,QACA,MAAA,EAAO,OAAA;AAAA,QACP,IAAA,EAAM,MAAA;AAAA,QACN,OAAA,EAAS,CAAC,CAAA,KAAW,YAAA,CAAa,GAAG,KAAK,CAAA;AAAA,QAC1C,OAAA,EAAS,CAAA,KAAA,KAAS,KAAA,CAAM,eAAA,EAAgB;AAAA,QAEvC,QAAA,EAAA,MAAA,oBACC,GAAA;AAAA,UAAC,uBAAA;AAAA,UAAA;AAAA,YACC,MAAA,EAAQ,oBAAA;AAAA,YACR,gBAAA;AAAA,YACA,QAAA;AAAA,YACA,KAAA,EAAO,MAAM,SAAA,CAAU,KAAK;AAAA;AAAA;AAC9B;AAAA;AAEJ,GAAA,EACF,CAAA;AAEJ;;"}
|
|
@@ -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';\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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"}
|
|
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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"}
|
|
@@ -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';\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
|
|
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;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersistentVolumesAccordions.esm.js","sources":["../../../src/components/PersistentVolumesAccordions/PersistentVolumesAccordions.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\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 Typography from '@material-ui/core/Typography';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport type { V1PersistentVolume } from '@kubernetes/client-node';\nimport { PersistentVolumesTable } from './PersistentVolumesTable';\nimport { GroupedResponsesContext } from '../../hooks';\nimport { StatusOK, StatusError } from '@backstage/core-components';\n\ntype PersistentVolumesAccordionsProps = {\n children?: ReactNode;\n};\n\ntype PersistentVolumesAccordionProps = {\n persistentVolumes: V1PersistentVolume[];\n children?: ReactNode;\n};\n\ntype PersistentVolumesSummaryProps = {\n numberOfPersistentVolumes: number;\n numberOfBoundVolumes: number;\n numberOfFailedVolumes: number;\n children?: ReactNode;\n};\n\nconst PersistentVolumesSummary = ({\n numberOfPersistentVolumes,\n numberOfBoundVolumes,\n numberOfFailedVolumes,\n}: PersistentVolumesSummaryProps) => {\n return (\n <Grid\n container\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n spacing={0}\n >\n <Grid xs={4} item>\n <Typography variant=\"body1\">\n <strong>PersistentVolumes</strong>\n </Typography>\n </Grid>\n <Grid\n item\n container\n xs={8}\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-end\"\n spacing={0}\n >\n <Grid item>\n <StatusOK>{numberOfPersistentVolumes} volumes</StatusOK>\n </Grid>\n <Grid item>\n <StatusOK>{numberOfBoundVolumes} bound</StatusOK>\n </Grid>\n {numberOfFailedVolumes > 0 && (\n <Grid item>\n <StatusError>\n {numberOfFailedVolumes} volume\n {numberOfFailedVolumes > 1 ? 's' : ''} failed\n </StatusError>\n </Grid>\n )}\n </Grid>\n </Grid>\n );\n};\n\nconst PersistentVolumesAccordion = ({\n persistentVolumes,\n}: PersistentVolumesAccordionProps) => {\n const boundVolumes = persistentVolumes.filter(\n pv => pv.status?.phase === 'Bound',\n );\n const failedVolumes = persistentVolumes.filter(\n pv => pv.status?.phase === 'Failed',\n );\n\n return (\n <Accordion TransitionProps={{ unmountOnExit: true }} variant=\"outlined\">\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <PersistentVolumesSummary\n numberOfPersistentVolumes={persistentVolumes.length}\n numberOfBoundVolumes={boundVolumes.length}\n numberOfFailedVolumes={failedVolumes.length}\n />\n </AccordionSummary>\n <AccordionDetails>\n <PersistentVolumesTable persistentVolumes={persistentVolumes} />\n </AccordionDetails>\n </Accordion>\n );\n};\n\nexport const PersistentVolumesAccordions =\n ({}: PersistentVolumesAccordionsProps) => {\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 <Grid container item xs>\n <Grid item xs>\n <PersistentVolumesAccordion\n persistentVolumes={groupedResponses.persistentVolumes}\n />\n </Grid>\n </Grid>\n </Grid>\n );\n };\n"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"PersistentVolumesAccordions.esm.js","sources":["../../../src/components/PersistentVolumesAccordions/PersistentVolumesAccordions.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\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 Typography from '@material-ui/core/Typography';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport type { V1PersistentVolume } from '@kubernetes/client-node';\nimport { PersistentVolumesTable } from './PersistentVolumesTable';\nimport { GroupedResponsesContext } from '../../hooks';\nimport { StatusOK, StatusError } from '@backstage/core-components';\n\ntype PersistentVolumesAccordionsProps = {\n children?: ReactNode;\n};\n\ntype PersistentVolumesAccordionProps = {\n persistentVolumes: V1PersistentVolume[];\n children?: ReactNode;\n};\n\ntype PersistentVolumesSummaryProps = {\n numberOfPersistentVolumes: number;\n numberOfBoundVolumes: number;\n numberOfFailedVolumes: number;\n children?: ReactNode;\n};\n\nconst PersistentVolumesSummary = ({\n numberOfPersistentVolumes,\n numberOfBoundVolumes,\n numberOfFailedVolumes,\n}: PersistentVolumesSummaryProps) => {\n return (\n <Grid\n container\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n spacing={0}\n >\n <Grid xs={4} item>\n <Typography variant=\"body1\">\n <strong>PersistentVolumes</strong>\n </Typography>\n </Grid>\n <Grid\n item\n container\n xs={8}\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-end\"\n spacing={0}\n >\n <Grid item>\n <StatusOK>{numberOfPersistentVolumes} volumes</StatusOK>\n </Grid>\n <Grid item>\n <StatusOK>{numberOfBoundVolumes} bound</StatusOK>\n </Grid>\n {numberOfFailedVolumes > 0 && (\n <Grid item>\n <StatusError>\n {numberOfFailedVolumes} volume\n {numberOfFailedVolumes > 1 ? 's' : ''} failed\n </StatusError>\n </Grid>\n )}\n </Grid>\n </Grid>\n );\n};\n\nconst PersistentVolumesAccordion = ({\n persistentVolumes,\n}: PersistentVolumesAccordionProps) => {\n const boundVolumes = persistentVolumes.filter(\n pv => pv.status?.phase === 'Bound',\n );\n const failedVolumes = persistentVolumes.filter(\n pv => pv.status?.phase === 'Failed',\n );\n\n return (\n <Accordion TransitionProps={{ unmountOnExit: true }} variant=\"outlined\">\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <PersistentVolumesSummary\n numberOfPersistentVolumes={persistentVolumes.length}\n numberOfBoundVolumes={boundVolumes.length}\n numberOfFailedVolumes={failedVolumes.length}\n />\n </AccordionSummary>\n <AccordionDetails>\n <PersistentVolumesTable persistentVolumes={persistentVolumes} />\n </AccordionDetails>\n </Accordion>\n );\n};\n\nexport const PersistentVolumesAccordions =\n ({}: PersistentVolumesAccordionsProps) => {\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 <Grid container item xs>\n <Grid item xs>\n <PersistentVolumesAccordion\n persistentVolumes={groupedResponses.persistentVolumes}\n />\n </Grid>\n </Grid>\n </Grid>\n );\n };\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersistentVolumesDrawer.esm.js","sources":["../../../src/components/PersistentVolumesAccordions/PersistentVolumesDrawer.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 { V1PersistentVolume } from '@kubernetes/client-node';\nimport { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer';\nimport Typography from '@material-ui/core/Typography';\nimport Grid from '@material-ui/core/Grid';\nimport Chip from '@material-ui/core/Chip';\n\nexport const PersistentVolumesDrawer = ({\n persistentVolume,\n expanded,\n}: {\n persistentVolume: V1PersistentVolume;\n expanded?: boolean;\n}) => {\n const namespace = persistentVolume.metadata?.namespace;\n return (\n <KubernetesStructuredMetadataTableDrawer\n object={persistentVolume}\n expanded={expanded}\n kind=\"PersistentVolume\"\n renderObject={(persistentVolumeObject: V1PersistentVolume) => {\n return persistentVolumeObject || {};\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 {persistentVolume.metadata?.name ?? 'unknown object'}\n </Typography>\n </Grid>\n <Grid item>\n <Typography color=\"textSecondary\" variant=\"subtitle1\">\n PersistentVolume\n </Typography>\n </Grid>\n {namespace && (\n <Grid item>\n <Chip size=\"small\" label={`namespace: ${namespace}`} />\n </Grid>\n )}\n </Grid>\n </KubernetesStructuredMetadataTableDrawer>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAqBO,MAAM,0BAA0B,CAAC;AAAA,EACtC,gBAAA;AAAA,EACA;AACF,CAAA,KAGM;AACJ,EAAA,MAAM,SAAA,GAAY,iBAAiB,QAAA,EAAU,SAAA;AAC7C,EAAA,uBACE,GAAA;AAAA,IAAC,uCAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,gBAAA;AAAA,MACR,QAAA;AAAA,MACA,IAAA,EAAK,kBAAA;AAAA,MACL,YAAA,EAAc,CAAC,sBAAA,KAA+C;AAC5D,QAAA,OAAO,0BAA0B,EAAC;AAAA,MACpC,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,gBAAA,CAAiB,QAAA,EAAU,IAAA,IAAQ,gBAAA,EACtC,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,kBAAA,EAEtD,CAAA,EACF,CAAA;AAAA,YACC,SAAA,oBACC,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EACR,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,KAAA,EAAO,CAAA,WAAA,EAAc,SAAS,IAAI,CAAA,EACvD;AAAA;AAAA;AAAA;AAEJ;AAAA,GACF;AAEJ
|
|
1
|
+
{"version":3,"file":"PersistentVolumesDrawer.esm.js","sources":["../../../src/components/PersistentVolumesAccordions/PersistentVolumesDrawer.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 { V1PersistentVolume } from '@kubernetes/client-node';\nimport { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer';\nimport Typography from '@material-ui/core/Typography';\nimport Grid from '@material-ui/core/Grid';\nimport Chip from '@material-ui/core/Chip';\n\nexport const PersistentVolumesDrawer = ({\n persistentVolume,\n expanded,\n}: {\n persistentVolume: V1PersistentVolume;\n expanded?: boolean;\n}) => {\n const namespace = persistentVolume.metadata?.namespace;\n return (\n <KubernetesStructuredMetadataTableDrawer\n object={persistentVolume}\n expanded={expanded}\n kind=\"PersistentVolume\"\n renderObject={(persistentVolumeObject: V1PersistentVolume) => {\n return persistentVolumeObject || {};\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 {persistentVolume.metadata?.name ?? 'unknown object'}\n </Typography>\n </Grid>\n <Grid item>\n <Typography color=\"textSecondary\" variant=\"subtitle1\">\n PersistentVolume\n </Typography>\n </Grid>\n {namespace && (\n <Grid item>\n <Chip size=\"small\" label={`namespace: ${namespace}`} />\n </Grid>\n )}\n </Grid>\n </KubernetesStructuredMetadataTableDrawer>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAqBO,MAAM,0BAA0B,CAAC;AAAA,EACtC,gBAAA;AAAA,EACA;AACF,CAAA,KAGM;AACJ,EAAA,MAAM,SAAA,GAAY,iBAAiB,QAAA,EAAU,SAAA;AAC7C,EAAA,uBACE,GAAA;AAAA,IAAC,uCAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,gBAAA;AAAA,MACR,QAAA;AAAA,MACA,IAAA,EAAK,kBAAA;AAAA,MACL,YAAA,EAAc,CAAC,sBAAA,KAA+C;AAC5D,QAAA,OAAO,0BAA0B,EAAC;AAAA,MACpC,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,gBAAA,CAAiB,QAAA,EAAU,IAAA,IAAQ,gBAAA,EACtC,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,kBAAA,EAEtD,CAAA,EACF,CAAA;AAAA,YACC,SAAA,oBACC,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EACR,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,KAAA,EAAO,CAAA,WAAA,EAAc,SAAS,IAAI,CAAA,EACvD;AAAA;AAAA;AAAA;AAEJ;AAAA,GACF;AAEJ;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersistentVolumesTable.esm.js","sources":["../../../src/components/PersistentVolumesAccordions/PersistentVolumesTable.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\nimport { ReactNode } from 'react';\nimport { PersistentVolumesDrawer } from './PersistentVolumesDrawer';\nimport { Table, TableColumn } from '@backstage/core-components';\nimport type { V1PersistentVolume } from '@kubernetes/client-node';\nimport {\n StatusError,\n StatusOK,\n StatusPending,\n} from '@backstage/core-components';\nimport { getPersistentVolumeType } from '../../utils/persistentVolumes';\n\nexport type PersistentVolumesTableProps = {\n persistentVolumes: V1PersistentVolume[];\n children?: ReactNode;\n};\n\nconst PersistentVolumeDrawerTrigger = ({\n persistentVolume,\n}: {\n persistentVolume: V1PersistentVolume;\n}) => {\n return <PersistentVolumesDrawer persistentVolume={persistentVolume} />;\n};\n\nconst renderPhaseStatus = (persistentVolume: V1PersistentVolume) => {\n const phase = persistentVolume.status?.phase;\n\n if (phase === 'Bound') {\n return <StatusOK>Bound</StatusOK>;\n }\n if (phase === 'Available') {\n return <StatusPending>Available</StatusPending>;\n }\n if (phase === 'Released') {\n return <StatusPending>Released</StatusPending>;\n }\n if (phase === 'Pending') {\n return <StatusPending>Pending</StatusPending>;\n }\n if (phase === 'Failed') {\n return <StatusError>Failed</StatusError>;\n }\n return <>{phase ?? 'Unknown'}</>;\n};\n\nexport const PersistentVolumesTable = ({\n persistentVolumes,\n}: PersistentVolumesTableProps) => {\n const defaultColumns: TableColumn<V1PersistentVolume>[] = [\n {\n title: 'ID',\n field: 'metadata.uid',\n hidden: true,\n },\n {\n title: 'name',\n highlight: true,\n render: (persistentVolume: V1PersistentVolume) => {\n return (\n <PersistentVolumeDrawerTrigger persistentVolume={persistentVolume} />\n );\n },\n cellStyle: {\n width: '20%',\n },\n },\n {\n title: 'phase',\n render: renderPhaseStatus,\n cellStyle: {\n width: '9%',\n },\n },\n {\n title: 'status',\n render: (persistentVolume: V1PersistentVolume) =>\n persistentVolume.status?.phase ?? 'Unknown',\n cellStyle: {\n width: '9%',\n },\n },\n {\n title: 'capacity',\n render: (persistentVolume: V1PersistentVolume) =>\n persistentVolume.spec?.capacity?.storage ?? 'N/A',\n cellStyle: {\n width: '10%',\n },\n },\n {\n title: 'type',\n render: (persistentVolume: V1PersistentVolume) => {\n const driver = persistentVolume.spec?.csi?.driver;\n return getPersistentVolumeType(driver) ?? 'N/A';\n },\n cellStyle: {\n width: '15%',\n },\n },\n {\n title: 'claim',\n render: (persistentVolume: V1PersistentVolume) => {\n const claim = persistentVolume.spec?.claimRef;\n if (claim?.namespace && claim?.name) {\n return `${claim.namespace}/${claim.name}`;\n }\n return 'N/A';\n },\n cellStyle: {\n width: '37%',\n },\n },\n ];\n\n const columns: TableColumn<V1PersistentVolume>[] = [...defaultColumns];\n\n const tableStyle = {\n minWidth: '0',\n width: '100%',\n };\n\n return (\n <div style={tableStyle}>\n <Table\n options={{ paging: true, search: false, emptyRowsWhenPaging: false }}\n data={\n persistentVolumes.map((pv: V1PersistentVolume) => ({\n ...pv,\n id: pv?.metadata?.uid,\n })) as any as V1PersistentVolume[]\n }\n columns={columns}\n />\n </div>\n );\n};\n"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"PersistentVolumesTable.esm.js","sources":["../../../src/components/PersistentVolumesAccordions/PersistentVolumesTable.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\nimport { ReactNode } from 'react';\nimport { PersistentVolumesDrawer } from './PersistentVolumesDrawer';\nimport { Table, TableColumn } from '@backstage/core-components';\nimport type { V1PersistentVolume } from '@kubernetes/client-node';\nimport {\n StatusError,\n StatusOK,\n StatusPending,\n} from '@backstage/core-components';\nimport { getPersistentVolumeType } from '../../utils/persistentVolumes';\n\nexport type PersistentVolumesTableProps = {\n persistentVolumes: V1PersistentVolume[];\n children?: ReactNode;\n};\n\nconst PersistentVolumeDrawerTrigger = ({\n persistentVolume,\n}: {\n persistentVolume: V1PersistentVolume;\n}) => {\n return <PersistentVolumesDrawer persistentVolume={persistentVolume} />;\n};\n\nconst renderPhaseStatus = (persistentVolume: V1PersistentVolume) => {\n const phase = persistentVolume.status?.phase;\n\n if (phase === 'Bound') {\n return <StatusOK>Bound</StatusOK>;\n }\n if (phase === 'Available') {\n return <StatusPending>Available</StatusPending>;\n }\n if (phase === 'Released') {\n return <StatusPending>Released</StatusPending>;\n }\n if (phase === 'Pending') {\n return <StatusPending>Pending</StatusPending>;\n }\n if (phase === 'Failed') {\n return <StatusError>Failed</StatusError>;\n }\n return <>{phase ?? 'Unknown'}</>;\n};\n\nexport const PersistentVolumesTable = ({\n persistentVolumes,\n}: PersistentVolumesTableProps) => {\n const defaultColumns: TableColumn<V1PersistentVolume>[] = [\n {\n title: 'ID',\n field: 'metadata.uid',\n hidden: true,\n },\n {\n title: 'name',\n highlight: true,\n render: (persistentVolume: V1PersistentVolume) => {\n return (\n <PersistentVolumeDrawerTrigger persistentVolume={persistentVolume} />\n );\n },\n cellStyle: {\n width: '20%',\n },\n },\n {\n title: 'phase',\n render: renderPhaseStatus,\n cellStyle: {\n width: '9%',\n },\n },\n {\n title: 'status',\n render: (persistentVolume: V1PersistentVolume) =>\n persistentVolume.status?.phase ?? 'Unknown',\n cellStyle: {\n width: '9%',\n },\n },\n {\n title: 'capacity',\n render: (persistentVolume: V1PersistentVolume) =>\n persistentVolume.spec?.capacity?.storage ?? 'N/A',\n cellStyle: {\n width: '10%',\n },\n },\n {\n title: 'type',\n render: (persistentVolume: V1PersistentVolume) => {\n const driver = persistentVolume.spec?.csi?.driver;\n return getPersistentVolumeType(driver) ?? 'N/A';\n },\n cellStyle: {\n width: '15%',\n },\n },\n {\n title: 'claim',\n render: (persistentVolume: V1PersistentVolume) => {\n const claim = persistentVolume.spec?.claimRef;\n if (claim?.namespace && claim?.name) {\n return `${claim.namespace}/${claim.name}`;\n }\n return 'N/A';\n },\n cellStyle: {\n width: '37%',\n },\n },\n ];\n\n const columns: TableColumn<V1PersistentVolume>[] = [...defaultColumns];\n\n const tableStyle = {\n minWidth: '0',\n width: '100%',\n };\n\n return (\n <div style={tableStyle}>\n <Table\n options={{ paging: true, search: false, emptyRowsWhenPaging: false }}\n data={\n persistentVolumes.map((pv: V1PersistentVolume) => ({\n ...pv,\n id: pv?.metadata?.uid,\n })) as any as V1PersistentVolume[]\n }\n columns={columns}\n />\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersistentVolumeClaimsAccordions.esm.js","sources":["../../../src/components/PersistentVolumesClaimsAccordions/PersistentVolumeClaimsAccordions.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\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 Typography from '@material-ui/core/Typography';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport type { V1PersistentVolumeClaim } from '@kubernetes/client-node';\nimport { PersistentVolumeClaimsTable } from './PersistentVolumeClaimsTable';\nimport { GroupedResponsesContext } from '../../hooks';\nimport { StatusOK, StatusError } from '@backstage/core-components';\n\ntype PersistentVolumeClaimsAccordionsProps = {\n children?: ReactNode;\n};\n\ntype PersistentVolumeClaimsAccordionProps = {\n persistentVolumeClaims: V1PersistentVolumeClaim[];\n children?: ReactNode;\n};\n\ntype PersistentVolumeClaimsSummaryProps = {\n numberOfPersistentVolumeClaims: number;\n numberOfBoundClaims: number;\n numberOfLostClaims: number;\n children?: ReactNode;\n};\n\nconst PersistentVolumeClaimsSummary = ({\n numberOfPersistentVolumeClaims,\n numberOfBoundClaims,\n numberOfLostClaims,\n}: PersistentVolumeClaimsSummaryProps) => {\n return (\n <Grid\n container\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n spacing={0}\n >\n <Grid xs={4} item>\n <Typography variant=\"body1\">\n <strong>PersistentVolumeClaims</strong>\n </Typography>\n </Grid>\n <Grid\n item\n container\n xs={8}\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-end\"\n spacing={0}\n >\n <Grid item>\n <StatusOK>{numberOfPersistentVolumeClaims} claims</StatusOK>\n </Grid>\n <Grid item>\n <StatusOK>{numberOfBoundClaims} bound</StatusOK>\n </Grid>\n {numberOfLostClaims > 0 && (\n <Grid item>\n <StatusError>\n {numberOfLostClaims} claim\n {numberOfLostClaims > 1 ? 's' : ''} lost\n </StatusError>\n </Grid>\n )}\n </Grid>\n </Grid>\n );\n};\n\nconst PersistentVolumeClaimsAccordion = ({\n persistentVolumeClaims,\n}: PersistentVolumeClaimsAccordionProps) => {\n const boundClaims = persistentVolumeClaims.filter(\n pvc => pvc.status?.phase === 'Bound',\n );\n const lostClaims = persistentVolumeClaims.filter(\n pvc => pvc.status?.phase === 'Lost',\n );\n\n return (\n <Accordion TransitionProps={{ unmountOnExit: true }} variant=\"outlined\">\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <PersistentVolumeClaimsSummary\n numberOfPersistentVolumeClaims={persistentVolumeClaims.length}\n numberOfBoundClaims={boundClaims.length}\n numberOfLostClaims={lostClaims.length}\n />\n </AccordionSummary>\n <AccordionDetails>\n <PersistentVolumeClaimsTable\n persistentVolumeClaims={persistentVolumeClaims}\n />\n </AccordionDetails>\n </Accordion>\n );\n};\n\nexport const PersistentVolumeClaimsAccordions =\n ({}: PersistentVolumeClaimsAccordionsProps) => {\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 <Grid container item xs>\n <Grid item xs>\n <PersistentVolumeClaimsAccordion\n persistentVolumeClaims={groupedResponses.persistentVolumeClaims}\n />\n </Grid>\n </Grid>\n </Grid>\n );\n };\n"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"PersistentVolumeClaimsAccordions.esm.js","sources":["../../../src/components/PersistentVolumesClaimsAccordions/PersistentVolumeClaimsAccordions.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\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 Typography from '@material-ui/core/Typography';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport type { V1PersistentVolumeClaim } from '@kubernetes/client-node';\nimport { PersistentVolumeClaimsTable } from './PersistentVolumeClaimsTable';\nimport { GroupedResponsesContext } from '../../hooks';\nimport { StatusOK, StatusError } from '@backstage/core-components';\n\ntype PersistentVolumeClaimsAccordionsProps = {\n children?: ReactNode;\n};\n\ntype PersistentVolumeClaimsAccordionProps = {\n persistentVolumeClaims: V1PersistentVolumeClaim[];\n children?: ReactNode;\n};\n\ntype PersistentVolumeClaimsSummaryProps = {\n numberOfPersistentVolumeClaims: number;\n numberOfBoundClaims: number;\n numberOfLostClaims: number;\n children?: ReactNode;\n};\n\nconst PersistentVolumeClaimsSummary = ({\n numberOfPersistentVolumeClaims,\n numberOfBoundClaims,\n numberOfLostClaims,\n}: PersistentVolumeClaimsSummaryProps) => {\n return (\n <Grid\n container\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n spacing={0}\n >\n <Grid xs={4} item>\n <Typography variant=\"body1\">\n <strong>PersistentVolumeClaims</strong>\n </Typography>\n </Grid>\n <Grid\n item\n container\n xs={8}\n direction=\"column\"\n justifyContent=\"flex-start\"\n alignItems=\"flex-end\"\n spacing={0}\n >\n <Grid item>\n <StatusOK>{numberOfPersistentVolumeClaims} claims</StatusOK>\n </Grid>\n <Grid item>\n <StatusOK>{numberOfBoundClaims} bound</StatusOK>\n </Grid>\n {numberOfLostClaims > 0 && (\n <Grid item>\n <StatusError>\n {numberOfLostClaims} claim\n {numberOfLostClaims > 1 ? 's' : ''} lost\n </StatusError>\n </Grid>\n )}\n </Grid>\n </Grid>\n );\n};\n\nconst PersistentVolumeClaimsAccordion = ({\n persistentVolumeClaims,\n}: PersistentVolumeClaimsAccordionProps) => {\n const boundClaims = persistentVolumeClaims.filter(\n pvc => pvc.status?.phase === 'Bound',\n );\n const lostClaims = persistentVolumeClaims.filter(\n pvc => pvc.status?.phase === 'Lost',\n );\n\n return (\n <Accordion TransitionProps={{ unmountOnExit: true }} variant=\"outlined\">\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <PersistentVolumeClaimsSummary\n numberOfPersistentVolumeClaims={persistentVolumeClaims.length}\n numberOfBoundClaims={boundClaims.length}\n numberOfLostClaims={lostClaims.length}\n />\n </AccordionSummary>\n <AccordionDetails>\n <PersistentVolumeClaimsTable\n persistentVolumeClaims={persistentVolumeClaims}\n />\n </AccordionDetails>\n </Accordion>\n );\n};\n\nexport const PersistentVolumeClaimsAccordions =\n ({}: PersistentVolumeClaimsAccordionsProps) => {\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 <Grid container item xs>\n <Grid item xs>\n <PersistentVolumeClaimsAccordion\n persistentVolumeClaims={groupedResponses.persistentVolumeClaims}\n />\n </Grid>\n </Grid>\n </Grid>\n );\n };\n"],"names":[],"mappings":"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"}
|
package/dist/components/PersistentVolumesClaimsAccordions/PersistentVolumeClaimsDrawer.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersistentVolumeClaimsDrawer.esm.js","sources":["../../../src/components/PersistentVolumesClaimsAccordions/PersistentVolumeClaimsDrawer.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 { V1PersistentVolumeClaim } from '@kubernetes/client-node';\nimport { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer';\nimport Typography from '@material-ui/core/Typography';\nimport Grid from '@material-ui/core/Grid';\nimport Chip from '@material-ui/core/Chip';\n\nexport const PersistentVolumeClaimsDrawer = ({\n persistentVolumeClaim,\n expanded,\n}: {\n persistentVolumeClaim: V1PersistentVolumeClaim;\n expanded?: boolean;\n}) => {\n const namespace = persistentVolumeClaim.metadata?.namespace;\n return (\n <KubernetesStructuredMetadataTableDrawer\n object={persistentVolumeClaim}\n expanded={expanded}\n kind=\"PersistentVolumeClaim\"\n renderObject={(persistentVolumeClaimObject: V1PersistentVolumeClaim) => {\n return persistentVolumeClaimObject || {};\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 {persistentVolumeClaim.metadata?.name ?? 'unknown object'}\n </Typography>\n </Grid>\n <Grid item>\n <Typography color=\"textSecondary\" variant=\"subtitle1\">\n PersistentVolumeClaim\n </Typography>\n </Grid>\n {namespace && (\n <Grid item>\n <Chip size=\"small\" label={`namespace: ${namespace}`} />\n </Grid>\n )}\n </Grid>\n </KubernetesStructuredMetadataTableDrawer>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAqBO,MAAM,+BAA+B,CAAC;AAAA,EAC3C,qBAAA;AAAA,EACA;AACF,CAAA,KAGM;AACJ,EAAA,MAAM,SAAA,GAAY,sBAAsB,QAAA,EAAU,SAAA;AAClD,EAAA,uBACE,GAAA;AAAA,IAAC,uCAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,qBAAA;AAAA,MACR,QAAA;AAAA,MACA,IAAA,EAAK,uBAAA;AAAA,MACL,YAAA,EAAc,CAAC,2BAAA,KAAyD;AACtE,QAAA,OAAO,+BAA+B,EAAC;AAAA,MACzC,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,qBAAA,CAAsB,QAAA,EAAU,IAAA,IAAQ,gBAAA,EAC3C,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,uBAAA,EAEtD,CAAA,EACF,CAAA;AAAA,YACC,SAAA,oBACC,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EACR,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,KAAA,EAAO,CAAA,WAAA,EAAc,SAAS,IAAI,CAAA,EACvD;AAAA;AAAA;AAAA;AAEJ;AAAA,GACF;AAEJ
|
|
1
|
+
{"version":3,"file":"PersistentVolumeClaimsDrawer.esm.js","sources":["../../../src/components/PersistentVolumesClaimsAccordions/PersistentVolumeClaimsDrawer.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 { V1PersistentVolumeClaim } from '@kubernetes/client-node';\nimport { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer';\nimport Typography from '@material-ui/core/Typography';\nimport Grid from '@material-ui/core/Grid';\nimport Chip from '@material-ui/core/Chip';\n\nexport const PersistentVolumeClaimsDrawer = ({\n persistentVolumeClaim,\n expanded,\n}: {\n persistentVolumeClaim: V1PersistentVolumeClaim;\n expanded?: boolean;\n}) => {\n const namespace = persistentVolumeClaim.metadata?.namespace;\n return (\n <KubernetesStructuredMetadataTableDrawer\n object={persistentVolumeClaim}\n expanded={expanded}\n kind=\"PersistentVolumeClaim\"\n renderObject={(persistentVolumeClaimObject: V1PersistentVolumeClaim) => {\n return persistentVolumeClaimObject || {};\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 {persistentVolumeClaim.metadata?.name ?? 'unknown object'}\n </Typography>\n </Grid>\n <Grid item>\n <Typography color=\"textSecondary\" variant=\"subtitle1\">\n PersistentVolumeClaim\n </Typography>\n </Grid>\n {namespace && (\n <Grid item>\n <Chip size=\"small\" label={`namespace: ${namespace}`} />\n </Grid>\n )}\n </Grid>\n </KubernetesStructuredMetadataTableDrawer>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAqBO,MAAM,+BAA+B,CAAC;AAAA,EAC3C,qBAAA;AAAA,EACA;AACF,CAAA,KAGM;AACJ,EAAA,MAAM,SAAA,GAAY,sBAAsB,QAAA,EAAU,SAAA;AAClD,EAAA,uBACE,GAAA;AAAA,IAAC,uCAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAQ,qBAAA;AAAA,MACR,QAAA;AAAA,MACA,IAAA,EAAK,uBAAA;AAAA,MACL,YAAA,EAAc,CAAC,2BAAA,KAAyD;AACtE,QAAA,OAAO,+BAA+B,EAAC;AAAA,MACzC,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,qBAAA,CAAsB,QAAA,EAAU,IAAA,IAAQ,gBAAA,EAC3C,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,uBAAA,EAEtD,CAAA,EACF,CAAA;AAAA,YACC,SAAA,oBACC,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EACR,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,OAAA,EAAQ,KAAA,EAAO,CAAA,WAAA,EAAc,SAAS,IAAI,CAAA,EACvD;AAAA;AAAA;AAAA;AAEJ;AAAA,GACF;AAEJ;;"}
|
package/dist/components/PersistentVolumesClaimsAccordions/PersistentVolumeClaimsTable.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersistentVolumeClaimsTable.esm.js","sources":["../../../src/components/PersistentVolumesClaimsAccordions/PersistentVolumeClaimsTable.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\nimport { ReactNode } from 'react';\nimport { PersistentVolumeClaimsDrawer } from './PersistentVolumeClaimsDrawer';\nimport { Table, TableColumn } from '@backstage/core-components';\nimport type { V1PersistentVolumeClaim } from '@kubernetes/client-node';\nimport {\n StatusError,\n StatusOK,\n StatusPending,\n} from '@backstage/core-components';\n\nexport type PersistentVolumeClaimsTableProps = {\n persistentVolumeClaims: V1PersistentVolumeClaim[];\n children?: ReactNode;\n};\n\nconst PersistentVolumeClaimDrawerTrigger = ({\n persistentVolumeClaim,\n}: {\n persistentVolumeClaim: V1PersistentVolumeClaim;\n}) => {\n return (\n <PersistentVolumeClaimsDrawer\n persistentVolumeClaim={persistentVolumeClaim}\n />\n );\n};\n\nconst renderPhaseStatus = (persistentVolumeClaim: V1PersistentVolumeClaim) => {\n const phase = persistentVolumeClaim.status?.phase;\n\n if (phase === 'Bound') {\n return <StatusOK>Bound</StatusOK>;\n }\n if (phase === 'Pending') {\n return <StatusPending>Pending</StatusPending>;\n }\n if (phase === 'Lost') {\n return <StatusError>Lost</StatusError>;\n }\n return <>{phase ?? 'Unknown'}</>;\n};\n\nexport const PersistentVolumeClaimsTable = ({\n persistentVolumeClaims,\n}: PersistentVolumeClaimsTableProps) => {\n const defaultColumns: TableColumn<V1PersistentVolumeClaim>[] = [\n {\n title: 'ID',\n field: 'metadata.uid',\n hidden: true,\n },\n {\n title: 'name',\n highlight: true,\n render: (persistentVolumeClaim: V1PersistentVolumeClaim) => {\n return (\n <PersistentVolumeClaimDrawerTrigger\n persistentVolumeClaim={persistentVolumeClaim}\n />\n );\n },\n cellStyle: {\n width: '25%',\n },\n },\n {\n title: 'phase',\n render: renderPhaseStatus,\n cellStyle: {\n width: '10%',\n },\n },\n {\n title: 'status',\n render: (persistentVolumeClaim: V1PersistentVolumeClaim) =>\n persistentVolumeClaim.status?.phase ?? 'Unknown',\n cellStyle: {\n width: '10%',\n },\n },\n {\n title: 'capacity',\n render: (persistentVolumeClaim: V1PersistentVolumeClaim) =>\n persistentVolumeClaim.status?.capacity?.storage ?? 'N/A',\n cellStyle: {\n width: '10%',\n },\n },\n {\n title: 'volume',\n render: (persistentVolumeClaim: V1PersistentVolumeClaim) =>\n persistentVolumeClaim.spec?.volumeName ?? 'N/A',\n cellStyle: {\n width: '45%',\n },\n },\n ];\n\n const columns: TableColumn<V1PersistentVolumeClaim>[] = [...defaultColumns];\n\n const tableStyle = {\n minWidth: '0',\n width: '100%',\n };\n\n return (\n <div style={tableStyle}>\n <Table\n options={{ paging: true, search: false, emptyRowsWhenPaging: false }}\n data={\n persistentVolumeClaims.map((pvc: V1PersistentVolumeClaim) => ({\n ...pvc,\n id: pvc?.metadata?.uid,\n })) as any as V1PersistentVolumeClaim[]\n }\n columns={columns}\n />\n </div>\n );\n};\n"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"PersistentVolumeClaimsTable.esm.js","sources":["../../../src/components/PersistentVolumesClaimsAccordions/PersistentVolumeClaimsTable.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\nimport { ReactNode } from 'react';\nimport { PersistentVolumeClaimsDrawer } from './PersistentVolumeClaimsDrawer';\nimport { Table, TableColumn } from '@backstage/core-components';\nimport type { V1PersistentVolumeClaim } from '@kubernetes/client-node';\nimport {\n StatusError,\n StatusOK,\n StatusPending,\n} from '@backstage/core-components';\n\nexport type PersistentVolumeClaimsTableProps = {\n persistentVolumeClaims: V1PersistentVolumeClaim[];\n children?: ReactNode;\n};\n\nconst PersistentVolumeClaimDrawerTrigger = ({\n persistentVolumeClaim,\n}: {\n persistentVolumeClaim: V1PersistentVolumeClaim;\n}) => {\n return (\n <PersistentVolumeClaimsDrawer\n persistentVolumeClaim={persistentVolumeClaim}\n />\n );\n};\n\nconst renderPhaseStatus = (persistentVolumeClaim: V1PersistentVolumeClaim) => {\n const phase = persistentVolumeClaim.status?.phase;\n\n if (phase === 'Bound') {\n return <StatusOK>Bound</StatusOK>;\n }\n if (phase === 'Pending') {\n return <StatusPending>Pending</StatusPending>;\n }\n if (phase === 'Lost') {\n return <StatusError>Lost</StatusError>;\n }\n return <>{phase ?? 'Unknown'}</>;\n};\n\nexport const PersistentVolumeClaimsTable = ({\n persistentVolumeClaims,\n}: PersistentVolumeClaimsTableProps) => {\n const defaultColumns: TableColumn<V1PersistentVolumeClaim>[] = [\n {\n title: 'ID',\n field: 'metadata.uid',\n hidden: true,\n },\n {\n title: 'name',\n highlight: true,\n render: (persistentVolumeClaim: V1PersistentVolumeClaim) => {\n return (\n <PersistentVolumeClaimDrawerTrigger\n persistentVolumeClaim={persistentVolumeClaim}\n />\n );\n },\n cellStyle: {\n width: '25%',\n },\n },\n {\n title: 'phase',\n render: renderPhaseStatus,\n cellStyle: {\n width: '10%',\n },\n },\n {\n title: 'status',\n render: (persistentVolumeClaim: V1PersistentVolumeClaim) =>\n persistentVolumeClaim.status?.phase ?? 'Unknown',\n cellStyle: {\n width: '10%',\n },\n },\n {\n title: 'capacity',\n render: (persistentVolumeClaim: V1PersistentVolumeClaim) =>\n persistentVolumeClaim.status?.capacity?.storage ?? 'N/A',\n cellStyle: {\n width: '10%',\n },\n },\n {\n title: 'volume',\n render: (persistentVolumeClaim: V1PersistentVolumeClaim) =>\n persistentVolumeClaim.spec?.volumeName ?? 'N/A',\n cellStyle: {\n width: '45%',\n },\n },\n ];\n\n const columns: TableColumn<V1PersistentVolumeClaim>[] = [...defaultColumns];\n\n const tableStyle = {\n minWidth: '0',\n width: '100%',\n };\n\n return (\n <div style={tableStyle}>\n <Table\n options={{ paging: true, search: false, emptyRowsWhenPaging: false }}\n data={\n persistentVolumeClaims.map((pvc: V1PersistentVolumeClaim) => ({\n ...pvc,\n id: pvc?.metadata?.uid,\n })) as any as V1PersistentVolumeClaim[]\n }\n columns={columns}\n />\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PodExecTerminal.esm.js","sources":["../../../src/components/PodExecTerminal/PodExecTerminal.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 { Progress } from '@backstage/core-components';\nimport { lazy, Suspense } from 'react';\nimport type { PodExecTerminalProps } from './PodExecTerminalContent';\n\nexport type { PodExecTerminalProps } from './PodExecTerminalContent';\n\n// @xterm/xterm and related CSS are large; only load them when a terminal mounts.\nconst LazyPodExecTerminalContent = lazy(() =>\n import('./PodExecTerminalContent').then(m => ({\n default: m.PodExecTerminalContent,\n })),\n);\n\n/**\n * Executes a `/bin/sh` process in the given pod's container and opens a terminal connected to it\n *\n * @public\n */\nexport const PodExecTerminal = (props: PodExecTerminalProps) => (\n <Suspense fallback={<Progress />}>\n <LazyPodExecTerminalContent {...props} />\n </Suspense>\n);\n"],"names":[],"mappings":";;;;AAuBA,MAAM,0BAAA,GAA6B,IAAA;AAAA,EAAK,MACtC,OAAO,iCAA0B,CAAA,CAAE,KAAK,CAAA,CAAA,MAAM;AAAA,IAC5C,SAAS,CAAA,CAAE;AAAA,GACb,CAAE;AACJ,CAAA;AAOO,MAAM,eAAA,GAAkB,CAAC,KAAA,qBAC9B,GAAA,CAAC,QAAA,EAAA,EAAS,QAAA,kBAAU,GAAA,CAAC,QAAA,EAAA,EAAS,CAAA,EAC5B,QAAA,kBAAA,GAAA,CAAC,0BAAA,EAAA,EAA4B,GAAG,OAAO,CAAA,EACzC
|
|
1
|
+
{"version":3,"file":"PodExecTerminal.esm.js","sources":["../../../src/components/PodExecTerminal/PodExecTerminal.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 { Progress } from '@backstage/core-components';\nimport { lazy, Suspense } from 'react';\nimport type { PodExecTerminalProps } from './PodExecTerminalContent';\n\nexport type { PodExecTerminalProps } from './PodExecTerminalContent';\n\n// @xterm/xterm and related CSS are large; only load them when a terminal mounts.\nconst LazyPodExecTerminalContent = lazy(() =>\n import('./PodExecTerminalContent').then(m => ({\n default: m.PodExecTerminalContent,\n })),\n);\n\n/**\n * Executes a `/bin/sh` process in the given pod's container and opens a terminal connected to it\n *\n * @public\n */\nexport const PodExecTerminal = (props: PodExecTerminalProps) => (\n <Suspense fallback={<Progress />}>\n <LazyPodExecTerminalContent {...props} />\n </Suspense>\n);\n"],"names":[],"mappings":";;;;AAuBA,MAAM,0BAAA,GAA6B,IAAA;AAAA,EAAK,MACtC,OAAO,iCAA0B,CAAA,CAAE,KAAK,CAAA,CAAA,MAAM;AAAA,IAC5C,SAAS,CAAA,CAAE;AAAA,GACb,CAAE;AACJ,CAAA;AAOO,MAAM,eAAA,GAAkB,CAAC,KAAA,qBAC9B,GAAA,CAAC,QAAA,EAAA,EAAS,QAAA,kBAAU,GAAA,CAAC,QAAA,EAAA,EAAS,CAAA,EAC5B,QAAA,kBAAA,GAAA,CAAC,0BAAA,EAAA,EAA4B,GAAG,OAAO,CAAA,EACzC;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PodExecTerminalAttachAddon.esm.js","sources":["../../../src/components/PodExecTerminal/PodExecTerminalAttachAddon.ts"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { AttachAddon, IAttachOptions } from '@xterm/addon-attach';\n\nexport class PodExecTerminalAttachAddon extends AttachAddon {\n #textEncoder = new TextEncoder();\n\n constructor(socket: WebSocket, options?: IAttachOptions) {\n super(socket, options);\n\n const thisAddon = this as any;\n\n // These methods are private in the original AttachAddon,\n // thus have to override at runtime like this\n thisAddon._sendBinary = (data: string) => {\n if (!thisAddon._checkOpenSocket()) {\n return;\n }\n\n const buffer = Uint8Array.from([0, ...this.#textEncoder.encode(data)]);\n\n thisAddon._socket.send(buffer);\n };\n\n thisAddon._sendData = (data: string) => {\n if (!thisAddon._checkOpenSocket()) {\n return;\n }\n\n thisAddon._sendBinary(data);\n };\n }\n}\n"],"names":[],"mappings":";;AAiBO,MAAM,mCAAmC,WAAA,CAAY;AAAA,EAC1D,YAAA,GAAe,IAAI,WAAA,EAAY;AAAA,EAE/B,WAAA,CAAY,QAAmB,OAAA,EAA0B;AACvD,IAAA,KAAA,CAAM,QAAQ,OAAO,CAAA;AAErB,IAAA,MAAM,SAAA,GAAY,IAAA;AAIlB,IAAA,SAAA,CAAU,WAAA,GAAc,CAAC,IAAA,KAAiB;AACxC,MAAA,IAAI,CAAC,SAAA,CAAU,gBAAA,EAAiB,EAAG;AACjC,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAAS,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,IAAI,CAAC,CAAC,CAAA;AAErE,MAAA,SAAA,CAAU,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,IAC/B,CAAA;AAEA,IAAA,SAAA,CAAU,SAAA,GAAY,CAAC,IAAA,KAAiB;AACtC,MAAA,IAAI,CAAC,SAAA,CAAU,gBAAA,EAAiB,EAAG;AACjC,QAAA;AAAA,MACF;AAEA,MAAA,SAAA,CAAU,YAAY,IAAI,CAAA;AAAA,IAC5B,CAAA;AAAA,EACF;AACF
|
|
1
|
+
{"version":3,"file":"PodExecTerminalAttachAddon.esm.js","sources":["../../../src/components/PodExecTerminal/PodExecTerminalAttachAddon.ts"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { AttachAddon, IAttachOptions } from '@xterm/addon-attach';\n\nexport class PodExecTerminalAttachAddon extends AttachAddon {\n #textEncoder = new TextEncoder();\n\n constructor(socket: WebSocket, options?: IAttachOptions) {\n super(socket, options);\n\n const thisAddon = this as any;\n\n // These methods are private in the original AttachAddon,\n // thus have to override at runtime like this\n thisAddon._sendBinary = (data: string) => {\n if (!thisAddon._checkOpenSocket()) {\n return;\n }\n\n const buffer = Uint8Array.from([0, ...this.#textEncoder.encode(data)]);\n\n thisAddon._socket.send(buffer);\n };\n\n thisAddon._sendData = (data: string) => {\n if (!thisAddon._checkOpenSocket()) {\n return;\n }\n\n thisAddon._sendBinary(data);\n };\n }\n}\n"],"names":[],"mappings":";;AAiBO,MAAM,mCAAmC,WAAA,CAAY;AAAA,EAC1D,YAAA,GAAe,IAAI,WAAA,EAAY;AAAA,EAE/B,WAAA,CAAY,QAAmB,OAAA,EAA0B;AACvD,IAAA,KAAA,CAAM,QAAQ,OAAO,CAAA;AAErB,IAAA,MAAM,SAAA,GAAY,IAAA;AAIlB,IAAA,SAAA,CAAU,WAAA,GAAc,CAAC,IAAA,KAAiB;AACxC,MAAA,IAAI,CAAC,SAAA,CAAU,gBAAA,EAAiB,EAAG;AACjC,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAAS,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,EAAG,GAAG,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,IAAI,CAAC,CAAC,CAAA;AAErE,MAAA,SAAA,CAAU,OAAA,CAAQ,KAAK,MAAM,CAAA;AAAA,IAC/B,CAAA;AAEA,IAAA,SAAA,CAAU,SAAA,GAAY,CAAC,IAAA,KAAiB;AACtC,MAAA,IAAI,CAAC,SAAA,CAAU,gBAAA,EAAiB,EAAG;AACjC,QAAA;AAAA,MACF;AAEA,MAAA,SAAA,CAAU,YAAY,IAAI,CAAA;AAAA,IAC5B,CAAA;AAAA,EACF;AACF;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PodExecTerminalContent.esm.js","sources":["../../../src/components/PodExecTerminal/PodExecTerminalContent.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 '@xterm/xterm/css/xterm.css';\n\nimport { discoveryApiRef, useApi } from '@backstage/core-plugin-api';\nimport { ClusterAttributes } from '@backstage/plugin-kubernetes-common';\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\nimport { useRef, useEffect, useMemo, useState } from 'react';\nimport { Terminal } from '@xterm/xterm';\nimport { FitAddon } from '@xterm/addon-fit';\n\nimport { PodExecTerminalAttachAddon } from './PodExecTerminalAttachAddon';\n\n/**\n * Props drilled down to the PodExecTerminal component\n *\n * @public\n */\nexport interface PodExecTerminalProps {\n cluster: ClusterAttributes;\n containerName: string;\n podName: string;\n podNamespace: string;\n}\n\nconst hasSocketProtocol = (url: string | URL) =>\n /wss?:\\/\\//.test(url.toString());\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n podExecTerminal: {\n width: '100%',\n height: '100%',\n '& .xterm-screen': { padding: theme.spacing(1) },\n },\n }),\n);\n\n/**\n * Executes a `/bin/sh` process in the given pod's container and opens a terminal connected to it\n *\n * @internal\n */\nexport const PodExecTerminalContent = (props: PodExecTerminalProps) => {\n const classes = useStyles();\n const { containerName, podNamespace, podName } = props;\n\n const [baseUrl, setBaseUrl] = useState(window.location.host);\n\n const terminalRef = useRef(null);\n const discoveryApi = useApi(discoveryApiRef);\n const namespace = podNamespace ?? 'default';\n\n useEffect(() => {\n discoveryApi\n .getBaseUrl('kubernetes')\n .then(url => url ?? window.location.host)\n .then(url => url.replace(/^http(s?):\\/\\//, 'ws$1://'))\n .then(url => setBaseUrl(url));\n }, [discoveryApi]);\n\n const urlParams = useMemo(() => {\n const params = new URLSearchParams({\n container: containerName,\n stdin: 'true',\n stdout: 'true',\n stderr: 'true',\n tty: 'true',\n command: '/bin/sh',\n });\n return params;\n }, [containerName]);\n\n const socketUrl = useMemo(() => {\n if (!hasSocketProtocol(baseUrl)) {\n return '';\n }\n\n return new URL(\n `${baseUrl}/proxy/api/v1/namespaces/${namespace}/pods/${podName}/exec?${urlParams}`,\n );\n }, [baseUrl, namespace, podName, urlParams]);\n\n useEffect(() => {\n if (!hasSocketProtocol(socketUrl)) {\n return () => {};\n }\n\n const terminal = new Terminal();\n const fitAddon = new FitAddon();\n terminal.loadAddon(fitAddon);\n\n if (terminalRef.current) {\n terminal.open(terminalRef.current);\n fitAddon.fit();\n }\n\n terminal.writeln('Starting terminal, please wait...');\n\n const socket = new WebSocket(socketUrl, ['channel.k8s.io']);\n\n socket.onopen = () => {\n terminal.clear();\n const attachAddon = new PodExecTerminalAttachAddon(socket, {\n bidirectional: true,\n });\n\n terminal.loadAddon(attachAddon);\n };\n\n socket.onclose = () => {\n terminal.writeln('Socket connection closed');\n };\n\n return () => {\n terminal?.clear();\n socket?.close();\n };\n }, [baseUrl, socketUrl]);\n\n return (\n <div\n data-testid=\"terminal\"\n ref={terminalRef}\n className={classes.podExecTerminal}\n />\n );\n};\n"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"PodExecTerminalContent.esm.js","sources":["../../../src/components/PodExecTerminal/PodExecTerminalContent.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 '@xterm/xterm/css/xterm.css';\n\nimport { discoveryApiRef, useApi } from '@backstage/core-plugin-api';\nimport { ClusterAttributes } from '@backstage/plugin-kubernetes-common';\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\nimport { useRef, useEffect, useMemo, useState } from 'react';\nimport { Terminal } from '@xterm/xterm';\nimport { FitAddon } from '@xterm/addon-fit';\n\nimport { PodExecTerminalAttachAddon } from './PodExecTerminalAttachAddon';\n\n/**\n * Props drilled down to the PodExecTerminal component\n *\n * @public\n */\nexport interface PodExecTerminalProps {\n cluster: ClusterAttributes;\n containerName: string;\n podName: string;\n podNamespace: string;\n}\n\nconst hasSocketProtocol = (url: string | URL) =>\n /wss?:\\/\\//.test(url.toString());\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n podExecTerminal: {\n width: '100%',\n height: '100%',\n '& .xterm-screen': { padding: theme.spacing(1) },\n },\n }),\n);\n\n/**\n * Executes a `/bin/sh` process in the given pod's container and opens a terminal connected to it\n *\n * @internal\n */\nexport const PodExecTerminalContent = (props: PodExecTerminalProps) => {\n const classes = useStyles();\n const { containerName, podNamespace, podName } = props;\n\n const [baseUrl, setBaseUrl] = useState(window.location.host);\n\n const terminalRef = useRef(null);\n const discoveryApi = useApi(discoveryApiRef);\n const namespace = podNamespace ?? 'default';\n\n useEffect(() => {\n discoveryApi\n .getBaseUrl('kubernetes')\n .then(url => url ?? window.location.host)\n .then(url => url.replace(/^http(s?):\\/\\//, 'ws$1://'))\n .then(url => setBaseUrl(url));\n }, [discoveryApi]);\n\n const urlParams = useMemo(() => {\n const params = new URLSearchParams({\n container: containerName,\n stdin: 'true',\n stdout: 'true',\n stderr: 'true',\n tty: 'true',\n command: '/bin/sh',\n });\n return params;\n }, [containerName]);\n\n const socketUrl = useMemo(() => {\n if (!hasSocketProtocol(baseUrl)) {\n return '';\n }\n\n return new URL(\n `${baseUrl}/proxy/api/v1/namespaces/${namespace}/pods/${podName}/exec?${urlParams}`,\n );\n }, [baseUrl, namespace, podName, urlParams]);\n\n useEffect(() => {\n if (!hasSocketProtocol(socketUrl)) {\n return () => {};\n }\n\n const terminal = new Terminal();\n const fitAddon = new FitAddon();\n terminal.loadAddon(fitAddon);\n\n if (terminalRef.current) {\n terminal.open(terminalRef.current);\n fitAddon.fit();\n }\n\n terminal.writeln('Starting terminal, please wait...');\n\n const socket = new WebSocket(socketUrl, ['channel.k8s.io']);\n\n socket.onopen = () => {\n terminal.clear();\n const attachAddon = new PodExecTerminalAttachAddon(socket, {\n bidirectional: true,\n });\n\n terminal.loadAddon(attachAddon);\n };\n\n socket.onclose = () => {\n terminal.writeln('Socket connection closed');\n };\n\n return () => {\n terminal?.clear();\n socket?.close();\n };\n }, [baseUrl, socketUrl]);\n\n return (\n <div\n data-testid=\"terminal\"\n ref={terminalRef}\n className={classes.podExecTerminal}\n />\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -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';\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
|
|
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;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorList.esm.js","sources":["../../../../src/components/Pods/ErrorList/ErrorList.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 { Fragment } from 'react';\n\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Divider from '@material-ui/core/Divider';\nimport Paper from '@material-ui/core/Paper';\nimport Grid from '@material-ui/core/Grid';\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\nimport { PodAndErrors } from '../types';\nimport { FixDialog } from '../FixDialog/FixDialog';\n\nconst useStyles = makeStyles((_theme: Theme) =>\n createStyles({\n root: {\n overflow: 'auto',\n },\n list: {\n width: '100%',\n },\n }),\n);\n\n/**\n * Props for ErrorList\n *\n * @public\n */\nexport interface ErrorListProps {\n podAndErrors: PodAndErrors[];\n}\n\n/**\n * Shows a list of errors found on a Pod\n *\n * @public\n */\nexport const ErrorList = ({ podAndErrors }: ErrorListProps) => {\n const classes = useStyles();\n return (\n <Paper className={classes.root}>\n <List className={classes.list}>\n {podAndErrors\n .filter(pae => pae.errors.length > 0)\n .flatMap(onlyPodWithErrors => {\n return onlyPodWithErrors.errors.map((error, i) => {\n return (\n <Fragment\n key={`${\n onlyPodWithErrors.pod.metadata?.name ?? 'unknown'\n }-eli-${i}`}\n >\n {i > 0 && <Divider key={`error-divider${i}`} />}\n <ListItem>\n <Grid container>\n <Grid item xs={9}>\n <ListItemText\n primary={error.message}\n secondary={onlyPodWithErrors.pod.metadata?.name}\n />\n </Grid>\n <Grid item xs={3}>\n <FixDialog\n pod={onlyPodWithErrors.pod}\n error={error}\n clusterName={onlyPodWithErrors.cluster.name}\n />\n </Grid>\n </Grid>\n </ListItem>\n </Fragment>\n );\n });\n })}\n </List>\n </Paper>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AA2BA,MAAM,SAAA,GAAY,UAAA;AAAA,EAAW,CAAC,WAC5B,YAAA,CAAa;AAAA,IACX,IAAA,EAAM;AAAA,MACJ,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,KAAA,EAAO;AAAA;AACT,GACD;AACH,CAAA;AAgBO,MAAM,SAAA,GAAY,CAAC,EAAE,YAAA,EAAa,KAAsB;AAC7D,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,2BACG,KAAA,EAAA,EAAM,SAAA,EAAW,QAAQ,IAAA,EACxB,QAAA,kBAAA,GAAA,CAAC,QAAK,SAAA,EAAW,OAAA,CAAQ,MACtB,QAAA,EAAA,YAAA,CACE,MAAA,CAAO,SAAO,GAAA,CAAI,MAAA,CAAO,SAAS,CAAC,CAAA,CACnC,QAAQ,CAAA,iBAAA,KAAqB;AAC5B,IAAA,OAAO,iBAAA,CAAkB,MAAA,CAAO,GAAA,CAAI,CAAC,OAAO,CAAA,KAAM;AAChD,MAAA,uBACE,IAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAKE,QAAA,EAAA;AAAA,YAAA,CAAA,GAAI,CAAA,oBAAK,GAAA,CAAC,OAAA,EAAA,EAAA,EAAa,CAAA,aAAA,EAAgB,CAAC,CAAA,CAAI,CAAA;AAAA,4BAC7C,GAAA,CAAC,QAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,WAAS,IAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,CAAA,EACb,QAAA,kBAAA,GAAA;AAAA,gBAAC,YAAA;AAAA,gBAAA;AAAA,kBACC,SAAS,KAAA,CAAM,OAAA;AAAA,kBACf,SAAA,EAAW,iBAAA,CAAkB,GAAA,CAAI,QAAA,EAAU;AAAA;AAAA,eAC7C,EACF,CAAA;AAAA,8BACA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,IAAI,CAAA,EACb,QAAA,kBAAA,GAAA;AAAA,gBAAC,SAAA;AAAA,gBAAA;AAAA,kBACC,KAAK,iBAAA,CAAkB,GAAA;AAAA,kBACvB,KAAA;AAAA,kBACA,WAAA,EAAa,kBAAkB,OAAA,CAAQ;AAAA;AAAA,eACzC,EACF;AAAA,aAAA,EACF,CAAA,EACF;AAAA;AAAA,SAAA;AAAA,QArBK,GACH,iBAAA,CAAkB,GAAA,CAAI,UAAU,IAAA,IAAQ,SAC1C,QAAQ,CAAC,CAAA;AAAA,OAoBX;AAAA,IAEJ,CAAC,CAAA;AAAA,EACH,CAAC,GACL,CAAA,EACF,CAAA;AAEJ
|
|
1
|
+
{"version":3,"file":"ErrorList.esm.js","sources":["../../../../src/components/Pods/ErrorList/ErrorList.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 { Fragment } from 'react';\n\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Divider from '@material-ui/core/Divider';\nimport Paper from '@material-ui/core/Paper';\nimport Grid from '@material-ui/core/Grid';\nimport { createStyles, makeStyles, Theme } from '@material-ui/core/styles';\nimport { PodAndErrors } from '../types';\nimport { FixDialog } from '../FixDialog/FixDialog';\n\nconst useStyles = makeStyles((_theme: Theme) =>\n createStyles({\n root: {\n overflow: 'auto',\n },\n list: {\n width: '100%',\n },\n }),\n);\n\n/**\n * Props for ErrorList\n *\n * @public\n */\nexport interface ErrorListProps {\n podAndErrors: PodAndErrors[];\n}\n\n/**\n * Shows a list of errors found on a Pod\n *\n * @public\n */\nexport const ErrorList = ({ podAndErrors }: ErrorListProps) => {\n const classes = useStyles();\n return (\n <Paper className={classes.root}>\n <List className={classes.list}>\n {podAndErrors\n .filter(pae => pae.errors.length > 0)\n .flatMap(onlyPodWithErrors => {\n return onlyPodWithErrors.errors.map((error, i) => {\n return (\n <Fragment\n key={`${\n onlyPodWithErrors.pod.metadata?.name ?? 'unknown'\n }-eli-${i}`}\n >\n {i > 0 && <Divider key={`error-divider${i}`} />}\n <ListItem>\n <Grid container>\n <Grid item xs={9}>\n <ListItemText\n primary={error.message}\n secondary={onlyPodWithErrors.pod.metadata?.name}\n />\n </Grid>\n <Grid item xs={3}>\n <FixDialog\n pod={onlyPodWithErrors.pod}\n error={error}\n clusterName={onlyPodWithErrors.cluster.name}\n />\n </Grid>\n </Grid>\n </ListItem>\n </Fragment>\n );\n });\n })}\n </List>\n </Paper>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AA2BA,MAAM,SAAA,GAAY,UAAA;AAAA,EAAW,CAAC,WAC5B,YAAA,CAAa;AAAA,IACX,IAAA,EAAM;AAAA,MACJ,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,KAAA,EAAO;AAAA;AACT,GACD;AACH,CAAA;AAgBO,MAAM,SAAA,GAAY,CAAC,EAAE,YAAA,EAAa,KAAsB;AAC7D,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,2BACG,KAAA,EAAA,EAAM,SAAA,EAAW,QAAQ,IAAA,EACxB,QAAA,kBAAA,GAAA,CAAC,QAAK,SAAA,EAAW,OAAA,CAAQ,MACtB,QAAA,EAAA,YAAA,CACE,MAAA,CAAO,SAAO,GAAA,CAAI,MAAA,CAAO,SAAS,CAAC,CAAA,CACnC,QAAQ,CAAA,iBAAA,KAAqB;AAC5B,IAAA,OAAO,iBAAA,CAAkB,MAAA,CAAO,GAAA,CAAI,CAAC,OAAO,CAAA,KAAM;AAChD,MAAA,uBACE,IAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAKE,QAAA,EAAA;AAAA,YAAA,CAAA,GAAI,CAAA,oBAAK,GAAA,CAAC,OAAA,EAAA,EAAA,EAAa,CAAA,aAAA,EAAgB,CAAC,CAAA,CAAI,CAAA;AAAA,4BAC7C,GAAA,CAAC,QAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,WAAS,IAAA,EACb,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,CAAA,EACb,QAAA,kBAAA,GAAA;AAAA,gBAAC,YAAA;AAAA,gBAAA;AAAA,kBACC,SAAS,KAAA,CAAM,OAAA;AAAA,kBACf,SAAA,EAAW,iBAAA,CAAkB,GAAA,CAAI,QAAA,EAAU;AAAA;AAAA,eAC7C,EACF,CAAA;AAAA,8BACA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,IAAI,CAAA,EACb,QAAA,kBAAA,GAAA;AAAA,gBAAC,SAAA;AAAA,gBAAA;AAAA,kBACC,KAAK,iBAAA,CAAkB,GAAA;AAAA,kBACvB,KAAA;AAAA,kBACA,WAAA,EAAa,kBAAkB,OAAA,CAAQ;AAAA;AAAA,eACzC,EACF;AAAA,aAAA,EACF,CAAA,EACF;AAAA;AAAA,SAAA;AAAA,QArBK,GACH,iBAAA,CAAkB,GAAA,CAAI,UAAU,IAAA,IAAQ,SAC1C,QAAQ,CAAC,CAAA;AAAA,OAoBX;AAAA,IAEJ,CAAC,CAAA;AAAA,EACH,CAAC,GACL,CAAA,EACF,CAAA;AAEJ;;"}
|
|
@@ -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';\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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
|
|
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":";;;;;;;;;;;;;;;;;;;AA8CA,MAAM,eAAA,GAAkB,CAAC,IAAA,KAAkB;AACzC,EAAA,uBACE,GAAA,CAAC,cAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAQ,QAAA,EAAA,IAAA,KAAS,SAAA,mBAAY,GAAA,CAAC,WAAA,EAAA,EAAY,CAAA,mBAAK,GAAA,CAAC,QAAA,EAAA,EAAS,CAAA,EAAG,CAAA,EAC/D,CAAA;AAEJ,CAAA;AAOO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,MAAA;AAAA,EACA;AACF,CAAA,KAA0B;AACxB,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,6BAA6B,CAAA;AAC7D,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,uBAAO,GAAA,CAAC,UAAA,EAAA,EAAY,QAAA,EAAA,CAAA,CAAE,sBAAsB,CAAA,EAAE,CAAA;AAAA,EAChD;AAEA,EAAA,uBACE,GAAA,CAAC,aACC,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EACC,8BAAC,IAAA,EAAA,EACE,QAAA,EAAA,MAAA,CACE,OAAO,CAAA,KAAA,KAAS;AACf,IAAA,IAAI,iBAAA,EAAmB;AACrB,MAAA,OAAO,MAAM,IAAA,KAAS,SAAA;AAAA,IACxB;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAC,CAAA,CACA,GAAA,CAAI,CAAC,OAAO,KAAA,KAAU;AACrB,IAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,iBAAA,GAC3B,SAAS,OAAA,CAAQ,KAAA,CAAM,QAAA,CAAS,iBAAiB,CAAA,CAAE,UAAA;AAAA,MACjD;AAAA,QACE,MAAA,EAAQ;AAAA;AACV,KACF,GACA,SAAA;AACJ,IAAA,4BACG,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,CAAA,EAAG,KAAA,CAAM,IAAA,IAAQ,EAAE,CAAA,MAAA,CAAA,EAChC,QAAA,EAAA,eAAA,CAAgB,KAAA,CAAM,IAAI,CAAA,EAC7B,CAAA;AAAA,sBACA,GAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,CAAA,YAAA,EAAe,OAAO,CAAA,SAAA,EAAY,MAAM,KAAK,CAAA,CAAA,CAAA;AAAA,UACtD,WAAW,CAAA,EAAG,KAAA,CAAM,MAAM,CAAA,EAAA,EAAK,MAAM,OAAO,CAAA;AAAA;AAAA;AAC9C,KAAA,EAAA,EAPa,GAAG,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAQ9C,CAAA;AAAA,EAEJ,CAAC,CAAA,EACL,CAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAmBO,MAAM,SAAS,CAAC;AAAA,EACrB,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,KAAmB;AACjB,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAO,OAAA,KAAY,SAAA,CAAU;AAAA,IAC1C,kBAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,KAAA,oBACC,GAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACE,GAAG;AAAA,UACF,SAAS,KAAA,CAAM,OAAA;AAAA,UACf,OAAA,EAAS,OAAA;AAAA,UACT,KAAA,EAAO;AAAA,SACT;AAAA,QACA,EAAA,EAAG;AAAA;AAAA,KACL;AAAA,IAED,OAAA,wBAAY,QAAA,EAAA,EAAS,OAAA,EAAQ,QAAO,KAAA,EAAM,MAAA,EAAO,QAAO,MAAA,EAAO,CAAA;AAAA,IAC/D,CAAC,WAAW,KAAA,KAAU,MAAA,wBACpB,aAAA,EAAA,EAAc,iBAAA,EAAsC,QAAQ,KAAA,EAAO;AAAA,GAAA,EAExE,CAAA;AAEJ;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useEvents.esm.js","sources":["../../../../src/components/Pods/Events/useEvents.ts"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useApi } from '@backstage/core-plugin-api';\nimport useAsync from 'react-use/esm/useAsync';\nimport { kubernetesProxyApiRef } from '../../../api/types';\n\n/**\n * Arguments for useEvents\n *\n * @public\n */\nexport interface EventsOptions {\n involvedObjectName: string;\n namespace: string;\n clusterName: string;\n}\n\n/**\n * Retrieves the events for the given object\n *\n * @public\n */\nexport const useEvents = ({\n involvedObjectName,\n namespace,\n clusterName,\n}: EventsOptions) => {\n const kubernetesProxyApi = useApi(kubernetesProxyApiRef);\n return useAsync(async () => {\n return await kubernetesProxyApi.getEventsByInvolvedObjectName({\n involvedObjectName,\n namespace,\n clusterName,\n });\n }, [involvedObjectName, namespace, clusterName]);\n};\n"],"names":[],"mappings":";;;;AAmCO,MAAM,YAAY,CAAC;AAAA,EACxB,kBAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,KAAqB;AACnB,EAAA,MAAM,kBAAA,GAAqB,OAAO,qBAAqB,CAAA;AACvD,EAAA,OAAO,SAAS,YAAY;AAC1B,IAAA,OAAO,MAAM,mBAAmB,6BAAA,CAA8B;AAAA,MAC5D,kBAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,kBAAA,EAAoB,SAAA,EAAW,WAAW,CAAC,CAAA;AACjD
|
|
1
|
+
{"version":3,"file":"useEvents.esm.js","sources":["../../../../src/components/Pods/Events/useEvents.ts"],"sourcesContent":["/*\n * Copyright 2023 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { useApi } from '@backstage/core-plugin-api';\nimport useAsync from 'react-use/esm/useAsync';\nimport { kubernetesProxyApiRef } from '../../../api/types';\n\n/**\n * Arguments for useEvents\n *\n * @public\n */\nexport interface EventsOptions {\n involvedObjectName: string;\n namespace: string;\n clusterName: string;\n}\n\n/**\n * Retrieves the events for the given object\n *\n * @public\n */\nexport const useEvents = ({\n involvedObjectName,\n namespace,\n clusterName,\n}: EventsOptions) => {\n const kubernetesProxyApi = useApi(kubernetesProxyApiRef);\n return useAsync(async () => {\n return await kubernetesProxyApi.getEventsByInvolvedObjectName({\n involvedObjectName,\n namespace,\n clusterName,\n });\n }, [involvedObjectName, namespace, clusterName]);\n};\n"],"names":[],"mappings":";;;;AAmCO,MAAM,YAAY,CAAC;AAAA,EACxB,kBAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,KAAqB;AACnB,EAAA,MAAM,kBAAA,GAAqB,OAAO,qBAAqB,CAAA;AACvD,EAAA,OAAO,SAAS,YAAY;AAC1B,IAAA,OAAO,MAAM,mBAAmB,6BAAA,CAA8B;AAAA,MAC5D,kBAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,kBAAA,EAAoB,SAAA,EAAW,WAAW,CAAC,CAAA;AACjD;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FixDialog.esm.js","sources":["../../../../src/components/Pods/FixDialog/FixDialog.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 { useState } from 'react';\n\nimport Button from '@material-ui/core/Button';\nimport Grid from '@material-ui/core/Grid';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport IconButton from '@material-ui/core/IconButton';\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport CloseIcon from '@material-ui/icons/Close';\nimport HelpIcon from '@material-ui/icons/Help';\nimport OpenInNewIcon from '@material-ui/icons/OpenInNew';\n\nimport { Pod } from 'kubernetes-models/v1/Pod';\nimport { DetectedError } from '@backstage/plugin-kubernetes-common';\nimport { PodLogs } from '../PodLogs';\nimport { Events } from '../Events';\nimport { LinkButton } from '@backstage/core-components';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { kubernetesReactTranslationRef } from '../../../translation';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\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\n/**\n * Props for FixDialog\n *\n * @public\n */\nexport interface FixDialogProps {\n open?: boolean;\n clusterName: string;\n pod: Pod;\n error: DetectedError;\n}\n\n/**\n * A dialog for fixing detected Kubernetes errors\n *\n * @public\n */\nexport function FixDialog({ open, pod, error, clusterName }: FixDialogProps) {\n const [isOpen, setOpen] = useState(!!open);\n const classes = useStyles();\n const { t } = useTranslationRef(kubernetesReactTranslationRef);\n\n const openDialog = () => {\n setOpen(true);\n };\n\n const closeDialog = () => {\n setOpen(false);\n };\n\n const pf = error.proposedFix;\n\n const dialogContent = () => {\n return (\n <Grid container>\n <Grid item xs={12}>\n <Typography variant=\"h6\">{t('fixDialog.detectedError')}</Typography>\n <Typography>{error.message}</Typography>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"h6\">\n {t('fixDialog.causeExplanation')}\n </Typography>\n <Typography>\n {error.proposedFix?.rootCauseExplanation ?? t('podsTable.unknown')}\n </Typography>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"h6\">{t('fixDialog.fix')}</Typography>\n <List>\n {(error.proposedFix?.actions ?? []).map((fix, i) => {\n return (\n <ListItem\n key={`${\n pod.metadata?.name ?? t('podsTable.unknown')\n }-pf-${i}`}\n >\n {fix}\n </ListItem>\n );\n })}\n </List>\n </Grid>\n\n {pf && pf.type === 'logs' && (\n <>\n <Grid item xs={12}>\n <Typography variant=\"h6\">{t('fixDialog.crashLogs')}</Typography>\n </Grid>\n <Grid item xs={9}>\n <PodLogs\n previous\n containerScope={{\n podName: pod.metadata?.name ?? t('podsTable.unknown'),\n podNamespace:\n pod.metadata?.namespace ?? t('podsTable.unknown'),\n cluster: { name: clusterName },\n containerName: pf.container,\n }}\n />\n </Grid>\n </>\n )}\n {pf && pf.type === 'events' && (\n <>\n <Grid item xs={12}>\n <Typography variant=\"h6\">{t('fixDialog.events')}</Typography>\n </Grid>\n <Grid item xs={9}>\n <Events\n warningEventsOnly\n involvedObjectName={pod.metadata?.name ?? ''}\n namespace={pod.metadata?.namespace ?? ''}\n clusterName={clusterName}\n />\n </Grid>\n </>\n )}\n </Grid>\n );\n };\n\n return (\n <>\n <Button\n variant=\"outlined\"\n aria-label={t('fixDialog.ariaLabels.fixIssue')}\n component=\"label\"\n onClick={openDialog}\n startIcon={<HelpIcon />}\n >\n {t('fixDialog.helpButton')}\n </Button>\n <Dialog maxWidth=\"xl\" fullWidth open={isOpen} onClose={closeDialog}>\n <DialogTitle id=\"dialog-title\">\n {t('fixDialog.title', {\n podName: pod.metadata?.name ?? '',\n errorType: error.type,\n })}\n <IconButton\n aria-label={t('fixDialog.ariaLabels.close')}\n className={classes.closeButton}\n onClick={closeDialog}\n >\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n <DialogContent>{dialogContent()}</DialogContent>\n <DialogActions>\n {pf && pf.type === 'docs' && (\n <LinkButton\n to={pf.docsLink}\n variant=\"outlined\"\n startIcon={<OpenInNewIcon />}\n target=\"_blank\"\n rel=\"noopener\"\n >\n {t('fixDialog.openDocs')}\n </LinkButton>\n )}\n </DialogActions>\n </Dialog>\n </>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,MAAM,SAAA,GAAY,UAAA;AAAA,EAAW,CAAC,UAC5B,YAAA,CAAa;AAAA,IACX,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;AAmBO,SAAS,UAAU,EAAE,IAAA,EAAM,GAAA,EAAK,KAAA,EAAO,aAAY,EAAmB;AAC3E,EAAA,MAAM,CAAC,MAAA,EAAQ,OAAO,IAAI,QAAA,CAAS,CAAC,CAAC,IAAI,CAAA;AACzC,EAAA,MAAM,UAAU,SAAA,EAAU;AAC1B,EAAA,MAAM,EAAE,CAAA,EAAE,GAAI,iBAAA,CAAkB,6BAA6B,CAAA;AAE7D,EAAA,MAAM,aAAa,MAAM;AACvB,IAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,EACd,CAAA;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,KAAK,KAAA,CAAM,WAAA;AAEjB,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,uBACE,IAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAS,IAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,EAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,IAAA,EAAM,QAAA,EAAA,CAAA,CAAE,yBAAyB,CAAA,EAAE,CAAA;AAAA,wBACvD,GAAA,CAAC,UAAA,EAAA,EAAY,QAAA,EAAA,KAAA,CAAM,OAAA,EAAQ;AAAA,OAAA,EAC7B,CAAA;AAAA,sBACA,IAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,IAAI,EAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,IAAA,EACjB,QAAA,EAAA,CAAA,CAAE,4BAA4B,CAAA,EACjC,CAAA;AAAA,4BACC,UAAA,EAAA,EACE,QAAA,EAAA,KAAA,CAAM,aAAa,oBAAA,IAAwB,CAAA,CAAE,mBAAmB,CAAA,EACnE;AAAA,OAAA,EACF,CAAA;AAAA,sBACA,IAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,IAAI,EAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,IAAA,EAAM,QAAA,EAAA,CAAA,CAAE,eAAe,CAAA,EAAE,CAAA;AAAA,wBAC7C,GAAA,CAAC,IAAA,EAAA,EACG,QAAA,EAAA,CAAA,KAAA,CAAM,WAAA,EAAa,OAAA,IAAW,EAAC,EAAG,GAAA,CAAI,CAAC,GAAA,EAAK,CAAA,KAAM;AAClD,UAAA,uBACE,GAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cAKE,QAAA,EAAA;AAAA,aAAA;AAAA,YAJI,CAAA,EACH,IAAI,QAAA,EAAU,IAAA,IAAQ,EAAE,mBAAmB,CAC7C,OAAO,CAAC,CAAA;AAAA,WAGV;AAAA,QAEJ,CAAC,CAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,MAEC,EAAA,IAAM,EAAA,CAAG,IAAA,KAAS,MAAA,oBACjB,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,EAAA,EACb,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,IAAA,EAAM,QAAA,EAAA,CAAA,CAAE,qBAAqB,CAAA,EAAE,CAAA,EACrD,CAAA;AAAA,wBACA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,IAAI,CAAA,EACb,QAAA,kBAAA,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,QAAA,EAAQ,IAAA;AAAA,YACR,cAAA,EAAgB;AAAA,cACd,OAAA,EAAS,GAAA,CAAI,QAAA,EAAU,IAAA,IAAQ,EAAE,mBAAmB,CAAA;AAAA,cACpD,YAAA,EACE,GAAA,CAAI,QAAA,EAAU,SAAA,IAAa,EAAE,mBAAmB,CAAA;AAAA,cAClD,OAAA,EAAS,EAAE,IAAA,EAAM,WAAA,EAAY;AAAA,cAC7B,eAAe,EAAA,CAAG;AAAA;AACpB;AAAA,SACF,EACF;AAAA,OAAA,EACF,CAAA;AAAA,MAED,EAAA,IAAM,EAAA,CAAG,IAAA,KAAS,QAAA,oBACjB,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,EAAA,EAAI,EAAA,EACb,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,IAAA,EAAM,QAAA,EAAA,CAAA,CAAE,kBAAkB,CAAA,EAAE,CAAA,EAClD,CAAA;AAAA,wBACA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAI,IAAA,EAAC,IAAI,CAAA,EACb,QAAA,kBAAA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,iBAAA,EAAiB,IAAA;AAAA,YACjB,kBAAA,EAAoB,GAAA,CAAI,QAAA,EAAU,IAAA,IAAQ,EAAA;AAAA,YAC1C,SAAA,EAAW,GAAA,CAAI,QAAA,EAAU,SAAA,IAAa,EAAA;AAAA,YACtC;AAAA;AAAA,SACF,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EAEJ,CAAA;AAAA,EAEJ,CAAA;AAEA,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,UAAA;AAAA,QACR,YAAA,EAAY,EAAE,+BAA+B,CAAA;AAAA,QAC7C,SAAA,EAAU,OAAA;AAAA,QACV,OAAA,EAAS,UAAA;AAAA,QACT,SAAA,sBAAY,QAAA,EAAA,EAAS,CAAA;AAAA,QAEpB,YAAE,sBAAsB;AAAA;AAAA,KAC3B;AAAA,oBACA,IAAA,CAAC,UAAO,QAAA,EAAS,IAAA,EAAK,WAAS,IAAA,EAAC,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,WAAA,EACrD,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,WAAA,EAAA,EAAY,IAAG,cAAA,EACb,QAAA,EAAA;AAAA,QAAA,CAAA,CAAE,iBAAA,EAAmB;AAAA,UACpB,OAAA,EAAS,GAAA,CAAI,QAAA,EAAU,IAAA,IAAQ,EAAA;AAAA,UAC/B,WAAW,KAAA,CAAM;AAAA,SAClB,CAAA;AAAA,wBACD,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,YAAA,EAAY,EAAE,4BAA4B,CAAA;AAAA,YAC1C,WAAW,OAAA,CAAQ,WAAA;AAAA,YACnB,OAAA,EAAS,WAAA;AAAA,YAET,8BAAC,SAAA,EAAA,EAAU;AAAA;AAAA;AACb,OAAA,EACF,CAAA;AAAA,sBACA,GAAA,CAAC,aAAA,EAAA,EAAe,QAAA,EAAA,aAAA,EAAc,EAAE,CAAA;AAAA,sBAChC,GAAA,CAAC,aAAA,EAAA,EACE,QAAA,EAAA,EAAA,IAAM,EAAA,CAAG,SAAS,MAAA,oBACjB,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,IAAI,EAAA,CAAG,QAAA;AAAA,UACP,OAAA,EAAQ,UAAA;AAAA,UACR,SAAA,sBAAY,aAAA,EAAA,EAAc,CAAA;AAAA,UAC1B,MAAA,EAAO,QAAA;AAAA,UACP,GAAA,EAAI,UAAA;AAAA,UAEH,YAAE,oBAAoB;AAAA;AAAA,OACzB,EAEJ;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"FixDialog.esm.js","sources":["../../../../src/components/Pods/FixDialog/FixDialog.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 { useState } from 'react';\n\nimport Button from '@material-ui/core/Button';\nimport Grid from '@material-ui/core/Grid';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport IconButton from '@material-ui/core/IconButton';\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport CloseIcon from '@material-ui/icons/Close';\nimport HelpIcon from '@material-ui/icons/Help';\nimport OpenInNewIcon from '@material-ui/icons/OpenInNew';\n\nimport { Pod } from 'kubernetes-models/v1/Pod';\nimport { DetectedError } from '@backstage/plugin-kubernetes-common';\nimport { PodLogs } from '../PodLogs';\nimport { Events } from '../Events';\nimport { LinkButton } from '@backstage/core-components';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport { useTranslationRef } from '@backstage/core-plugin-api/alpha';\nimport { kubernetesReactTranslationRef } from '../../../translation';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\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\n/**\n * Props for FixDialog\n *\n * @public\n */\nexport interface FixDialogProps {\n open?: boolean;\n clusterName: string;\n pod: Pod;\n error: DetectedError;\n}\n\n/**\n * A dialog for fixing detected Kubernetes errors\n *\n * @public\n */\nexport function FixDialog({ open, pod, error, clusterName }: FixDialogProps) {\n const [isOpen, setOpen] = useState(!!open);\n const classes = useStyles();\n const { t } = useTranslationRef(kubernetesReactTranslationRef);\n\n const openDialog = () => {\n setOpen(true);\n };\n\n const closeDialog = () => {\n setOpen(false);\n };\n\n const pf = error.proposedFix;\n\n const dialogContent = () => {\n return (\n <Grid container>\n <Grid item xs={12}>\n <Typography variant=\"h6\">{t('fixDialog.detectedError')}</Typography>\n <Typography>{error.message}</Typography>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"h6\">\n {t('fixDialog.causeExplanation')}\n </Typography>\n <Typography>\n {error.proposedFix?.rootCauseExplanation ?? t('podsTable.unknown')}\n </Typography>\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"h6\">{t('fixDialog.fix')}</Typography>\n <List>\n {(error.proposedFix?.actions ?? []).map((fix, i) => {\n return (\n <ListItem\n key={`${\n pod.metadata?.name ?? t('podsTable.unknown')\n }-pf-${i}`}\n >\n {fix}\n </ListItem>\n );\n })}\n </List>\n </Grid>\n\n {pf && pf.type === 'logs' && (\n <>\n <Grid item xs={12}>\n <Typography variant=\"h6\">{t('fixDialog.crashLogs')}</Typography>\n </Grid>\n <Grid item xs={9}>\n <PodLogs\n previous\n containerScope={{\n podName: pod.metadata?.name ?? t('podsTable.unknown'),\n podNamespace:\n pod.metadata?.namespace ?? t('podsTable.unknown'),\n cluster: { name: clusterName },\n containerName: pf.container,\n }}\n />\n </Grid>\n </>\n )}\n {pf && pf.type === 'events' && (\n <>\n <Grid item xs={12}>\n <Typography variant=\"h6\">{t('fixDialog.events')}</Typography>\n </Grid>\n <Grid item xs={9}>\n <Events\n warningEventsOnly\n involvedObjectName={pod.metadata?.name ?? ''}\n namespace={pod.metadata?.namespace ?? ''}\n clusterName={clusterName}\n />\n </Grid>\n </>\n )}\n </Grid>\n );\n };\n\n return (\n <>\n <Button\n variant=\"outlined\"\n aria-label={t('fixDialog.ariaLabels.fixIssue')}\n component=\"label\"\n onClick={openDialog}\n startIcon={<HelpIcon />}\n >\n {t('fixDialog.helpButton')}\n </Button>\n <Dialog maxWidth=\"xl\" fullWidth open={isOpen} onClose={closeDialog}>\n <DialogTitle id=\"dialog-title\">\n {t('fixDialog.title', {\n podName: pod.metadata?.name ?? '',\n errorType: error.type,\n })}\n <IconButton\n aria-label={t('fixDialog.ariaLabels.close')}\n className={classes.closeButton}\n onClick={closeDialog}\n >\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n <DialogContent>{dialogContent()}</DialogContent>\n <DialogActions>\n {pf && pf.type === 'docs' && (\n <LinkButton\n to={pf.docsLink}\n variant=\"outlined\"\n startIcon={<OpenInNewIcon />}\n target=\"_blank\"\n rel=\"noopener\"\n >\n {t('fixDialog.openDocs')}\n </LinkButton>\n )}\n </DialogActions>\n </Dialog>\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|