All files / react-native-web/src/exports/Picker index.js

100% Statements 13/13
75% Branches 3/4
100% Functions 2/2
100% Lines 13/13

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94                                                                        1x                           5x   5x     1x 1x 1x         5x                   5x   5x   5x   5x       1x   1x                  
/**
 * 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 type { PlatformMethods } from '../../types';
import type { ViewProps } from '../View';
 
import * as React from 'react';
import createElement from '../createElement';
import useMergeRefs from '../../modules/useMergeRefs';
import usePlatformMethods from '../../modules/usePlatformMethods';
import PickerItem from './PickerItem';
import StyleSheet from '../StyleSheet';
 
type PickerProps = {
  ...ViewProps,
  children?: typeof PickerItem | Array<typeof PickerItem>,
  enabled?: boolean,
  onValueChange?: (number | string, number) => void,
  selectedValue?: number | string,
  style?: any,
  /* compat */
  itemStyle?: any,
  mode?: string,
  prompt?: string
};
 
const Picker: React.AbstractComponent<
  PickerProps,
  HTMLElement & PlatformMethods
> = React.forwardRef((props, forwardedRef) => {
  const {
    children,
    enabled,
    onValueChange,
    selectedValue,
    style,
    testID,
    /* eslint-disable */
    itemStyle,
    mode,
    prompt,
    /* eslint-enable */
    ...other
  } = props;
 
  const hostRef = React.useRef(null);
 
  function handleChange(e: Object) {
    const { selectedIndex, value } = e.target;
    Eif (onValueChange) {
      onValueChange(value, selectedIndex);
    }
  }
 
  // $FlowFixMe
  const supportedProps: any = {
    children,
    disabled: enabled === false ? true : undefined,
    onChange: handleChange,
    style: [styles.initial, style],
    testID,
    value: selectedValue,
    ...other
  };
 
  const platformMethodsRef = usePlatformMethods(supportedProps);
 
  const setRef = useMergeRefs(hostRef, platformMethodsRef, forwardedRef);
 
  supportedProps.ref = setRef;
 
  return createElement('select', supportedProps);
});
 
// $FlowFixMe
Picker.Item = PickerItem;
 
const styles = StyleSheet.create({
  initial: {
    fontFamily: 'System',
    fontSize: 'inherit',
    margin: 0
  }
});
 
export default Picker;