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 16325de8..54406d33 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 @@ -67,6 +67,17 @@ exports[`components/Text prop "accessibilityRole" value is set 1`] = ` /> `; +exports[`components/Text prop "hrefAttrs" values are set 1`] = ` +
+`; + exports[`components/Text prop "nativeID" value is set 1`] = `
{ expect(container.firstChild).toMatchSnapshot(); }); + describe('prop "hrefAttrs"', () => { + test('values are set', () => { + 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/index.js b/packages/react-native-web/src/exports/Text/index.js index fede9ffe..4044fcb5 100644 --- a/packages/react-native-web/src/exports/Text/index.js +++ b/packages/react-native-web/src/exports/Text/index.js @@ -65,9 +65,7 @@ const forwardPropsList = { onMouseUp: true, onScroll: true, onWheel: true, - href: true, - rel: true, - target: true + href: true }; const pickProps = props => pick(props, forwardPropsList); @@ -75,6 +73,7 @@ const pickProps = props => pick(props, forwardPropsList); const Text = forwardRef((props, forwardedRef) => { const { dir, + hrefAttrs, numberOfLines, onClick, onLayout, @@ -155,6 +154,18 @@ const Text = forwardRef((props, forwardedRef) => { } 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' && target.charAt(0) !== '_') { + supportedProps.target = '_' + target; + } + } const platformMethodsRef = usePlatformMethods(supportedProps); const setRef = useMergeRefs(hostRef, platformMethodsRef, forwardedRef); diff --git a/packages/react-native-web/src/exports/View/index.js b/packages/react-native-web/src/exports/View/index.js index 8271ba24..1029e1ed 100644 --- a/packages/react-native-web/src/exports/View/index.js +++ b/packages/react-native-web/src/exports/View/index.js @@ -63,15 +63,14 @@ const forwardPropsList = { onMouseUp: true, onScroll: true, onWheel: true, - href: true, - rel: true, - target: true + href: true }; const pickProps = props => pick(props, forwardPropsList); const View = forwardRef((props, forwardedRef) => { const { + hrefAttrs, onLayout, onMoveShouldSetResponder, onMoveShouldSetResponderCapture, @@ -130,6 +129,18 @@ const View = forwardRef((props, forwardedRef) => { 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' && target.charAt(0) !== '_') { + supportedProps.target = '_' + target; + } + } const platformMethodsRef = usePlatformMethods(supportedProps); const setRef = useMergeRefs(hostRef, platformMethodsRef, forwardedRef);