From 352ffaeb98e1f0e98e94ce8816e66e85169574f6 Mon Sep 17 00:00:00 2001 From: Sana Malik Date: Tue, 28 Jan 2025 15:46:12 -0500 Subject: [PATCH] Allow ReactNode as LabeledValue value --- .../labeledvalue/src/LabeledValue.tsx | 13 ++++++++ .../stories/LabeledValue.stories.tsx | 10 +++++++ .../labeledvalue/test/LabeledValue.test.js | 30 +++++++++++++++++++ 3 files changed, 53 insertions(+) diff --git a/packages/@react-spectrum/labeledvalue/src/LabeledValue.tsx b/packages/@react-spectrum/labeledvalue/src/LabeledValue.tsx index 58b91823bb0..ab0fa3465c6 100644 --- a/packages/@react-spectrum/labeledvalue/src/LabeledValue.tsx +++ b/packages/@react-spectrum/labeledvalue/src/LabeledValue.tsx @@ -78,6 +78,15 @@ export const LabeledValue = React.forwardRef(function LabeledValue 0 + ) { + throw new Error("LabeledValue cannot contain an editable element."); + } + let children; if (Array.isArray(value)) { children = ; @@ -103,6 +112,10 @@ export const LabeledValue = React.forwardRef(function LabeledValue {children} diff --git a/packages/@react-spectrum/labeledvalue/stories/LabeledValue.stories.tsx b/packages/@react-spectrum/labeledvalue/stories/LabeledValue.stories.tsx index b27c847d233..bb76efa4e23 100644 --- a/packages/@react-spectrum/labeledvalue/stories/LabeledValue.stories.tsx +++ b/packages/@react-spectrum/labeledvalue/stories/LabeledValue.stories.tsx @@ -17,6 +17,7 @@ import {ContextualHelp} from '@react-spectrum/contextualhelp'; import {Heading} from '@react-spectrum/text'; import {LabeledValue} from '..'; import React from 'react'; +import { Link } from "@react-spectrum/link"; type LabeledValueStory = ComponentStoryObj; @@ -120,6 +121,15 @@ export let NumberRange: LabeledValueStory = { name: 'RangeValue' }; + +export let CustomComponent: LabeledValueStory = { + args: { + label: "Test", + value: Adobe, + }, + name: "CustomComponent", +}; + export let WithContextualHelp: LabeledValueStory = { args: { label: 'Test', diff --git a/packages/@react-spectrum/labeledvalue/test/LabeledValue.test.js b/packages/@react-spectrum/labeledvalue/test/LabeledValue.test.js index d12c9a7d7e9..20a02a95902 100644 --- a/packages/@react-spectrum/labeledvalue/test/LabeledValue.test.js +++ b/packages/@react-spectrum/labeledvalue/test/LabeledValue.test.js @@ -275,6 +275,36 @@ describe('LabeledValue', function () { expect(staticField).toHaveTextContent('10 – 20'); }); + it("renders correctly with ReactNode value", function () { + let { getByTestId } = render( + test} + /> + ); + + let staticField = getByTestId("test-id"); + expect(staticField).toBeInTheDocument(); + expect(staticField).toHaveTextContent("test"); + expect( + within(staticField).getByRole("link", { name: "test" }) + ).toBeInTheDocument(); + }); + + it("throws when an editable value is provided", function () { + expect(() => { + render( + } + value="test" + isEditable + /> + ); + }).toThrow("LabeledValue cannot contain an editable element."); + }); + it('attaches a user provided ref to the outer div', function () { let ref = React.createRef(); let {getByTestId} = render(