sula-components
Version:
586 lines (487 loc) • 16.4 kB
JavaScript
import React, { useState, useRef, useContext, useEffect } from 'react';
import { Popconfirm, Button, Table, Form, Input } from 'antd';
import { DeleteOutlined } from '@ant-design/icons';
import { omit } from 'lodash';
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 _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 _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 ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly) symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
if (i % 2) {
ownKeys(Object(source), true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
}
return target;
}
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 _getPrototypeOf(o) {
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
return o.__proto__ || Object.getPrototypeOf(o);
};
return _getPrototypeOf(o);
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
o.__proto__ = p;
return o;
};
return _setPrototypeOf(o, p);
}
function _isNativeReflectConstruct() {
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
if (Reflect.construct.sham) return false;
if (typeof Proxy === "function") return true;
try {
Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
return true;
} catch (e) {
return false;
}
}
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 _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 _assertThisInitialized(self) {
if (self === void 0) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return self;
}
function _possibleConstructorReturn(self, call) {
if (call && (typeof call === "object" || typeof call === "function")) {
return call;
}
return _assertThisInitialized(self);
}
function _createSuper(Derived) {
var hasNativeReflectConstruct = _isNativeReflectConstruct();
return function _createSuperInternal() {
var Super = _getPrototypeOf(Derived),
result;
if (hasNativeReflectConstruct) {
var NewTarget = _getPrototypeOf(this).constructor;
result = Reflect.construct(Super, arguments, NewTarget);
} else {
result = Super.apply(this, arguments);
}
return _possibleConstructorReturn(this, result);
};
}
function _slicedToArray(arr, i) {
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
}
function _toConsumableArray(arr) {
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
}
function _arrayWithoutHoles(arr) {
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
}
function _arrayWithHoles(arr) {
if (Array.isArray(arr)) return arr;
}
function _iterableToArray(iter) {
if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
}
function _iterableToArrayLimit(arr, i) {
if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
var _arr = [];
var _n = true;
var _d = false;
var _e = undefined;
try {
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
_arr.push(_s.value);
if (i && _arr.length === i) break;
}
} catch (err) {
_d = true;
_e = err;
} finally {
try {
if (!_n && _i["return"] != null) _i["return"]();
} finally {
if (_d) throw _e;
}
}
return _arr;
}
function _unsupportedIterableToArray(o, minLen) {
if (!o) return;
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(o);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
}
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
return arr2;
}
function _nonIterableSpread() {
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
function _nonIterableRest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
}
var EditableContext = React.createContext({});
var EditableRow = function EditableRow(_ref) {
var index = _ref.index,
props = _objectWithoutProperties(_ref, ["index"]);
var _Form$useForm = Form.useForm(),
_Form$useForm2 = _slicedToArray(_Form$useForm, 1),
form = _Form$useForm2[0];
return React.createElement(Form, {
form: form,
component: false
}, React.createElement(EditableContext.Provider, {
value: form
}, React.createElement("tr", Object.assign({}, props))));
};
var EditableCell = function EditableCell(_ref2) {
var title = _ref2.title,
editable = _ref2.editable,
children = _ref2.children,
dataIndex = _ref2.dataIndex,
record = _ref2.record,
handleSave = _ref2.handleSave,
isRequired = _ref2.isRequired,
restProps = _objectWithoutProperties(_ref2, ["title", "editable", "children", "dataIndex", "record", "handleSave", "isRequired"]);
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
editing = _useState2[0],
setEditing = _useState2[1];
var inputRef = useRef();
var form = useContext(EditableContext);
var useDidMount = function useDidMount(fn) {
return useEffect(function () {
return fn && fn();
}, []);
};
useDidMount(function () {
dataIndex && form.setFieldsValue(_defineProperty({}, dataIndex, record[dataIndex]));
});
var save = /*#__PURE__*/function () {
var _ref3 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
var values;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
_context.next = 3;
return form.validateFields();
case 3:
values = _context.sent;
handleSave(_objectSpread2(_objectSpread2({}, record), values));
_context.next = 10;
break;
case 7:
_context.prev = 7;
_context.t0 = _context["catch"](0);
console.log('Save failed:', _context.t0);
case 10:
case "end":
return _context.stop();
}
}
}, _callee, null, [[0, 7]]);
}));
return function save() {
return _ref3.apply(this, arguments);
};
}();
var childNode = children;
childNode = editable ? React.createElement(Form.Item, {
style: {
margin: 0
},
name: dataIndex,
rules: [isRequired ? {
required: true,
message: "".concat(title, " is required.")
} : {}]
}, React.createElement(Input, {
ref: inputRef,
onPressEnter: save,
onBlur: save
})) : React.createElement("div", {
className: "editable-cell-value-wrap",
style: {
paddingRight: 24
}
}, children);
return React.createElement("td", Object.assign({}, restProps), childNode);
};
var EditableTable = /*#__PURE__*/function (_React$Component) {
_inherits(EditableTable, _React$Component);
var _super = _createSuper(EditableTable);
function EditableTable(props) {
var _this;
_classCallCheck(this, EditableTable);
_this = _super.call(this, props);
_this.handleDelete = function (key) {
var onChange = _this.props.onChange;
var dataSource = _toConsumableArray(_this.state.dataSource);
var newData = dataSource.filter(function (item) {
return item.key !== key;
});
_this.setState({
dataSource: newData
});
onChange(newData.map(function (item) {
return omit(item, ['key']);
}));
};
_this.handleAdd = function () {
var _this$props = _this.props,
columns = _this$props.columns,
onChange = _this$props.onChange;
var _this$state = _this.state,
count = _this$state.count,
dataSource = _this$state.dataSource;
var newData = {};
columns.forEach(function (value, index, array) {
newData[value.dataIndex] = '';
});
newData.key = "".concat(count + 1);
_this.setState({
dataSource: [].concat(_toConsumableArray(dataSource), [newData]),
count: count + 1
});
onChange([].concat(_toConsumableArray(dataSource), [newData]).map(function (item) {
return omit(item, ['key']);
}));
};
_this.handleSave = function (row) {
var onChange = _this.props.onChange;
var newData = _toConsumableArray(_this.state.dataSource);
var index = newData.findIndex(function (item) {
return row.key === item.key;
});
var item = newData[index];
newData.splice(index, 1, _objectSpread2(_objectSpread2({}, item), row));
_this.setState({
dataSource: newData
});
onChange(newData.map(function (item) {
return omit(item, ['key']);
}));
};
_this.columns = !props.disabled ? [].concat(_toConsumableArray(props.columns), [{
title: props.formatMessage && props.formatMessage({
id: 'sula-component.edit-table.action'
}) ? props.formatMessage({
id: 'sula-component.edit-table.action'
}) : '操作',
width: '30',
dataIndex: 'operation',
render: function render(undefined$1, record) {
return _this.state.dataSource.length >= 1 ? React.createElement(Popconfirm, {
title: "Sure to delete?",
onConfirm: function onConfirm() {
return _this.handleDelete(record.key);
}
}, React.createElement("a", null, React.createElement(DeleteOutlined, null))) : null;
}
}]) || [] : props.columns;
_this.state = {
dataSource: [],
count: 0
};
return _this;
}
_createClass(EditableTable, [{
key: "componentWillReceiveProps",
value: function componentWillReceiveProps(nextProps) {
if (nextProps.value) {
this.setState({
dataSource: nextProps.value.map(function (item, index) {
return _objectSpread2(_objectSpread2({}, item), {}, {
key: index + 1
});
}),
total: nextProps.value.length
});
}
}
}, {
key: "render",
value: function render() {
var _this2 = this;
var dataSource = this.state.dataSource;
var _this$props2 = this.props,
disabled = _this$props2.disabled,
addNode = _this$props2.addNode,
formatMessage = _this$props2.formatMessage,
restProps = _objectWithoutProperties(_this$props2, ["disabled", "addNode", "formatMessage"]);
var components = {
body: {
row: EditableRow,
cell: EditableCell
}
};
var columns = this.columns.map(function (col) {
if (!col.editable) {
return col;
}
return _objectSpread2(_objectSpread2({}, col), {}, {
onCell: function onCell(record) {
return {
record: record,
editable: col.editable && !disabled,
dataIndex: col.dataIndex,
title: col.title,
handleSave: _this2.handleSave,
isRequired: col.isRequired
};
}
});
});
return React.createElement("div", null, React.createElement("div", {
style: {
display: disabled ? 'none' : 'block',
height: '48px'
}
}, addNode ? React.createElement("span", {
onClick: this.handleAdd
}, addNode) : React.createElement(Button, {
onClick: this.handleAdd,
type: "primary",
style: {
marginBottom: 16
}
}, formatMessage && formatMessage({
id: 'sula-component.edit-table.addRow'
}) ? formatMessage({
id: 'sula-component.edit-table.addRow'
}) : '添加一行')), React.createElement(Table, Object.assign({}, restProps, {
components: components,
rowClassName: function rowClassName() {
return 'editable-row';
},
bordered: true,
dataSource: dataSource,
columns: columns,
rowKey: "key"
})));
}
}]);
return EditableTable;
}(React.Component);
export { EditableTable as EditTable };