UNPKG

@flatbiz/antd

Version:
270 lines (264 loc) 11 kB
/*! @flatjs/forge MIT @flatbiz/antd */ import { classNames } from '@dimjs/utils/class-names/class-names'; import _DownOutlined from '@ant-design/icons/es/icons/DownOutlined.js'; import _UpOutlined from '@ant-design/icons/es/icons/UpOutlined.js'; import { b as _objectSpread2, a as _slicedToArray, c as _toConsumableArray } from './_rollupPluginBabelHelpers-BYm17lo8.js'; import { hooks } from '@wove/react/hooks'; import { forwardRef, useMemo, Children, useImperativeHandle } from 'react'; import { isFragment } from 'react-is'; import { Form } from 'antd'; import { B as ButtonWrapper } from './button-wrapper-l9FUsrWl.js'; import { fbaHooks } from './fba-hooks/index.js'; import { FormGrid } from './form-grid/index.js'; import { F as FormWrapper } from './form-wrapper-DSnBmyFu.js'; import { preDefinedClassName } from './pre-defined-class-name/index.js'; import { Model } from '@dimjs/model-react'; import { jsx, jsxs } from 'react/jsx-runtime'; var defaultState = { queryCondition: {}, isInit: true, openFold: false }; var SearchFormModel = { actions: { updateFilterCondition: function updateFilterCondition(params) { return function (state) { state.queryCondition = _objectSpread2(_objectSpread2({}, state.queryCondition), params); }; }, resetFilterCondition: function resetFilterCondition(params) { return function (state) { state.queryCondition = _objectSpread2(_objectSpread2({}, defaultState.queryCondition), params); }; }, updateInitStatus: function updateInitStatus() { return function (state) { state.isInit = false; }; }, onChangeOpenFold: function onChangeOpenFold(boo) { return function (state) { state.openFold = boo; }; } }, state: defaultState }; var searchFormModels = {}; /** * ``` * 使用方式 * const [state, actions] = selectorWrapperModel('key值').useStore(); * ``` */ var searchFormModel = function searchFormModel(key) { if (!searchFormModels[key]) { searchFormModels[key] = Model(SearchFormModel); } return searchFormModels[key]; }; /** * 搜索表单 * *``` * 1. 用法1 * -- 默认网格布局 规则:{ xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 } * <SearchForm> * <Form.Item name="field1" label="条件1">xxx</Form.Item> * </SearchForm> * * -- 自定义网格布局 使用 FormCol组件包装 Form.Item * <SearchForm> * <FormCol span={12}><Form.Item name="field1" label="条件1">xxx</Form.Item></FormCol> * </SearchForm> * * -- children 可为 function * <SearchForm> * {(form) => { * return <Form.Item name="field1" label="条件1">xxx</Form.Item> * }} * </SearchForm> * * 2. 用户2(自定义布局) * SearchForm设置 isPure = true,FormItem无布局规则 * 3. SearchForm中内置了 Form 标签,当children为函数时,可获取form实例 * 4. 默认布局下,可通过设置 searchOperate 设置操作按钮 * 5. SearchForm 子节点包含 hidden = true 会被忽略 * 6. 如果想隐藏【查询、重置】按钮中的某一个,可设置 queryButtonProps.hidden、resetButtonProps.hidden * 7. 通过设置 defaultResetButtonTriggerRequest,可在右侧按钮区域新增自定义按钮 * 8. 可设置 cacheSwitch 来控制是否缓存查询数据(一般一级页面可缓存,二级、三级等不能缓存), * 缓存数据存储在内存中,react路由跳转可正常读取缓存,浏览器刷新后缓存丢失 *``` */ var SearchForm = /*#__PURE__*/forwardRef(function (props, ref) { var searchFormId = hooks.useId(undefined, 'search-form-key'); var modelKey = useMemo(function () { return props.cacheSwitch === false ? searchFormId : location.pathname; }, [searchFormId, props.cacheSwitch]); var _searchFormModel$useS = searchFormModel(modelKey).useStore(), _searchFormModel$useS2 = _slicedToArray(_searchFormModel$useS, 2), state = _searchFormModel$useS2[0], actions = _searchFormModel$useS2[1]; var _Form$useForm = Form.useForm(props.form), _Form$useForm2 = _slicedToArray(_Form$useForm, 1), form = _Form$useForm2[0]; var queryButtonProps = props.queryButtonProps, resetButtonProps = props.resetButtonProps, searchOperate = props.searchOperate, formClassName = props.formClassName, rightOperateAreaAppendType = props.rightOperateAreaAppendType, onQuery = props.onQuery, onReset = props.onReset, initRequest = props.initRequest, onFormFinish = props.onFormFinish, defaultResetButtonTriggerRequest = props.defaultResetButtonTriggerRequest; var children = typeof props.children === 'function' ? props.children(form) : props.children; var rightOperateAreaAppendTypeFt = rightOperateAreaAppendType || 'cover'; var childrens = useMemo(function () { if (isFragment(children)) { return Children.toArray(children.props.children); } else { return Children.toArray(children); } }, [children]); var onInnerQuery = function onInnerQuery(values) { Object.keys(values).forEach(function (key) { if (key.startsWith('__#invalid_date_')) { delete values[key]; } }); void actions.updateFilterCondition(values); void (onQuery === null || onQuery === void 0 ? void 0 : onQuery(values || {})); }; var onInnerReset = hooks.useCallbackRef(function () { return new Promise(function ($return, $error) { return Promise.resolve(actions.resetFilterCondition()).then(function ($await_1) { try { setTimeout(function () { form.resetFields(); }, 200); onReset === null || onReset === void 0 || onReset(); if (defaultResetButtonTriggerRequest === false) { return $return(); } void onInnerQuery({}); return $return(); } catch ($boundEx) { return $error($boundEx); } }, $error); }); }); var onInnerFormFinish = function onInnerFormFinish(values) { if (onFormFinish) { onFormFinish(values); return; } void onInnerQuery(values); }; var formRowChildren = useMemo(function () { var _props$foldKeys; var defaultRightList = [!(queryButtonProps !== null && queryButtonProps !== void 0 && queryButtonProps.hidden) ? /*#__PURE__*/jsx(ButtonWrapper, _objectSpread2(_objectSpread2({ type: "primary", htmlType: 'submit', loadingPosition: "center" }, queryButtonProps), {}, { children: (queryButtonProps === null || queryButtonProps === void 0 ? void 0 : queryButtonProps.text) || '查询' }), "1") : null, !(resetButtonProps !== null && resetButtonProps !== void 0 && resetButtonProps.hidden) ? /*#__PURE__*/jsx(ButtonWrapper, _objectSpread2(_objectSpread2({ onClick: onInnerReset }, resetButtonProps), {}, { children: (resetButtonProps === null || resetButtonProps === void 0 ? void 0 : resetButtonProps.text) || '重置' }), "2") : null].filter(Boolean); var customFormOperateCol = searchOperate === null || searchOperate === void 0 ? void 0 : searchOperate(form); var customRightList = customFormOperateCol === null || customFormOperateCol === void 0 ? void 0 : customFormOperateCol.rightList; var leftList = (customFormOperateCol === null || customFormOperateCol === void 0 ? void 0 : customFormOperateCol.leftList) || []; var rightList = defaultRightList; if (customRightList) { if (rightOperateAreaAppendTypeFt === 'afterAppend') { rightList = [].concat(_toConsumableArray(defaultRightList), _toConsumableArray(customRightList)); } else if (rightOperateAreaAppendTypeFt === 'beforeAppend') { rightList = [].concat(_toConsumableArray(customRightList), _toConsumableArray(defaultRightList)); } else { rightList = customRightList; } } if ((_props$foldKeys = props.foldKeys) !== null && _props$foldKeys !== void 0 && _props$foldKeys.length) { var changeFolditem = /*#__PURE__*/jsx(ButtonWrapper, { type: "link", style: { padding: '0' }, onClick: function onClick() { void actions.onChangeOpenFold(!state.openFold); }, children: state.openFold ? /*#__PURE__*/jsxs("span", { children: ["\u6536\u8D77", /*#__PURE__*/jsx(_UpOutlined, { style: { marginLeft: 3, fontSize: 12 } })] }) : /*#__PURE__*/jsxs("span", { children: ["\u5C55\u5F00", /*#__PURE__*/jsx(_DownOutlined, { style: { marginLeft: 3, fontSize: 12 } })] }) }, "fold-trigger"); if (rightList.length > 0 || leftList.length === 0) { rightList.push(changeFolditem); } else if ((leftList === null || leftList === void 0 ? void 0 : leftList.length) > 0) { leftList.push(changeFolditem); } } return childrens.map(function (item, index) { var _props$foldKeys2; if (!state.openFold && (_props$foldKeys2 = props.foldKeys) !== null && _props$foldKeys2 !== void 0 && _props$foldKeys2.find(function (keyItem) { return ".$".concat(keyItem) === item.key; })) { return null; } if (item.props['hidden']) return null; if (item.type['domTypeName'] === 'FormCol') return item; return /*#__PURE__*/jsx(FormGrid.Col, { children: item }, index); }).filter(Boolean).concat(/*#__PURE__*/jsx(FormGrid.OperateCol, _objectSpread2(_objectSpread2({}, customFormOperateCol), {}, { leftList: leftList, rightList: rightList }), 999)); }, [queryButtonProps, resetButtonProps, onInnerReset, searchOperate, form, props.foldKeys, childrens, rightOperateAreaAppendTypeFt, state.openFold, actions]); fbaHooks.useEffectCustom(function () { if (initRequest === false && !state.isInit || initRequest !== false) { void (onQuery === null || onQuery === void 0 ? void 0 : onQuery(_objectSpread2(_objectSpread2({}, props.formInitialValues), state.queryCondition))); } void actions.updateInitStatus(); }, []); useImperativeHandle(ref, function () { return { onQuery: onInnerQuery, form: form }; }); return /*#__PURE__*/jsx(FormWrapper, { form: form, autoComplete: "off", onFinish: onInnerFormFinish, initialValues: _objectSpread2(_objectSpread2({}, props.formInitialValues), state.queryCondition), className: classNames('search-form', preDefinedClassName.form.formItemGap8, formClassName), style: props.formStyle, labelWidth: props.formLabelWidth, labelAlign: props.formLabelAlign, formItemGap: props.formFormItemGap, labelItemVertical: props.formLabelItemVertical, children: props.isPure ? children : /*#__PURE__*/jsx(FormGrid.Row, { gutter: [15, 0], gridSize: props.formGridSize, children: formRowChildren }) }); }); export { SearchForm as S }; //# sourceMappingURL=search-cwSkh4xF.js.map