@fruits-chain/react-native-xiaoshu
Version:
🌈 React Native UI library
134 lines (131 loc) • 5.35 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _iconsReactNative = require("@fruits-chain/icons-react-native");
var _isUndefined = _interopRequireDefault(require("lodash/isUndefined"));
var _noop = _interopRequireDefault(require("lodash/noop"));
var _react = _interopRequireWildcard(require("react"));
var _reactNative = require("react-native");
var _index = _interopRequireDefault(require("../button/index.js"));
var _index2 = require("../helpers/index.js");
var _index3 = require("../hooks/index.js");
var _index4 = _interopRequireDefault(require("../locale/index.js"));
var _index5 = _interopRequireDefault(require("../text-input/index.js"));
var _style = require("../text-input/style.js");
var _index6 = _interopRequireDefault(require("../theme/index.js"));
var _style2 = require("./style.js");
var _jsxRuntime = require("react/jsx-runtime");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
/**
* 搜索
*/const Search = /*#__PURE__*/(0, _react.forwardRef)(({
theme,
iconSize = 20,
iconColor,
onSearch,
showBack = false,
onPressBack,
autoSearch = false,
showSearchButton = true,
onSearchDebounceWait = 300,
searchText,
extra,
prefix,
suffix,
value,
defaultValue,
placeholder,
placeholderTextColor,
autoFocus,
onChangeText,
style,
...restProps
}, ref) => {
const locale = _index4.default.useLocale().Search;
const [CV, STYLES] = _index6.default.useStyle({
varCreator: _style2.varCreator,
styleCreator: _style2.styleCreator,
theme
});
const [CV_TEXT_INPUT] = _index6.default.useStyle({
varCreator: _style.varCreator
});
const onChangeTextPersistFn = (0, _index3.usePersistFn)(onChangeText || _noop.default);
const {
run: runOnSearch
} = (0, _index3.useDebounceFn)(onSearch || _noop.default, {
wait: onSearchDebounceWait,
leading: false,
trailing: true
});
/** 输入框内部的值,不维护状态,避免没必要的更新 */
const SearchText = (0, _react.useRef)(!(0, _isUndefined.default)(value) ? value : defaultValue);
placeholderTextColor = (0, _index2.getDefaultValue)(placeholderTextColor, CV_TEXT_INPUT.text_input_placeholder_text_color);
iconColor = (0, _index2.getDefaultValue)(iconColor, placeholderTextColor);
const onChange = (0, _react.useCallback)(v => {
SearchText.current = v;
if (autoSearch) {
runOnSearch(v);
}
}, [autoSearch, runOnSearch]);
const _onChangeText = (0, _react.useCallback)(v => {
SearchText.current = v;
onChangeTextPersistFn(v);
if (autoSearch) {
runOnSearch(v);
}
}, [autoSearch, onChangeTextPersistFn, runOnSearch]);
const onPress = (0, _react.useCallback)(() => {
runOnSearch(SearchText.current);
}, [runOnSearch]);
// TextInput value、defaultValue 对值进行了判断,影响 clearable
// 此处对两个属性的 undefined 情况进行过滤,useControllableValue 能正确识别是否受控
const textInputProps = {
...((0, _isUndefined.default)(value) ? {} : {
value
}),
...((0, _isUndefined.default)(defaultValue) ? {} : {
defaultValue
})
};
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
...restProps,
style: [STYLES.search, showBack ? STYLES.search_back : null, style],
children: [showBack ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_iconsReactNative.ArrowLeftOutline, {
onPress: onPressBack,
color: CV.search_back_icon_color,
size: 24,
style: STYLES.icon_back
}) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_index5.default, {
ref: ref,
...textInputProps,
clearable: true,
fixGroupStyle: STYLES.text_input_group,
style: STYLES.text_input,
placeholder: placeholder,
placeholderTextColor: placeholderTextColor,
prefix: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
children: [prefix, /*#__PURE__*/(0, _jsxRuntime.jsx)(_iconsReactNative.SearchOutline, {
color: iconColor,
size: iconSize
})]
}),
suffix: suffix,
onChange: onChange,
onChangeText: _onChangeText,
autoFocus: autoFocus
}), showSearchButton ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.default, {
text: searchText ?? locale.searchText,
type: "primary",
style: STYLES.search_btn,
size: "s",
onPress: onPress
}) : null, extra]
});
});
var _default = exports.default = /*#__PURE__*/(0, _react.memo)(Search);
//# sourceMappingURL=search.js.map
;