UNPKG

polestar-ui-kit

Version:

## Install

798 lines (654 loc) 27.3 kB
"use strict"; require("core-js/modules/es.array.concat"); require("core-js/modules/es.array.filter"); require("core-js/modules/es.array.for-each"); require("core-js/modules/es.array.is-array"); require("core-js/modules/es.array.map"); require("core-js/modules/es.array.splice"); require("core-js/modules/es.function.name"); require("core-js/modules/es.object.assign"); require("core-js/modules/es.object.define-property"); require("core-js/modules/es.object.keys"); require("core-js/modules/web.dom-collections.for-each"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _react = _interopRequireDefault(require("react")); var _antd = require("antd"); var _datePicker = _interopRequireDefault(require("antd/lib/date-picker")); var _moment = _interopRequireDefault(require("moment")); var _GroupHeader = _interopRequireDefault(require("../GroupHeader")); var _Button = _interopRequireDefault(require("../../Button")); var _Divider = _interopRequireDefault(require("../../Divider")); var _Field = require("../../Field"); var _checkMaxBytes = _interopRequireDefault(require("./checkMaxBytes")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var FormItem = _antd.Form.Item; var MonthPicker = _datePicker["default"].MonthPicker; var COMPONENT_FIELD_TYPES = { text: _Field.Input, id: _Field.IDInput, password: _Field.PasswordInput, email: _Field.EmailInput, ip: _Field.IPInput, textarea: _Field.TextArea, numeric: _Field.InputNumber, select: _Field.Select, checkbox: _Field.Checkbox, radio: _Field.RadioGroup, datepicker: _Field.DatePicker, daterangepicker: _Field.DateRangePicker, basedatepicker: _Field.BaseDatePicker, timepicker: _Field.TimePicker, upload: _Field.Upload, cascader: _Field.Cascader, slider: _Field.Slider, rate: _Field.Rate, treeselect: _Field.TreeSelect, gridtogrid: _Field.GridToGrid }; var FormHelpers = function () { function FormHelpers(_component, form, parent) { var _this = this; _classCallCheck(this, FormHelpers); this.create = function (schema) { var formData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; var render = []; var fields = schema.fields; if (Array.isArray(fields)) { fields.forEach(function (groups, index) { render.push(_this._generateGroups(groups, formData)); if (index < fields.length - 1) { render.push(_react["default"].createElement(_Divider["default"], { key: _this._getDividerIndex() })); } }); } else { render.push(_this._renderFields(fields.properties, fields.ui, formData)); if (fields.title) { var groupHeader = _react["default"].createElement(_GroupHeader["default"], { id: fields.title, key: "group-".concat(_this._getGroupIndex()) }, fields.title); render.splice(0, 0, groupHeader); } } return { render: render, labelFields: _this.labelFields }; }; this._getRenderIndex = function () { return ++_this.renderIndex; }; this._getGroupIndex = function () { return ++_this.groupIndex; }; this._getRowIndex = function () { return ++_this.rowIndex; }; this._getColIndex = function () { _this.colIndex += 1; return "".concat(_this.rowIndex, "_").concat(_this.colIndex); }; this._getDividerIndex = function () { return ++_this.dividerIndex; }; this._generateGroups = function (groups, formData) { var rowRender = []; var colRender = []; var avgSpan = _this._calculateAvgSpan(groups); groups.forEach(function (groupProps) { var renderFields = _this._renderFields(groupProps.properties, groupProps.ui, formData); if (groupProps.title) { var groupHeader = _react["default"].createElement(_GroupHeader["default"], { id: groupProps.title, key: "group-".concat(_this._getGroupIndex()) }, groupProps.title); renderFields.splice(0, 0, groupHeader); } colRender.push(_this._renderCol("col-".concat(_this._getColIndex()), groupProps.span || avgSpan, renderFields)); }); rowRender.push(_this._renderRow('groups-row', colRender)); return rowRender; }; this._renderFields = function (properties) { var ui = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var formData = arguments.length > 2 ? arguments[2] : undefined; var render = []; if (Array.isArray(properties)) { properties.forEach(function (colProperties) { render.push(_this._generateFields(colProperties, ui, formData, true)); }); } else { render.push(_this._generateFields(properties, ui, formData, false)); } return render; }; this._calculateAvgSpan = function (properties) { var ui = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var hiddenCount = 0; var countSpan = 0; var sumSpan = 0; var avgSpan = 0; var fieldNames = Object.keys(properties); fieldNames.forEach(function (key) { var mergeProps = Object.assign(properties[key], ui[key] || {}); if (mergeProps.renderType === 'hidden') { hiddenCount += 1; } else if (properties[key].span) { countSpan += 1; sumSpan += properties[key].span; } }); var remainSpan = fieldNames.length - (countSpan + hiddenCount); if (remainSpan > 0) { avgSpan = Math.floor((_this.defaultConfig.layout.rowSpan - sumSpan) / remainSpan); } return avgSpan; }; this._renderRow = function (key, children) { return _react["default"].createElement(_antd.Row, { key: key, gutter: _this.defaultConfig.layout.rowGutter }, children); }; this._renderCol = function (key, span, children, fieldStyle) { return _react["default"].createElement(_antd.Col, { key: key, span: span, style: fieldStyle }, children); }; this._createFormItem = function (key, mergeProps, renderField, formData) { if (renderField) { if (mergeProps.renderType === 'custom') { return renderField; } var _mergeProps$addFields = mergeProps.addFields, addFields = _mergeProps$addFields === void 0 ? false : _mergeProps$addFields, extend = mergeProps.extend; var renderAddFieldsButton = null; if (addFields) { var addKey = "add-".concat(key); renderAddFieldsButton = addFields ? _this._generateAddFieldButton(addKey, key, formData, extend) : null; var keys = _this.form.getFieldValue(addKey); if (keys.length >= 0) { return keys.map(function (keyIndex) { var renderExtends = _this._generateExtend(mergeProps, renderField, renderAddFieldsButton, formData, keyIndex, addKey); return _this._renderFormItem(mergeProps, { key: key, renderField: renderField, renderExtends: renderExtends }, formData, keyIndex); }); } } var renderExtends = _this._generateExtend(mergeProps, renderField, renderAddFieldsButton, formData, 0); return _this._renderFormItem(mergeProps, { key: key, renderField: renderField, renderExtends: renderExtends }, formData, 0); } return _react["default"].createElement("div", null, mergeProps.label, ": \uC9C0\uC6D0\uD558\uC9C0 \uC54A\uB294 UI \uB610\uB294 \uC18D\uC131 \uC785\uB2C8\uB2E4. API\uB97C \uD655\uC778\uD574\uC8FC\uC138\uC694."); }; this._getFieldDecoratorOption = function (key, itemIndex, mergeProps, formData, addFields, extend) { var checkDecorator; if (mergeProps.renderType === 'checkbox') { checkDecorator = { valuePropName: 'checked' }; } return _extends({ rules: _this._setValidateRules(mergeProps) }, checkDecorator, { initialValue: _this._convertValue(key, itemIndex, formData, mergeProps, addFields, extend) }); }; this._setValidateRules = function (mergeProps) { var rules = []; var renderType = mergeProps.renderType, required = mergeProps.required, requiredMessage = mergeProps.requiredMessage, minLength = mergeProps.minLength, maxLength = mergeProps.maxLength, maxBytes = mergeProps.maxBytes, validator = mergeProps.validator; if (required) { rules.push({ required: required, message: requiredMessage || _this.defaultConfig.validate.defaultMessage }); } if (minLength !== undefined) { rules.push({ min: mergeProps.minLength, message: "".concat(mergeProps.minLength, "\uC790 \uC774\uC0C1 \uC785\uB825\uD558\uC138\uC694.") }); } if (maxLength !== undefined) { rules.push({ max: maxLength, message: "".concat(maxLength, "\uC790 \uC774\uD558\uB85C \uC785\uB825\uD558\uC138\uC694.") }); } if (maxBytes !== undefined) { rules.push({ validator: _checkMaxBytes["default"], maxBytes: mergeProps.maxBytes }); } if (validator !== undefined) { if (Array.isArray(validator)) { validator.forEach(function (_validator) { rules.push({ validator: _validator }); }); } else { rules.push({ validator: validator }); } } else if (COMPONENT_FIELD_TYPES[renderType] && COMPONENT_FIELD_TYPES[renderType].validator) { if (!((renderType === 'text' || renderType === 'textarea') && maxBytes !== undefined)) { rules.push({ validator: COMPONENT_FIELD_TYPES[renderType].validator }); } } return rules; }; this._renderFormItem = function (mergeProps, itemProps, formData, itemIndex) { var getFieldDecorator = _this.form.getFieldDecorator; var key = itemProps.key, renderField = itemProps.renderField, renderExtends = itemProps.renderExtends; var label = mergeProps.label, help = mergeProps.help, innerSpan = mergeProps.innerSpan, _mergeProps$addFields2 = mergeProps.addFields, addFields = _mergeProps$addFields2 === void 0 ? false : _mergeProps$addFields2, extend = mergeProps.extend; var itemKey = addFields ? "".concat(key, "[").concat(itemIndex, "]") : key; _this.labelFields[itemKey] = label; return _react["default"].createElement(FormItem, { label: itemIndex === 0 ? label : '', extra: itemIndex === 0 ? help : '', key: "".concat(key).concat(itemIndex) }, _react["default"].createElement(_antd.Row, { gutter: 10 }, _react["default"].createElement(_antd.Col, { span: renderExtends ? innerSpan || renderExtends.avgSpan : _this.defaultConfig.layout.rowSpan }, getFieldDecorator(itemKey, _this._getFieldDecoratorOption(key, itemIndex, mergeProps, formData, addFields, extend))(renderField)), renderExtends ? renderExtends.render : null)); }; this._generateAddFieldButton = function (addKey, key, formData, extend) { var getFieldDecorator = _this.form.getFieldDecorator; var initialValue = [0]; var valueArray = formData && formData[key] || []; if (extend) { valueArray = formData && formData[extend.name]; } if (Array.isArray(valueArray) && valueArray.length > 0) { initialValue = valueArray.map(function (item, index) { return index; }); } getFieldDecorator(addKey, { initialValue: initialValue }); getFieldDecorator("".concat(addKey, "-index"), { initialValue: initialValue.length - 1 }); return _react["default"].createElement(_Button["default"].Add, { key: "button-".concat(_this._getRenderIndex()), onClick: function onClick() { _this._onAddFields(addKey); } }); }; this._onAddFields = function (addKey) { var _this$form$setFieldsV; var keys = _this.form.getFieldValue(addKey); var keyIndex = _this.form.getFieldValue("".concat(addKey, "-index")); var nextKeyIndex = keyIndex + 1; var nextKeys = keys.concat(nextKeyIndex); _this.form.setFieldsValue((_this$form$setFieldsV = {}, _defineProperty(_this$form$setFieldsV, addKey, nextKeys), _defineProperty(_this$form$setFieldsV, "".concat(addKey, "-index"), nextKeyIndex), _this$form$setFieldsV)); }; this._generateRemoveFieldButton = function (addKey, addKeyIndex) { return _react["default"].createElement(_Button["default"], { key: "button-".concat(_this._getRenderIndex()), icon: "minus-circled", onClick: function onClick() { _this._onRemoveFields(addKey, addKeyIndex); } }, _this.defaultConfig.label.remove); }; this._onRemoveFields = function (addKey, addKeyIndex) { var keys = _this.form.getFieldValue(addKey); if (keys.length === 1) { return; } _this.form.setFieldsValue(_defineProperty({}, addKey, keys.filter(function (key) { return key !== addKeyIndex; }))); }; this._generateExtend = function (mergeProps, renderField, renderAddFieldsButton, formData, itemIndex) { var addKey = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : null; var getFieldDecorator = _this.form.getFieldDecorator; var extend = mergeProps.extend, _mergeProps$innerSpan = mergeProps.innerSpan, innerSpan = _mergeProps$innerSpan === void 0 ? 0 : _mergeProps$innerSpan, _mergeProps$addFields3 = mergeProps.addFields, addFields = _mergeProps$addFields3 === void 0 ? false : _mergeProps$addFields3; var renderExtend = []; var renderButtons = []; var renderFields = []; var componentCount = 1; var isButton = false; if (extend && extend.fields) { var keys = Object.keys(extend.fields); keys.forEach(function (key) { var itemKey = addFields ? "".concat(key, "[").concat(itemIndex, "]") : key; var component = extend.fields[key]; if (component.renderType && component.renderType === 'button') { isButton = true; var event = component.event || null; renderButtons.push(_react["default"].createElement(_Button["default"], { key: "button-".concat(_this._getRenderIndex()), icon: component.icon, onClick: function onClick() { if (event) { event.onClick(itemIndex); } } }, component.label)); } else { componentCount += 1; renderFields.push({ key: "field-".concat(_this._getRenderIndex()), render: getFieldDecorator(itemKey, _this._getFieldDecoratorOption(key, itemIndex, component, formData, addFields, extend))(_this._generateField(component)), innerSpan: componentCount.innerSpan || 0 }); } }); } if (renderAddFieldsButton != null) { isButton = true; if (itemIndex === 0) { renderButtons.push(renderAddFieldsButton); } else { renderButtons.push(_this._generateRemoveFieldButton(addKey, itemIndex)); } } var avgSpan = (_this.defaultConfig.layout.rowSpan - innerSpan) / (isButton ? componentCount + 1 : componentCount); renderFields.forEach(function (field) { renderExtend.push(_react["default"].createElement(_antd.Col, { key: "field-".concat(_this._getRenderIndex()), span: field.innerSpan === 0 ? avgSpan : field.innerSpan }, _react["default"].createElement(FormItem, null, field.render))); }); if (renderButtons.length > 0) { renderExtend.push(_react["default"].createElement(_antd.Col, { key: "inner-buttons-".concat(_this._getRenderIndex()), span: avgSpan }, _react["default"].createElement(_Button["default"].Spacing, { size: 10 }, renderButtons))); } return { avgSpan: avgSpan, render: renderExtend }; }; this._generateFields = function () { var properties = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var ui = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var formData = arguments.length > 2 ? arguments[2] : undefined; var isArray = arguments.length > 3 ? arguments[3] : undefined; var getFieldDecorator = _this.form.getFieldDecorator; var rowRender = []; var colRender = []; var avgSpan = 0; if (isArray) { avgSpan = _this._calculateAvgSpan(properties, ui); } var fieldNames = Object.keys(properties); fieldNames.forEach(function (key) { var mergeProps = Object.assign(properties[key], ui[key] || {}); mergeProps.renderType = mergeProps.renderType || _this.defaultConfig.renderType[mergeProps.type]; if (mergeProps.renderType === 'hidden') { getFieldDecorator(key, { initialValue: formData && formData[key] || mergeProps.defaultValue || null }); } else { var formItem = _this._createFormItem(key, mergeProps, _this._generateField(mergeProps), formData); var fieldStyle = {}; if (mergeProps.visible !== undefined && !mergeProps.visible) { fieldStyle.display = 'none'; } if (isArray) { colRender.push(_this._renderCol("col-".concat(_this._getColIndex()), mergeProps.span || avgSpan, formItem, fieldStyle)); } else { rowRender.push(_this._renderRow("row-".concat(_this._getRowIndex()), formItem)); } } }); if (isArray) { rowRender.push(_this._renderRow("row-".concat(_this._getRowIndex()), colRender)); } return rowRender; }; this._generateField = function (mergeProps) { var renderField; var renderType = mergeProps.renderType, autoFocus = mergeProps.autoFocus, readOnly = mergeProps.readOnly, disabled = mergeProps.disabled, _mergeProps$options = mergeProps.options, options = _mergeProps$options === void 0 ? {} : _mergeProps$options, _mergeProps$request = mergeProps.request, request = _mergeProps$request === void 0 ? {} : _mergeProps$request, className = mergeProps.className, _mergeProps$event = mergeProps.event, event = _mergeProps$event === void 0 ? {} : _mergeProps$event, items = mergeProps.items, lastPeriods = mergeProps.lastPeriods, placeholder = mergeProps.placeholder; var fieldProps = _extends({ autoFocus: autoFocus, readOnly: readOnly, disabled: disabled, style: options ? options.style || {} : {}, className: className }, event); switch (renderType) { case 'text': renderField = _react["default"].createElement(_Field.Input, _extends({}, fieldProps, { placeholder: placeholder }, options)); break; case 'textarea': renderField = _react["default"].createElement(_Field.TextArea, _extends({}, fieldProps, { placeholder: placeholder }, options)); break; case 'id': renderField = _react["default"].createElement(_Field.IDInput, _extends({}, fieldProps, { placeholder: placeholder }, options)); break; case 'password': renderField = _react["default"].createElement(_Field.PasswordInput, _extends({}, fieldProps, { placeholder: placeholder }, options)); break; case 'email': renderField = _react["default"].createElement(_Field.EmailInput, _extends({}, fieldProps, { placeholder: placeholder }, options)); break; case 'ip': renderField = _react["default"].createElement(_Field.IPInput, _extends({}, fieldProps, { placeholder: placeholder }, options)); break; case 'select': renderField = _react["default"].createElement(_Field.Select, _extends({}, fieldProps, options, request, { items: items, placeholder: placeholder })); break; case 'checkbox': if (items) { renderField = _react["default"].createElement(_Field.CheckboxGroup, _extends({}, fieldProps, { options: items })); } else { renderField = _react["default"].createElement(_Field.Checkbox, _extends({}, fieldProps, options)); } break; case 'radio': renderField = _react["default"].createElement(_Field.RadioGroup, _extends({}, fieldProps, options, { items: items })); break; case 'datepicker': renderField = _react["default"].createElement(_Field.DatePicker, _extends({}, fieldProps, options)); break; case 'monthpicker': renderField = _react["default"].createElement(MonthPicker, fieldProps); break; case 'daterangepicker': renderField = _react["default"].createElement(_Field.DateRangePicker, _extends({}, fieldProps, options)); break; case 'basedatepicker': renderField = _react["default"].createElement(_Field.BaseDatePicker, _extends({ form: _this.form }, fieldProps, options, { lastPeriods: lastPeriods })); break; case 'timepicker': renderField = _react["default"].createElement(_Field.TimePicker, _extends({}, fieldProps, options)); break; case 'numeric': renderField = _react["default"].createElement(_Field.InputNumber, _extends({}, fieldProps, options)); break; case 'switch': renderField = _react["default"].createElement(_Field.Switch, _extends({}, fieldProps, options)); break; case 'cascader': renderField = _react["default"].createElement(_Field.Cascader, _extends({}, fieldProps, options, { items: items, placeholder: placeholder })); break; case 'rate': renderField = _react["default"].createElement(_Field.Rate, fieldProps); break; case 'slider': renderField = _react["default"].createElement(_Field.Slider, _extends({}, fieldProps, options)); break; case 'upload': renderField = _react["default"].createElement(_Field.Upload, _extends({ form: _this.form }, fieldProps, options, { defaultFileList: mergeProps.defaultFileList })); break; case 'treeselect': renderField = _react["default"].createElement(_Field.TreeSelect, _extends({}, fieldProps, options, { placeholder: placeholder })); break; case 'gridtogrid': renderField = _react["default"].createElement(_Field.GridToGrid, _extends({}, fieldProps, options)); break; default: renderField = null; break; } return renderField; }; this.component = _component; this.form = form; this.parent = parent; this.labelFields = {}; this.defaultConfig = { renderType: { string: 'text', number: 'numeric', "boolean": 'checkbox', array: 'checkbox' }, layout: { rowSpan: 24, rowGutter: 20 }, datepicker: { format: 'YYYY-MM-DD' }, validate: { defaultMessage: '필수 입력 항목입니다.' }, label: { add: '추가', remove: '삭제' } }; this.renderIndex = 1; this.groupIndex = 1; this.rowIndex = 1; this.colIndex = 1; this.dividerIndex = 1; } _createClass(FormHelpers, [{ key: "_convertValue", value: function _convertValue(key, itemIndex, formData, mergeProps, addFields, extend) { var value; if (addFields) { var arrayValues; if (!extend) { arrayValues = formData && formData[key] || null; if (arrayValues && Array.isArray(arrayValues)) { value = arrayValues[itemIndex] || mergeProps.defaultValue || null; } else { value = mergeProps.defaultValue || null; } } else { arrayValues = formData && formData[extend.name] || null; if (arrayValues && Array.isArray(arrayValues) && arrayValues.length > 0 && arrayValues.length > itemIndex) { value = arrayValues[itemIndex][key] || mergeProps.defaultValue || null; } else { value = mergeProps.defaultValue || null; } } } else { value = formData && formData[key] || mergeProps.defaultValue || null; } if (value !== null && mergeProps.renderType) { if (mergeProps.renderType === 'datepicker') { value = (0, _moment["default"])(value, this.defaultConfig.datepicker.format); } } if (value === null) { if (mergeProps.renderType === 'select') { value = []; } } return value; } }]); return FormHelpers; }(); var _default = FormHelpers; exports["default"] = _default;