Skip to content

Commit d4ff2bd

Browse files
fralongoFrancesco Longo
andauthored
fix: Instrument Toolbar variant of AppLayout (#3606)
Co-authored-by: Francesco Longo <[email protected]>
1 parent c606ac5 commit d4ff2bd

File tree

4 files changed

+90
-27
lines changed

4 files changed

+90
-27
lines changed

src/app-layout-toolbar/index.tsx

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import React from 'react';
44

55
import { useMergeRefs, warnOnce } from '@cloudscape-design/component-toolkit/internal';
6-
import { getAnalyticsMetadataAttribute } from '@cloudscape-design/component-toolkit/internal/analytics-metadata';
76

87
import { applyDefaults } from '../app-layout/defaults';
98
import { AppLayoutProps } from '../app-layout/interfaces';
@@ -19,7 +18,6 @@ import { useMobile } from '../internal/hooks/use-mobile';
1918
import { useVisualRefresh } from '../internal/hooks/use-visual-mode';
2019
import { isDevelopment } from '../internal/is-development';
2120
import { applyDisplayName } from '../internal/utils/apply-display-name';
22-
import { GeneratedAnalyticsMetadataAppLayoutToolbarComponent } from './analytics-metadata/interfaces';
2321
import { AppLayoutToolbarProps } from './interfaces';
2422

2523
export { AppLayoutToolbarProps };
@@ -127,21 +125,9 @@ const AppLayoutToolbar = React.forwardRef(
127125

128126
const baseProps = getBaseProps(rest);
129127

130-
const componentAnalyticsMetadata: GeneratedAnalyticsMetadataAppLayoutToolbarComponent = {
131-
name: 'awsui.AppLayoutToolbar',
132-
label: {
133-
selector: 'h1',
134-
root: 'body',
135-
},
136-
};
137-
138128
return (
139129
<AppLayoutToolbarPublicContext.Provider value={true}>
140-
<div
141-
ref={useMergeRefs(__internalRootRef, rootRef)}
142-
{...baseProps}
143-
{...getAnalyticsMetadataAttribute({ component: componentAnalyticsMetadata })}
144-
>
130+
<div ref={useMergeRefs(__internalRootRef, rootRef)} {...baseProps}>
145131
<AppLayoutToolbarInternal ref={ref} {...props} />
146132
</div>
147133
</AppLayoutToolbarPublicContext.Provider>
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
import React from 'react';
4+
5+
import {
6+
activateAnalyticsMetadata,
7+
GeneratedAnalyticsMetadataFragment,
8+
} from '@cloudscape-design/component-toolkit/internal/analytics-metadata';
9+
import { getGeneratedAnalyticsMetadata } from '@cloudscape-design/component-toolkit/internal/analytics-metadata/utils';
10+
11+
import AppLayout from '../../../lib/components/app-layout';
12+
import Header from '../../../lib/components/header';
13+
import { describeEachAppLayout, renderComponent } from './utils';
14+
15+
const getMetadata = (label = 'Label') => {
16+
const metadata: GeneratedAnalyticsMetadataFragment = {
17+
contexts: [
18+
{
19+
type: 'component',
20+
detail: {
21+
name: 'awsui.AppLayoutToolbar',
22+
label,
23+
},
24+
},
25+
],
26+
};
27+
return metadata;
28+
};
29+
30+
beforeAll(() => {
31+
activateAnalyticsMetadata(true);
32+
});
33+
describeEachAppLayout({ sizes: ['desktop'] }, ({ theme }) => {
34+
describe('AppLayoutToolbar renders correct analytics metadata', () => {
35+
test('with the header component inside the content', () => {
36+
const { wrapper } = renderComponent(
37+
<AppLayout
38+
content={
39+
<Header variant="h1" counter="not included">
40+
H1 Header
41+
</Header>
42+
}
43+
/>
44+
);
45+
if (theme === 'refresh-toolbar') {
46+
expect(getGeneratedAnalyticsMetadata(wrapper.getElement())).toEqual(getMetadata('H1 Header'));
47+
} else {
48+
expect(getGeneratedAnalyticsMetadata(wrapper.getElement())).toEqual({});
49+
}
50+
});
51+
test('with a simple h1 tag inside the content', () => {
52+
const { wrapper } = renderComponent(<AppLayout content={<h1>Label</h1>} />);
53+
if (theme === 'refresh-toolbar') {
54+
expect(getGeneratedAnalyticsMetadata(wrapper.getElement())).toEqual(getMetadata());
55+
} else {
56+
expect(getGeneratedAnalyticsMetadata(wrapper.getElement())).toEqual({});
57+
}
58+
});
59+
});
60+
});

src/app-layout/__tests__/runtime-drawers.test.tsx

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1365,24 +1365,29 @@ describe('toolbar mode only features', () => {
13651365
getGeneratedAnalyticsMetadata(
13661366
globalDrawersWrapper.findExpandedModeButtonByActiveDrawerId(drawerId)!.getElement()
13671367
)
1368-
).toStrictEqual({
1369-
action: 'expand',
1370-
detail: {
1371-
label: 'Expanded mode button',
1372-
},
1373-
});
1368+
).toEqual(
1369+
expect.objectContaining({
1370+
action: 'expand',
1371+
detail: {
1372+
label: 'Expanded mode button',
1373+
},
1374+
})
1375+
);
1376+
13741377
globalDrawersWrapper.findExpandedModeButtonByActiveDrawerId(drawerId)!.click();
13751378
expect(globalDrawersWrapper.findDrawerById(drawerId)!.isDrawerInExpandedMode()).toBe(false);
13761379
expect(
13771380
getGeneratedAnalyticsMetadata(
13781381
globalDrawersWrapper.findExpandedModeButtonByActiveDrawerId(drawerId)!.getElement()
13791382
)
1380-
).toStrictEqual({
1381-
action: 'collapse',
1382-
detail: {
1383-
label: 'Expanded mode button',
1384-
},
1385-
});
1383+
).toEqual(
1384+
expect.objectContaining({
1385+
action: 'collapse',
1386+
detail: {
1387+
label: 'Expanded mode button',
1388+
},
1389+
})
1390+
);
13861391
});
13871392

