@kne/react-form-antd
Version:
把 @kne/react-form 表单校验逻辑应用到antd
556 lines (532 loc) • 15.2 kB
JavaScript
import React, { forwardRef, useCallback, useRef, useMemo } from 'react';
import classnames from 'classnames';
import ReactForm__default, { preset as preset$2, useReset, useSubmit } from '@kne/react-form';
export * from '@kne/react-form';
import { preset as preset$1, widget, hooks, hoc } from '@kne/react-form-helper';
export { hoc, hooks, utils, widget } from '@kne/react-form-helper';
import merge from 'lodash/merge';
import { TreeSelect, TimePicker, Input, Switch as Switch$1, Select, Radio, InputNumber, DatePicker, Button, Checkbox as Checkbox$1, Cascader as Cascader$1, Rate as Rate$1, Slider as Slider$1 } from 'antd';
import dayjs from 'dayjs';
import { get } from 'lodash';
import useControlValue from '@kne/use-control-value';
function _extends() {
return _extends = Object.assign ? Object.assign.bind() : function (n) {
for (var e = 1; e < arguments.length; e++) {
var t = arguments[e];
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
}
return n;
}, _extends.apply(null, arguments);
}
function _objectWithoutPropertiesLoose(r, e) {
if (null == r) return {};
var t = {};
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
if (-1 !== e.indexOf(n)) continue;
t[n] = r[n];
}
return t;
}
const globalParams = {
type: 'default',
size: 'middle',
rules: {},
formModal: {},
resetButton: {},
submitButton: {},
field: {}
};
var preset = props => {
const defaultProps = {};
merge(globalParams, props);
Object.keys(globalParams.field).forEach(name => {
defaultProps[name] = (globalParams.field[name] || {}).defaultProps;
});
preset$1({
field: defaultProps,
globalProps: globalParams.globalProps
});
preset$2(globalParams.rules);
};
const _excluded$4 = ["className", "cache", "enterSubmit", "scrollToError", "scrollProps", "type", "size", "children"];
const {
ScrollToError,
EnterSubmit,
FormStore,
MaxLabelProvider,
SizeProvider
} = widget;
const Form = forwardRef((originProps, ref) => {
const {
className,
cache,
enterSubmit = false,
scrollToError = true,
scrollProps = {
block: 'center'
},
children
} = originProps,
props = _objectWithoutPropertiesLoose(originProps, _excluded$4);
const baseClass = 'react-form';
let computedClass = baseClass;
const {
type,
size
} = Object.assign({
type: 'default',
size: 'middle'
}, globalParams, originProps);
if (type !== 'default') {
computedClass += `--${type}`;
}
if (size !== 'middle') {
computedClass += `--${size}`;
}
const maxLabel = /*#__PURE__*/React.createElement(MaxLabelProvider, null, children);
return /*#__PURE__*/React.createElement("form", {
className: classnames(baseClass, computedClass, className),
onSubmit: e => {
e.preventDefault();
e.stopPropagation();
}
}, /*#__PURE__*/React.createElement(SizeProvider, {
value: {
size
}
}, /*#__PURE__*/React.createElement(ReactForm__default, _extends({}, props, {
ref: ref
}), cache ? /*#__PURE__*/React.createElement(FormStore, {
cache: cache
}) : null, scrollToError ? /*#__PURE__*/React.createElement(ScrollToError, {
scrollProps: scrollProps
}) : null, enterSubmit ? /*#__PURE__*/React.createElement(EnterSubmit, null, maxLabel) : maxLabel)));
});
const {
useOnChange: useOnChange$b
} = hooks;
const _TreeSelect = props => {
props = Object.assign({}, {
fieldName: 'treeSelect'
}, props);
const render = useOnChange$b(Object.assign({
placeholder: `请选择${props.label || ''}`
}, props));
return render(TreeSelect);
};
_TreeSelect.Field = TreeSelect;
_TreeSelect.TreeNode = TreeSelect.TreeNode;
const {
useOnChange: useOnChange$a
} = hooks;
const {
RangePicker: RangePicker$1
} = TimePicker;
const _TimePicker = props => {
props = Object.assign({}, {
fieldName: 'timePicker'
}, props);
const render = useOnChange$a(Object.assign({
placeholder: `请选择${props.label || ''}`
}, props));
return render(TimePicker);
};
_TimePicker.Field = TimePicker;
const _RangePicker$1 = props => {
props = Object.assign({}, {
fieldName: 'rangeTimePicker'
}, props);
const render = useOnChange$a(Object.assign({
placeholder: `请选择${props.label || ''}`
}, props));
return render(RangePicker$1);
};
_RangePicker$1.Field = RangePicker$1;
_TimePicker.RangePicker = _RangePicker$1;
const {
useDecorator: useDecorator$2
} = hooks;
const TextArea = props => {
props = Object.assign({}, {
fieldName: 'textArea'
}, props);
const render = useDecorator$2(Object.assign({
placeholder: `请输入${props.label}`
}, props));
return render(Input.TextArea);
};
TextArea.Field = Input.TextArea;
const {
useOnChange: useOnChange$9,
useCheckedToValue: useCheckedToValue$1
} = hooks;
const {
withChecked: withChecked$1
} = hoc;
const WithSwitch = withChecked$1(Switch$1);
const Switch = props => {
props = Object.assign({}, {
fieldName: 'switch'
}, props);
const checkedProps = useCheckedToValue$1(props);
const render = useOnChange$9(checkedProps);
return render(WithSwitch);
};
Switch.Field = Switch$1;
const {
useOnChange: useOnChange$8
} = hooks;
const _Select = props => {
props = Object.assign({}, {
fieldName: 'select'
}, props);
const render = useOnChange$8(Object.assign({
placeholder: `请选择${props.label || ''}`
}, props));
return render(Select);
};
_Select.Field = Select;
_Select.Option = Select.Option;
_Select.OptGroup = Select.OptGroup;
const _excluded$3 = ["onChange"];
const {
useOnChange: useOnChange$7
} = hooks;
const RadioGroup = _ref => {
let {
onChange
} = _ref,
props = _objectWithoutPropertiesLoose(_ref, _excluded$3);
props = Object.assign({}, {
fieldName: 'radioGroup'
}, props);
const handler = useCallback(e => {
onChange && onChange(e.target.value);
}, [onChange]);
return /*#__PURE__*/React.createElement(Radio.Group, _extends({}, props, {
onChange: handler
}));
};
const _RadioGroup = props => {
const render = useOnChange$7(props);
return render(RadioGroup);
};
_RadioGroup.Field = RadioGroup;
_RadioGroup.Radio = Radio;
const {
useDecorator: useDecorator$1
} = hooks;
const InputNumberField = props => {
props = Object.assign({}, {
fieldName: 'inputNumber',
autoComplete: 'off'
}, props);
const render = useDecorator$1(Object.assign({
placeholder: `请输入${props.label}`
}, props));
return render(InputNumber);
};
InputNumberField.Field = InputNumber;
const {
useDecorator
} = hooks;
const InputField = props => {
props = Object.assign({}, {
fieldName: 'input',
autoComplete: 'off'
}, props);
const render = useDecorator(Object.assign({
placeholder: `请输入${props.label}`
}, props));
return render(Input);
};
InputField.Field = Input;
InputField.Password = props => {
props = Object.assign({}, {
fieldName: 'password',
autoComplete: 'off'
}, props);
const render = useDecorator(Object.assign({
placeholder: `请输入${props.label}`
}, props));
return render(Input.Password);
};
InputField.Password.Field = Input.Password;
const _excluded$2 = ["soFarText", "startProps", "endProps"];
const {
useOnChange: useOnChange$6
} = hooks;
const PickerToday = _ref => {
let {
soFarText,
startProps,
endProps
} = _ref,
props = _objectWithoutPropertiesLoose(_ref, _excluded$2);
const [data, onChange] = useControlValue(props);
const ref_d = useRef();
const newData = useMemo(() => {
// console.log('......', data);
const s = get(data, 0, '');
const d = get(data, 1, '');
const p = get(props, ['placeholder'], ['开始日期', '结束日期']);
return {
start: s ? dayjs(s) : '',
end: d === '至今' ? null : d ? dayjs(d) : '',
showZj: d === '至今',
placeholder: p
};
}, [data]);
const startChange = v => {
// 比较日期大小
if (!newData.showZj && newData.end && v && newData.end.isBefore(v)) {
onChange([newData.end, v]);
return;
}
onChange([v || '', newData.showZj ? '至今' : newData.end]);
};
const endChange = v => {
if (newData.start && v && v.isBefore(newData.start)) {
onChange([v, newData.start]);
return;
}
onChange([newData.start, v || '']);
};
const foot = () => {
return /*#__PURE__*/React.createElement(Button, {
type: newData.showZj ? 'primary' : 'default',
onClick: v => {
ref_d.current.blur();
onChange([newData.start || '', '至今']);
}
}, soFarText || '至今');
};
return /*#__PURE__*/React.createElement("div", {
style: {
display: 'flex'
}
}, /*#__PURE__*/React.createElement(DatePicker, _extends({}, _extends({
showToday: false
}, props, {
placeholder: newData.placeholder[0]
}, startProps, {
value: newData.start
}), {
onChange: startChange
})), /*#__PURE__*/React.createElement("div", {
className: 'svg_box'
}, /*#__PURE__*/React.createElement("svg", {
viewBox: "0 0 1024 1024",
focusable: "false",
"data-icon": "swap-right",
width: "1em",
height: "1em",
fill: "currentColor",
"aria-hidden": "true"
}, /*#__PURE__*/React.createElement("path", {
d: "M873.1 596.2l-164-208A32 32 0 00684 376h-64.8c-6.7 0-10.4 7.7-6.3 13l144.3 183H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h695.9c26.8 0 41.7-30.8 25.2-51.8z"
}))), /*#__PURE__*/React.createElement("div", {
className: newData.showZj ? 'data_range_picker data_range_picker_dis' : 'data_range_picker'
}, /*#__PURE__*/React.createElement("span", {
className: newData.showZj ? 'zhijin zhijin_show' : 'zhijin'
}, soFarText || '至今'), /*#__PURE__*/React.createElement(DatePicker, _extends({}, _extends({
showToday: false
}, props, {
placeholder: newData.showZj ? '' : newData.placeholder[1]
}, endProps, {
value: newData.end
}), {
ref: ref_d,
onChange: endChange,
renderExtraFooter: foot
}))));
};
const RangePickerToday = props => {
props = Object.assign({}, {
fieldName: 'rangePickerToday'
}, props);
const render = useOnChange$6(props);
return render(PickerToday);
};
RangePickerToday.Field = PickerToday;
const {
useOnChange: useOnChange$5
} = hooks;
const {
MonthPicker,
RangePicker,
WeekPicker
} = DatePicker;
const _DatePicker = props => {
props = Object.assign({}, {
fieldName: 'datePicker'
}, props);
const render = useOnChange$5(Object.assign({
placeholder: `请选择${props.label || ''}`
}, props));
return render(DatePicker);
};
_DatePicker.Field = DatePicker;
const _MonthPicker = props => {
props = Object.assign({}, {
fieldName: 'monthDatePicker'
}, props);
const render = useOnChange$5(Object.assign({
placeholder: ['开始时间', '结束时间']
}, props));
return render(MonthPicker);
};
_MonthPicker.Field = MonthPicker;
const _RangePicker = props => {
props = Object.assign({}, {
fieldName: 'rangeDatePicker'
}, props);
const render = useOnChange$5(Object.assign({
placeholder: ['开始时间', '结束时间']
}, props));
return render(RangePicker);
};
_RangePicker.Field = RangePicker;
const _WeekPicker = props => {
props = Object.assign({}, {
fieldName: 'weekDatePicker'
}, props);
const render = useOnChange$5(Object.assign({
placeholder: ['开始时间', '结束时间']
}, props));
return render(WeekPicker);
};
_WeekPicker.Field = WeekPicker;
_DatePicker.MonthPicker = _MonthPicker;
_DatePicker.RangePicker = _RangePicker;
_DatePicker.WeekPicker = _WeekPicker;
const {
useOnChange: useOnChange$4
} = hooks;
const _CheckboxGroup = Checkbox$1.Group;
const CheckboxGroup = props => {
props = Object.assign({}, {
fieldName: 'checkboxGroup'
}, props);
const render = useOnChange$4(props);
return render(_CheckboxGroup);
};
CheckboxGroup.Checkbox = Checkbox$1;
CheckboxGroup.Field = _CheckboxGroup;
const {
useOnChange: useOnChange$3,
useCheckedToValue
} = hooks;
const {
withChecked
} = hoc;
const WithCheckbox = withChecked(Checkbox$1);
const Checkbox = props => {
props = Object.assign({}, {
fieldName: 'checkbox'
}, props);
const checkedProps = useCheckedToValue(Object.assign({}, props, {
onChange: e => {
e.target.type = 'checkbox';
props.onChange && props.onChange(e);
}
}));
const render = useOnChange$3(checkedProps);
return render(WithCheckbox);
};
Checkbox.Field = Checkbox$1;
const {
useOnChange: useOnChange$2
} = hooks;
const Cascader = props => {
props = Object.assign({}, {
fieldName: 'cascader'
}, props);
const render = useOnChange$2(props);
return render(Cascader$1);
};
Cascader.Field = Cascader$1;
const {
useOnChange: useOnChange$1
} = hooks;
const Rate = props => {
props = Object.assign({}, {
fieldName: 'rate'
}, props);
const render = useOnChange$1(Object.assign({}, props));
return render(Rate$1);
};
Rate.Field = Rate$1;
const {
useOnChange
} = hooks;
const Slider = props => {
props = Object.assign({}, {
fieldName: 'slider'
}, props);
const render = useOnChange(Object.assign({}, props));
return render(Slider$1);
};
Slider.Field = Slider$1;
const ResetButton = props => {
const resetProps = useReset();
return /*#__PURE__*/React.createElement(Button, _extends({}, resetProps, props));
};
const _excluded$1 = ["type", "realtime", "disabled"],
_excluded2 = ["isPass", "isLoading"];
const SubmitButton = _ref => {
let {
type = 'primary',
realtime,
disabled = false
} = _ref,
props = _objectWithoutPropertiesLoose(_ref, _excluded$1);
const _useSubmit = useSubmit(props),
{
isPass,
isLoading
} = _useSubmit,
submitProps = _objectWithoutPropertiesLoose(_useSubmit, _excluded2);
return /*#__PURE__*/React.createElement(Button, _extends({
type: type,
loading: isLoading,
disabled: disabled || (realtime ? !isPass : false)
}, props, submitProps));
};
const _excluded = ["onClick"];
const {
useCacheRemove
} = hooks;
const CancelButton = _ref => {
let {
onClick
} = _ref,
props = _objectWithoutPropertiesLoose(_ref, _excluded);
const remove = useCacheRemove();
return /*#__PURE__*/React.createElement(Button, _extends({}, props, {
onClick: (...args) => {
remove();
onClick && onClick(...args);
}
}));
};
const FormAntd = Form;
const fields = {
TreeSelect: _TreeSelect,
TimePicker: _TimePicker,
TextArea,
Switch,
Select: _Select,
RadioGroup: _RadioGroup,
InputNumber: InputNumberField,
Input: InputField,
DatePickerToday: RangePickerToday,
DatePicker: _DatePicker,
CheckboxGroup,
Checkbox,
Cascader,
Rate,
Slider
};
export { CancelButton, Cascader, Checkbox, CheckboxGroup, _DatePicker as DatePicker, RangePickerToday as DatePickerToday, FormAntd, InputField as Input, InputNumberField as InputNumber, _RadioGroup as RadioGroup, Rate, ResetButton, _Select as Select, Slider, SubmitButton, Switch, TextArea, _TimePicker as TimePicker, _TreeSelect as TreeSelect, Form as default, fields, preset };
//# sourceMappingURL=index.modern.js.map