it('should support the arrayOf propType', function() { typeCheck(Props.arrayOf(Props.number), [1, 2, 3]); typeCheck(Props.arrayOf(Props.string), ['a', 'b', 'c']); typeCheck(Props.arrayOf(Props.oneOf(['a', 'b'])), ['a', 'b']); // No warnings should have been logged. expect(console.warn.mock.calls.length).toBe(0); });
it("should warn for missing required values", function() { typeCheckFail( PropTypes.arrayOf(PropTypes.number).isRequired, null, requiredMessage ); typeCheckFail( PropTypes.arrayOf(PropTypes.number).isRequired, undefined, requiredMessage ); });
it('should support arrayOf with complex types', function() { typeCheckPass( PropTypes.arrayOf(PropTypes.shape({a: PropTypes.number.isRequired})), [{a: 1}, {a: 2}] ); function Thing() {} typeCheckPass( PropTypes.arrayOf(PropTypes.instanceOf(Thing)), [new Thing(), new Thing()] ); });
it('should warn when passed something other than an array', function() { typeCheck(Props.arrayOf(Props.number), {'0': 'maybe-array', length: 1}); typeCheck(Props.arrayOf(Props.number), 123); typeCheck(Props.arrayOf(Props.number), 'string'); expect(console.warn.mock.calls.length).toBe(3); var message = 'Warning: Invalid prop `testProp` supplied to ' + '`testComponent`, expected an array.'; expect(console.warn.mock.calls[0][0]).toBe(message); expect(console.warn.mock.calls[1][0]).toBe(message); expect(console.warn.mock.calls[2][0]).toBe(message); });
it('should support arrayOf with complex types', function() { typeCheck(Props.arrayOf(Props.shape({ a: Props.number.isRequired })), [{a: 1}, {a: 2}]); function Thing() {} typeCheck( Props.arrayOf(Props.instanceOf(Thing)), [new Thing(), new Thing()] ); // No warnings should have been logged. expect(console.warn.mock.calls.length).toBe(0); });
it('should warn with invalid items in the array', function() { typeCheckFail( PropTypes.arrayOf(PropTypes.number), [1, 2, 'b'], 'Invalid prop `2` of type `string` supplied to `testComponent`, ' + 'expected `number`.' ); });
it('should warn with invalid items in the array', function() { typeCheck(Props.arrayOf(Props.number), [1, 2, 'b']); expect(console.warn.mock.calls.length).toBe(1); expect(console.warn.mock.calls[0][0]).toBe( 'Warning: Invalid prop `2` of type `string` supplied to ' + '`testComponent`, expected `number`.' ); });
it('should warn when passed something other than an array', function() { typeCheckFail( PropTypes.arrayOf(PropTypes.number), {'0': 'maybe-array', length: 1}, 'Invalid prop `testProp` of type `object` supplied to `testComponent`, ' + 'expected an array.' ); typeCheckFail( PropTypes.arrayOf(PropTypes.number), 123, 'Invalid prop `testProp` of type `number` supplied to `testComponent`, ' + 'expected an array.' ); typeCheckFail( PropTypes.arrayOf(PropTypes.number), 'string', 'Invalid prop `testProp` of type `string` supplied to `testComponent`, ' + 'expected an array.' ); });
it('should warn with invalid complex types', function() { function Thing() {} var name = Thing.name || '<<anonymous>>'; typeCheckFail( PropTypes.arrayOf(PropTypes.instanceOf(Thing)), [new Thing(), 'xyz'], 'Invalid prop `1` supplied to `testComponent`, expected instance of `' + name + '`.' ); });
it('should warn with invalid complex types', function() { function Thing() {} var name = Thing.name || '<<anonymous>>'; typeCheck( Props.arrayOf(Props.instanceOf(Thing)), [new Thing(), 'xyz'] ); expect(console.warn.mock.calls.length).toBe(1); expect(console.warn.mock.calls[0][0]).toBe( 'Warning: Invalid prop `1` supplied to ' + '`testComponent`, expected instance of `' + name + '`.' ); });
* LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * * @providesModule TransformPropTypes * @flow */ 'use strict'; var ReactPropTypes = require('ReactPropTypes'); var TransformPropTypes = { transform: ReactPropTypes.arrayOf( ReactPropTypes.oneOfType([ ReactPropTypes.shape({rotate: ReactPropTypes.string}), ReactPropTypes.shape({scaleX: ReactPropTypes.number}), ReactPropTypes.shape({scaleY: ReactPropTypes.number}), ReactPropTypes.shape({translateX: ReactPropTypes.number}), ReactPropTypes.shape({translateY: ReactPropTypes.number}) ]) ), transformMatrix: ReactPropTypes.arrayOf(ReactPropTypes.number), // DEPRECATED rotation: ReactPropTypes.number, scaleX: ReactPropTypes.number, scaleY: ReactPropTypes.number, translateX: ReactPropTypes.number, translateY: ReactPropTypes.number, }; module.exports = TransformPropTypes;
* selectedIndex={this.state.selectedIndex} * onChange={(event) => { * this.setState({selectedIndex: event.nativeEvent.selectedSegmentIndex}); * }} * /> * ```` */ var SegmentedControlIOS = React.createClass({ mixins: [NativeMethodsMixin], propTypes: { ...View.propTypes, /** * The labels for the control's segment buttons, in order. */ values: PropTypes.arrayOf(PropTypes.string), /** * The index in `props.values` of the segment to be (pre)selected. */ selectedIndex: PropTypes.number, /** * Callback that is called when the user taps a segment; * passes the segment's value as an argument */ onValueChange: PropTypes.func, /** * Callback that is called when the user taps a segment; * passes the event as an argument
*/ importantForAccessibility: PropTypes.oneOf([ 'auto', 'yes', 'no', 'no-hide-descendants', ]), /** * Provides additional traits to screen reader. By default no traits are * provided unless specified otherwise in element * @platform ios */ accessibilityTraits: PropTypes.oneOfType([ PropTypes.oneOf(AccessibilityTraits), PropTypes.arrayOf(PropTypes.oneOf(AccessibilityTraits)), ]), /** * Enables Dran'n'Drop Support for certain types of PboardType * */ draggedTypes: PropTypes.arrayOf( PropTypes.oneOf([ 'NSFilenamesPboardType', 'NSColorPboardType' ]) ), /** * When `accessible` is true, the system will try to invoke this function * when the user performs accessibility tap gesture.
/** * Warning: Some of these properties may not be supported in all releases. */ var ViewStylePropTypes = merge( LayoutPropTypes, { backgroundColor: ReactPropTypes.string, borderColor: ReactPropTypes.string, borderTopColor: ReactPropTypes.string, borderRightColor: ReactPropTypes.string, borderBottomColor: ReactPropTypes.string, borderLeftColor: ReactPropTypes.string, borderRadius: ReactPropTypes.number, opacity: ReactPropTypes.number, overflow: ReactPropTypes.oneOf(['visible', 'hidden']), shadowColor: ReactPropTypes.string, shadowOffset: ReactPropTypes.shape( {h: ReactPropTypes.number, w: ReactPropTypes.number} ), shadowOpacity: ReactPropTypes.number, shadowRadius: ReactPropTypes.number, transformMatrix: ReactPropTypes.arrayOf(ReactPropTypes.number), rotation: ReactPropTypes.number, scaleX: ReactPropTypes.number, scaleY: ReactPropTypes.number, translateX: ReactPropTypes.number, translateY: ReactPropTypes.number, }); module.exports = ViewStylePropTypes;
* could be an http address, a local file path, or a static image * resource (which should be wrapped in the `require('./path/to/image.png')` function). * This prop can also contain several remote `uri`, specified together with * their width and height. The native side will then choose the best `uri` to display * based on the measured size of the image container. */ source: PropTypes.oneOfType([ PropTypes.shape({ uri: PropTypes.string, }), // Opaque type returned by require('./image.jpg') PropTypes.number, // Multiple sources PropTypes.arrayOf( PropTypes.shape({ uri: PropTypes.string, width: PropTypes.number, height: PropTypes.number, })) ]), /** * similarly to `source`, this property represents the resource used to render * the loading indicator for the image, displayed until image is ready to be * displayed, typically after when it got downloaded from network. */ loadingIndicatorSource: PropTypes.oneOfType([ PropTypes.shape({ uri: PropTypes.string, }), // Opaque type returned by require('./image.jpg') PropTypes.number, ]),
*/ importantForAccessibility: PropTypes.oneOf([ 'auto', 'yes', 'no', 'no-hide-descendants', ]), /** * Provides additional traits to screen reader. By default no traits are * provided unless specified otherwise in element * @platform ios */ accessibilityTraits: PropTypes.oneOfType([ PropTypes.oneOf(AccessibilityTraits), PropTypes.arrayOf(PropTypes.oneOf(AccessibilityTraits)), ]), /** * When `accessible` is true, the system will try to invoke this function * when the user performs accessibility tap gesture. */ onAcccessibilityTap: PropTypes.func, /** * When `accessible` is true, the system will invoke this function when the * user performs the magic tap gesture. */ onMagicTap: PropTypes.func, /**
it("should be implicitly optional and not warn without values", function() { typeCheckPass(PropTypes.arrayOf(PropTypes.number), null); typeCheckPass(PropTypes.arrayOf(PropTypes.number), undefined); });
it('should not warn when passing an empty array', function() { typeCheckPass(PropTypes.arrayOf(PropTypes.number), []); });
}); /** * Shape of the return value of the `getPhotos` function. */ var getPhotosReturnChecker = createStrictShapeTypeChecker({ edges: ReactPropTypes.arrayOf(createStrictShapeTypeChecker({ node: createStrictShapeTypeChecker({ type: ReactPropTypes.string.isRequired, group_name: ReactPropTypes.string.isRequired, image: createStrictShapeTypeChecker({ uri: ReactPropTypes.string.isRequired, height: ReactPropTypes.number.isRequired, width: ReactPropTypes.number.isRequired, isStored: ReactPropTypes.bool, }).isRequired, timestamp: ReactPropTypes.number.isRequired, location: createStrictShapeTypeChecker({ latitude: ReactPropTypes.number, longitude: ReactPropTypes.number, altitude: ReactPropTypes.number, heading: ReactPropTypes.number, speed: ReactPropTypes.number, }), }).isRequired, })).isRequired, page_info: createStrictShapeTypeChecker({ has_next_page: ReactPropTypes.bool.isRequired, start_cursor: ReactPropTypes.string, end_cursor: ReactPropTypes.string, }).isRequired, });
*/ var EditorStylePropTypes = { ...LayoutPropTypes, backgroundColor: ReactPropTypes.string, borderColor: ReactPropTypes.string, borderTopColor: ReactPropTypes.string, borderRightColor: ReactPropTypes.string, borderBottomColor: ReactPropTypes.string, borderLeftColor: ReactPropTypes.string, borderRadius: ReactPropTypes.number, opacity: ReactPropTypes.number, overflow: ReactPropTypes.oneOf(['visible', 'hidden']), shadowColor: ReactPropTypes.string, shadowOffset: ReactPropTypes.shape( {h: ReactPropTypes.number, w: ReactPropTypes.number} ), shadowOpacity: ReactPropTypes.number, shadowRadius: ReactPropTypes.number, transform: ReactPropTypes.arrayOf(ReactPropTypes.object), transformMatrix: ReactPropTypes.arrayOf(ReactPropTypes.number), // DEPRECATED rotation: ReactPropTypes.number, scaleX: ReactPropTypes.number, scaleY: ReactPropTypes.number, translateX: ReactPropTypes.number, translateY: ReactPropTypes.number, }; module.exports = EditorStylePropTypes;
it('should support the arrayOf propTypes', function() { typeCheckPass(PropTypes.arrayOf(PropTypes.number), [1, 2, 3]); typeCheckPass(PropTypes.arrayOf(PropTypes.string), ['a', 'b', 'c']); typeCheckPass(PropTypes.arrayOf(PropTypes.oneOf(['a', 'b'])), ['a', 'b']); });
/** * Sets possible actions on the toolbar as part of the action menu. These are displayed as icons * or text on the right side of the widget. If they don't fit they are placed in an 'overflow' * menu. * * This property takes an array of objects, where each object has the following keys: * * * `title`: **required**, the title of this action * * `icon`: the icon for this action, e.g. `require('image!some_icon')` * * `show`: when to show this action as an icon or hide it in the overflow menu: `always`, * `ifRoom` or `never` * * `showWithText`: boolean, whether to show text alongside the icon or not */ actions: ReactPropTypes.arrayOf(ReactPropTypes.shape({ title: ReactPropTypes.string.isRequired, icon: optionalImageSource, show: ReactPropTypes.oneOf(['always', 'ifRoom', 'never']), showWithText: ReactPropTypes.bool })), /** * Sets the toolbar logo. */ logo: optionalImageSource, /** * Sets the navigation icon. */ navIcon: optionalImageSource, /** * Callback that is called when an action is selected. The only argument that is passed to the * callback is the position of the action in the actions array. */ onActionSelected: ReactPropTypes.func,
* Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * * @providesModule TransformPropTypes * @flow */ 'use strict'; var ReactPropTypes = require('ReactPropTypes'); var deprecatedPropType = require('deprecatedPropType'); var ArrayOfNumberPropType = ReactPropTypes.arrayOf(ReactPropTypes.number); var TransformMatrixPropType = function( props : Object, propName : string, componentName : string ) : ?Error { if (props.transform && props.transformMatrix) { return new Error( 'transformMatrix and transform styles cannot be used on the same ' + 'component' ); } return ArrayOfNumberPropType(props, propName, componentName); };