UNPKG

@aliretail/cuckoo-official-retailforce-form-icon-bar

Version:
296 lines (248 loc) 9.31 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports["default"] = void 0; var _checkbox = _interopRequireDefault(require("@alifd/next/lib/checkbox")); var _icon = _interopRequireDefault(require("@alifd/next/lib/icon")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); require("./index.scss"); var INIT_LIST = [{ id: "prize", icon: "https://gw.alicdn.com/imgextra/i4/O1CN01N2jkQh1IX9vxzse9c_!!6000000000902-2-tps-84-84.png", text: "我的奖品", link: "prize" }, { id: "address", icon: "https://gw.alicdn.com/imgextra/i3/O1CN01wKJCyJ1hB3Cyvj24o_!!6000000004238-2-tps-84-84.png", text: "我的地址", link: "address" }, { id: "information", icon: "https://gw.alicdn.com/imgextra/i3/O1CN01Jxs3Bg23ZFgc33umH_!!6000000007269-2-tps-84-84.png", text: "我的资料", link: "information" }, { id: "comment", icon: "https://gw.alicdn.com/imgextra/i3/O1CN014V28nU274nr9tS8Gv_!!6000000007744-2-tps-168-168.png", text: "我的评价", link: "comment" }]; var IconCheckbox = /*#__PURE__*/function (_React$Component) { (0, _inheritsLoose2["default"])(IconCheckbox, _React$Component); function IconCheckbox(props) { var _this; _this = _React$Component.call(this, props) || this; _this.formatSortList = function (list) { if (list === void 0) { list = []; } console.log("获取到的list", list, INIT_LIST); var initList = JSON.parse(JSON.stringify(INIT_LIST)); var sortList = []; if (list && list.length) { list.forEach(function (value) { var itemIndex = initList.findIndex(function (item) { return item.id === value.id; }); var _initList$splice = initList.splice(itemIndex, 1), item = _initList$splice[0]; if (item) { sortList.push(item); } }); } console.log("根据 value 排序后的可选项", [].concat(sortList, initList)); return [].concat(sortList, initList); }; _this.formatValue = function (list) { if (list === void 0) { list = []; } return list.map(function (item) { return item.id; }); }; _this.onCheckboxChange = function (checkboxValue) { // checkboxValue => dataValue var dataValue = []; _this.state.sortList.forEach(function (item) { var inValue = checkboxValue.findIndex(function (id) { return id === item.id; }) > -1; if (inValue) { dataValue.push(item); } }); _this.props.change(dataValue); console.log("checkboxValue", checkboxValue, "dataValue", dataValue); _this.setState({ checkboxValue: checkboxValue }); }; _this.handleDragStart = function (event, data) { _this.dragItemRef.current = data; console.log("=====handleDragStart", event, _this.dragItemRef); event.stopPropagation(); }; _this.handleDragEnd = function (event) { console.log("=====handleDragEnd", event); event.preventDefault(); }; _this.handleDragOver = function (event) { event.preventDefault(); event.stopPropagation(); var targetId = event.target.dataset.id; console.log("======handleDragOver", targetId); if (targetId) { _this.setState({ activeId: targetId }); } }; _this.handleDrop = function (event) { event.preventDefault(); console.log('======handleDrop', event); var sortList = _this.state.sortList; var targetId = event.target.dataset.id; // 被强占的元素Id if (targetId) { var currentId = _this.dragItemRef.current.id || _this.dragItemRef.current.id; // 被拖拽的元素Id var currentIndex = sortList.findIndex(function (item) { return item.id === currentId; }); var filterSortList = sortList.filter(function (item) { return item.id !== currentId; }); var targetIndex = filterSortList.findIndex(function (item) { return item.id === targetId; }); if (currentIndex > targetIndex) { // 从下往上 +0 filterSortList.splice(targetIndex, 0, _this.dragItemRef.current); } else { // 从上往下 +1 filterSortList.splice(targetIndex + 1, 0, _this.dragItemRef.current); } console.log("filterSortList", filterSortList); // 根据排序后的数据更新value var checkboxValue = _this.state.checkboxValue; var newCheckboxValue = []; var dataValue = []; console.log(checkboxValue); filterSortList.forEach(function (item) { var inValue = checkboxValue.findIndex(function (id) { return id === item.id; }) > -1; if (inValue) { newCheckboxValue.push(item.id); dataValue.push(item); } }); _this.props.change(dataValue); console.log("checkboxValue", newCheckboxValue, "dataValue", dataValue); _this.setState({ sortList: filterSortList, activeId: undefined, checkboxValue: checkboxValue }); } }; _this.state = { sortList: _this.formatSortList(props.moduleData[props.dataName] || props.extension.value || props.extension.defaultValue), activeId: undefined, dataName: props.dataName, // 多选选中的数组 string array checkboxValue: _this.formatValue(props.moduleData[props.dataName] || props.extension.value || props.extension.defaultValue), value: props.moduleData[props.dataName] || props.extension.value || props.extension.defaultValue }; _this.dragItemRef = /*#__PURE__*/_react["default"].createRef(); _this.dropAreaRef = /*#__PURE__*/_react["default"].createRef(); return _this; } var _proto = IconCheckbox.prototype; _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) { var dataName = this.state.dataName; console.log("componentWillReceiveProps nextProps ->", nextProps); console.log("componentWillReceiveProps this.props ->", this.props); console.log("componentWillReceiveProps state ->", this.state); var value = this.props.moduleData[dataName]; var nextValue = nextProps.moduleData[dataName]; console.log({ "this.props.moduleData.nav": value, "nextProps.moduleData.nav": nextValue }); if (value || nextValue) { if (nextValue !== value) { this.setState({ value: nextValue }); } } else { this.props.change(INIT_LIST); } }; _proto.render = function render() { var _this2 = this; var _this$state = this.state, checkboxValue = _this$state.checkboxValue, sortList = _this$state.sortList, activeId = _this$state.activeId; var style = this.props.style; return /*#__PURE__*/_react["default"].createElement("div", { className: "cuk-input-con", ref: this.dropAreaRef, onDragOver: this.handleDragOver, onDragEnd: this.handleDragEnd, onDrop: this.handleDrop, style: style }, /*#__PURE__*/_react["default"].createElement(_checkbox["default"].Group, { className: "icon-checkbox", "aria-labelledby": "groupId", direction: "ver", value: checkboxValue, onChange: this.onCheckboxChange }, sortList.map(function (item) { return /*#__PURE__*/_react["default"].createElement(_checkbox["default"], { key: item.id, className: "icon-checkbox-item", id: item.id, value: item.id }, /*#__PURE__*/_react["default"].createElement("div", { className: "icon-checkbox-item-context " + (activeId === item.id ? "icon-checkbox-item-context-active" : ""), "data-id": item.id, onDragStart: function onDragStart(e) { return _this2.handleDragStart(e, item); }, draggable: true }, /*#__PURE__*/_react["default"].createElement("div", { className: "icon-checkbox-item-left", "data-id": item.id, draggable: false }, /*#__PURE__*/_react["default"].createElement("img", { className: "icon-checkbox-item-img", "data-id": item.id, draggable: false, src: item.icon }), item.text), /*#__PURE__*/_react["default"].createElement(_icon["default"], { type: "drag", "data-id": item.id, draggable: false, size: "xs" }))); }))); }; return IconCheckbox; }(_react["default"].Component); var _default = IconCheckbox; exports["default"] = _default; IconCheckbox.propTypes = { style: _propTypes["default"].object, extension: _propTypes["default"].object, value: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object, _propTypes["default"].array, _propTypes["default"].bool, _propTypes["default"].number]), change: _propTypes["default"].func.isRequired }; IconCheckbox.defaultProps = { style: {}, extension: {}, value: null };