UNPKG

ukelli-ui

Version:

ukelli-ui 是基于 React 的 UI 库,提供简约和功能齐全的组件,可高度定制的组件接口,灵活的配置,提供给开发者另一种开发思路,也致力于尝试不同的组件使用和开发方向。

327 lines (274 loc) 13.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _react = require("react"); var _propTypes = _interopRequireDefault(require("prop-types")); var _basicHelper = require("basic-helper"); 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 asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(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; } var rewiteMsg = { checkResIsSuccess: 'rewrite this.checkResIsSuccess', defaultStateAfterPost: 'rewrite this.defaultStateAfterPost', wrapDataFilter: 'rewrite this.wrapDataFilter', request: "\n rewrite this async this.request:\n\n class A extends ActionBasic {\n async request(sendData) {\n return $request.send(reqObj);\n }\n }\n " }; /** * 提供基础的 react state 管理方式 * 与业务分离,提供一些 hook 接口,把每一步都拆分为可处理的流程,便于根据不同以为定制 * 提供 log 在开发环境时提示的功能 */ var StateManager = /*#__PURE__*/ function (_Component) { _inherits(StateManager, _Component); function StateManager() { var _getPrototypeOf2; var _this; _classCallCheck(this, StateManager); for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(StateManager)).call.apply(_getPrototypeOf2, [this].concat(args))); _defineProperty(_assertThisInitialized(_this), "defaultPaging", {}); _defineProperty(_assertThisInitialized(_this), "state", { loading: false, // 是否加载中 submiting: false, // 是否提交中 querying: false, // 是否查询中 ready: true, // 组件是否已经准备,主要是用于需要异步获取查询条件或表单数据的表单与表格 hasErr: false, // 是否有错误 resDesc: '', // 返回的描述 pagingInfo: {}, // 分页信息 resData: {} // 返回的数据 }); return _this; } _createClass(StateManager, [{ key: "log", value: function log() { var _console; process.env.NODE_ENV == 'development' ? (_console = console).log.apply(_console, arguments) : ''; } }, { key: "setModal", value: function setModal(modalSetting) { var onNavigate = this.props.onNavigate; onNavigate && onNavigate({ type: 'MODAL', modalSetting: modalSetting }); } }, { key: "toBasicUnitMoney", value: function toBasicUnitMoney(money) { return $GH.ToBasicUnitMoney(money); } }, { key: "closeModal", value: function closeModal() { var onNavigate = this.props.onNavigate; onNavigate && onNavigate({ type: 'CLOSE_MODAL' }); } }, { key: "getStateBeforePost", value: function getStateBeforePost(params, actingRef) { var _objectSpread2; return _objectSpread((_objectSpread2 = {}, _defineProperty(_objectSpread2, actingRef, true), _defineProperty(_objectSpread2, "hasErr", false), _defineProperty(_objectSpread2, "resDesc", ''), _objectSpread2), params); } }, { key: "componentWillUnmount", value: function componentWillUnmount() { this.__unmount = true; } }, { key: "basicUnitFilter", value: function basicUnitFilter(data) { var _this2 = this; var listRefs = ['TransAmount']; listRefs.forEach(function (ref) { if (data[ref]) { data[ref] = _this2.toBasicUnitMoney(data.TransAmount); } }); return data; } }, { key: "delayExec", value: function delayExec() { var _this$_delayExec; if (!this._delayExec) this._delayExec = new _basicHelper.DebounceClass(); return (_this$_delayExec = this._delayExec).exec.apply(_this$_delayExec, arguments); } }, { key: "defaultStateAfterPost", value: function defaultStateAfterPost(res, sendOptions) { this.log(rewiteMsg.defaultStateAfterPost); return {}; } }, { key: "stateSetter", value: function stateSetter(state) { if (!this.__unmount) this.setState(state); } }, { key: "request", value: function () { var _request = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee2() { return regeneratorRuntime.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: // const sendDataRes = await $MN.$request.send({sendData}); this.log(rewiteMsg.request); return _context2.abrupt("return", _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee() { return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: return _context.abrupt("return"); case 1: case "end": return _context.stop(); } } }, _callee); }))()); case 2: case "end": return _context2.stop(); } } }, _callee2, this); })); function request() { return _request.apply(this, arguments); } return request; }() }, { key: "checkResIsSuccess", value: function checkResIsSuccess() { this.log(rewiteMsg.checkResIsSuccess); return true; } }, { key: "_checkResIsSuccess", value: function _checkResIsSuccess(res, onSuccessCallback) { // return res.Header.ErrCode.Code == '0'; var _this$checkResIsSucce = this.checkResIsSuccess(res), success = _this$checkResIsSucce.success, data = _this$checkResIsSucce.data; if (success) (0, _basicHelper.Call)(onSuccessCallback, data); return success; } }, { key: "wrapDataFilter", value: function wrapDataFilter(sendData) { this.log(rewiteMsg.wrapDataFilter); return sendData; } }, { key: "_sendData", value: function () { var _sendData2 = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee3(options) { var method, _options$data, data, _options$stateBeforeP, stateBeforePost, _options$stateAfterPo, stateAfterPostHook, _options$actingRef, actingRef, onSuccess, onRes, sendData, sendDataRes; return regeneratorRuntime.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: /** * 参数说明 * method@String 请求的接口 * --------------------------------- * data@Object 请求的 Data,一般由继承 Helper 组件包装成功后传入, * 参见 action-form-basic || action-report-basic * action-form-basic 处理大部分表单的统一验证 * action-report-basic 处理大部分报表的查询条件业务 * --------------------------------- * stateBeforePost@Object 追加 state 到请求发起前的 setState * stateAfterPostHook@func 追加 state 到请求完成后的 setState,必须返回一个 Object * actingRef@String 请求状态的标记为,默认是 loading,兼容记录多个接口的请求状态 * onSuccess@Func 业务请求成功的 callback * onRes@Func 发起的请求成功,包括业务错误 */ method = options.method, _options$data = options.data, data = _options$data === void 0 ? {} : _options$data, _options$stateBeforeP = options.stateBeforePost, stateBeforePost = _options$stateBeforeP === void 0 ? {} : _options$stateBeforeP, _options$stateAfterPo = options.stateAfterPostHook, stateAfterPostHook = _options$stateAfterPo === void 0 ? function (res) {} : _options$stateAfterPo, _options$actingRef = options.actingRef, actingRef = _options$actingRef === void 0 ? 'loading' : _options$actingRef, onSuccess = options.onSuccess, onRes = options.onRes; /** * 第一步 * 设置对应的 loading state */ this.stateSetter(this.getStateBeforePost(stateBeforePost, actingRef)); /** * 第二步 * 包装成 uke request 的 sendData */ sendData = _objectSpread({}, method ? { method: method } : {}, { data: this.wrapDataFilter(data) }); /** * 第三步 * 通过自身接口发送数据 */ _context3.next = 5; return this.request({ sendData: sendData }); case 5: sendDataRes = _context3.sent; /** * 第四步 * 发送成功后的回调处理 * 在 setState 之前执行 stateAfterPostHook * */ (0, _basicHelper.Call)(onRes, sendDataRes); this._checkResIsSuccess(sendDataRes, onSuccess); this.stateSetter(_objectSpread({}, this.defaultStateAfterPost(sendDataRes, options), (0, _basicHelper.Call)(stateAfterPostHook, sendDataRes))); case 9: case "end": return _context3.stop(); } } }, _callee3, this); })); function _sendData(_x) { return _sendData2.apply(this, arguments); } return _sendData; }() }]); return StateManager; }(_react.Component); exports["default"] = StateManager; _defineProperty(StateManager, "propTypes", { onNavigate: _propTypes["default"].func });