import omit from 'lodash/omit'; import pick from 'lodash/pick'; import React, { memo } from 'react'; import { Text, View } from 'react-native'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; import { useLocale } from '../../components/Locale/locale'; import PickerView from '../picker-view'; import type { PickerViewProps } from '../picker-view/interface'; import Popup from '../popup'; import Theme from '../theme'; import type { PickerProps } from './interface'; import { varCreator, styleCreator } from './style'; const PICKER_VIEW_PROPS_KEYS = [ 'value', 'defaultValue', 'columns', 'loading', 'itemHeight', 'visibleItemCount', 'onChange', ]; const Picker: React.FC = ({ visible, title, confirmButtonText, cancelButtonText, toolbarPosition = 'top', showToolbar = true, onCancel, onConfirm, headerTitleJSX: propsHeaderTitleJSX, popupComponent: propsPopup, ...restProps }) => { const locale = useLocale().Picker; const TOKENS = Theme.useThemeTokens(); const CV = Theme.createVar(TOKENS, varCreator); // @ts-ignore const STYLES = Theme.createStyle(CV, styleCreator); const insets = useSafeAreaInsets(); const headerTitleJSX = propsHeaderTitleJSX ? ( propsHeaderTitleJSX ) : ( {cancelButtonText ?? locale.cancelButtonText} } rightExtra={ {confirmButtonText ?? locale.confirmButtonText} } /> ); const pickerViewProps = pick( restProps, PICKER_VIEW_PROPS_KEYS ) as PickerViewProps; const popupProps = omit(restProps, PICKER_VIEW_PROPS_KEYS); const PopupComponent = propsPopup || Popup; return ( {showToolbar && toolbarPosition === 'top' ? headerTitleJSX : null} {showToolbar && toolbarPosition === 'bottom' ? headerTitleJSX : null} ); }; export default memo(Picker);