@fruits-chain/react-native-xiaoshu
Version:
🌈 React Native UI library
74 lines (68 loc) • 2.56 kB
JavaScript
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
import isArray from 'lodash/isArray';
import isUndefined from 'lodash/isUndefined';
import React, { memo } from 'react';
import { Keyboard } from 'react-native';
import { varCreator as varCreatorButton } from '../button/style';
import { usePersistFn } from '../hooks';
import Locale from '../locale';
import Selector from '../selector';
import TextInputClear from '../text-input/text-input-clear';
import Theme from '../theme';
import FieldText from './field-text';
/**
* 输入框 选择输入
*/
const FieldSelector = _ref => {
let {
value,
options,
multiple,
onChange,
optionsLoading = false,
innerStyle,
editable = true,
clearable = false,
selectorTitle,
isLink = true,
...restProps
} = _ref;
const locale = Locale.useLocale().FieldSelector;
const TOKENS = Theme.useThemeTokens();
const CV_BUTTON = Theme.createVar(TOKENS, varCreatorButton);
const onPressCell = usePersistFn(() => {
Keyboard.dismiss();
if (editable) {
Selector({
title: selectorTitle || locale.selectorTitle,
multiple,
options,
value,
onChange
}).catch(() => {});
}
});
const hasValue = multiple ? isArray(value) && value.length > 0 : !isUndefined(value);
const value2text = hasValue ? (multiple ? value : [value]).map(o => {
const index = options.findIndex(ops => ops.value === o);
if (index >= 0) {
return options[index].label;
}
return null;
}).filter(Boolean).join('、') : undefined;
return /*#__PURE__*/React.createElement(FieldText, _extends({}, restProps, {
innerStyle: optionsLoading ? [innerStyle, {
opacity: CV_BUTTON.button_active_opacity
}] : innerStyle,
onPress: optionsLoading ? undefined : onPressCell,
value: value2text,
isLink: hasValue && clearable ? false : isLink,
valueExtra: hasValue && clearable ? /*#__PURE__*/React.createElement(React.Fragment, null, restProps.valueExtra, /*#__PURE__*/React.createElement(TextInputClear, {
onPress: () => {
onChange(multiple ? [] : undefined, multiple ? [] : undefined);
}
})) : restProps.valueExtra
}));
};
export default /*#__PURE__*/memo(FieldSelector);
//# sourceMappingURL=field-selector.js.map