diff --git a/src/internal/base-component/__tests__/use-base-component.test.tsx b/src/internal/base-component/__tests__/use-base-component.test.tsx new file mode 100644 index 0000000..07c2479 --- /dev/null +++ b/src/internal/base-component/__tests__/use-base-component.test.tsx @@ -0,0 +1,44 @@ +// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +// SPDX-License-Identifier: Apache-2.0 +import { render } from "@testing-library/react"; +import { afterEach, expect, test, vi } from "vitest"; + +import { COMPONENT_METADATA_KEY } from "@cloudscape-design/component-toolkit/internal"; + +import useBaseComponent, { + InternalBaseComponentProps, +} from "../../../../lib/components/internal/base-component/use-base-component"; +import { PACKAGE_SOURCE, PACKAGE_VERSION } from "../../../../lib/components/internal/environment"; + +type InternalDemoProps = InternalBaseComponentProps; +function InternalDemo({ __internalRootRef }: InternalDemoProps) { + return
Internal Demo Component
; +} + +declare global { + interface Node { + [COMPONENT_METADATA_KEY]?: { name: string; version: string; packageName: string; theme: string }; + } +} + +function Demo() { + const baseComponentProps = useBaseComponent("DemoComponent"); + return ; +} + +vi.mock("../../../../lib/components/internal/utils/get-visual-theme", async (importOriginal) => { + return { ...(await importOriginal()), getVisualTheme: vi.fn(() => "test theme") }; +}); + +afterEach(() => { + vi.resetAllMocks(); +}); + +test("should attach the metadata to the returned root DOM node", () => { + const { container } = render(); + const rootNode = container.firstChild; + expect(rootNode![COMPONENT_METADATA_KEY]!.name).toBe("DemoComponent"); + expect(rootNode![COMPONENT_METADATA_KEY]!.version).toBe(PACKAGE_VERSION); + expect(rootNode![COMPONENT_METADATA_KEY]!.theme).toBe("test theme"); + expect(rootNode![COMPONENT_METADATA_KEY]!.packageName).toBe(PACKAGE_SOURCE); +}); diff --git a/src/internal/base-component/use-base-component.ts b/src/internal/base-component/use-base-component.ts index 8208e3b..b89c120 100644 --- a/src/internal/base-component/use-base-component.ts +++ b/src/internal/base-component/use-base-component.ts @@ -9,8 +9,10 @@ import { useComponentMetadata, } from "@cloudscape-design/component-toolkit/internal"; -import { PACKAGE_SOURCE, PACKAGE_VERSION } from "../environment"; +import { PACKAGE_SOURCE, PACKAGE_VERSION, THEME } from "../environment"; +import { getVisualTheme } from "../utils/get-visual-theme"; import { useTelemetry } from "./use-telemetry"; +import { useVisualRefresh } from "./use-visual-refresh"; initAwsUiVersions(PACKAGE_SOURCE, PACKAGE_VERSION); @@ -25,7 +27,13 @@ export interface InternalBaseComponentProps { */ export default function useBaseComponent(componentName: string, config?: ComponentConfiguration) { useTelemetry(componentName, config); - const elementRef = useComponentMetadata(componentName, PACKAGE_VERSION); + const isVisualRefresh = useVisualRefresh(); + const theme = getVisualTheme(THEME, isVisualRefresh); + const elementRef = useComponentMetadata(componentName, { + packageName: PACKAGE_SOURCE, + version: PACKAGE_VERSION, + theme, + }); return { __internalRootRef: elementRef }; }