From dc24c00b8ecb0440a9e495cb88a6e9d09debcd7b Mon Sep 17 00:00:00 2001
From: fuzmish <71511927+fuzmish@users.noreply.github.com>
Date: Wed, 9 Oct 2024 14:25:51 +0900
Subject: [PATCH] MINOR: open links in new tab in DataAssetsHeader (#18172)
* MINOR: open links in new tab in DataAssetsHeader
* fix: make mlModelDetail.dashboard internal link
---
.../DataAssetsHeader.component.tsx | 8 ++++-
.../DataAssetsHeader.test.tsx | 33 ++++++++++++++++++-
.../ui/src/utils/DataAssetsHeader.utils.tsx | 6 ++++
3 files changed, 45 insertions(+), 2 deletions(-)
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/DataAssets/DataAssetsHeader/DataAssetsHeader.component.tsx b/openmetadata-ui/src/main/resources/ui/src/components/DataAssets/DataAssetsHeader/DataAssetsHeader.component.tsx
index 41903907db3..8ebf9c75d90 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/DataAssets/DataAssetsHeader/DataAssetsHeader.component.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/components/DataAssets/DataAssetsHeader/DataAssetsHeader.component.tsx
@@ -107,10 +107,12 @@ export const ExtraInfoLink = ({
label,
value,
href,
+ newTab = false,
}: {
label: string;
value: string | number;
href: string;
+ newTab?: boolean;
}) => (
<>
@@ -118,7 +120,11 @@ export const ExtraInfoLink = ({
{!isEmpty(label) && (
{`${label}: `}
)}
-
+
{value}{' '}
({
.mockImplementation(() => Promise.resolve({ name: 'test' })),
}));
+describe('ExtraInfoLink component', () => {
+ const mockProps = {
+ label: 'myLabel',
+ value: 'example',
+ href: 'http://example.com/',
+ };
+
+ it('should not have target and rel attributes when newTab is false (default)', () => {
+ const { container } = render();
+
+ const elm = container.querySelector('a');
+
+ expect(elm).toHaveAttribute('href', mockProps.href);
+ expect(elm).not.toHaveAttribute('target');
+ expect(elm).not.toHaveAttribute('rel');
+ });
+
+ it('should have target and rel attributes when newTab is true', () => {
+ const { container } = render();
+
+ const elm = container.querySelector('a');
+
+ expect(elm).toHaveAttribute('href', mockProps.href);
+ expect(elm).toHaveAttribute('target', '_blank');
+
+ const rel = (elm?.getAttribute('rel') || '').split(/\s+/g);
+
+ expect(rel.sort()).toStrictEqual(['noopener', 'noreferrer'].sort());
+ });
+});
+
describe('DataAssetsHeader component', () => {
it('should call getContainerByName API on Page load for container assets', () => {
const mockGetContainerByName = getContainerByName as jest.Mock;
diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/DataAssetsHeader.utils.tsx b/openmetadata-ui/src/main/resources/ui/src/utils/DataAssetsHeader.utils.tsx
index 613ce2955c7..0907319428a 100644
--- a/openmetadata-ui/src/main/resources/ui/src/utils/DataAssetsHeader.utils.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/utils/DataAssetsHeader.utils.tsx
@@ -105,6 +105,7 @@ export const getDataAssetsHeaderInfo = (
<>
{dashboardDetails.sourceUrl && (
{pipelineDetails.sourceUrl && (
{storedProcedureDetails.sourceUrl && (
{apiCollection.endpointURL && (