Skip to content

Commit eb183f4

Browse files
Add component for description with an edit button (#884)
Add component for domain description with an edit button that goes to Settings
1 parent 14cf93b commit eb183f4

File tree

5 files changed

+73
-2
lines changed

5 files changed

+73
-2
lines changed

src/views/domain-page/config/domain-page-metadata-extended-table.config.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { createElement } from 'react';
22

33
import { type MetadataItem } from '../domain-page-metadata/domain-page-metadata.types';
44
import DomainPageMetadataClusters from '../domain-page-metadata-clusters/domain-page-metadata-clusters';
5+
import DomainPageMetadataDescription from '../domain-page-metadata-description/domain-page-metadata-description';
56
import DomainPageMetadataViewJson from '../domain-page-metadata-view-json/domain-page-metadata-view-json';
67

78
const domainPageMetadataExtendedTableConfig = [
@@ -17,9 +18,10 @@ const domainPageMetadataExtendedTableConfig = [
1718
label: 'Description',
1819
description: 'Brief, high-level description of the Cadence domain',
1920
kind: 'simple',
20-
// TODO: create a Domain Description component that opens settings to edit
2121
getValue: ({ domainDescription }) =>
22-
createElement('div', {}, domainDescription.description),
22+
createElement(DomainPageMetadataDescription, {
23+
description: domainDescription.description,
24+
}),
2325
},
2426
{
2527
key: 'owner',
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { render, screen } from '@/test-utils/rtl';
2+
3+
import DomainPageMetadataDescription from '../domain-page-metadata-description';
4+
5+
jest.mock('next/navigation', () => ({
6+
useParams: jest
7+
.fn()
8+
.mockReturnValue({ domain: 'test-domain', cluster: 'test-cluster' }),
9+
}));
10+
11+
describe(DomainPageMetadataDescription.name, () => {
12+
it('displays the correct description', () => {
13+
render(<DomainPageMetadataDescription description="Test Description" />);
14+
expect(screen.getByText('Test Description')).toBeInTheDocument();
15+
});
16+
17+
it('renders the edit button with correct link', () => {
18+
render(<DomainPageMetadataDescription description="Test Description" />);
19+
const button = screen.getByText('Edit in Settings');
20+
expect(button).toBeInTheDocument();
21+
expect(button).toHaveAttribute(
22+
'href',
23+
'/domains/test-domain/test-cluster/settings'
24+
);
25+
});
26+
});
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { styled as createStyled } from 'baseui';
2+
3+
export const styled = {
4+
DescriptionContainer: createStyled('div', ({ $theme }) => ({
5+
display: 'flex',
6+
flexDirection: 'column',
7+
alignItems: 'flex-start',
8+
gap: $theme.sizing.scale500,
9+
})),
10+
};
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { Button, KIND, SHAPE, SIZE } from 'baseui/button';
2+
import Link from 'next/link';
3+
import { useParams } from 'next/navigation';
4+
import { MdEdit } from 'react-icons/md';
5+
6+
import { type DomainPageTabsParams } from '../domain-page-tabs/domain-page-tabs.types';
7+
8+
import { styled } from './domain-page-metadata-description.styles';
9+
import { type Props } from './domain-page-metadata-description.types';
10+
11+
export default function DomainPageMetadataDescription(props: Props) {
12+
const { domain: encodedDomain, cluster: encodedCluster } =
13+
useParams<DomainPageTabsParams>();
14+
15+
return (
16+
<styled.DescriptionContainer>
17+
{props.description}
18+
<Button
19+
kind={KIND.secondary}
20+
shape={SHAPE.pill}
21+
size={SIZE.mini}
22+
startEnhancer={<MdEdit />}
23+
$as={Link}
24+
href={`/domains/${encodedDomain}/${encodedCluster}/settings`}
25+
>
26+
Edit in Settings
27+
</Button>
28+
</styled.DescriptionContainer>
29+
);
30+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export type Props = {
2+
description: string;
3+
};

0 commit comments

Comments
 (0)