diff --git a/packages/react-native-web/src/exports/Pressable/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/exports/Pressable/__tests__/__snapshots__/index-test.js.snap index 3c1abf40..8d2f4f20 100644 --- a/packages/react-native-web/src/exports/Pressable/__tests__/__snapshots__/index-test.js.snap +++ b/packages/react-native-web/src/exports/Pressable/__tests__/__snapshots__/index-test.js.snap @@ -106,9 +106,10 @@ exports[`components/Pressable prop "accessibilityLiveRegion" value is set 1`] = `; exports[`components/Pressable prop "accessibilityRole" value alters HTML element 1`] = ` - `; @@ -136,6 +137,13 @@ exports[`components/Pressable prop "disabled" 1`] = ` /> `; +exports[`components/Pressable prop "href" 1`] = ` + +`; + exports[`components/Pressable prop "nativeID" value is set 1`] = `
{ }); test('value alters HTML element', () => { - const { container } = render(); + const { container } = render(); expect(container.firstChild).toMatchSnapshot(); }); }); @@ -48,6 +48,11 @@ describe('components/Pressable', () => { expect(container.firstChild).toMatchSnapshot(); }); + test('prop "href"', () => { + const { container } = render(); + expect(container.firstChild).toMatchSnapshot(); + }); + describe('prop "nativeID"', () => { test('value is set', () => { const { container } = render(); diff --git a/packages/react-native-web/src/exports/Text/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/exports/Text/__tests__/__snapshots__/index-test.js.snap index 0b8e3bd0..37b7c11c 100644 --- a/packages/react-native-web/src/exports/Text/__tests__/__snapshots__/index-test.js.snap +++ b/packages/react-native-web/src/exports/Text/__tests__/__snapshots__/index-test.js.snap @@ -51,10 +51,10 @@ exports[`components/Text prop "accessibilityLiveRegion" value is set 1`] = ` `; exports[`components/Text prop "accessibilityRole" value alters HTML element 1`] = ` - `; diff --git a/packages/react-native-web/src/exports/Text/__tests__/index-test.js b/packages/react-native-web/src/exports/Text/__tests__/index-test.js index 01fec90c..0359dc2c 100644 --- a/packages/react-native-web/src/exports/Text/__tests__/index-test.js +++ b/packages/react-native-web/src/exports/Text/__tests__/index-test.js @@ -51,7 +51,7 @@ describe('components/Text', () => { }); test('value alters HTML element', () => { - const { container } = render(); + const { container } = render(); expect(container.firstChild).toMatchSnapshot(); }); }); diff --git a/packages/react-native-web/src/exports/Text/index.js b/packages/react-native-web/src/exports/Text/index.js index a40cf163..36f8bc0b 100644 --- a/packages/react-native-web/src/exports/Text/index.js +++ b/packages/react-native-web/src/exports/Text/index.js @@ -114,7 +114,7 @@ const Text: React.AbstractComponent = } } - const component = hasTextAncestor ? 'span' : 'div'; + let component = hasTextAncestor ? 'span' : 'div'; const supportedProps = pickProps(props); supportedProps.classList = classList; supportedProps.dir = dir; @@ -124,16 +124,19 @@ const Text: React.AbstractComponent = } supportedProps.onClick = handleClick; supportedProps.style = style; - if (props.href != null && hrefAttrs != null) { - const { download, rel, target } = hrefAttrs; - if (download != null) { - supportedProps.download = download; - } - if (rel != null) { - supportedProps.rel = rel; - } - if (typeof target === 'string') { - supportedProps.target = target.charAt(0) !== '_' ? '_' + target : target; + if (props.href != null) { + component = 'a'; + if (hrefAttrs != null) { + const { download, rel, target } = hrefAttrs; + if (download != null) { + supportedProps.download = download; + } + if (rel != null) { + supportedProps.rel = rel; + } + if (typeof target === 'string') { + supportedProps.target = target.charAt(0) !== '_' ? '_' + target : target; + } } } diff --git a/packages/react-native-web/src/exports/View/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/exports/View/__tests__/__snapshots__/index-test.js.snap index 41a07887..b8cfffb5 100644 --- a/packages/react-native-web/src/exports/View/__tests__/__snapshots__/index-test.js.snap +++ b/packages/react-native-web/src/exports/View/__tests__/__snapshots__/index-test.js.snap @@ -46,9 +46,9 @@ exports[`components/View prop "accessibilityLiveRegion" value is set 1`] = ` `; exports[`components/View prop "accessibilityRole" value alters HTML element 1`] = ` - `; diff --git a/packages/react-native-web/src/exports/View/__tests__/index-test.js b/packages/react-native-web/src/exports/View/__tests__/index-test.js index 3a948155..592db3f6 100644 --- a/packages/react-native-web/src/exports/View/__tests__/index-test.js +++ b/packages/react-native-web/src/exports/View/__tests__/index-test.js @@ -79,7 +79,7 @@ describe('components/View', () => { }); test('value alters HTML element', () => { - const { container } = render(); + const { container } = render(); expect(container.firstChild).toMatchSnapshot(); }); }); diff --git a/packages/react-native-web/src/exports/View/index.js b/packages/react-native-web/src/exports/View/index.js index ae7fbddd..13c98b7b 100644 --- a/packages/react-native-web/src/exports/View/index.js +++ b/packages/react-native-web/src/exports/View/index.js @@ -97,21 +97,25 @@ const View: React.AbstractComponent = onStartShouldSetResponderCapture }); + let component = 'div'; const style = StyleSheet.compose(hasTextAncestor && styles.inline, props.style); const supportedProps = pickProps(props); supportedProps.classList = classList; supportedProps.style = style; - if (props.href != null && hrefAttrs != null) { - const { download, rel, target } = hrefAttrs; - if (download != null) { - supportedProps.download = download; - } - if (rel != null) { - supportedProps.rel = rel; - } - if (typeof target === 'string') { - supportedProps.target = target.charAt(0) !== '_' ? '_' + target : target; + if (props.href != null) { + component = 'a'; + if (hrefAttrs != null) { + const { download, rel, target } = hrefAttrs; + if (download != null) { + supportedProps.download = download; + } + if (rel != null) { + supportedProps.rel = rel; + } + if (typeof target === 'string') { + supportedProps.target = target.charAt(0) !== '_' ? '_' + target : target; + } } } @@ -120,7 +124,7 @@ const View: React.AbstractComponent = supportedProps.ref = setRef; - return createElement('div', supportedProps); + return createElement(component, supportedProps); } ); diff --git a/packages/react-native-web/src/exports/createElement/__tests__/__snapshots__/index-test.js.snap b/packages/react-native-web/src/exports/createElement/__tests__/__snapshots__/index-test.js.snap index bf7ce9c3..def1ea93 100644 --- a/packages/react-native-web/src/exports/createElement/__tests__/__snapshots__/index-test.js.snap +++ b/packages/react-native-web/src/exports/createElement/__tests__/__snapshots__/index-test.js.snap @@ -3,3 +3,11 @@ exports[`exports/createElement renders different DOM elements 1`] = ``; exports[`exports/createElement renders different DOM elements 2`] = `
`; + +exports[`exports/createElement renders different DOM elements 3`] = ` + + + +`; diff --git a/packages/react-native-web/src/exports/createElement/__tests__/index-test.js b/packages/react-native-web/src/exports/createElement/__tests__/index-test.js index c94b02c0..6401a436 100644 --- a/packages/react-native-web/src/exports/createElement/__tests__/index-test.js +++ b/packages/react-native-web/src/exports/createElement/__tests__/index-test.js @@ -18,12 +18,16 @@ describe('exports/createElement', () => { expect(container.firstChild).toMatchSnapshot(); ({ container } = render(createElement('main'))); expect(container.firstChild).toMatchSnapshot(); + ({ container } = render( + createElement('svg', { children: createElement('image', { href: '#href' }) }) + )); + expect(container.firstChild).toMatchSnapshot(); }); describe('prop "accessibilityRole"', () => { test('string component type', () => { const { container } = render(createElement('span', { accessibilityRole: 'link' })); - expect(container.firstChild.nodeName).toBe('A'); + expect(container.firstChild.nodeName).toBe('SPAN'); }); test('function component type', () => { diff --git a/packages/react-native-web/src/modules/AccessibilityUtil/propsToAccessibilityComponent.js b/packages/react-native-web/src/modules/AccessibilityUtil/propsToAccessibilityComponent.js index b0ec62ca..37b829fd 100644 --- a/packages/react-native-web/src/modules/AccessibilityUtil/propsToAccessibilityComponent.js +++ b/packages/react-native-web/src/modules/AccessibilityUtil/propsToAccessibilityComponent.js @@ -21,7 +21,6 @@ const roleComponents = { figure: 'figure', insertion: 'ins', form: 'form', - link: 'a', list: 'ul', listitem: 'li', main: 'main', @@ -38,11 +37,6 @@ const propsToAccessibilityComponent = (props: Object = emptyObject): void | stri return 'label'; } - // special-case for "href" which becomes a link - if (props.href != null) { - return 'a'; - } - const role = propsToAriaRole(props); if (role) { if (role === 'heading') {