UNPKG

@fruits-chain/react-native-xiaoshu

Version:
248 lines (247 loc) • 8.91 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _isNil = _interopRequireDefault(require("lodash/isNil")); var _uniqBy = _interopRequireDefault(require("lodash/uniqBy")); var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _index = _interopRequireDefault(require("../button/index.js")); var _buttonBarConfirm = _interopRequireDefault(require("../button-bar/button-bar-confirm.js")); var _index2 = require("../helpers/index.js"); var _index3 = require("../hooks/index.js"); var _index4 = _interopRequireDefault(require("../locale/index.js")); var _index5 = _interopRequireDefault(require("../portal/index.js")); var _index6 = _interopRequireDefault(require("../space/index.js")); var _index7 = _interopRequireDefault(require("../theme/index.js")); var _index8 = _interopRequireDefault(require("../tree/index.js")); var _context = require("./context.js"); var _dropdownBadge = _interopRequireDefault(require("./dropdown-badge.js")); var _dropdownPopup = _interopRequireDefault(require("./dropdown-popup.js")); var _style = 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 DropdownSelectorMethod = ({ targetHeight, targetPageY, onConfirm, onCancel, defaultValue, options, duration, zIndex, closeOnPressOutside, onClosed, activeColor, beforeChecked, search, onSearch, cancellable, multiple, multipleMode, testID }) => { const locale = _index4.default.useLocale().DropdownSelector; const { theme } = (0, _context.useDropdownConfig)(); const [CV, STYLES] = _index7.default.useStyle({ varCreator: _style.varCreator, styleCreator: _style.styleCreator, theme }); const [CV_TREE] = _index7.default.useStyle({ varCreator: _index8.default.varCreator }); const [multipleValue, setMultipleValue] = (0, _react.useState)(multiple ? defaultValue || [] : []); const allOptions = (0, _react.useMemo)(() => { const findNode = op => { const ooo = []; op.forEach(o => { ooo.push(o); if (o.children?.length) { ooo.push(...findNode(o.children)); } }); return ooo; }; return findNode(options); }, [options]); const _activeColor = (0, _index2.getDefaultValue)(activeColor, CV.dropdown_active_color); const [visible, setVisible] = (0, _react.useState)(false); const treeOptions = (0, _react.useMemo)(() => { const convertOption = ops => { const nodes = []; ops.forEach(item => { const _opt = { label: item.label, value: item.value, children: item.children?.length ? convertOption(item.children) : [], render: (0, _isNil.default)(item.badge) ? undefined : p => { return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_index6.default, { direction: "horizontal", align: "center", style: STYLES.item_tree_item, children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, { style: [{ fontSize: CV_TREE.tree_item_text_font_size, color: CV_TREE.tree_item_text_color }, p.labelHighlight ? { color: p.activeColor } : null], numberOfLines: 1, children: p.label }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_dropdownBadge.default, { count: item.badge })] }); } }; nodes.push(_opt); }); return nodes; }; return convertOption(options); }, [CV_TREE.tree_item_text_color, CV_TREE.tree_item_text_font_size, STYLES.item_tree_item, options]); (0, _react.useEffect)(() => { setVisible(true); }, []); const findNodeByValue = (tree, value) => { for (const item of tree) { if (item.value === value) { return item; } if (item.children) { const _v = findNodeByValue(item.children, value); if (_v) { return _v; } } } return undefined; }; const onPressShade = (0, _react.useCallback)(() => { setVisible(false); _reactNative.Keyboard.dismiss(); onCancel?.(); }, [onCancel]); const onRequestClose = (0, _index3.usePersistFn)(() => { onPressShade(); return true; }); const onChangePersistFn = (0, _index3.usePersistFn)((v, _, event) => { if (multiple) { if (beforeChecked) { const returnVal = beforeChecked({ value: [], checked: event.checked, option: event.option }); if ((0, _index2.isPromise)(returnVal)) { returnVal.then(nv => { setMultipleValue(mv => (0, _uniqBy.default)( // eslint-disable-next-line max-nested-callbacks [...mv.filter(mvi => mvi !== event.option.value), ...nv], // eslint-disable-next-line max-nested-callbacks x => x)); }); } else { setMultipleValue(mv => (0, _uniqBy.default)([...mv.filter(mvi => mvi !== event.option.value), ...returnVal], x => x)); } } else { setMultipleValue(v); } } else { setVisible(false); _reactNative.Keyboard.dismiss(); const _v = v; const _o = findNodeByValue(options, _v); onConfirm?.(_v, _o ? [_o] : []); } }); const onConfirmMultiple = (0, _index3.usePersistFn)(() => { setVisible(false); _reactNative.Keyboard.dismiss(); onConfirm?.(multipleValue, multipleValue.map(item => { return findNodeByValue(options, item); })); }); return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_dropdownPopup.default, { testID: testID, targetHeight: targetHeight, targetPageY: targetPageY, closeOnPressOutside: closeOnPressOutside, duration: duration, zIndex: zIndex, onPressShade: onPressShade, visible: visible, onRequestClose: onRequestClose, onClosed: onClosed, onPressOverlay: onPressShade, children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_index8.default, { defaultExpandAll: true, activeColor: _activeColor, minHeight: false, search: search, options: treeOptions, onChange: onChangePersistFn, onSearch: onSearch, cancellable: cancellable, multiple: multiple, multipleMode: multipleMode, ...(multiple ? { value: multipleValue } : { defaultValue: defaultValue }) }), multiple ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_buttonBarConfirm.default, { safeAreaInsetBottom: false, cancel: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_index.default, { type: "link", text: allOptions.length !== multipleValue.length ? locale.allButtonText : locale.notAllButtonText, onPress: () => { if (allOptions.length !== multipleValue.length) { setMultipleValue(allOptions.map(i => i.value)); } else { setMultipleValue([]); } } }, "2"), /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.default, { type: "hazy", text: locale.cancelButtonText, onPress: onPressShade }, "1")], children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.default, { text: locale.confirmButtonText, onPress: onConfirmMultiple }) }) : null] }); }; const DropdownSelectorMethodMemo = /*#__PURE__*/(0, _react.memo)(DropdownSelectorMethod); var _default = opt => { return new Promise((resolve, reject) => { const key = _index5.default.add(/*#__PURE__*/(0, _jsxRuntime.jsx)(DropdownSelectorMethodMemo, { ...opt, onCancel: () => { opt.onCancel?.(); reject(new Error()); }, onConfirm: (v, d) => { opt.onConfirm?.(v, d); resolve({ value: v, data: d }); }, onClosed: () => { _index5.default.remove(key); } })); }); }; exports.default = _default; //# sourceMappingURL=dropdown-selector.js.map