choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
1,197 lines (1,005 loc) • 42.3 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _tslib = require("tslib");
var _react = _interopRequireWildcard(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _mobxReact = require("mobx-react");
var _mobx = require("mobx");
var _isNumber = _interopRequireDefault(require("lodash/isNumber"));
var _isString = _interopRequireDefault(require("lodash/isString"));
var _noop = _interopRequireDefault(require("lodash/noop"));
var _defaultTo = _interopRequireDefault(require("lodash/defaultTo"));
var _raf = _interopRequireDefault(require("raf"));
var _Responsive = _interopRequireWildcard(require("../../../lib/responsive/Responsive"));
var _UnitConvertor = require("../../../lib/_util/UnitConvertor");
var _isFunction = _interopRequireDefault(require("lodash/isFunction"));
var _axios = _interopRequireDefault(require("../axios"));
var _autobind = _interopRequireDefault(require("../_util/autobind"));
var _isFragment = _interopRequireDefault(require("../_util/isFragment"));
var _FormField = require("../field/FormField");
var _FormContext = _interopRequireWildcard(require("./FormContext"));
var _DataSetComponent2 = _interopRequireDefault(require("../data-set/DataSetComponent"));
var _enum = require("./enum");
var _utils = require("./utils");
var _FormVirtualGroup = _interopRequireDefault(require("./FormVirtualGroup"));
var _enum2 = require("../data-set/enum");
var _Item = _interopRequireDefault(require("./Item"));
var _FormItemLabel = _interopRequireDefault(require("./FormItemLabel"));
var _ItemGroup = _interopRequireDefault(require("./ItemGroup"));
var _enum3 = require("../field/enum");
var _icon = _interopRequireDefault(require("../icon"));
var _singleton = require("../tooltip/singleton");
var _excluded = ["children"],
_excluded2 = ["rowSpan", "colSpan", "newLine", "className", "fieldClassName", "useColon"];
/**
* 表单name生成器
*/
var NameGen = /*#__PURE__*/_regenerator["default"].mark(function _callee(start) {
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!true) {
_context.next = 6;
break;
}
start += 1;
_context.next = 4;
return "form-".concat(start);
case 4:
_context.next = 0;
break;
case 6:
case "end":
return _context.stop();
}
}
}, _callee);
})(0);
var Form = /*#__PURE__*/function (_DataSetComponent) {
(0, _inherits2["default"])(Form, _DataSetComponent);
var _super = (0, _createSuper2["default"])(Form);
function Form(props, context) {
var _this;
(0, _classCallCheck2["default"])(this, Form);
_this = _super.call(this, props, context);
_this.fields = [];
_this.name = NameGen.next().value;
_this.validating = false;
_this.prepareForReport = {};
(0, _mobx.runInAction)(function () {
_this.responsiveItems = [];
});
return _this;
}
(0, _createClass2["default"])(Form, [{
key: "axios",
get: function get() {
return this.observableProps.axios || this.getContextConfig('axios') || _axios["default"];
}
}, {
key: "dataSet",
get: function get() {
var record = this.record;
if (record) {
return record.dataSet;
}
var observableProps = this.observableProps;
if ('dataSet' in observableProps) {
return observableProps.dataSet;
}
return observableProps.contextDataSet;
}
}, {
key: "record",
get: function get() {
var observableProps = this.observableProps;
if ('record' in observableProps) {
return observableProps.record;
}
var dataSet = observableProps.dataSet,
dataIndex = observableProps.dataIndex;
if (dataSet) {
if ((0, _isNumber["default"])(dataIndex)) {
return dataSet.get(dataIndex);
}
return dataSet.current;
}
if ((0, _isNumber["default"])(dataIndex)) {
var contextDataSet = observableProps.contextDataSet;
if (contextDataSet) {
return contextDataSet.get(dataIndex);
}
}
return observableProps.contextRecord;
}
}, {
key: "dataIndex",
get: function get() {
var _this$observableProps = this.observableProps,
dataIndex = _this$observableProps.dataIndex,
contextDataIndex = _this$observableProps.contextDataIndex;
return (0, _defaultTo["default"])(dataIndex, contextDataIndex);
}
}, {
key: "useColon",
get: function get() {
var useColon = this.observableProps.useColon;
if (useColon !== undefined) {
return useColon;
}
var configUseColon = this.getContextConfig('useColon');
if (configUseColon !== undefined) {
return configUseColon;
}
return false;
}
}, {
key: "excludeUseColonTagList",
get: function get() {
var excludeUseColonTagList = this.observableProps.excludeUseColonTagList;
if (excludeUseColonTagList !== undefined) {
return excludeUseColonTagList;
}
var configExcludeUseColonTagList = this.getContextConfig('excludeUseColonTagList');
if (configExcludeUseColonTagList !== undefined) {
return configExcludeUseColonTagList;
}
return _utils.defaultExcludeUseColonTag;
}
}, {
key: "columns",
get: function get() {
var columns = this.observableProps.columns;
if ((0, _isNumber["default"])(columns)) {
return columns;
}
if (columns) {
var responsiveColumns = this.responsiveItems[0];
if (responsiveColumns) {
return responsiveColumns;
}
}
return _utils.defaultColumns;
}
}, {
key: "labelWidth",
get: function get() {
var labelWidth = this.observableProps.labelWidth;
if (labelWidth === 'auto') {
return labelWidth;
}
if ((0, _isNumber["default"])(labelWidth) || (0, _mobx.isArrayLike)(labelWidth) && !(0, _Responsive.hasBreakPointMap)(labelWidth)) {
return labelWidth;
}
if (labelWidth) {
var responsiveWidth = this.responsiveItems[1];
if (responsiveWidth !== undefined) {
return responsiveWidth;
}
}
return _utils.defaultLabelWidth;
}
}, {
key: "labelAlign",
get: function get() {
var labelAlign = this.observableProps.labelAlign;
var defaultLabelAlign = this.labelLayout === _enum.LabelLayout.vertical ? _enum.LabelAlign.left : _enum.LabelAlign.right;
if ((0, _isString["default"])(labelAlign)) {
return labelAlign;
}
if (labelAlign) {
var responsiveAlign = this.responsiveItems[2];
if (responsiveAlign) {
return responsiveAlign;
}
}
return defaultLabelAlign;
}
}, {
key: "labelLayout",
get: function get() {
var labelLayout = this.observableProps.labelLayout;
if ((0, _isString["default"])(labelLayout)) {
return labelLayout;
}
if (labelLayout) {
var responsiveLabelLayout = this.responsiveItems[3];
if (responsiveLabelLayout) {
return responsiveLabelLayout;
}
}
return this.getContextConfig('labelLayout') || _enum.LabelLayout.horizontal;
}
}, {
key: "labelTooltip",
get: function get() {
var labelTooltip = this.observableProps.labelTooltip;
if (labelTooltip) {
return labelTooltip;
}
var getTooltip = this.context.getTooltip;
return getTooltip('label');
}
}, {
key: "readOnly",
get: function get() {
return this.observableProps.readOnly;
}
}, {
key: "pristine",
get: function get() {
return this.observableProps.pristine;
}
}, {
key: "fieldHighlightRenderer",
get: function get() {
return this.observableProps.fieldHighlightRenderer;
}
}, {
key: "showValidation",
get: function get() {
return this.observableProps.showValidation;
}
}, {
key: "showHelp",
get: function get() {
var showHelp = this.observableProps.showHelp;
if ((0, _isString["default"])(showHelp)) {
return showHelp;
}
return this.getContextConfig('showHelp') || _enum3.ShowHelp.newLine;
}
}, {
key: "separateSpacing",
get: function get() {
var separateSpacing = this.observableProps.separateSpacing;
if (separateSpacing) {
var _normalizeSeparateSpa = (0, _utils.normalizeSeparateSpacing)(separateSpacing),
_normalizeSeparateSpa2 = _normalizeSeparateSpa.width,
width = _normalizeSeparateSpa2 === void 0 ? 0 : _normalizeSeparateSpa2,
_normalizeSeparateSpa3 = _normalizeSeparateSpa.height,
height = _normalizeSeparateSpa3 === void 0 ? 0 : _normalizeSeparateSpa3;
if (width || height) {
return {
width: width,
height: height
};
}
if ((0, _Responsive.isBreakPointMap)(separateSpacing)) {
var responsiveSeparateSpacing = this.responsiveItems[4];
if (responsiveSeparateSpacing) {
var _responsiveSeparateSp = responsiveSeparateSpacing.width,
_width = _responsiveSeparateSp === void 0 ? 0 : _responsiveSeparateSp,
_responsiveSeparateSp2 = responsiveSeparateSpacing.height,
_height = _responsiveSeparateSp2 === void 0 ? 0 : _responsiveSeparateSp2;
return {
width: _width,
height: _height
};
}
}
}
return undefined;
}
}, {
key: "spacingType",
get: function get() {
var spacingType = this.props.spacingType;
return (0, _utils.normalizeSpacingType)(spacingType);
}
}, {
key: "isReadOnly",
value: function isReadOnly() {
return this.readOnly;
}
}, {
key: "isDisabled",
value: function isDisabled() {
var disabled = (0, _get2["default"])((0, _getPrototypeOf2["default"])(Form.prototype), "isDisabled", this).call(this);
if (disabled) {
return disabled;
}
var record = this.record;
if (record) {
return record.disabled;
}
return false;
}
}, {
key: "getObservableProps",
value: function getObservableProps(props, context) {
var observableProps = (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, (0, _get2["default"])((0, _getPrototypeOf2["default"])(Form.prototype), "getObservableProps", this).call(this, props, context)), {}, {
contextDataSet: context.dataSet,
contextRecord: context.record,
dataIndex: props.dataIndex,
contextDataIndex: context.dataIndex,
labelLayout: 'labelLayout' in props ? props.labelLayout : context.labelLayout,
labelAlign: 'labelAlign' in props ? props.labelAlign : context.labelAlign,
showValidation: 'showValidation' in props ? props.showValidation : context.showValidation,
showHelp: 'showHelp' in props ? props.showHelp : context.showHelp,
labelTooltip: 'labelTooltip' in props ? props.labelTooltip : context.labelTooltip,
disabled: 'disabled' in props ? props.disabled : context.disabled,
readOnly: 'readOnly' in props ? props.readOnly : context.readOnly,
labelWidth: (0, _defaultTo["default"])(props.labelWidth, context.labelWidth),
pristine: 'pristine' in props ? props.pristine : context.pristine,
columns: props.columns,
useColon: props.useColon,
excludeUseColonTagList: props.excludeUseColonTagList,
separateSpacing: props.separateSpacing,
fieldHighlightRenderer: 'fieldHighlightRenderer' in props ? props.fieldHighlightRenderer : context.fieldHighlightRenderer
});
if ('record' in props) {
observableProps.record = props.record;
}
return observableProps;
}
}, {
key: "getOmitPropsKeys",
value: function getOmitPropsKeys() {
return (0, _get2["default"])((0, _getPrototypeOf2["default"])(Form.prototype), "getOmitPropsKeys", this).call(this).concat(['record', 'dataIndex', 'onSuccess', 'onError', 'processParams', 'labelWidth', 'labelAlign', 'labelLayout', 'labelTooltip', 'columns', 'pristine', 'axios', 'useColon', 'excludeUseColonTagList', 'separateSpacing', 'spacingType', 'fieldHighlightRenderer', 'layout', 'showValidation', 'showHelp']);
}
}, {
key: "getOtherProps",
value: function getOtherProps() {
var otherProps = (0, _get2["default"])((0, _getPrototypeOf2["default"])(Form.prototype), "getOtherProps", this).call(this);
otherProps.onSubmit = this.handleSubmit;
otherProps.onReset = this.handleReset;
if (!otherProps.name) {
otherProps.name = this.name;
}
return otherProps;
}
}, {
key: "getHeader",
value: function getHeader() {
var header = this.props.header,
prefixCls = this.prefixCls;
if (header) {
return /*#__PURE__*/_react["default"].createElement("div", {
key: "form-header",
className: "".concat(prefixCls, "-header")
}, header);
}
}
}, {
key: "getClassName",
value: function getClassName() {
var prefixCls = this.prefixCls,
labelLayout = this.labelLayout;
for (var _len = arguments.length, props = new Array(_len), _key = 0; _key < _len; _key++) {
props[_key] = arguments[_key];
}
return (0, _get2["default"])((0, _getPrototypeOf2["default"])(Form.prototype), "getClassName", this).call(this, (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, props), {}, (0, _defineProperty2["default"])({}, "".concat(prefixCls, "-float-label"), labelLayout === _enum.LabelLayout["float"])));
}
}, {
key: "componentWillMount",
value: function componentWillMount() {
this.processDataSetListener(true);
}
}, {
key: "componentDidMount",
value: function componentDidMount() {
this.componentDidMountOrUpdate();
(0, _get2["default"])((0, _getPrototypeOf2["default"])(Form.prototype), "componentDidMount", this).call(this);
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate() {
this.componentDidMountOrUpdate();
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
this.processDataSetListener(false);
if (this.isTooltipShown) {
(0, _singleton.hide)();
delete this.isTooltipShown;
}
}
}, {
key: "componentDidMountOrUpdate",
value: function componentDidMountOrUpdate() {
var formNode = this.context.formNode;
var element = this.element;
if (formNode && element) {
var isUnderForm = (0, _utils.hasParentElement)(element.parentElement, 'form');
if (isUnderForm !== this.isUnderForm) {
this.isUnderForm = isUnderForm;
}
}
}
}, {
key: "processDataSetListener",
value: function processDataSetListener(flag) {
var dataSet = this.dataSet;
if (dataSet) {
var handler = flag ? dataSet.addEventListener : dataSet.removeEventListener;
handler.call(dataSet, _enum2.DataSetEvents.validate, this.handleDataSetValidate);
}
} // 处理校验失败定位
}, {
key: "handleDataSetValidate",
value: function handleDataSetValidate(props) {
var valid = props.valid,
validationErrors = props.errors,
noLocate = props.noLocate;
var onValidate = this.getContextConfig('onValidate');
if (onValidate) {
onValidate(props);
}
var autoValidationLocate = this.props.autoValidationLocate;
if (autoValidationLocate !== false && !noLocate && !valid) {
var _validationErrors = (0, _slicedToArray2["default"])(validationErrors, 1),
firstInvalidRecord = _validationErrors[0];
if (firstInvalidRecord) {
var errors = firstInvalidRecord.errors;
if (errors.length) {
var _errors = (0, _slicedToArray2["default"])(errors, 1),
name = _errors[0].field.name;
var field = this.getFields().find(function (item) {
return item.props.name === name;
});
if (field) {
(0, _raf["default"])(function () {
field.focus();
});
}
}
}
}
}
}, {
key: "handleHelpMouseEnter",
value: function handleHelpMouseEnter(e, help) {
var target = e.target;
var _this$context = this.context,
getTooltipTheme = _this$context.getTooltipTheme,
getTooltipPlacement = _this$context.getTooltipPlacement;
(0, _singleton.show)(target, {
title: help,
theme: getTooltipTheme('help'),
placement: getTooltipPlacement('help')
});
this.isTooltipShown = true;
}
}, {
key: "handleHelpMouseLeave",
value: function handleHelpMouseLeave() {
(0, _singleton.hide)();
}
}, {
key: "renderTooltipHelp",
value: function renderTooltipHelp(help) {
var _this2 = this;
if (help) {
return /*#__PURE__*/_react["default"].createElement(_icon["default"], {
type: "help_outline",
onMouseEnter: function onMouseEnter(e) {
return _this2.handleHelpMouseEnter(e, help);
},
onMouseLeave: this.handleHelpMouseLeave
});
}
}
}, {
key: "rasterizedChildren",
value: function rasterizedChildren() {
var _this3 = this;
var dataSet = this.dataSet,
record = this.record,
columns = this.columns,
labelLayout = this.labelLayout,
labelAlign = this.labelAlign,
labelTooltip = this.labelTooltip,
useColon = this.useColon,
excludeUseColonTagList = this.excludeUseColonTagList,
formReadOnly = this.readOnly,
showHelp = this.showHelp,
children = this.props.children;
var prefixCls = this.getContextProPrefixCls(_utils.FIELD_SUFFIX);
var labelWidth = (0, _utils.normalizeLabelWidth)(this.labelWidth, columns);
var rows = [];
var cols = [];
var rowIndex = 0;
var colIndex = 0;
var matrix = [[]];
var noLabel = true;
var childrenArray = [];
var separateSpacing = this.separateSpacing;
var isLabelLayoutHorizontal = labelLayout === _enum.LabelLayout.horizontal;
var spacingProperties = separateSpacing ? (0, _utils.getSpacingProperties)(separateSpacing, this.spacingType, isLabelLayoutHorizontal) : undefined;
var isAllOutputCom = true;
_react.Children.forEach(children, function (child) {
if ( /*#__PURE__*/(0, _react.isValidElement)(child)) {
var setChild = function setChild(arr, outChild) {
var groupProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var type = outChild.type,
outChildProps = outChild.props;
if (outChildProps.hidden) return null;
if (type) {
if ((0, _isFunction["default"])(type) && !type.__PRO_OUTPUT) {
isAllOutputCom = false;
}
if (noLabel === true && isLabelLayoutHorizontal && (0, _utils.getProperty)(outChildProps, 'label', dataSet, record)) {
noLabel = false;
}
var outChildChildren = outChildProps.children,
otherOutChildProps = (0, _objectWithoutProperties2["default"])(outChildProps, _excluded);
var isFragmentElement = (0, _isFragment["default"])(outChild);
if (isFragmentElement || type.__PRO_FORM_VIRTUAL_GROUP) {
_react.Children.forEach(outChildChildren, function (c) {
if ( /*#__PURE__*/(0, _react.isValidElement)(c)) {
setChild(arr, c, isFragmentElement ? groupProps : (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, groupProps), otherOutChildProps));
}
});
} else {
arr.push( /*#__PURE__*/(0, _react.cloneElement)(outChild, (0, _objectSpread3["default"])((0, _objectSpread3["default"])({}, groupProps), outChildProps)));
}
}
};
setChild(childrenArray, child);
}
});
function completeLine() {
if (cols.length) {
rows.push( /*#__PURE__*/_react["default"].createElement("tr", {
key: "row-".concat(rowIndex)
}, cols));
cols = [];
}
rowIndex++;
colIndex = 0;
matrix[rowIndex] = matrix[rowIndex] || [];
}
var _loop = function _loop(_index, len) {
var _classNames, _classNames2;
var _childrenArray$_index = childrenArray[_index],
props = _childrenArray$_index.props,
key = _childrenArray$_index.key,
type = _childrenArray$_index.type,
ref = _childrenArray$_index.ref;
var TagName = (0, _isFunction["default"])(type) ? type.displayName : type;
var label = (0, _utils.getProperty)(props, 'label', dataSet, record);
var help = (0, _utils.getProperty)(props, 'help', dataSet, record);
var fieldLabelWidth = (0, _utils.getProperty)(props, 'labelWidth', dataSet, record);
var required = (0, _utils.getProperty)(props, 'required', dataSet, record);
var readOnly = (0, _utils.getProperty)(props, 'readOnly', dataSet, record) || formReadOnly;
var _props$rowSpan = props.rowSpan,
rowSpan = _props$rowSpan === void 0 ? 1 : _props$rowSpan,
_props$colSpan = props.colSpan,
colSpan = _props$colSpan === void 0 ? 1 : _props$colSpan,
newLine = props.newLine,
className = props.className,
fieldClassName = props.fieldClassName,
_props$useColon = props.useColon,
fieldUseColon = _props$useColon === void 0 ? useColon : _props$useColon,
otherProps = (0, _objectWithoutProperties2["default"])(props, _excluded2);
var newColSpan = colSpan;
var currentRow = matrix[rowIndex];
if (newLine) {
if (colIndex !== 0) {
completeLine();
index = _index;
return "continue";
}
}
while (currentRow[colIndex]) {
colIndex++;
}
if (colIndex >= columns) {
completeLine();
index = _index;
return "continue";
}
if (newColSpan + colIndex > columns) {
newColSpan = columns - colIndex;
}
for (var _i2 = colIndex, k = colIndex + newColSpan; _i2 < k; _i2++) {
if (currentRow[_i2]) {
newColSpan = _i2 - colIndex;
break;
}
}
for (var _i3 = rowIndex; _i3 < rowSpan + rowIndex; _i3++) {
for (var j = colIndex, _k = newColSpan + colIndex; j < _k; j++) {
if (!matrix[_i3]) {
matrix[_i3] = [];
}
matrix[_i3][j] = true;
}
}
var fieldElementProps = (0, _objectSpread3["default"])({
ref: ref,
key: key,
className: (0, _classnames["default"])(prefixCls, className)
}, otherProps);
var isOutput = type.__PRO_OUTPUT;
var outputMix = !isAllOutputCom && isOutput ? 'mix' : '';
var isLabelShowHelp = (fieldElementProps.showHelp || showHelp) === _enum3.ShowHelp.label;
var labelClassName = (0, _classnames["default"])("".concat(prefixCls, "-label"), "".concat(prefixCls, "-label-").concat(labelAlign), fieldClassName, (_classNames = {}, (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-required"), required && !isOutput), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-readonly"), readOnly), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-label-vertical"), labelLayout === _enum.LabelLayout.vertical), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-label-output"), isLabelLayoutHorizontal && isOutput), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-label-output-").concat(outputMix), isLabelLayoutHorizontal && isOutput && outputMix), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-label-useColon"), label && fieldUseColon && !excludeUseColonTagList.find(function (v) {
return v === TagName;
})), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-label-help"), isLabelShowHelp), _classNames));
var wrapperClassName = (0, _classnames["default"])("".concat(prefixCls, "-wrapper"), (_classNames2 = {}, (0, _defineProperty2["default"])(_classNames2, "".concat(prefixCls, "-output"), isLabelLayoutHorizontal && isOutput), (0, _defineProperty2["default"])(_classNames2, "".concat(prefixCls, "-output-").concat(outputMix), isLabelLayoutHorizontal && isOutput && outputMix), _classNames2));
if (!noLabel && !type.__PRO_FORM_ITEM) {
var _columnLabelWidth = labelWidth[colIndex];
if (!isNaN(fieldLabelWidth) && _columnLabelWidth !== 'auto') {
labelWidth[colIndex] = Math.max(_columnLabelWidth, fieldLabelWidth);
}
var tooltip = 'labelTooltip' in props ? props.labelTooltip : labelTooltip;
cols.push( /*#__PURE__*/_react["default"].createElement(_FormItemLabel["default"], {
key: "row-".concat(rowIndex, "-col-").concat(colIndex, "-label"),
className: labelClassName,
rowSpan: rowSpan,
style: spacingProperties ? (0, _utils.getSpacingLabelStyle)(spacingProperties, isLabelLayoutHorizontal, rowIndex) : undefined,
tooltip: tooltip,
help: isLabelShowHelp ? _this3.renderTooltipHelp(help) : undefined
}, (0, _mobx.toJS)(label)));
}
if (!(0, _isString["default"])(type)) {
fieldElementProps.rowIndex = rowIndex;
fieldElementProps.colIndex = colIndex;
}
cols.push( /*#__PURE__*/_react["default"].createElement("td", {
key: "row-".concat(rowIndex, "-col-").concat(colIndex, "-field"),
colSpan: noLabel ? newColSpan : newColSpan * 2 - (type.__PRO_FORM_ITEM ? 0 : 1),
rowSpan: rowSpan,
className: fieldClassName,
style: spacingProperties ? (0, _utils.getSpacingFieldStyle)(spacingProperties, isLabelLayoutHorizontal, rowIndex) : undefined
}, labelLayout === _enum.LabelLayout.vertical && !!label && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("label", {
className: labelClassName
}, (0, _mobx.toJS)(label)), isLabelShowHelp ? _this3.renderTooltipHelp(help) : null), /*#__PURE__*/_react["default"].createElement("div", {
className: wrapperClassName
}, /*#__PURE__*/(0, _react.createElement)(type, fieldElementProps))));
if (_index === len - 1) {
completeLine();
} else {
colIndex++;
}
_index++;
index = _index;
};
for (var index = 0, len = childrenArray.length; index < len;) {
var _ret = _loop(index, len);
if (_ret === "continue") continue;
}
cols = [];
var isAutoWidth = !noLabel && labelWidth.some(function (w) {
return w === 'auto';
});
if (!noLabel) {
for (var i = 0; i < columns; i++) {
var key = "label-".concat(i);
var columnLabelWidth = labelWidth[i % columns];
if (columnLabelWidth === 'auto') {
cols.push( /*#__PURE__*/_react["default"].createElement("col", {
key: key
}));
} else {
cols.push( /*#__PURE__*/_react["default"].createElement("col", {
key: key,
// 优化当使用 separateSpacing label 宽度太窄问题
style: {
width: (0, _UnitConvertor.pxToRem)(spacingProperties ? spacingProperties.paddingHorizontal + columnLabelWidth : columnLabelWidth)
}
}));
}
cols.push( /*#__PURE__*/_react["default"].createElement("col", {
key: "wrapper-".concat(i),
style: isAutoWidth ? {
width: "".concat(100 / columns, "%")
} : undefined
}));
}
} else {
for (var _i = 0; _i < columns; _i++) {
cols.push( /*#__PURE__*/_react["default"].createElement("col", {
key: "wrapper-".concat(_i)
}));
}
}
return /*#__PURE__*/_react["default"].createElement("table", {
key: "form-body",
style: spacingProperties && spacingProperties.style,
className: "".concat(isAutoWidth ? 'auto-width' : '')
}, cols.length ? /*#__PURE__*/_react["default"].createElement("colgroup", null, cols) : undefined, /*#__PURE__*/_react["default"].createElement("tbody", null, rows));
}
}, {
key: "render",
value: function render() {
var labelWidth = this.labelWidth,
labelAlign = this.labelAlign,
labelLayout = this.labelLayout,
labelTooltip = this.labelTooltip,
pristine = this.pristine,
dataSet = this.dataSet,
record = this.record,
dataIndex = this.dataIndex,
observableProps = this.observableProps,
disabled = this.disabled,
readOnly = this.readOnly,
fieldHighlightRenderer = this.fieldHighlightRenderer,
props = this.props,
useColon = this.useColon,
showValidation = this.showValidation,
showHelp = this.showHelp;
var _this$context2 = this.context,
formNode = _this$context2.formNode,
getConfig = _this$context2.getConfig,
getProPrefixCls = _this$context2.getProPrefixCls,
getPrefixCls = _this$context2.getPrefixCls,
getCustomizable = _this$context2.getCustomizable,
getTooltip = _this$context2.getTooltip,
getTooltipTheme = _this$context2.getTooltipTheme,
getTooltipPlacement = _this$context2.getTooltipPlacement;
var value = {
formNode: formNode || this,
dataSet: dataSet,
dataIndex: dataIndex,
record: record,
labelWidth: labelWidth,
labelAlign: labelAlign,
labelLayout: labelLayout,
labelTooltip: labelTooltip,
pristine: pristine,
disabled: disabled,
readOnly: readOnly,
fieldHighlightRenderer: fieldHighlightRenderer,
useColon: useColon,
showValidation: showValidation,
showHelp: showHelp,
getConfig: getConfig,
getPrefixCls: getPrefixCls,
getProPrefixCls: getProPrefixCls,
getCustomizable: getCustomizable,
getTooltip: getTooltip,
getTooltipTheme: getTooltipTheme,
getTooltipPlacement: getTooltipPlacement
};
var children = [this.getHeader(), props.layout === _enum.FormLayout.table ? this.rasterizedChildren() : props.children];
return /*#__PURE__*/_react["default"].createElement(_Responsive["default"], {
items: [observableProps.columns, observableProps.labelWidth, observableProps.labelAlign, observableProps.labelLayout, observableProps.separateSpacing],
onChange: this.handleResponsive
}, /*#__PURE__*/_react["default"].createElement(_FormContext.FormProvider, {
value: value
}, this.isUnderForm ? children : formNode && this.isUnderForm === undefined ? /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({}, this.getMergedProps()), children) : /*#__PURE__*/_react["default"].createElement("form", (0, _extends2["default"])({}, this.getMergedProps(), {
noValidate: true
}), children)));
}
}, {
key: "handleResponsive",
value: function handleResponsive(items) {
this.responsiveItems = items;
}
}, {
key: "handleSubmit",
value: function () {
var _handleSubmit = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(e) {
var _this$props, target, action, dataSet, method, _this$props$processPa, processParams, _this$props$onSuccess, onSuccess, _this$props$onError, onError, _this$props$onSubmit, onSubmit;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
e.preventDefault();
e.persist();
_context2.next = 4;
return this.checkValidity();
case 4:
if (!_context2.sent) {
_context2.next = 31;
break;
}
_this$props = this.props, target = _this$props.target, action = _this$props.action, dataSet = _this$props.dataSet, method = _this$props.method, _this$props$processPa = _this$props.processParams, processParams = _this$props$processPa === void 0 ? _noop["default"] : _this$props$processPa, _this$props$onSuccess = _this$props.onSuccess, onSuccess = _this$props$onSuccess === void 0 ? _noop["default"] : _this$props$onSuccess, _this$props$onError = _this$props.onError, onError = _this$props$onError === void 0 ? _noop["default"] : _this$props$onError, _this$props$onSubmit = _this$props.onSubmit, onSubmit = _this$props$onSubmit === void 0 ? _noop["default"] : _this$props$onSubmit;
onSubmit(e);
_context2.prev = 7;
if (!dataSet) {
_context2.next = 16;
break;
}
_context2.t0 = onSuccess;
_context2.next = 12;
return dataSet.submit();
case 12:
_context2.t1 = _context2.sent;
(0, _context2.t0)(_context2.t1);
_context2.next = 26;
break;
case 16:
if (!action) {
_context2.next = 26;
break;
}
if (!(target && this.element)) {
_context2.next = 21;
break;
}
this.element.submit();
_context2.next = 26;
break;
case 21:
_context2.t2 = onSuccess;
_context2.next = 24;
return this.axios[method || 'get'](action, processParams(e));
case 24:
_context2.t3 = _context2.sent;
(0, _context2.t2)(_context2.t3);
case 26:
_context2.next = 31;
break;
case 28:
_context2.prev = 28;
_context2.t4 = _context2["catch"](7);
onError(_context2.t4);
case 31:
case "end":
return _context2.stop();
}
}
}, _callee2, this, [[7, 28]]);
}));
function handleSubmit(_x) {
return _handleSubmit.apply(this, arguments);
}
return handleSubmit;
}()
}, {
key: "handleReset",
value: function handleReset(e) {
var _this$props$onReset = this.props.onReset,
onReset = _this$props$onReset === void 0 ? _noop["default"] : _this$props$onReset;
var record = this.record;
onReset(e);
if (!e.isDefaultPrevented()) {
if (record) {
record.reset();
} else {
this.getFields().forEach(function (field) {
return field.reset();
});
}
}
}
}, {
key: "reportValidity",
value: function reportValidity(result) {
var _this4 = this;
var prepareForReport = this.prepareForReport;
if (!result) {
prepareForReport.result = result;
}
if (prepareForReport.timeout) {
window.clearTimeout(prepareForReport.timeout);
}
prepareForReport.timeout = window.setTimeout(function () {
if (!prepareForReport.result) {
var field = _this4.getFields().find(function (one) {
return !one.valid;
});
if (field) {
field.focus();
}
}
_this4.prepareForReport = {};
}, 200);
}
}, {
key: "checkValidity",
value: function checkValidity() {
var _this5 = this;
var dataSet = this.dataSet;
if (dataSet) {
if (!dataSet.length) {
dataSet.create();
}
return dataSet.validate();
}
this.validating = true;
return Promise.all(this.getFields().map(function (field) {
return field.checkValidity();
})).then(function (results) {
var valid = results.every(function (result) {
return result;
});
_this5.reportValidity(valid);
_this5.validating = false;
return valid;
})["catch"](function (error) {
_this5.validating = false;
throw error;
});
}
}, {
key: "getFields",
value: function getFields() {
var id = this.props.id;
if (id) {
return [].concat(this.fields, (0, _FormField.getFieldsById)(id));
}
return this.fields;
}
}, {
key: "getField",
value: function getField(name) {
return this.getFields().find(function (field) {
return field.props.name === name;
});
}
}, {
key: "addField",
value: function addField(field) {
this.fields.push(field);
}
}, {
key: "removeField",
value: function removeField(field) {
var index = this.fields.indexOf(field);
if (index !== -1) {
this.fields.splice(index, 1);
}
}
}], [{
key: "contextType",
get: function get() {
return _FormContext["default"];
}
}]);
return Form;
}(_DataSetComponent2["default"]);
Form.displayName = 'Form';
Form.ItemGroup = _ItemGroup["default"];
Form.FormVirtualGroup = _FormVirtualGroup["default"];
Form.Item = _Item["default"];
Form.defaultProps = {
suffixCls: 'form',
columns: _utils.defaultColumns,
labelWidth: _utils.defaultLabelWidth,
layout: _enum.FormLayout.table
};
(0, _tslib.__decorate)([_mobx.observable], Form.prototype, "responsiveItems", void 0);
(0, _tslib.__decorate)([_mobx.observable], Form.prototype, "isUnderForm", void 0);
(0, _tslib.__decorate)([_mobx.computed], Form.prototype, "axios", null);
(0, _tslib.__decorate)([_mobx.computed], Form.prototype, "dataSet", null);
(0, _tslib.__decorate)([_mobx.computed], Form.prototype, "record", null);
(0, _tslib.__decorate)([_mobx.computed], Form.prototype, "dataIndex", null);
(0, _tslib.__decorate)([_mobx.computed], Form.prototype, "useColon", null);
(0, _tslib.__decorate)([_mobx.computed], Form.prototype, "excludeUseColonTagList", null);
(0, _tslib.__decorate)([_mobx.computed], Form.prototype, "columns", null);
(0, _tslib.__decorate)([_mobx.computed], Form.prototype, "labelWidth", null);
(0, _tslib.__decorate)([_mobx.computed], Form.prototype, "labelAlign", null);
(0, _tslib.__decorate)([_mobx.computed], Form.prototype, "labelLayout", null);
(0, _tslib.__decorate)([_mobx.computed], Form.prototype, "labelTooltip", null);
(0, _tslib.__decorate)([_mobx.computed], Form.prototype, "readOnly", null);
(0, _tslib.__decorate)([_mobx.computed], Form.prototype, "pristine", null);
(0, _tslib.__decorate)([_mobx.computed], Form.prototype, "fieldHighlightRenderer", null);
(0, _tslib.__decorate)([_mobx.computed], Form.prototype, "showValidation", null);
(0, _tslib.__decorate)([_mobx.computed], Form.prototype, "showHelp", null);
(0, _tslib.__decorate)([_mobx.computed], Form.prototype, "separateSpacing", null);
(0, _tslib.__decorate)([_mobx.action], Form.prototype, "componentDidMountOrUpdate", null);
(0, _tslib.__decorate)([_autobind["default"]], Form.prototype, "handleDataSetValidate", null);
(0, _tslib.__decorate)([_autobind["default"]], Form.prototype, "handleHelpMouseEnter", null);
(0, _tslib.__decorate)([_autobind["default"]], Form.prototype, "handleHelpMouseLeave", null);
(0, _tslib.__decorate)([_autobind["default"], _mobx.action], Form.prototype, "handleResponsive", null);
(0, _tslib.__decorate)([_autobind["default"]], Form.prototype, "handleSubmit", null);
(0, _tslib.__decorate)([_autobind["default"]], Form.prototype, "handleReset", null);
Form = (0, _tslib.__decorate)([_mobxReact.observer], Form);
var _default = Form;
exports["default"] = _default;
//# sourceMappingURL=Form.js.map