Skip to content

Commit 47dc31d

Browse files
yungstersfacebook-github-bot
authored andcommitted
RN: Nullable Image, Text, & View Props
Summary: Changes the Flow prop types for `Image`, `Text`, and `View` to be nullable and optional. This makes these components easier to compose. Reviewed By: sahrens Differential Revision: D9494285 fbshipit-source-id: c3f17147f063b31217b239a3abc085d1850f8df9
1 parent 8dc209a commit 47dc31d

File tree

4 files changed

+50
-51
lines changed

4 files changed

+50
-51
lines changed

Libraries/Components/View/ViewAccessibility.js

+1-5
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,7 @@ export type AccessibilityRole =
5252
| 'header'
5353
| 'summary';
5454

55-
export type AccessibilityState = 'selected' | 'disabled';
56-
57-
export type AccessibilityStates =
58-
| AccessibilityState
59-
| $ReadOnlyArray<AccessibilityState>;
55+
export type AccessibilityStates = $ReadOnlyArray<'disabled' | 'selected'>;
6056

6157
module.exports = {
6258
AccessibilityTraits: [

Libraries/Components/View/ViewPropTypes.js

+31-28
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,26 @@
1010

1111
'use strict';
1212

13-
const React = require('React');
14-
1513
import type {Layout, LayoutEvent} from 'CoreEventTypes';
1614
import type {EdgeInsetsProp} from 'EdgeInsetsPropType';
15+
import type React from 'React';
1716
import type {ViewStyleProp} from 'StyleSheet';
1817
import type {TVViewProps} from 'TVViewPropTypes';
1918
import type {
2019
AccessibilityComponentType,
2120
AccessibilityTrait,
2221
AccessibilityRole,
23-
AccessibilityState,
22+
AccessibilityStates,
2423
} from 'ViewAccessibility';
2524

2625
export type ViewLayout = Layout;
2726
export type ViewLayoutEvent = LayoutEvent;
2827

2928
type DirectEventProps = $ReadOnly<{|
30-
onAccessibilityAction?: Function,
31-
onAccessibilityTap?: Function,
29+
onAccessibilityAction?: ?Function,
30+
onAccessibilityTap?: ?Function,
3231
onLayout?: ?(event: LayoutEvent) => void,
33-
onMagicTap?: Function,
32+
onMagicTap?: ?Function,
3433
|}>;
3534

3635
type TouchEventProps = $ReadOnly<{|
@@ -84,33 +83,37 @@ export type ViewProps = $ReadOnly<{|
8483
// so we must include TVViewProps
8584
...TVViewProps,
8685

87-
accessible?: boolean,
88-
accessibilityLabel?:
86+
accessible?: ?boolean,
87+
accessibilityLabel?: ?(
8988
| null
9089
| React$PropType$Primitive<any>
9190
| Stringish
92-
| Array<any>
93-
| any,
94-
accessibilityHint?: Stringish,
95-
accessibilityActions?: Array<string>,
96-
accessibilityComponentType?: AccessibilityComponentType,
97-
accessibilityLiveRegion?: 'none' | 'polite' | 'assertive',
98-
importantForAccessibility?: 'auto' | 'yes' | 'no' | 'no-hide-descendants',
99-
accessibilityIgnoresInvertColors?: boolean,
100-
accessibilityTraits?: AccessibilityTrait | Array<AccessibilityTrait>,
101-
accessibilityRole?: AccessibilityRole,
102-
accessibilityStates?: Array<AccessibilityState>,
103-
accessibilityViewIsModal?: boolean,
104-
accessibilityElementsHidden?: boolean,
91+
| $ReadOnlyArray<any>
92+
| any
93+
),
94+
accessibilityHint?: ?Stringish,
95+
accessibilityActions?: ?$ReadOnlyArray<string>,
96+
accessibilityComponentType?: ?AccessibilityComponentType,
97+
accessibilityLiveRegion?: ?('none' | 'polite' | 'assertive'),
98+
importantForAccessibility?: ?('auto' | 'yes' | 'no' | 'no-hide-descendants'),
99+
accessibilityIgnoresInvertColors?: ?boolean,
100+
accessibilityTraits?: ?(
101+
| AccessibilityTrait
102+
| $ReadOnlyArray<AccessibilityTrait>
103+
),
104+
accessibilityRole?: ?AccessibilityRole,
105+
accessibilityStates?: ?AccessibilityStates,
106+
accessibilityViewIsModal?: ?boolean,
107+
accessibilityElementsHidden?: ?boolean,
105108
children?: ?React.Node,
106109
testID?: ?string,
107-
nativeID?: string,
110+
nativeID?: ?string,
108111
hitSlop?: ?EdgeInsetsProp,
109-
pointerEvents?: null | 'box-none' | 'none' | 'box-only' | 'auto',
112+
pointerEvents?: ?('auto' | 'box-none' | 'box-only' | 'none'),
110113
style?: ?ViewStyleProp,
111-
removeClippedSubviews?: boolean,
112-
renderToHardwareTextureAndroid?: boolean,
113-
shouldRasterizeIOS?: boolean,
114-
collapsable?: boolean,
115-
needsOffscreenAlphaCompositing?: boolean,
114+
removeClippedSubviews?: ?boolean,
115+
renderToHardwareTextureAndroid?: ?boolean,
116+
shouldRasterizeIOS?: ?boolean,
117+
collapsable?: ?boolean,
118+
needsOffscreenAlphaCompositing?: ?boolean,
116119
|}>;

Libraries/Image/ImageProps.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export type ImageProps = {|
5454
...$Diff<ViewProps, $ReadOnly<{|style: ?ViewStyleProp|}>>,
5555
...IOSImageProps,
5656
...AndroidImageProps,
57-
blurRadius?: number,
57+
blurRadius?: ?number,
5858
capInsets?: ?EdgeInsetsProp,
5959

6060
onError?: ?(event: SyntheticEvent<$ReadOnly<{||}>>) => void,
@@ -63,11 +63,11 @@ export type ImageProps = {|
6363
onLoadStart?: ?() => void,
6464
resizeMethod?: ?('auto' | 'resize' | 'scale'),
6565
source?: ?ImageSource,
66-
style?: ImageStyleProp,
66+
style?: ?ImageStyleProp,
6767

6868
// Can be set via props or style, for now
69-
height?: DimensionValue,
70-
width?: DimensionValue,
69+
height?: ?DimensionValue,
70+
width?: ?DimensionValue,
7171
resizeMode?: ?('cover' | 'contain' | 'stretch' | 'repeat' | 'center'),
7272

7373
src?: empty,

Libraries/Text/TextProps.js

+14-14
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@
1010

1111
'use strict';
1212

13-
import type {AccessibilityRole} from 'ViewAccessibility';
14-
import type {AccessibilityState} from 'ViewAccessibility';
15-
import type {AccessibilityTrait} from 'ViewAccessibility';
16-
17-
import type {Node} from 'react';
18-
1913
import type {LayoutEvent, PressEvent} from 'CoreEventTypes';
14+
import type React from 'React';
2015
import type {DangerouslyImpreciseStyleProp} from 'StyleSheet';
16+
import type {
17+
AccessibilityRole,
18+
AccessibilityStates,
19+
AccessibilityTrait,
20+
} from 'ViewAccessibility';
2121

2222
export type PressRetentionOffset = $ReadOnly<{|
2323
top: number,
@@ -31,13 +31,13 @@ export type PressRetentionOffset = $ReadOnly<{|
3131
*/
3232
export type TextProps = $ReadOnly<{
3333
accessible?: ?boolean,
34-
accessibilityRole?: AccessibilityRole,
35-
accessibilityStates?: Array<AccessibilityState>,
36-
accessibilityTraits?: AccessibilityTrait | Array<AccessibilityTrait>,
34+
accessibilityRole?: ?AccessibilityRole,
35+
accessibilityStates?: ?AccessibilityStates,
36+
accessibilityTraits?: ?(AccessibilityTrait | Array<AccessibilityTrait>),
3737
allowFontScaling?: ?boolean,
38-
children?: Node,
39-
ellipsizeMode?: 'clip' | 'head' | 'middle' | 'tail',
40-
nativeID?: string,
38+
children?: ?React.Node,
39+
ellipsizeMode?: ?('clip' | 'head' | 'middle' | 'tail'),
40+
nativeID?: ?string,
4141
numberOfLines?: ?number,
4242
onLayout?: ?(event: LayoutEvent) => mixed,
4343
onLongPress?: ?(event: PressEvent) => mixed,
@@ -51,12 +51,12 @@ export type TextProps = $ReadOnly<{
5151
pressRetentionOffset?: ?PressRetentionOffset,
5252
selectable?: ?boolean,
5353
style?: ?DangerouslyImpreciseStyleProp,
54-
testID?: string,
54+
testID?: ?string,
5555

5656
// Android Only
5757
disabled?: ?boolean,
5858
selectionColor?: ?string,
59-
textBreakStrategy?: 'balanced' | 'highQuality' | 'simple',
59+
textBreakStrategy?: ?('balanced' | 'highQuality' | 'simple'),
6060

6161
// iOS Only
6262
adjustsFontSizeToFit?: ?boolean,

0 commit comments

Comments
 (0)