Skip to content

Commit

Permalink
[add] View/Text prop nativeID
Browse files Browse the repository at this point in the history
Maps the View and Text prop 'nativeID' to DOM 'id' as these are
equivalent.  Enables declarative use of various 'aria-*' properties that
require ID references.

Ref #1116
Close #1130
  • Loading branch information
necolas committed Oct 12, 2018
1 parent a54bdee commit bfaeae9
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 0 deletions.
Expand Up @@ -21,6 +21,7 @@ const TextPropTypes = {
accessible: bool,
children: any,
importantForAccessibility: oneOf(['auto', 'no', 'no-hide-descendants', 'yes']),
nativeID: string,
numberOfLines: number,
onBlur: func,
onContextMenu: func,
Expand Down
2 changes: 2 additions & 0 deletions packages/react-native-web/src/exports/View/ViewPropTypes.js
Expand Up @@ -38,6 +38,7 @@ export type ViewProps = {
children?: any,
hitSlop?: EdgeInsetsProp,
importantForAccessibility?: 'auto' | 'yes' | 'no' | 'no-hide-descendants',
nativeID?: string,

This comment has been minimized.

Copy link
@necolas

necolas Oct 12, 2018

Author Owner

Forgot to add nativeID to the supported props filter for View

onBlur?: Function,
onClick?: Function,
onClickCapture?: Function,
Expand Down Expand Up @@ -87,6 +88,7 @@ const ViewPropTypes = {
children: any,
hitSlop: EdgeInsetsPropType,
importantForAccessibility: oneOf(['auto', 'no', 'no-hide-descendants', 'yes']),
nativeID: string,
onBlur: func,
onClick: func,
onClickCapture: func,
Expand Down
Expand Up @@ -183,6 +183,12 @@ describe('modules/createDOMProps', () => {
expect(props['aria-hidden']).toEqual(true);
});

test('prop "nativeID" becomes "id"', () => {
const nativeID = 'Example.nativeID';
const props = createProps({ nativeID });
expect(props.id).toEqual(nativeID);
});

test('prop "testID" becomes "data-testid"', () => {
const testID = 'Example.testID';
const props = createProps({ testID });
Expand Down
6 changes: 6 additions & 0 deletions packages/react-native-web/src/modules/createDOMProps/index.js
Expand Up @@ -77,6 +77,7 @@ const createDOMProps = (component, props, styleResolver) => {
accessibilityLabel,
accessibilityLiveRegion,
importantForAccessibility,
nativeID,
placeholderTextColor,
pointerEvents,
style: providedStyle,
Expand Down Expand Up @@ -164,10 +165,15 @@ const createDOMProps = (component, props, styleResolver) => {
}

// OTHER
// Native element ID
if (nativeID && nativeID.constructor === String) {
domProps.id = nativeID;
}
// Link security and automation test ids
if (component === 'a' && domProps.target === '_blank') {
domProps.rel = `${domProps.rel || ''} noopener noreferrer`;
}
// Automated test IDs
if (testID && testID.constructor === String) {
domProps['data-testid'] = testID;
}
Expand Down
6 changes: 6 additions & 0 deletions packages/website/storybook/1-components/Text/TextScreen.js
Expand Up @@ -116,6 +116,12 @@ const TextScreen = () => (
]}
/>

<DocItem
name="nativeID"
typeInfo="?string"
description="Used to locate this view from any native DOM code, or to define accessibility relationships. This is rendered to the native 'id' DOM attribute"
/>

<DocItem
name="numberOfLines"
typeInfo="?number"
Expand Down
6 changes: 6 additions & 0 deletions packages/website/storybook/1-components/View/ViewScreen.js
Expand Up @@ -119,6 +119,12 @@ const ViewScreen = () => (
]}
/>

<DocItem
name="nativeID"
typeInfo="?string"
description="Used to locate this view from any native DOM code, or to define accessibility relationships. This is rendered to the native 'id' DOM attribute"
/>

<DocItem name="onBlur" typeInfo="?function" />
<DocItem name="onContextMenu" typeInfo="?function" />
<DocItem name="onFocus" typeInfo="?function" />
Expand Down

0 comments on commit bfaeae9

Please sign in to comment.