From 7edb860ba94737add926a8a12dbe958b73d8053d Mon Sep 17 00:00:00 2001 From: Michael Dowse Date: Tue, 18 Mar 2025 15:09:44 +0100 Subject: [PATCH] chore: Port over useTelemetry hook --- src/internal/base-component/interfaces.ts | 8 ++++++ src/internal/base-component/telemetry.ts | 26 +++++++++++++++++++ .../utils/__tests__/get-visual-theme.test.ts | 19 ++++++++++++++ src/internal/utils/get-visual-theme.ts | 10 +++++++ 4 files changed, 63 insertions(+) create mode 100644 src/internal/base-component/interfaces.ts create mode 100644 src/internal/base-component/telemetry.ts create mode 100644 src/internal/utils/__tests__/get-visual-theme.test.ts create mode 100644 src/internal/utils/get-visual-theme.ts diff --git a/src/internal/base-component/interfaces.ts b/src/internal/base-component/interfaces.ts new file mode 100644 index 0000000..94dccb0 --- /dev/null +++ b/src/internal/base-component/interfaces.ts @@ -0,0 +1,8 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +import { PackageSettings } from './metrics/interfaces'; + +export interface Environment extends PackageSettings { + alwaysVisualRefresh: boolean; +} diff --git a/src/internal/base-component/telemetry.ts b/src/internal/base-component/telemetry.ts new file mode 100644 index 0000000..7429997 --- /dev/null +++ b/src/internal/base-component/telemetry.ts @@ -0,0 +1,26 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +import { getVisualTheme } from '../utils/get-visual-theme'; +import { useRuntimeVisualRefresh } from '../visual-mode'; +import { useComponentMetrics } from './component-metrics'; +import { ComponentConfiguration } from './metrics/interfaces'; + +import { Environment } from './interfaces'; + +export function createUseTelemetry(environment: Environment) { + return (componentName: string, config?: ComponentConfiguration) => { + const isVisualRefresh = environment.alwaysVisualRefresh || useRuntimeVisualRefresh(); + const theme = getVisualTheme(environment.theme, isVisualRefresh); + + useComponentMetrics( + componentName, + { + packageSource: environment.packageSource, + packageVersion: environment.packageVersion, + theme, + }, + config + ); + }; +} diff --git a/src/internal/utils/__tests__/get-visual-theme.test.ts b/src/internal/utils/__tests__/get-visual-theme.test.ts new file mode 100644 index 0000000..906113f --- /dev/null +++ b/src/internal/utils/__tests__/get-visual-theme.test.ts @@ -0,0 +1,19 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +import { getVisualTheme } from '../get-visual-theme'; + +describe('getVisualTheme', () => { + it('returns vr when theme is polaris and VR is active', () => { + expect(getVisualTheme('polaris', true)).toBe('vr'); + }); + + it('returns polaris when theme is polaris and VR is not active', () => { + expect(getVisualTheme('polaris', false)).toBe('polaris'); + }); + + it('returns defined theme by default', () => { + expect(getVisualTheme('custom', false)).toBe('custom'); + expect(getVisualTheme('custom', true)).toBe('custom'); + }); +}); diff --git a/src/internal/utils/get-visual-theme.ts b/src/internal/utils/get-visual-theme.ts new file mode 100644 index 0000000..98ade41 --- /dev/null +++ b/src/internal/utils/get-visual-theme.ts @@ -0,0 +1,10 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 + +export const getVisualTheme = (theme: string, isVR: boolean) => { + if (theme === 'polaris' && isVR) { + return 'vr'; + } + + return theme; +};