From 62e05e92140b21ef68a70a51c6566d1cbe5b68f4 Mon Sep 17 00:00:00 2001 From: Sergey Smolnikov Date: Tue, 27 Feb 2024 16:53:55 +0100 Subject: [PATCH] Show ext alias links (#972) * Added ext alias to component * Added ext alias to app * Ext alias in app changed to accordeon * Ext alias added to env * Removed duplicate component * Added collapsable DNSs for components * Fixed fail --- src/components/app-overview/dns-aliases.tsx | 59 ------- src/components/app-overview/index.tsx | 29 +++- .../default-app-alias.tsx | 0 src/components/component/dns-aliases.tsx | 71 ++++++++ src/components/component/dns_alias.tsx | 38 +++++ .../active-component-overview.tsx | 1 + .../page-active-component/dns-alias.tsx | 40 ++--- .../page-active-component/dns-aliases.tsx | 53 ++++++ .../page-active-component/overview.tsx | 152 ++++++++++-------- .../page-environment/environment-overview.tsx | 27 +++- src/store/radix-api.ts | 10 ++ 11 files changed, 320 insertions(+), 160 deletions(-) delete mode 100644 src/components/app-overview/dns-aliases.tsx rename src/components/{app-overview => component}/default-app-alias.tsx (100%) create mode 100644 src/components/component/dns-aliases.tsx create mode 100644 src/components/component/dns_alias.tsx create mode 100644 src/components/page-active-component/dns-aliases.tsx diff --git a/src/components/app-overview/dns-aliases.tsx b/src/components/app-overview/dns-aliases.tsx deleted file mode 100644 index f8c59fc63..000000000 --- a/src/components/app-overview/dns-aliases.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { Icon, List, Typography } from '@equinor/eds-core-react'; -import { link } from '@equinor/eds-icons'; -import { FunctionComponent } from 'react'; -import { Link } from 'react-router-dom'; - -import { getActiveComponentUrl, getEnvUrl } from '../../utils/routing'; -import { DnsAlias } from '../../store/radix-api'; - -export interface DefaultAppAliasProps { - appName: string; - dnsAliases?: DnsAlias[]; -} - -export const DnsAliases: FunctionComponent = ({ - appName, - dnsAliases, -}) => ( - <> - {dnsAliases && ( -
- - DNS alias{dnsAliases.length > 1 ? 'es' : ''} - - - {dnsAliases?.map((dnsAlias, index) => ( -
- - - - {dnsAlias.url} - {' '} - is mapped to component{' '} - - {dnsAlias.componentName} - {' '} - in environment{' '} - - {dnsAlias.environmentName} - - -
- ))} -
-
- )} - -); diff --git a/src/components/app-overview/index.tsx b/src/components/app-overview/index.tsx index b6bf54c8b..5f0ace26a 100644 --- a/src/components/app-overview/index.tsx +++ b/src/components/app-overview/index.tsx @@ -1,7 +1,7 @@ import { Typography } from '@equinor/eds-core-react'; -import { DefaultAppAlias } from './default-app-alias'; -import { DnsAliases } from './dns-aliases'; +import { DefaultAppAlias } from '../component/default-app-alias'; +import { DNSAliases } from '../component/dns-aliases'; import { Alert } from '../alert'; import ApplicationCost from '../application-cost'; import { FutureApplicationCost } from '../application-future-cost'; @@ -25,8 +25,14 @@ export function AppOverview({ appName }: { appName: string }) { { skip: !appName, pollingInterval } ); - const { appAlias, dnsAliases, environments, jobs, registration } = - application ?? {}; + const { + appAlias, + dnsAliases, + dnsExternalAliases, + environments, + jobs, + registration, + } = application ?? {}; return (
@@ -47,7 +53,20 @@ export function AppOverview({ appName }: { appName: string }) { {appAlias && } - {dnsAliases && } + {dnsAliases && ( + + )} + {DNSAliases && ( + + )} {environments?.length > 0 && ( Environments )} diff --git a/src/components/app-overview/default-app-alias.tsx b/src/components/component/default-app-alias.tsx similarity index 100% rename from src/components/app-overview/default-app-alias.tsx rename to src/components/component/default-app-alias.tsx diff --git a/src/components/component/dns-aliases.tsx b/src/components/component/dns-aliases.tsx new file mode 100644 index 000000000..4dbd30d71 --- /dev/null +++ b/src/components/component/dns-aliases.tsx @@ -0,0 +1,71 @@ +import { Accordion, List, Typography } from '@equinor/eds-core-react'; +import { FunctionComponent } from 'react'; +import { DnsAlias, DnsExternalAlias } from '../../store/radix-api'; +import { DNSAlias } from './dns_alias'; + +export interface DefaultAppAliasProps { + appName: string; + dnsAliases?: DnsAlias[] | DnsExternalAlias[]; + title: string; +} + +export const DNSAliases: FunctionComponent = ({ + appName, + dnsAliases, + title, +}) => ( + <> + {dnsAliases?.length > 0 && + (dnsAliases.length == 1 ? ( +
+ {title} + + + +
+ ) : ( + <> + + {title} + + + + + + + + + + + + + {dnsAliases.slice(1)?.map((dnsAlias, index) => ( +
+ + + +
+ ))} +
+
+
+
+ + ))} + +); diff --git a/src/components/component/dns_alias.tsx b/src/components/component/dns_alias.tsx new file mode 100644 index 000000000..341a57644 --- /dev/null +++ b/src/components/component/dns_alias.tsx @@ -0,0 +1,38 @@ +import { Icon, Typography } from '@equinor/eds-core-react'; +import { link } from '@equinor/eds-icons'; +import { FunctionComponent } from 'react'; +import { Link } from 'react-router-dom'; + +import { getActiveComponentUrl, getEnvUrl } from '../../utils/routing'; +export interface EnvironmentComponentProps { + appName: string; + url: string; + componentName: string; + environmentName: string; +} + +export const DNSAlias: FunctionComponent = ({ + appName, + url, + componentName, + environmentName, +}) => ( + <> + + + {url} + {' '} + is mapped to component{' '} + + {componentName} + {' '} + in environment{' '} + + {environmentName} + + +); diff --git a/src/components/page-active-component/active-component-overview.tsx b/src/components/page-active-component/active-component-overview.tsx index bbf5af3ea..39b5fab1a 100644 --- a/src/components/page-active-component/active-component-overview.tsx +++ b/src/components/page-active-component/active-component-overview.tsx @@ -79,6 +79,7 @@ export const ActiveComponentOverview: FunctionComponent<{ = ({ dnsAliases }) => ( +export const DNSAlias: FunctionComponent = ({ + url, +}) => ( <> - {dnsAliases && ( -
- DNS alias{dnsAliases.length > 1 ? 'es' : ''} - - {dnsAliases.map((dnsAlias, index) => ( -
- - - - {dnsAlias.url} - - -
- ))} -
-
- )} + + {url} + ); - -DnsAlias.propTypes = { - dnsAliases: PropTypes.arrayOf( - PropTypes.object as PropTypes.Validator - ).isRequired, -}; diff --git a/src/components/page-active-component/dns-aliases.tsx b/src/components/page-active-component/dns-aliases.tsx new file mode 100644 index 000000000..d70725d62 --- /dev/null +++ b/src/components/page-active-component/dns-aliases.tsx @@ -0,0 +1,53 @@ +import { Accordion, List, Typography } from '@equinor/eds-core-react'; +import { FunctionComponent } from 'react'; +import { DNSAlias } from './dns-alias'; + +export interface DefaultAppAliasProps { + urls?: string[]; + title: string; +} + +export const DNSAliases: FunctionComponent = ({ + urls, + title, +}) => ( + <> + {urls.length > 0 && + (urls.length == 1 ? ( +
+ {title} + + + +
+ ) : ( + <> + + {title} + + + + + + + + + + + + + {urls.slice(1)?.map((url, index) => ( +
+ + + +
+ ))} +
+
+
+
+ + ))} + +); diff --git a/src/components/page-active-component/overview.tsx b/src/components/page-active-component/overview.tsx index db1d6ca33..84f198328 100644 --- a/src/components/page-active-component/overview.tsx +++ b/src/components/page-active-component/overview.tsx @@ -4,102 +4,124 @@ import * as PropTypes from 'prop-types'; import { FunctionComponent } from 'react'; import { DefaultAlias } from './default-alias'; -import { DnsAlias } from './dns-alias'; import { Alert } from '../alert'; import { ComponentIdentity } from '../component/component-identity'; import { ComponentPorts } from '../component/component-ports'; import { DockerImage } from '../docker-image'; import { ComponentStatusBadge } from '../status-badges'; + import { ApplicationAlias, Component, Deployment, DnsAlias as DnsAliasModel, + ExternalDns, } from '../../store/radix-api'; - import './style.css'; +import { DNSAliases } from './dns-aliases'; const URL_VAR_NAME = 'RADIX_PUBLIC_DOMAIN_NAME'; export const Overview: FunctionComponent<{ appAlias?: ApplicationAlias; dnsAliases?: DnsAliasModel[]; + dnsExternalAliases?: ExternalDns[]; envName: string; component: Component; deployment: Deployment; -}> = ({ appAlias, dnsAliases, envName, component, deployment }) => ( -
- Overview +}> = ({ + appAlias, + dnsAliases, + dnsExternalAliases, + envName, + component, + deployment, +}) => { + const dnsAliasUrls = dnsAliases ? dnsAliases.map((alias) => alias.url) : []; + const dnsExternalAliasUrls = dnsExternalAliases + ? dnsExternalAliases.map((alias) => alias.fqdn) + : []; + return ( +
+ Overview - {component.status === 'Stopped' && ( - - Component has been manually stopped; please note that a new deployment - will cause it to be restarted unless you set replicas of - the component to 0 in{' '} - - radixconfig.yaml - - - )} - -
-
- - Component {component.name} - - - Image - - {component.identity && ( - - )} -
+ {component.status === 'Stopped' && ( + + Component has been manually stopped; please note that a new deployment + will cause it to be restarted unless you set replicas of + the component to 0 in{' '} + + radixconfig.yaml + + + )} -
-
- Status - -
- {component.variables?.[URL_VAR_NAME] && ( +
+
- Publicly available{' '} - - link - + Component {component.name} - )} - {appAlias && ( - - )} - {dnsAliases?.length > 0 && ( - <> - - - )} - + + Image + + {component.identity && ( + + )} +
+ +
+
+ Status + +
+ {component.variables?.[URL_VAR_NAME] && ( + + Publicly available{' '} + + link + + + )} + {appAlias && ( + + )} + {dnsAliasUrls?.length > 0 && ( + + )} + {dnsExternalAliasUrls?.length > 0 && ( + + )} + +
-
-); + ); +}; Overview.propTypes = { appAlias: PropTypes.object as PropTypes.Validator, + dnsExternalAliases: PropTypes.arrayOf( + PropTypes.object as PropTypes.Validator + ), envName: PropTypes.string.isRequired, component: PropTypes.object.isRequired as PropTypes.Validator, deployment: PropTypes.object.isRequired as PropTypes.Validator, diff --git a/src/components/page-environment/environment-overview.tsx b/src/components/page-environment/environment-overview.tsx index 667d2f55d..865e0c890 100644 --- a/src/components/page-environment/environment-overview.tsx +++ b/src/components/page-environment/environment-overview.tsx @@ -41,6 +41,8 @@ import { import './style.css'; import { GitCommitTags } from '../component/git-commit-tags'; +import { DefaultAppAlias } from '../component/default-app-alias'; +import { DNSAliases } from '../component/dns-aliases'; export const EnvironmentOverview: FunctionComponent<{ appName: string; @@ -64,6 +66,13 @@ export const EnvironmentOverview: FunctionComponent<{ ); const [deleteEnvTrigger, deleteEnvState] = radixApi.endpoints.deleteEnvironment.useMutation(); + const { appAlias, dnsAliases, dnsExternalAliases } = application ?? {}; + const envDNSAliases = dnsAliases + ? dnsAliases.filter((alias) => alias.environmentName == envName) + : []; + const envDNSExternalAliases = dnsExternalAliases + ? dnsExternalAliases.filter((alias) => alias.environmentName == envName) + : []; const isLoaded = application && environment; const isOrphan = environment?.status === 'Orphan'; @@ -126,7 +135,6 @@ export const EnvironmentOverview: FunctionComponent<{ )}
)} - {isLoaded && ( <> @@ -255,6 +263,23 @@ export const EnvironmentOverview: FunctionComponent<{
+ {appAlias?.environmentName == envName && ( + + )} + {envDNSAliases?.length > 0 && ( + + )} + {envDNSExternalAliases?.length > 0 && ( + + )} {deployment && (