13881393
test('only one drawer could be in expanded mode. all other panels should be closed', async () => {

src/app-layout/visual-refresh-toolbar/skeleton/index.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import React from 'react';
44
import clsx from 'clsx';
55

6+
import { getAnalyticsMetadataAttribute } from '@cloudscape-design/component-toolkit/internal/analytics-metadata';
7+
8+
import { GeneratedAnalyticsMetadataAppLayoutToolbarComponent } from '../../../app-layout-toolbar/analytics-metadata/interfaces';
69
import VisualContext from '../../../internal/components/visual-context';
710
import customCssProps from '../../../internal/generated/custom-css-properties';
811
import { useMobile } from '../../../internal/hooks/use-mobile';
@@ -46,6 +49,14 @@ interface SkeletonLayoutProps
4649
drawerExpandedModeInChildLayout: boolean;
4750
}
4851

52+
const componentAnalyticsMetadata: GeneratedAnalyticsMetadataAppLayoutToolbarComponent = {
53+
name: 'awsui.AppLayoutToolbar',
54+
label: {
55+
selector: 'h1',
56+
root: 'body',
57+
},
58+
};
59+
4960
export const SkeletonLayout = React.forwardRef<HTMLDivElement, SkeletonLayoutProps>(
5061
(
5162
{
@@ -95,6 +106,7 @@ export const SkeletonLayout = React.forwardRef<HTMLDivElement, SkeletonLayoutPro
95106
[customCssProps.navigationWidth]: `${navigationWidth}px`,
96107
[customCssProps.toolsWidth]: `${toolsWidth}px`,
97108
}}
109+
{...getAnalyticsMetadataAttribute({ component: componentAnalyticsMetadata })}
98110
>
99111
{toolbar}
100112
{navigation && (

0 commit comments

Comments
 (0)