ukelli-ui
Version:
ukelli-ui 是基于 React 的 UI 库,提供简约和功能齐全的组件,可高度定制的组件接口,灵活的配置,提供给开发者另一种开发思路,也致力于尝试不同的组件使用和开发方向。
341 lines (272 loc) • 13.4 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _ukeUtils = require("../uke-utils");
var _buttonNormal = _interopRequireDefault(require("../button/button-normal"));
var _tipPanel = _interopRequireDefault(require("../tip-panel/tip-panel"));
var _toast = _interopRequireDefault(require("../toast/toast"));
var _formGenerator = _interopRequireDefault(require("./form-generator"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(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 _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
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; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
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; }
/**
* 默认一个按钮,可以配置多个按钮,
* btnConfig: [{
* action: func,
* text: string,
* className: string
* }]
* 一旦设定 btnConfig, onSubmit btnText className 将会失效
*/
var FormLayout =
/*#__PURE__*/
function (_UkeComponent) {
_inherits(FormLayout, _UkeComponent);
function FormLayout() {
var _getPrototypeOf2;
var _this;
_classCallCheck(this, FormLayout);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(FormLayout)).call.apply(_getPrototypeOf2, [this].concat(args)));
_defineProperty(_assertThisInitialized(_this), "_handleClickBtn", function (_ref) {
var actingRef = _ref.actingRef,
_ref$preCheck = _ref.preCheck,
preCheck = _ref$preCheck === void 0 ? true : _ref$preCheck,
action = _ref.action,
type = _ref.type;
_this.__changeedDesc = false;
var _action = function _action() {
action(_this.formHelper, actingRef);
};
if (preCheck) {
if (_this.preCheck()) {
_action();
}
} else {
_action();
}
});
_defineProperty(_assertThisInitialized(_this), "saveFormRef", function (e) {
if (!e) return;
_this.formHelper = e;
_this.clearValue = e.clearValue;
});
return _this;
}
_createClass(FormLayout, [{
key: "shouldComponentUpdate",
// static getDerivedStateFromProps(nextProps, prevState) {
// const { resDesc } = nextProps;
// if(prevState.prevResDesc !== resDesc) {
// return {
// prevResDesc: resDesc,
// changeDescFromProps: true
// };
// } else {
// return {
// changeDescFromProps: false
// };
// }
// }
// componentDidUpdate() {
// const { changeDescFromProps } = this.state;
// if(changeDescFromProps) {
// this.showResDesc(this.props);
// }
// }
// TODO: 废除这个方法,并且不影响之前的效果
// componentWillReceiveProps(nextProps) {
// const { resDesc } = nextProps;
// if(resDesc && this.props.resDesc !== resDesc) {
// this.showResDesc(nextProps);
// }
// }
value: function shouldComponentUpdate(nextProps, nextState, nextContext) {
var resDesc = nextProps.resDesc;
if (!this.__changeedDesc && resDesc && this.props.resDesc !== resDesc) {
this.__changeedDesc = true;
this.showResDesc(nextProps);
}
return true;
}
}, {
key: "showResDesc",
value: function showResDesc(resInfo) {
!!resInfo.resDesc && this.toast && this.toast.show(resInfo.resDesc, resInfo.hasErr ? 'error' : 'success');
}
}, {
key: "showDesc",
value: function showDesc() {
this.showResDesc.apply(this, arguments);
}
}, {
key: "preCheck",
value: function preCheck() {
if (!this.formHelper) return;
var _this$formHelper$chec = this.formHelper.checkForm(),
isPass = _this$formHelper$chec.isPass,
desc = _this$formHelper$chec.desc,
ref = _this$formHelper$chec.ref;
if (!isPass) {
this.showResDesc({
resDesc: desc + this.gm('必填|选'),
hasErr: true
});
}
return isPass;
}
}, {
key: "render",
value: function render() {
var _this2 = this;
var _this$props = this.props,
tipInfo = _this$props.tipInfo,
btnConfig = _this$props.btnConfig,
_this$props$className = _this$props.className,
className = _this$props$className === void 0 ? '' : _this$props$className,
isVertical = _this$props.isVertical,
isMobile = _this$props.isMobile,
showInputTitle = _this$props.showInputTitle,
childrenBeforeForm = _this$props.childrenBeforeForm,
childrenAfterForm = _this$props.childrenAfterForm,
childrenBeforeBtn = _this$props.childrenBeforeBtn,
_this$props$formOptio = _this$props.formOptions,
formOptions = _this$props$formOptio === void 0 ? [] : _this$props$formOptio,
_this$props$btnText = _this$props.btnText,
btnText = _this$props$btnText === void 0 ? this.gm('确定提交') : _this$props$btnText,
onSubmit = _this$props.onSubmit,
onChange = _this$props.onChange,
other = _objectWithoutProperties(_this$props, ["tipInfo", "btnConfig", "className", "isVertical", "isMobile", "showInputTitle", "childrenBeforeForm", "childrenAfterForm", "childrenBeforeBtn", "formOptions", "btnText", "onSubmit", "onChange"]);
var formType = '';
var onSubmitForGen = null;
var _btnConfig = btnConfig ? btnConfig : [{
action: onSubmit,
text: btnText,
color: 'theme',
type: 'button',
className: 'theme'
}];
var tipDOM = tipInfo ? _react["default"].createElement(_tipPanel["default"], tipInfo) : null;
var btnGroup = _btnConfig.map(function (btn, idx) {
var action = btn.action,
text = btn.text,
className = btn.className,
color = btn.color,
_btn$actingRef = btn.actingRef,
actingRef = _btn$actingRef === void 0 ? 'loading' : _btn$actingRef,
_btn$type = btn.type,
type = _btn$type === void 0 ? 'button' : _btn$type;
var isBtnLoading = _this2.props[actingRef];
var isActive = !!action && !isBtnLoading;
var key = text + actingRef;
var isSubmit = type === 'submit';
if (isSubmit) {
if (formType === 'submit') console.warn('定义了多个 type 为 submit 的按钮');
formType = 'submit';
onSubmitForGen = function onSubmitForGen(e) {
_this2._handleClickBtn(btn);
};
}
return _react["default"].createElement("span", {
className: "mr5",
key: key
}, _react["default"].createElement(_buttonNormal["default"], {
disabled: !isActive,
text: isBtnLoading ? text + _this2.gm('中') + '...' : text,
loading: isBtnLoading,
type: type,
className: color || className || '',
onClick: function onClick(e) {
return !isSubmit && _this2._handleClickBtn(btn);
}
}));
});
return _react["default"].createElement("div", {
className: "form-layout" + (className ? ' ' + className : '')
}, _react["default"].createElement(_toast["default"], {
ref: function ref(toast) {
return _this2.toast = toast;
}
}), tipDOM, childrenBeforeForm, _react["default"].createElement(_formGenerator["default"], _extends({}, other, {
type: formType,
onChange: onChange,
onSubmit: onSubmitForGen,
isVertical: isVertical,
isMobile: isMobile,
showInputTitle: showInputTitle,
formOptions: formOptions,
ref: this.saveFormRef
}), childrenBeforeBtn, _react["default"].createElement("div", {
className: "form-group"
}, _react["default"].createElement("span", {
className: "control-label"
}), btnGroup), childrenAfterForm));
}
}]);
return FormLayout;
}(_ukeUtils.UkeComponent);
exports["default"] = FormLayout;
_defineProperty(FormLayout, "propTypes", {
/** FormGenerator 的配置 */
formOptions: _formGenerator["default"].propTypes.formOptions,
/** 只有一个操作按钮的 sumbit 回调 */
onSubmit: _propTypes["default"].func,
/** FormGenerator 的变化回调 */
onChange: _propTypes["default"].func,
/** 只有一个按钮时传入的按钮 text */
btnText: _propTypes["default"].string,
/** FormLayout 的 className */
className: _propTypes["default"].string,
/** 是否已准备好渲染 */
ready: _propTypes["default"].bool,
/** 传入 TipPanel 控件的参数 */
tipInfo: _propTypes["default"].shape({
text: _propTypes["default"].any,
texts: _propTypes["default"].array,
title: _propTypes["default"].any
}),
/** 可以配置一个或多个操作按钮 */
btnConfig: _propTypes["default"].arrayOf(_propTypes["default"].shape({
/** 该按钮的操作 */
action: _propTypes["default"].func,
/** 该按钮的类型 */
type: _propTypes["default"].oneOf(['submit', 'button']),
/** 该按钮的字 */
text: _propTypes["default"].string,
/** 记录该按钮的状态 */
actingRef: _propTypes["default"].string,
/** 按钮颜色 */
color: _propTypes["default"].string,
/** 该按钮是否需要预检查 */
preCheck: _propTypes["default"].bool
})),
/** 是否竖立显示 */
isVertical: _propTypes["default"].bool,
/** 是否移动端 */
isMobile: _propTypes["default"].bool,
/** 操作的返回是否有错误 */
hasErr: _propTypes["default"].bool,
/** 操作返回的消息 */
resDesc: _propTypes["default"].string,
/** 在 form 之前插入的 children */
childrenBeforeForm: _propTypes["default"].any,
/** 在 form 之后插入的 children */
childrenAfterForm: _propTypes["default"].any
});