Skip to content

Commit d7b29a7

Browse files
committed
chore: Provide additinal component metadata
1 parent 5024307 commit d7b29a7

File tree

5 files changed

+27
-26
lines changed

5 files changed

+27
-26
lines changed

src/annotation-context/index.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
44

55
import { HotspotProps } from '../hotspot/interfaces';
66
import { fireNonCancelableEvent } from '../internal/events';
7-
import { useTelemetry } from '../internal/hooks/use-telemetry';
7+
import useBaseComponent from '../internal/hooks/use-base-component';
88
import { applyDisplayName } from '../internal/utils/apply-display-name';
99
import { ClosedAnnotation } from './annotation/closed-annotation';
1010
import { OpenAnnotation } from './annotation/open-annotation';
@@ -26,7 +26,7 @@ export default function AnnotationContext({
2626
onExitTutorial,
2727
i18nStrings,
2828
}: AnnotationContextProps): JSX.Element {
29-
useTelemetry('AnnotationContext');
29+
useBaseComponent('AnnotationContext');
3030

3131
const [open, setOpen] = useState(true);
3232

src/i18n/provider.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import IntlMessageFormat from 'intl-messageformat';
77

88
import { warnOnce } from '@cloudscape-design/component-toolkit/internal';
99

10-
import { useTelemetry } from '../internal/hooks/use-telemetry';
10+
import useBaseComponent from '../internal/hooks/use-base-component';
1111
import { applyDisplayName } from '../internal/utils/apply-display-name';
1212
import { CustomHandler, FormatFunction, InternalI18nContext } from './context';
1313
import { getMatchableLocales } from './get-matchable-locales';
@@ -38,7 +38,7 @@ export namespace I18nProviderProps {
3838
const I18nMessagesContext = React.createContext<I18nProviderProps.Messages>({});
3939

4040
export function I18nProvider({ messages: messagesArray, locale: providedLocale, children }: I18nProviderProps) {
41-
useTelemetry('I18nProvider');
41+
useBaseComponent('I18nProvider');
4242

4343
if (typeof document === 'undefined' && !providedLocale) {
4444
warnOnce(

src/internal/hooks/use-base-component/__tests__/use-base-component.test.tsx

+11-5
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,20 @@
33
import React, { useState } from 'react';
44
import { render } from '@testing-library/react';
55

6-
import { COMPONENT_METADATA_KEY, Portal } from '@cloudscape-design/component-toolkit/internal';
6+
import { COMPONENT_METADATA_KEY, Portal, useComponentMetrics } from '@cloudscape-design/component-toolkit/internal';
77

88
import { Button } from '../../../../../lib/components';
99
import { PACKAGE_VERSION } from '../../../../../lib/components/internal/environment';
1010
import useBaseComponent, {
1111
InternalBaseComponentProps,
1212
} from '../../../../../lib/components/internal/hooks/use-base-component';
13-
import { useTelemetry } from '../../../../../lib/components/internal/hooks/use-telemetry';
1413
import createWrapper from '../../../../../lib/components/test-utils/dom';
1514

16-
jest.mock('../../../../../lib/components/internal/hooks/use-telemetry', () => {
17-
return { useTelemetry: jest.fn(() => null) };
15+
jest.mock('@cloudscape-design/component-toolkit/internal', () => {
16+
return {
17+
...jest.requireActual('@cloudscape-design/component-toolkit/internal'),
18+
useComponentMetrics: jest.fn(() => {}),
19+
};
1820
});
1921

2022
type InternalDemoProps = InternalBaseComponentProps;
@@ -62,7 +64,11 @@ test('should attach the metadata to the returned root DOM node', () => {
6264
test('should call the useTelemetry hook passing down the given component name and its props', () => {
6365
jest.resetAllMocks();
6466
render(<Demo variant="default" />);
65-
expect(useTelemetry).toHaveBeenCalledWith('DemoComponent', { props: { variant: 'default' } });
67+
expect(useComponentMetrics).toHaveBeenCalledWith(
68+
'DemoComponent',
69+
expect.objectContaining({ packageVersion: PACKAGE_VERSION }),
70+
{ props: { variant: 'default' } }
71+
);
6672
});
6773

6874
test('metadata get attached on the Portal component root DOM node when elementRef is changing', () => {

src/internal/hooks/use-base-component/index.ts

+12-4
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ import { MutableRefObject } from 'react';
55
import {
66
ComponentConfiguration,
77
useComponentMetadata,
8+
useComponentMetrics,
89
useFocusVisible,
910
} from '@cloudscape-design/component-toolkit/internal';
1011

1112
import { AnalyticsMetadata } from '../../analytics/interfaces';
12-
import { PACKAGE_VERSION } from '../../environment';
13-
import { useTelemetry } from '../use-telemetry';
13+
import { PACKAGE_SOURCE, PACKAGE_VERSION, THEME } from '../../environment';
14+
import { getVisualTheme } from '../../utils/get-visual-theme';
15+
import { useVisualRefresh } from '../use-visual-mode';
1416

1517
export interface InternalBaseComponentProps<T = any> {
1618
__internalRootRef?: MutableRefObject<T | null> | null;
@@ -26,8 +28,14 @@ export default function useBaseComponent<T = any>(
2628
config?: ComponentConfiguration,
2729
analyticsMetadata?: AnalyticsMetadata
2830
) {
29-
useTelemetry(componentName, config);
31+
const isVisualRefresh = useVisualRefresh();
32+
const theme = getVisualTheme(THEME, isVisualRefresh);
33+
useComponentMetrics(componentName, { packageSource: PACKAGE_SOURCE, packageVersion: PACKAGE_VERSION, theme }, config);
3034
useFocusVisible();
31-
const elementRef = useComponentMetadata<T>(componentName, PACKAGE_VERSION, { ...analyticsMetadata });
35+
const elementRef = useComponentMetadata<T>(
36+
componentName,
37+
{ packageName: PACKAGE_SOURCE, version: PACKAGE_VERSION, theme },
38+
analyticsMetadata as any
39+
);
3240
return { __internalRootRef: elementRef };
3341
}

src/internal/hooks/use-telemetry/index.ts

-13
This file was deleted.

0 commit comments

Comments
 (0)