UNPKG

tntd

Version:

tntd是基于 TNT Design 设计体系的 React UI 组件库,主要用于研发企业级中后台产品。

470 lines (468 loc) 18.4 kB
"use strict"; function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _throttle2 = _interopRequireDefault(require("lodash/throttle")); var _pickBy2 = _interopRequireDefault(require("lodash/pickBy")); var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty")); var _get2 = _interopRequireDefault(require("lodash/get")); var _debounce2 = _interopRequireDefault(require("lodash/debounce")); var _classnames = _interopRequireDefault(require("classnames")); var _react = _interopRequireWildcard(require("react")); var _reactDom = require("react-dom"); var _prevLocale = require("../prev-locale"); var _spin = _interopRequireDefault(require("../spin")); var _table = _interopRequireDefault(require("../table")); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); } function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); } function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); } function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); } function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); } var __rest = void 0 && (void 0).__rest || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; /** * @file QueryList * @author you.zhang */ var QueryList = exports["default"] = /*#__PURE__*/function (_React$PureComponent) { function QueryList(props) { var _this; _classCallCheck(this, QueryList); var _a; _this = _callSuper(this, QueryList, [props]); Object.defineProperty(_this, "onWindowResize", { enumerable: true, configurable: true, writable: true, value: (0, _debounce2["default"])(function () { var scroll = _this.state.scroll; _this.setState({ scroll: Object.assign(Object.assign({}, scroll), { y: window.innerHeight - (_this.initialTop || _this.props.top || 200) }) }); }, 50) }); Object.defineProperty(_this, "fetchData", { enumerable: true, configurable: true, writable: true, value: function value() { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, callback = _ref.callback, _ref$showLoading = _ref.showLoading, showLoading = _ref$showLoading === void 0 ? true : _ref$showLoading, isInterval = _ref.isInterval; var _this$props = _this.props, query = _this$props.qlsProps.query, defaultExpandAllRows = _this$props.defaultExpandAllRows, rowKey = _this$props.rowKey, actions = _this$props.actions; var pagination = _this.state.pagination; var hasPagination = _this.props.pagination !== false; if (hasPagination) { params = Object.assign({ pageSize: pagination.pageSize, current: pagination.current }, params); } showLoading && _this.setState({ loading: true }); // 当用户操作查询还未得到服务端响应前,不要执行轮询请求时序问题导致覆盖 if (!isInterval) { _this.isFetching = true; } actions.setData('submittedFormData', params); return query((0, _pickBy2["default"])(params, function (val) { return val !== '' && val !== null && val !== undefined; })).then(function (result) { var dataSource = hasPagination ? result.data || [] : result; _this.setState(Object.assign({ loading: false, dataSource: dataSource, pagination: hasPagination ? { pageSize: result.pageSize || pagination.pageSize || 10, current: result.current || params.current || pagination.current || 1, total: result.total || 0 } : null }, defaultExpandAllRows ? { expandedRowKeys: dataSource.map(function (row) { return row[rowKey]; }) } : {}), function () { actions.setData('pagination', _this.state.pagination); actions.setData('dataSource', _this.state.dataSource); }); })["finally"](function () { _this.isFetching = false; showLoading && _this.setState({ loading: false }); callback && callback(); }); } }); Object.defineProperty(_this, "updateDataSource", { enumerable: true, configurable: true, writable: true, value: function value(dataSource) { _this.setState({ dataSource: dataSource }); _this.props.actions.setData('dataSource', dataSource); } }); Object.defineProperty(_this, "updatePagination", { enumerable: true, configurable: true, writable: true, value: function value(pagination) { _this.setState({ pagination: pagination }); _this.props.actions.setData('pagination', pagination); } }); Object.defineProperty(_this, "onFormChange", { enumerable: true, configurable: true, writable: true, value: function value(values) { _this.formData = (0, _pickBy2["default"])(Object.assign(Object.assign({}, values), { sorter: (0, _get2["default"])(_this.formData, 'sorter'), filters: (0, _get2["default"])(_this.formData, 'filters') }), function (val) { return val !== undefined; }); } }); Object.defineProperty(_this, "onSearch", { enumerable: true, configurable: true, writable: true, value: function value(values) { var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, callback = _ref2.callback, _ref2$showLoading = _ref2.showLoading, showLoading = _ref2$showLoading === void 0 ? true : _ref2$showLoading; _this.formData = Object.assign(Object.assign({}, _this.formData), values); // this.props.actions.setData('formData', this.formData); return _this.fetchData(_this.formData, { callback: callback, showLoading: showLoading }); } }); Object.defineProperty(_this, "onTableChange", { enumerable: true, configurable: true, writable: true, value: function value(pagination, filters, sorter) { var _this$props2 = _this.props, actions = _this$props2.actions, localPagination = _this$props2.localPagination; var tableParams = { pageSize: pagination.pageSize, current: pagination.current, filters: (0, _isEmpty2["default"])(filters) ? undefined : filters, sorter: (0, _isEmpty2["default"])(sorter) ? undefined : sorter }; Object.assign(_this.formData, tableParams); // 排序变化暂时不处理,因为有时可能是前端sorter不需要走请求 // 所以暂时排序有使用者自己处理 if (!localPagination) { _this.fetchData(Object.assign(Object.assign({}, actions.getSubmittedFormData()), tableParams)); return; } var dataSource = _this.state.dataSource; // 前端本地分页 if (localPagination) { _this.setState({ dataSource: dataSource, pagination: { current: pagination.current, pageSize: pagination.pageSize, total: pagination.total } }, function () { actions.setData('formData', _this.formData); actions.setData('pagination', _this.state.pagination); }); } } }); Object.defineProperty(_this, "onTableBodyScroll", { enumerable: true, configurable: true, writable: true, value: (0, _throttle2["default"])(function (evt) { _this.updateIsScrollToBottom(evt.target); }, 50) }); Object.defineProperty(_this, "updateIsScrollToBottom", { enumerable: true, configurable: true, writable: true, value: function value(tableBody) { var isScrollToBottom = function isScrollToBottom(tableBody) { var scrollHeight = tableBody.scrollHeight, scrollTop = tableBody.scrollTop, offsetHeight = tableBody.offsetHeight; return scrollHeight === scrollTop + offsetHeight; }; _this.setState({ hasScrollToBottom: isScrollToBottom(tableBody) }); } }); _this.state = { loading: false, dataSource: [], pagination: { // pageSize: 20, current: 1, total: 0 }, scroll: props.scroll, hasScrollToBottom: !((_a = props.scroll) === null || _a === void 0 ? void 0 : _a.y) }; _this.tableRef = (0, _react.createRef)(); var actions = props.actions; actions.on('search', _this.onSearch); actions.on('setTableDataSource', _this.updateDataSource); actions.on('setPagination', _this.updatePagination); actions.on('setFormData', _this.onFormChange); return _this; } _inherits(QueryList, _React$PureComponent); return _createClass(QueryList, [{ key: "render", value: function render() { var _a = this.props, columns = _a.columns, children = _a.children, pagination = _a.pagination, _a$localPagination = _a.localPagination, localPagination = _a$localPagination === void 0 ? false : _a$localPagination, _a$paginationSticky = _a.paginationSticky, paginationSticky = _a$paginationSticky === void 0 ? false : _a$paginationSticky, _a$className = _a.className, className = _a$className === void 0 ? '' : _a$className, qlsProps = _a.qlsProps, rest = __rest(_a, ["columns", "children", "pagination", "localPagination", "paginationSticky", "className", "qlsProps"]); var _this$state = this.state, dataSource = _this$state.dataSource, loading = _this$state.loading, _this$state$expandedR = _this$state.expandedRowKeys, expandedRowKeys = _this$state$expandedR === void 0 ? [] : _this$state$expandedR, scroll = _this$state.scroll, hasScrollToBottom = _this$state.hasScrollToBottom; var hasPagination = typeof pagination !== 'undefined' ? pagination : true; var paginationInfo = Object.assign(Object.assign(Object.assign({ hideOnSinglePage: false }, this.state.pagination), { // size: 'small', showQuickJumper: true, showSizeChanger: true, showTotal: function showTotal(total) { return (0, _prevLocale.getText)('totalRecords', (0, _prevLocale.getLanguage)(), total); } }), pagination || {}); var expandProps = Object.assign({}, rest.defaultExpandAllRows ? { expandedRowKeys: expandedRowKeys, onExpandedRowsChange: this.onExpandedRowsChange } : {}); return _react["default"].createElement("div", { className: (0, _classnames["default"])("tnt-querylistscene-list ".concat(className), { paginationSticky: paginationSticky, hasScrollToBottom: hasScrollToBottom }) }, _react["default"].createElement(_spin["default"], { spinning: loading }, _react["default"].createElement(_table["default"], Object.assign({ ref: this.tableRef, shadowed: false, bordered: false }, expandProps, rest, columns ? { columns: columns } : {}, { scroll: scroll, dataSource: dataSource, pagination: hasPagination ? paginationInfo : localPagination, onChange: this.onTableChange }), !columns && children))); } }, { key: "componentDidMount", value: function componentDidMount() { var _this2 = this; var _a; var _this$props3 = this.props, qlsProps = _this$props3.qlsProps, actions = _this$props3.actions; this.formData = Object.assign(Object.assign({}, actions.getFormData() || {}), qlsProps.memory ? actions.getPagination() : {}); if (!qlsProps.initSearch) { // 默认进来不请求 this.fetchData(this.formData)["finally"](function () { // 轮询 if (qlsProps.interval && !_this2.isUnmounted) { var _doIntervalQuery = function doIntervalQuery(ms) { // 组件unmounted后,不执行轮训逻辑 if (!_this2.isUnmounted) { _this2.timmer = setTimeout(function () { // 如果有查询请求还未结束,则该次轮询不执行,重新设置下次轮询 if (!_this2.isFetching) { _this2.fetchData(actions.getSubmittedFormData(), { isInterval: true, showLoading: false }).then(function () { _doIntervalQuery(ms); }); } else { _doIntervalQuery(ms); } }, ms); } }; _doIntervalQuery(qlsProps.interval); } }); } if ((_a = this.state.scroll) === null || _a === void 0 ? void 0 : _a.y) { window.addEventListener('resize', this.onWindowResize); if (this.tableRef.current) { // table内垂直滚动,需要动态设置分页组件上阴影样式 var tableBody = (0, _reactDom.findDOMNode)(this.tableRef.current).querySelector('.ant-table-body'); this.initialTop = window.innerHeight - this.state.scroll.y; this.updateIsScrollToBottom(tableBody); tableBody.addEventListener('scroll', this.onTableBodyScroll); } } } }, { key: "componentWillUnmount", value: function componentWillUnmount() { var actions = this.props.actions; this.isUnmounted = true; actions.removeListener('search', this.onSearch); actions.removeListener('setTableDataSource', this.updateDataSource); actions.removeListener('setPagination', this.updatePagination); actions.removeListener('setFormData', this.onFormChange); window.removeEventListener('resize', this.onWindowResize); this.timmer && clearTimeout(this.timmer); } }]); }(_react["default"].PureComponent);