From 653879b9ed2e8b4e20b3c79bef614e5a28c6e870 Mon Sep 17 00:00:00 2001 From: Hubert Date: Mon, 21 Apr 2025 17:01:08 +0200 Subject: [PATCH 1/8] Illustrated Banner Component --- ...t resource name in all labels (failed).png | Bin 97260 -> 0 bytes public/locales/en.json | 3 + src/components/ControlPlane/FluxList.tsx | 2 +- .../ControlPlane/ManagedResources.tsx | 2 +- src/components/ControlPlane/Providers.tsx | 2 +- .../List/ControlPlaneListAllWorkspaces.tsx | 2 +- .../ControlPlaneListWorkspaceGridTile.tsx | 14 +++- .../NoManagedControlPlaneBanner.tsx | 34 -------- src/components/Projects/ProjectChooser.tsx | 2 +- src/components/Projects/ProjectsList.tsx | 2 +- src/components/Shared/IllustratedError.tsx | 16 ++-- src/components/Shared/IllustratedName.ts | 4 + .../IllustratedBanner/IllustratedBanner.css | 0 .../IllustratedBanner.test.tsx | 74 ++++++++++++++++++ .../IllustratedBanner/IllustratedBanner.tsx | 43 ++++++++++ src/lib/shared/McpContext.tsx | 14 +++- src/main.tsx | 14 +++- src/views/ControlPlanes/ControlPlaneView.tsx | 2 +- 18 files changed, 175 insertions(+), 55 deletions(-) delete mode 100644 cypress/screenshots/Dialogs/DeleteConfirmationDialog.test.tsx/DeleteConfirmationDialog -- should display correct resource name in all labels (failed).png delete mode 100644 src/components/ControlPlanes/NoManagedControlPlaneBanner.tsx create mode 100644 src/components/Shared/IllustratedName.ts create mode 100644 src/components/Ui/IllustratedBanner/IllustratedBanner.css create mode 100644 src/components/Ui/IllustratedBanner/IllustratedBanner.test.tsx create mode 100644 src/components/Ui/IllustratedBanner/IllustratedBanner.tsx diff --git a/cypress/screenshots/Dialogs/DeleteConfirmationDialog.test.tsx/DeleteConfirmationDialog -- should display correct resource name in all labels (failed).png b/cypress/screenshots/Dialogs/DeleteConfirmationDialog.test.tsx/DeleteConfirmationDialog -- should display correct resource name in all labels (failed).png deleted file mode 100644 index c72623fe78b5a09fe3548a2296ce3f295e76a229..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97260 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 diff --git a/public/locales/en.json b/public/locales/en.json index 8637500f..f8dfb8a5 100644 --- a/public/locales/en.json +++ b/public/locales/en.json @@ -75,6 +75,9 @@ "IntelligentBreadcrumbs": { "homeLabel": "Home" }, + "MCPContext": { + "errorMessage": "An unknown error occurred" + }, "NotInLuigiView": { "titleMessage": "Opened outside of Hyperspace Portal", "subtitleMessage": "Looks like this page is not opened inside of the Hyperspace Portal. Contact admins for help." diff --git a/src/components/ControlPlane/FluxList.tsx b/src/components/ControlPlane/FluxList.tsx index 91bc0a34..a410c356 100644 --- a/src/components/ControlPlane/FluxList.tsx +++ b/src/components/ControlPlane/FluxList.tsx @@ -44,7 +44,7 @@ export default function FluxList() { if (repoErr || kustomizationErr) { return ( ); diff --git a/src/components/ControlPlane/ManagedResources.tsx b/src/components/ControlPlane/ManagedResources.tsx index c2fcbf05..a8063b55 100644 --- a/src/components/ControlPlane/ManagedResources.tsx +++ b/src/components/ControlPlane/ManagedResources.tsx @@ -109,7 +109,7 @@ export function ManagedResources() { <> {t('ManagedResources.header')} - {error && } + {error && } {!error && ( {t('Providers.headerProviders')} - {error && } + {error && } {!error && ( ; } if (error) { - return ; + return ; } return ( diff --git a/src/components/ControlPlanes/List/ControlPlaneListWorkspaceGridTile.tsx b/src/components/ControlPlanes/List/ControlPlaneListWorkspaceGridTile.tsx index 5ca9190e..1aa1b191 100644 --- a/src/components/ControlPlanes/List/ControlPlaneListWorkspaceGridTile.tsx +++ b/src/components/ControlPlanes/List/ControlPlaneListWorkspaceGridTile.tsx @@ -10,7 +10,6 @@ import '@ui5/webcomponents-fiori/dist/illustrations/NoData.js'; import '@ui5/webcomponents-fiori/dist/illustrations/EmptyList.js'; import '@ui5/webcomponents-icons/dist/delete'; import { CopyButton } from '../../Shared/CopyButton.tsx'; -import { NoManagedControlPlaneBanner } from '../NoManagedControlPlaneBanner.tsx'; import { ControlPlaneCard } from '../ControlPlaneCard/ControlPlaneCard.tsx'; import { ListWorkspacesType, @@ -35,6 +34,9 @@ import IllustratedError from '../../Shared/IllustratedError.tsx'; import { APIError } from '../../../lib/api/error.ts'; import { useTranslation } from 'react-i18next'; import { YamlViewButton } from '../../Yaml/YamlViewButton.tsx'; +import { IllustratedBanner } from '../../Ui/IllustratedBanner/IllustratedBanner.tsx'; +import { useFrontendConfig } from '../../../context/FrontendConfigContext.tsx'; +import { IllustrationName } from '../../Shared/IllustratedName.ts'; interface Props { projectName: string; @@ -62,6 +64,8 @@ export function ControlPlaneListWorkspaceGridTile({ const { trigger } = useApiResourceMutation( DeleteWorkspaceResource(projectNamespace, workspaceName), ); + + const { links } = useFrontendConfig(); const errorView = createErrorView(cpsError); function createErrorView(error: APIError) { @@ -148,7 +152,13 @@ export function ControlPlaneListWorkspaceGridTile({ ) : ( {controlplanes?.length === 0 ? ( - + ) : ( controlplanes?.map((cp) => ( - - - - ); -} diff --git a/src/components/Projects/ProjectChooser.tsx b/src/components/Projects/ProjectChooser.tsx index 537d9391..29e2eb04 100644 --- a/src/components/Projects/ProjectChooser.tsx +++ b/src/components/Projects/ProjectChooser.tsx @@ -14,7 +14,7 @@ export default function ProjectChooser({ currentProjectName }: Props) { const navigate = useLuigiNavigate(); if (error) { - return ; + return ; } return ( diff --git a/src/components/Projects/ProjectsList.tsx b/src/components/Projects/ProjectsList.tsx index 9314fb33..c2622586 100644 --- a/src/components/Projects/ProjectsList.tsx +++ b/src/components/Projects/ProjectsList.tsx @@ -77,7 +77,7 @@ export default function ProjectsList() { [], ); if (error) { - return ; + return ; } return ( diff --git a/src/components/Shared/IllustratedError.tsx b/src/components/Shared/IllustratedError.tsx index 2c41418b..cf9abee9 100644 --- a/src/components/Shared/IllustratedError.tsx +++ b/src/components/Shared/IllustratedError.tsx @@ -1,13 +1,12 @@ -import { IllustratedMessage } from '@ui5/webcomponents-react'; import '@ui5/webcomponents-fiori/dist/illustrations/SimpleError'; -import IllustrationMessageDesign from '@ui5/webcomponents-fiori/dist/types/IllustrationMessageDesign.js'; import { useTranslation } from 'react-i18next'; +import { IllustratedBanner } from '../Ui/IllustratedBanner/IllustratedBanner'; +import { IllustrationName } from './IllustratedName'; interface Props { title?: string; subtitleText?: string; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - error?: any; + error?: string; } export default function IllustratedError({ @@ -18,11 +17,10 @@ export default function IllustratedError({ const { t } = useTranslation(); return ( - ); } diff --git a/src/components/Shared/IllustratedName.ts b/src/components/Shared/IllustratedName.ts new file mode 100644 index 00000000..91a6d3f1 --- /dev/null +++ b/src/components/Shared/IllustratedName.ts @@ -0,0 +1,4 @@ +export enum IllustrationName { + SimpleError = 'SimpleError', + NoData = 'NoData', +} diff --git a/src/components/Ui/IllustratedBanner/IllustratedBanner.css b/src/components/Ui/IllustratedBanner/IllustratedBanner.css new file mode 100644 index 00000000..e69de29b diff --git a/src/components/Ui/IllustratedBanner/IllustratedBanner.test.tsx b/src/components/Ui/IllustratedBanner/IllustratedBanner.test.tsx new file mode 100644 index 00000000..8fd2f0ee --- /dev/null +++ b/src/components/Ui/IllustratedBanner/IllustratedBanner.test.tsx @@ -0,0 +1,74 @@ +import { IllustratedBanner } from './IllustratedBanner'; +import '@ui5/webcomponents-fiori/dist/illustrations/AllIllustrations.js'; + +describe('', () => { + it('renders title and subtitle', () => { + cy.mount(); + + cy.contains('Test title').should('be.visible'); + cy.contains('Test subtitle').should('be.visible'); + }); + + it('renders help button with correct text and icon', () => { + cy.mount( + , + ); + + cy.get('ui5-button').contains('Need Help?').should('be.visible'); + cy.get('ui5-button').should( + 'have.attr', + 'icon', + 'sap-icon://question-mark', + ); + }); + + it('does not render button when props are missing', () => { + cy.mount( + , + ); + + cy.get('ui5-button').should('not.exist'); + + cy.mount( + , + ); + + cy.get('ui5-button').should('not.exist'); + }); + + it('opens a new tab when button is clicked', () => { + // Stub window.open + cy.window().then((win) => { + cy.stub(win, 'open').as('windowOpen'); + }); + + cy.mount( + , + ); + + cy.get('ui5-button').contains('Go').click(); + cy.get('@windowOpen').should( + 'have.been.calledWith', + 'https://example.com', + '_blank', + ); + }); +}); diff --git a/src/components/Ui/IllustratedBanner/IllustratedBanner.tsx b/src/components/Ui/IllustratedBanner/IllustratedBanner.tsx new file mode 100644 index 00000000..4e54aba1 --- /dev/null +++ b/src/components/Ui/IllustratedBanner/IllustratedBanner.tsx @@ -0,0 +1,43 @@ +import IllustrationMessageDesign from '@ui5/webcomponents-fiori/dist/types/IllustrationMessageDesign.js'; +import { FlexBox, IllustratedMessage, Button } from '@ui5/webcomponents-react'; +import ButtonDesign from '@ui5/webcomponents/dist/types/ButtonDesign.js'; +import '@ui5/webcomponents-fiori/dist/illustrations/AllIllustrations.js'; +import { IllustrationName } from '../../Shared/IllustratedName'; + +type InfoBannerProps = { + title: string; + subtitle: string; + illustrationName?: IllustrationName; // e.g. 'NoData', 'SimpleError', etc. + buttonIcon?: string; + helpButtonText?: string; + helpLink?: string; +}; + +export const IllustratedBanner = ({ + title, + subtitle, + illustrationName = IllustrationName.NoData, + buttonIcon = 'sap-icon://question-mark', + helpButtonText, + helpLink, +}: InfoBannerProps) => { + return ( + + + {helpButtonText && helpLink && ( + + )} + + ); +}; diff --git a/src/lib/shared/McpContext.tsx b/src/lib/shared/McpContext.tsx index 39adf187..1b342e6d 100644 --- a/src/lib/shared/McpContext.tsx +++ b/src/lib/shared/McpContext.tsx @@ -15,6 +15,7 @@ import { } from '../../components/Shared/k8s'; import useResource from '../api/useApiResource.ts'; import { GetKubeconfig } from '../api/types/crate/getKubeconfig.ts'; +import { useTranslation } from 'react-i18next'; interface McpContext { project: string; @@ -117,6 +118,7 @@ export function WithinManagedControlPlane({ children?: ReactNode; }) { const mcp = useContext(McpContext); + const { t } = useTranslation(); try { const authprops = GetAuthPropsForContextName(mcp.context, mcp.kubeconfig!); @@ -128,6 +130,16 @@ export function WithinManagedControlPlane({ ); } catch (e) { - return ; + let errorMessage = t('MCPContext.errorMessage'); + + if (e instanceof Error) { + errorMessage = e.message; + } else if (typeof e === 'string') { + errorMessage = e; + } else if (typeof e === 'object' && e !== null && 'message' in e) { + errorMessage = String((e as any).message); + } + + return ; } } diff --git a/src/main.tsx b/src/main.tsx index 75f14724..a3b4c3c3 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -12,12 +12,22 @@ import { DarkModeSystemSwitcher } from './components/Core/DarkModeSystemSwitcher import '.././i18n.ts'; import './utils/i18n/timeAgo'; import { ErrorBoundary, FallbackProps } from 'react-error-boundary'; -import IllustratedError from './components/Shared/IllustratedError.tsx'; import { AuthProviderOnboarding } from './context/AuthProviderOnboarding.tsx'; import { ApolloClientProvider } from './spaces/onboarding/services/ApolloClientProvider/ApolloClientProvider.tsx'; +import { IllustratedBanner } from './components/Ui/IllustratedBanner/IllustratedBanner.tsx'; +import { useTranslation } from 'react-i18next'; +import { IllustrationName } from './components/Shared/IllustratedName.ts'; const ErrorFallback = ({ error }: FallbackProps) => { - return ; + const { t } = useTranslation(); + + return ( + + ); }; const rootElement = document.getElementById('root'); diff --git a/src/views/ControlPlanes/ControlPlaneView.tsx b/src/views/ControlPlanes/ControlPlaneView.tsx index 2aa03645..0af14a26 100644 --- a/src/views/ControlPlanes/ControlPlaneView.tsx +++ b/src/views/ControlPlanes/ControlPlaneView.tsx @@ -46,7 +46,7 @@ export default function ControlPlaneView() { } if (error) { - return ; + return ; } if ( !mcp?.status?.access?.key || From b26816b6b14e6c2523c63720a858605c7345aa3e Mon Sep 17 00:00:00 2001 From: Hubert Date: Sun, 27 Apr 2025 12:16:37 +0200 Subject: [PATCH 2/8] PR changes --- public/locales/en.json | 2 +- src/components/ControlPlane/FluxList.tsx | 2 +- .../ControlPlane/ManagedResources.tsx | 2 +- src/components/ControlPlane/Providers.tsx | 2 +- .../List/ControlPlaneListAllWorkspaces.tsx | 2 +- .../ControlPlaneListWorkspaceGridTile.tsx | 38 +++++++++---------- src/components/Projects/ProjectChooser.tsx | 2 +- src/components/Projects/ProjectsList.tsx | 2 +- src/components/Shared/IllustratedError.tsx | 12 +++--- src/components/Shared/IllustratedName.ts | 4 -- .../IllustratedBanner/IllustratedBanner.css | 0 .../IllustratedBanner/IllustratedBanner.tsx | 35 ++++++++--------- src/lib/shared/McpContext.tsx | 33 ++++------------ src/main.tsx | 4 +- src/views/ControlPlanes/ControlPlaneView.tsx | 4 +- 15 files changed, 61 insertions(+), 83 deletions(-) delete mode 100644 src/components/Shared/IllustratedName.ts delete mode 100644 src/components/Ui/IllustratedBanner/IllustratedBanner.css diff --git a/public/locales/en.json b/public/locales/en.json index f8dfb8a5..b65bb204 100644 --- a/public/locales/en.json +++ b/public/locales/en.json @@ -67,7 +67,7 @@ "menuDownload": "Download", "menuCopy": "Copy to clipboard" }, - "NoManagedControlPlaneBanner": { + "IllustratedBanner": { "titleMessage": "No ManagedControlPlane", "subtitleMessage": "Create a ManagedControlPlane to get started", "helpButton": "Help" diff --git a/src/components/ControlPlane/FluxList.tsx b/src/components/ControlPlane/FluxList.tsx index a410c356..4897ea50 100644 --- a/src/components/ControlPlane/FluxList.tsx +++ b/src/components/ControlPlane/FluxList.tsx @@ -44,7 +44,7 @@ export default function FluxList() { if (repoErr || kustomizationErr) { return ( ); diff --git a/src/components/ControlPlane/ManagedResources.tsx b/src/components/ControlPlane/ManagedResources.tsx index a8063b55..0fb6d72b 100644 --- a/src/components/ControlPlane/ManagedResources.tsx +++ b/src/components/ControlPlane/ManagedResources.tsx @@ -109,7 +109,7 @@ export function ManagedResources() { <> {t('ManagedResources.header')} - {error && } + {error && } {!error && ( {t('Providers.headerProviders')} - {error && } + {error && } {!error && ( ; } if (error) { - return ; + return ; } return ( diff --git a/src/components/ControlPlanes/List/ControlPlaneListWorkspaceGridTile.tsx b/src/components/ControlPlanes/List/ControlPlaneListWorkspaceGridTile.tsx index 1aa1b191..5eee5d0d 100644 --- a/src/components/ControlPlanes/List/ControlPlaneListWorkspaceGridTile.tsx +++ b/src/components/ControlPlanes/List/ControlPlaneListWorkspaceGridTile.tsx @@ -36,7 +36,7 @@ import { useTranslation } from 'react-i18next'; import { YamlViewButton } from '../../Yaml/YamlViewButton.tsx'; import { IllustratedBanner } from '../../Ui/IllustratedBanner/IllustratedBanner.tsx'; import { useFrontendConfig } from '../../../context/FrontendConfigContext.tsx'; -import { IllustrationName } from '../../Shared/IllustratedName.ts'; +import IllustrationMessageType from '@ui5/webcomponents-fiori/dist/types/IllustrationMessageType.js'; interface Props { projectName: string; @@ -76,7 +76,7 @@ export function ControlPlaneListWorkspaceGridTile({ title={t( 'ControlPlaneListWorkspaceGridTile.permissionErrorMessage', )} - subtitleText={t( + details={t( 'ControlPlaneListWorkspaceGridTile.permissionErrorMessageSubtitle', )} /> @@ -149,26 +149,26 @@ export function ControlPlaneListWorkspaceGridTile({ > {errorView ? ( errorView + ) : controlplanes?.length === 0 ? ( + ) : ( - {controlplanes?.length === 0 ? ( - ( + - ) : ( - controlplanes?.map((cp) => ( - - )) - )} + ))} )} diff --git a/src/components/Projects/ProjectChooser.tsx b/src/components/Projects/ProjectChooser.tsx index 29e2eb04..a06b5f18 100644 --- a/src/components/Projects/ProjectChooser.tsx +++ b/src/components/Projects/ProjectChooser.tsx @@ -14,7 +14,7 @@ export default function ProjectChooser({ currentProjectName }: Props) { const navigate = useLuigiNavigate(); if (error) { - return ; + return ; } return ( diff --git a/src/components/Projects/ProjectsList.tsx b/src/components/Projects/ProjectsList.tsx index c2622586..2f14307b 100644 --- a/src/components/Projects/ProjectsList.tsx +++ b/src/components/Projects/ProjectsList.tsx @@ -77,7 +77,7 @@ export default function ProjectsList() { [], ); if (error) { - return ; + return ; } return ( diff --git a/src/components/Shared/IllustratedError.tsx b/src/components/Shared/IllustratedError.tsx index cf9abee9..69094a86 100644 --- a/src/components/Shared/IllustratedError.tsx +++ b/src/components/Shared/IllustratedError.tsx @@ -1,26 +1,24 @@ import '@ui5/webcomponents-fiori/dist/illustrations/SimpleError'; import { useTranslation } from 'react-i18next'; import { IllustratedBanner } from '../Ui/IllustratedBanner/IllustratedBanner'; -import { IllustrationName } from './IllustratedName'; +import IllustrationMessageType from '@ui5/webcomponents-fiori/dist/types/IllustrationMessageType.js'; interface Props { title?: string; - subtitleText?: string; - error?: string; + details?: string; } export default function IllustratedError({ title, - subtitleText, - error, + details, }: Props) { const { t } = useTranslation(); return ( ); } diff --git a/src/components/Shared/IllustratedName.ts b/src/components/Shared/IllustratedName.ts deleted file mode 100644 index 91a6d3f1..00000000 --- a/src/components/Shared/IllustratedName.ts +++ /dev/null @@ -1,4 +0,0 @@ -export enum IllustrationName { - SimpleError = 'SimpleError', - NoData = 'NoData', -} diff --git a/src/components/Ui/IllustratedBanner/IllustratedBanner.css b/src/components/Ui/IllustratedBanner/IllustratedBanner.css deleted file mode 100644 index e69de29b..00000000 diff --git a/src/components/Ui/IllustratedBanner/IllustratedBanner.tsx b/src/components/Ui/IllustratedBanner/IllustratedBanner.tsx index 4e54aba1..03d26d39 100644 --- a/src/components/Ui/IllustratedBanner/IllustratedBanner.tsx +++ b/src/components/Ui/IllustratedBanner/IllustratedBanner.tsx @@ -1,25 +1,25 @@ import IllustrationMessageDesign from '@ui5/webcomponents-fiori/dist/types/IllustrationMessageDesign.js'; +import IllustrationMessageType from '@ui5/webcomponents-fiori/dist/types/IllustrationMessageType.js'; import { FlexBox, IllustratedMessage, Button } from '@ui5/webcomponents-react'; import ButtonDesign from '@ui5/webcomponents/dist/types/ButtonDesign.js'; import '@ui5/webcomponents-fiori/dist/illustrations/AllIllustrations.js'; -import { IllustrationName } from '../../Shared/IllustratedName'; type InfoBannerProps = { title: string; subtitle: string; - illustrationName?: IllustrationName; // e.g. 'NoData', 'SimpleError', etc. - buttonIcon?: string; - helpButtonText?: string; - helpLink?: string; + illustrationName?: IllustrationMessageType // e.g. 'NoData', 'SimpleError', etc. + help?: { + link: string; + buttonText: string; + buttonIcon?: string; + } }; export const IllustratedBanner = ({ title, subtitle, - illustrationName = IllustrationName.NoData, - buttonIcon = 'sap-icon://question-mark', - helpButtonText, - helpLink, + illustrationName = IllustrationMessageType.NoData, + help }: InfoBannerProps) => { return ( @@ -29,14 +29,15 @@ export const IllustratedBanner = ({ titleText={title} subtitleText={subtitle} /> - {helpButtonText && helpLink && ( - + {help?.buttonText && help.link && ( + + + )} ); diff --git a/src/lib/shared/McpContext.tsx b/src/lib/shared/McpContext.tsx index 1b342e6d..d6cd1431 100644 --- a/src/lib/shared/McpContext.tsx +++ b/src/lib/shared/McpContext.tsx @@ -8,14 +8,12 @@ import { import { ControlPlane as ManagedControlPlaneResource } from '../api/types/crate/controlPlanes.ts'; import { GetAuthPropsForContextName } from '../oidc/shared.ts'; import { AuthProvider, hasAuthParams, useAuth } from 'react-oidc-context'; -import IllustratedError from '../../components/Shared/IllustratedError.tsx'; import { ApiConfigContext, ApiConfigProvider, } from '../../components/Shared/k8s'; import useResource from '../api/useApiResource.ts'; import { GetKubeconfig } from '../api/types/crate/getKubeconfig.ts'; -import { useTranslation } from 'react-i18next'; interface McpContext { project: string; @@ -118,28 +116,13 @@ export function WithinManagedControlPlane({ children?: ReactNode; }) { const mcp = useContext(McpContext); - const { t } = useTranslation(); - try { - const authprops = GetAuthPropsForContextName(mcp.context, mcp.kubeconfig!); - return ( - <> - - {children} - - - ); - } catch (e) { - let errorMessage = t('MCPContext.errorMessage'); - - if (e instanceof Error) { - errorMessage = e.message; - } else if (typeof e === 'string') { - errorMessage = e; - } else if (typeof e === 'object' && e !== null && 'message' in e) { - errorMessage = String((e as any).message); - } - - return ; - } + const authprops = GetAuthPropsForContextName(mcp.context, mcp.kubeconfig!); + return ( + <> + + {children} + + + ); } diff --git a/src/main.tsx b/src/main.tsx index a3b4c3c3..5dbbee76 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -16,14 +16,14 @@ import { AuthProviderOnboarding } from './context/AuthProviderOnboarding.tsx'; import { ApolloClientProvider } from './spaces/onboarding/services/ApolloClientProvider/ApolloClientProvider.tsx'; import { IllustratedBanner } from './components/Ui/IllustratedBanner/IllustratedBanner.tsx'; import { useTranslation } from 'react-i18next'; -import { IllustrationName } from './components/Shared/IllustratedName.ts'; +import IllustrationMessageType from '@ui5/webcomponents-fiori/dist/types/IllustrationMessageType.js'; const ErrorFallback = ({ error }: FallbackProps) => { const { t } = useTranslation(); return ( diff --git a/src/views/ControlPlanes/ControlPlaneView.tsx b/src/views/ControlPlanes/ControlPlaneView.tsx index 0af14a26..efe9c3c3 100644 --- a/src/views/ControlPlanes/ControlPlaneView.tsx +++ b/src/views/ControlPlanes/ControlPlaneView.tsx @@ -46,14 +46,14 @@ export default function ControlPlaneView() { } if (error) { - return ; + return ; } if ( !mcp?.status?.access?.key || !mcp?.status?.access?.name || !mcp?.status?.access?.namespace ) { - return ; + return ; } return ( From bbb07e6821d3ae2258c71ce52496375f18e34381 Mon Sep 17 00:00:00 2001 From: Hubert Date: Sun, 27 Apr 2025 12:22:43 +0200 Subject: [PATCH 3/8] Linting issues fix + rebase --- src/components/Shared/IllustratedError.tsx | 5 +---- .../Ui/IllustratedBanner/IllustratedBanner.tsx | 12 +++++++----- src/context/AuthProviderOnboarding.tsx | 8 +++----- src/context/FrontendConfigContext.tsx | 8 ++++---- 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/components/Shared/IllustratedError.tsx b/src/components/Shared/IllustratedError.tsx index 69094a86..701e7528 100644 --- a/src/components/Shared/IllustratedError.tsx +++ b/src/components/Shared/IllustratedError.tsx @@ -8,10 +8,7 @@ interface Props { details?: string; } -export default function IllustratedError({ - title, - details, -}: Props) { +export default function IllustratedError({ title, details }: Props) { const { t } = useTranslation(); return ( diff --git a/src/components/Ui/IllustratedBanner/IllustratedBanner.tsx b/src/components/Ui/IllustratedBanner/IllustratedBanner.tsx index 03d26d39..8adb712c 100644 --- a/src/components/Ui/IllustratedBanner/IllustratedBanner.tsx +++ b/src/components/Ui/IllustratedBanner/IllustratedBanner.tsx @@ -7,19 +7,19 @@ import '@ui5/webcomponents-fiori/dist/illustrations/AllIllustrations.js'; type InfoBannerProps = { title: string; subtitle: string; - illustrationName?: IllustrationMessageType // e.g. 'NoData', 'SimpleError', etc. + illustrationName?: IllustrationMessageType; // e.g. 'NoData', 'SimpleError', etc. help?: { link: string; buttonText: string; buttonIcon?: string; - } + }; }; export const IllustratedBanner = ({ title, subtitle, illustrationName = IllustrationMessageType.NoData, - help + help, }: InfoBannerProps) => { return ( @@ -30,10 +30,12 @@ export const IllustratedBanner = ({ subtitleText={subtitle} /> {help?.buttonText && help.link && ( - + diff --git a/src/context/AuthProviderOnboarding.tsx b/src/context/AuthProviderOnboarding.tsx index 570e3cbb..42e86670 100644 --- a/src/context/AuthProviderOnboarding.tsx +++ b/src/context/AuthProviderOnboarding.tsx @@ -1,9 +1,7 @@ import { ReactNode } from 'react'; -import { AuthProvider } from 'react-oidc-context'; +import { AuthProvider, AuthProviderProps } from 'react-oidc-context'; import { OIDCConfig, useFrontendConfig } from './FrontendConfigContext.tsx'; -import { WebStorageStateStore } from "oidc-client-ts"; -import { AuthProviderProps } from "react-oidc-context"; - +import { WebStorageStateStore } from 'oidc-client-ts'; interface AuthProviderOnboardingProps { children?: ReactNode; @@ -33,4 +31,4 @@ function buildAuthProviderConfig(oidcConfig: OIDCConfig) { }, }; return props; -} \ No newline at end of file +} diff --git a/src/context/FrontendConfigContext.tsx b/src/context/FrontendConfigContext.tsx index 3005076f..d10f4018 100644 --- a/src/context/FrontendConfigContext.tsx +++ b/src/context/FrontendConfigContext.tsx @@ -10,8 +10,6 @@ export enum Landscape { Local = 'LOCAL', } - - interface FrontendConfigContextType extends FrontendConfig { links: DocLinkCreator; } @@ -19,7 +17,9 @@ interface FrontendConfigContextType extends FrontendConfig { export const FrontendConfigContext = createContext(null); -const fetchPromise = fetch('/frontend-config.json').then((res) => res.json()).then((data) => validateAndCastFrontendConfig(data)); +const fetchPromise = fetch('/frontend-config.json') + .then((res) => res.json()) + .then((data) => validateAndCastFrontendConfig(data)); interface FrontendConfigProviderProps { children: ReactNode; @@ -72,4 +72,4 @@ function validateAndCastFrontendConfig(config: unknown): FrontendConfig { } catch (error) { throw new Error(`Invalid frontend config: ${error}`); } -} \ No newline at end of file +} From d7f357d2b57d05e52aa09ab84ea0c6a552e802ed Mon Sep 17 00:00:00 2001 From: Hubert Date: Sun, 27 Apr 2025 12:29:36 +0200 Subject: [PATCH 4/8] tests fix --- .../IllustratedBanner.test.tsx | 34 +++++-------------- 1 file changed, 8 insertions(+), 26 deletions(-) diff --git a/src/components/Ui/IllustratedBanner/IllustratedBanner.test.tsx b/src/components/Ui/IllustratedBanner/IllustratedBanner.test.tsx index 8fd2f0ee..5a8c367f 100644 --- a/src/components/Ui/IllustratedBanner/IllustratedBanner.test.tsx +++ b/src/components/Ui/IllustratedBanner/IllustratedBanner.test.tsx @@ -14,8 +14,10 @@ describe('', () => { , ); @@ -27,28 +29,6 @@ describe('', () => { ); }); - it('does not render button when props are missing', () => { - cy.mount( - , - ); - - cy.get('ui5-button').should('not.exist'); - - cy.mount( - , - ); - - cy.get('ui5-button').should('not.exist'); - }); - it('opens a new tab when button is clicked', () => { // Stub window.open cy.window().then((win) => { @@ -59,8 +39,10 @@ describe('', () => { , ); From 89e8307b307996f97ddc887f2bc4d55d75a0d967 Mon Sep 17 00:00:00 2001 From: Hubert Date: Sun, 27 Apr 2025 12:45:16 +0200 Subject: [PATCH 5/8] tests fix 2 --- .../IllustratedBanner.test.tsx | 21 +++++++------------ .../IllustratedBanner/IllustratedBanner.tsx | 2 +- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/src/components/Ui/IllustratedBanner/IllustratedBanner.test.tsx b/src/components/Ui/IllustratedBanner/IllustratedBanner.test.tsx index 5a8c367f..5d9b2955 100644 --- a/src/components/Ui/IllustratedBanner/IllustratedBanner.test.tsx +++ b/src/components/Ui/IllustratedBanner/IllustratedBanner.test.tsx @@ -29,16 +29,11 @@ describe('', () => { ); }); - it('opens a new tab when button is clicked', () => { - // Stub window.open - cy.window().then((win) => { - cy.stub(win, 'open').as('windowOpen'); - }); - + it('renders a link with correct attributes', () => { cy.mount( ', () => { />, ); - cy.get('ui5-button').contains('Go').click(); - cy.get('@windowOpen').should( - 'have.been.calledWith', - 'https://example.com', - '_blank', - ); + cy.get('a') + .should('have.attr', 'href', 'https://example.com') + .and('have.attr', 'target', '_blank') + .and('have.attr', 'rel', 'noreferrer'); + + cy.get('a').contains('Go'); }); }); diff --git a/src/components/Ui/IllustratedBanner/IllustratedBanner.tsx b/src/components/Ui/IllustratedBanner/IllustratedBanner.tsx index 8adb712c..fd79d0ba 100644 --- a/src/components/Ui/IllustratedBanner/IllustratedBanner.tsx +++ b/src/components/Ui/IllustratedBanner/IllustratedBanner.tsx @@ -37,7 +37,7 @@ export const IllustratedBanner = ({ help.buttonIcon ? help.buttonIcon : 'sap-icon://question-mark' } > - {help.buttonIcon} + {help.buttonText} )} From 4a38626ce9937881744a6c90e091cd7fd4e626a2 Mon Sep 17 00:00:00 2001 From: Hubert Date: Tue, 29 Apr 2025 11:35:54 +0200 Subject: [PATCH 6/8] PR changes --- src/components/Ui/IllustratedBanner/IllustratedBanner.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Ui/IllustratedBanner/IllustratedBanner.tsx b/src/components/Ui/IllustratedBanner/IllustratedBanner.tsx index fd79d0ba..53d68b5e 100644 --- a/src/components/Ui/IllustratedBanner/IllustratedBanner.tsx +++ b/src/components/Ui/IllustratedBanner/IllustratedBanner.tsx @@ -7,7 +7,7 @@ import '@ui5/webcomponents-fiori/dist/illustrations/AllIllustrations.js'; type InfoBannerProps = { title: string; subtitle: string; - illustrationName?: IllustrationMessageType; // e.g. 'NoData', 'SimpleError', etc. + illustrationName: IllustrationMessageType; // e.g. 'NoData', 'SimpleError', etc. help?: { link: string; buttonText: string; @@ -29,7 +29,7 @@ export const IllustratedBanner = ({ titleText={title} subtitleText={subtitle} /> - {help?.buttonText && help.link && ( + {help && (