From fa0518d3d3734b397e60ae64a8ce0af06d56da28 Mon Sep 17 00:00:00 2001 From: Joshua Wiegmann Date: Tue, 13 Jul 2021 19:23:27 -0700 Subject: [PATCH] Remove defaultProps from SegmentedControlIOS (#31804) Summary: Issue https://github.com/facebook/react-native/issues/31604 . Remove `defaultProps` from `SegmentedControlIOS`. ## Changelog [JavaScript] [Changed] - Remove defaultProps from SegmentedControlIOS Pull Request resolved: https://github.com/facebook/react-native/pull/31804 Test Plan: Added tests for `SegmentedControlIOS` pass. Reviewed By: yungsters Differential Revision: D29653982 Pulled By: lunaleaps fbshipit-source-id: ed6e133cc3af629be6cd83be79e402ad1e68b29b --- .../SegmentedControlIOS.ios.js | 20 +++-- .../__tests__/SegmentedContolIOS-test.js | 55 ++++++++++++ .../SegmentedContolIOS-test.js.snap | 86 +++++++++++++++++++ 3 files changed, 155 insertions(+), 6 deletions(-) create mode 100644 Libraries/Components/SegmentedControlIOS/__tests__/SegmentedContolIOS-test.js create mode 100644 Libraries/Components/SegmentedControlIOS/__tests__/__snapshots__/SegmentedContolIOS-test.js.snap diff --git a/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.ios.js b/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.ios.js index a0b835238136ae..84770d7646b9e6 100644 --- a/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.ios.js +++ b/Libraries/Components/SegmentedControlIOS/SegmentedControlIOS.ios.js @@ -19,6 +19,8 @@ type SegmentedControlIOSProps = $ReadOnly<{| ...ViewProps, /** * The labels for the control's segment buttons, in order. + * + * The default value is an empty array. */ values?: $ReadOnlyArray, /** @@ -27,6 +29,8 @@ type SegmentedControlIOSProps = $ReadOnly<{| selectedIndex?: ?number, /** * If false the user won't be able to interact with the control. + * + * The default value is true. */ enabled?: boolean, /** @@ -76,11 +80,6 @@ type Props = $ReadOnly<{| */ class SegmentedControlIOS extends React.Component { - static defaultProps = { - values: [], - enabled: true, - }; - _onChange = (event: SyntheticEvent) => { this.props.onChange && this.props.onChange(event); this.props.onValueChange && @@ -88,12 +87,21 @@ class SegmentedControlIOS extends React.Component { }; render() { - const {forwardedRef, onValueChange, style, ...props} = this.props; + const { + enabled, + forwardedRef, + onValueChange, + style, + values, + ...props + } = this.props; return ( ); diff --git a/Libraries/Components/SegmentedControlIOS/__tests__/SegmentedContolIOS-test.js b/Libraries/Components/SegmentedControlIOS/__tests__/SegmentedContolIOS-test.js new file mode 100644 index 00000000000000..605864bf697b88 --- /dev/null +++ b/Libraries/Components/SegmentedControlIOS/__tests__/SegmentedContolIOS-test.js @@ -0,0 +1,55 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + * @emails oncall+react_native + */ + +'use strict'; + +const React = require('react'); +const ReactTestRenderer = require('react-test-renderer'); + +const SegmentedControlIOS = require('../SegmentedControlIOS.ios'); + +describe('SegmentedControlIOS', () => { + it('renders the segmented control', () => { + const component = ReactTestRenderer.create(); + expect(component).not.toBeNull(); + }); + it('renders the segmented control with enabled default value', () => { + const component = ReactTestRenderer.create(); + expect(component.toTree().rendered.props.enabled).toBe(true); + expect(component).toMatchSnapshot(); + }); + it('renders the segmented control with enabled', () => { + const component = ReactTestRenderer.create( + , + ); + expect(component.toTree().rendered.props.enabled).toBe(true); + expect(component).toMatchSnapshot(); + }); + it('renders the segmented control with enabled set to false', () => { + const component = ReactTestRenderer.create( + , + ); + expect(component.toTree().rendered.props.enabled).toBe(false); + expect(component).toMatchSnapshot(); + }); + it('renders the segmented control with values default value', () => { + const component = ReactTestRenderer.create(); + expect(component.toTree().rendered.props.values).toEqual([]); + expect(component).toMatchSnapshot(); + }); + it('renders the segmented control with values', () => { + const values = ['One', 'Two']; + const component = ReactTestRenderer.create( + , + ); + expect(component.toTree().rendered.props.values).toBe(values); + expect(component).toMatchSnapshot(); + }); +}); diff --git a/Libraries/Components/SegmentedControlIOS/__tests__/__snapshots__/SegmentedContolIOS-test.js.snap b/Libraries/Components/SegmentedControlIOS/__tests__/__snapshots__/SegmentedContolIOS-test.js.snap new file mode 100644 index 00000000000000..30195d27c7f857 --- /dev/null +++ b/Libraries/Components/SegmentedControlIOS/__tests__/__snapshots__/SegmentedContolIOS-test.js.snap @@ -0,0 +1,86 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`SegmentedControlIOS renders the segmented control with enabled 1`] = ` + +`; + +exports[`SegmentedControlIOS renders the segmented control with enabled default value 1`] = ` + +`; + +exports[`SegmentedControlIOS renders the segmented control with enabled set to false 1`] = ` + +`; + +exports[`SegmentedControlIOS renders the segmented control with values 1`] = ` + +`; + +exports[`SegmentedControlIOS renders the segmented control with values default value 1`] = ` + +`;