/**
* Copyright (c) Nicolas Gallagher.
* 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.
*
* @flow
*/
import applyNativeMethods from '../../modules/applyNativeMethods';
import { Component } from 'react';
import createElement from '../createElement';
import PickerItem from './PickerItem';
import PickerItemPropType from './PickerItemPropType';
import PickerStylePropTypes from './PickerStylePropTypes';
import StyleSheetPropType from '../../modules/StyleSheetPropType';
import StyleSheet, { type StyleObj } from '../StyleSheet';
import { arrayOf, bool, func, number, oneOfType, string } from 'prop-types';
import ViewPropTypes, { type ViewProps } from '../ViewPropTypes';
const pickerStyleType = StyleSheetPropType(PickerStylePropTypes);
type Props = ViewProps & {
children?: PickerItem | Array<typeof PickerItem>,
enabled?: boolean,
onValueChange?: Function,
selectedValue?: number | string,
style?: StyleObj,
testID?: string,
/* compat */
itemStyle?: StyleObj,
mode?: string,
prompt?: string
};
class Picker extends Component<Props> {
static propTypes = {
...ViewPropTypes,
children: oneOfType([PickerItemPropType, arrayOf(PickerItemPropType)]),
enabled: bool,
onValueChange: func,
selectedValue: oneOfType([number, string]),
style: pickerStyleType,
testID: string
};
static Item = PickerItem;
render() {
const {
children,
enabled,
selectedValue,
style,
testID,
/* eslint-disable */
itemStyle,
mode,
prompt,
onValueChange,
/* eslint-enable */
...otherProps
} = this.props;
return createElement('select', {
children,
disabled: enabled === false ? true : undefined,
onChange: this._handleChange,
style: [styles.initial, style],
testID,
value: selectedValue,
...otherProps
});
}
_handleChange = (e: Object) => {
const { onValueChange } = this.props;
const { selectedIndex, value } = e.target;
if (onValueChange) {
onValueChange(value, selectedIndex);
}
};
}
const styles = StyleSheet.create({
initial: {
fontFamily: 'System',
fontSize: 'inherit',
margin: 0
}
});
export default applyNativeMethods(Picker);