@aliretail/react-link-selector
Version:
445 lines (392 loc) • 15.7 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports["default"] = void 0;
var _dialog = _interopRequireDefault(require("@alifd/next/lib/dialog"));
var _tab = _interopRequireDefault(require("@alifd/next/lib/tab"));
var _form = _interopRequireDefault(require("@alifd/next/lib/form"));
var _input = _interopRequireDefault(require("@alifd/next/lib/input"));
var _radio = _interopRequireDefault(require("@alifd/next/lib/radio"));
var _message = _interopRequireDefault(require("@alifd/next/lib/message"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
var React = _interopRequireWildcard(require("react"));
var _axios = _interopRequireDefault(require("axios"));
require("./index.scss");
var _microPage = _interopRequireDefault(require("./micro-page"));
var _detail = _interopRequireDefault(require("./detail"));
var _api = _interopRequireDefault(require("./api"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
var PAGE_TYPE_MAP = {
outside: 'outside',
detail: 'detail',
microPage: 'microPage'
}; // this.setState({
// keywordName: record.name || record.pageName,
// selectItem: [record.id || record.itemId],
// selectRes: row,
// });
// detail
// this.setState({
// selectItem: [id],
// });
var getUrlParam = function getUrlParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = decodeURIComponent(window.location.search.substr(1)).match(reg);
if (r != null) return unescape(r[2]);
return null;
};
/**
* 链接选择器
* @author 宋烨
* @date 2020/11/9
* @update 2021/12/3 翊晨
*/
var LinkSelector = /*#__PURE__*/function (_React$PureComponent) {
(0, _inheritsLoose2["default"])(LinkSelector, _React$PureComponent);
function LinkSelector(props) {
var _this;
_this = _React$PureComponent.call(this, props) || this;
_this.tabs = [{
title: '微页面',
key: PAGE_TYPE_MAP.microPage
}, {
title: '商品详情页',
key: PAGE_TYPE_MAP.detail
}, {
title: '外部链接',
key: PAGE_TYPE_MAP.outside
}];
_this.showMessage = function (content, type) {
if (content === void 0) {
content = '';
}
if (type === void 0) {
type = 'error';
}
_message["default"].show({
type: type,
content: content
});
};
_this.handleClose = function () {
_this.setState({
visible: false
});
};
_this.renderForTabItem = function (key) {
var _this$state = _this.state,
currentPageSelect = _this$state.currentPageSelect,
customLinkType = _this$state.customLinkType,
customLinkValue = _this$state.customLinkValue,
selectItem = _this$state.selectItem,
h5Link = _this$state.h5Link,
appId = _this$state.appId,
appLink = _this$state.appLink,
appCode = _this$state.appCode,
keyword = _this$state.keyword,
keywordName = _this$state.keywordName,
selectedKeyWord = _this$state.selectedKeyWord,
fallbackUrl = _this$state.fallbackUrl; //
var that = (0, _assertThisInitialized2["default"])(_this);
switch (key) {
case PAGE_TYPE_MAP.microPage:
// 商品详情页
return /*#__PURE__*/React.createElement(_microPage["default"], {
value: selectItem,
onSelect: function onSelect(val) {
that.setState({
selectItem: val.result
}); // console.log(val);
}
});
case PAGE_TYPE_MAP.detail:
// 商品详情页
return /*#__PURE__*/React.createElement(_detail["default"], {
value: selectItem,
onSelect: function onSelect(val) {
that.setState({
selectItem: val.result
});
console.log('detail change', val);
}
});
case PAGE_TYPE_MAP.outside:
var outsidePageTypeDs = [{
label: 'H5页面',
value: 'h5'
}, {
label: 'AppID小程序',
value: 'app'
}];
var formItemLayout = {
labelCol: {
span: 5
},
wrapperCol: {
span: 19
}
};
return /*#__PURE__*/React.createElement("div", {
style: {
margin: '25px 0 12px'
}
}, /*#__PURE__*/React.createElement(_radio["default"].Group, {
dataSource: outsidePageTypeDs,
value: customLinkType,
onChange: function onChange(v) {
_this.setState({
customLinkType: v,
fallbackUrl: ''
});
}
}), customLinkType === 'h5' ? /*#__PURE__*/React.createElement("div", {
className: "custom-link__box"
}, /*#__PURE__*/React.createElement(_form["default"], formItemLayout, /*#__PURE__*/React.createElement(_form["default"].Item, {
label: "\u94FE\u63A5\u5730\u5740",
labelAlign: "left",
labelTextAlign: "right",
help: "\u5728\u5FAE\u4FE1\u516C\u4F17\u53F7\u53CA\u975E\u5FAE\u4FE1\u73AF\u5883\u7684\u6E20\u9053\u4E2D\u751F\u6548"
}, /*#__PURE__*/React.createElement(_input["default"], {
value: h5Link,
onChange: function onChange(v) {
return _this.setState({
h5Link: v
});
}
})), /*#__PURE__*/React.createElement(_form["default"].Item, {
label: "\u975E\u5C0F\u7A0B\u5E8F\u7AEF\u94FE\u63A5",
labelAlign: "left",
labelTextAlign: "right",
help: "\u5728\u975E\u5C0F\u7A0B\u5E8F\u7684\u6E20\u9053\u914D\u7F6E\u8DF3\u8F6C\u751F\u6548"
}, /*#__PURE__*/React.createElement(_input["default"], {
value: fallbackUrl,
onChange: function onChange(v) {
return _this.setState({
fallbackUrl: v
});
}
})))) : /*#__PURE__*/React.createElement("div", {
className: "custom-link__box"
}, /*#__PURE__*/React.createElement(_form["default"], formItemLayout, /*#__PURE__*/React.createElement(_form["default"].Item, {
label: "AppID",
labelAlign: "left",
labelTextAlign: "right"
}, /*#__PURE__*/React.createElement(_input["default"], {
value: appId,
onChange: function onChange(v) {
return _this.setState({
appId: v
});
}
})), /*#__PURE__*/React.createElement(_form["default"].Item, {
label: "\u5C0F\u7A0B\u5E8F\u8DEF\u5F84",
labelAlign: "left",
labelTextAlign: "right",
help: "\u5728\u5FAE\u4FE1\u516C\u4F17\u53F7\u53CA\u975E\u5FAE\u4FE1\u73AF\u5883\u7684\u6E20\u9053\u4E2D\u751F\u6548"
}, /*#__PURE__*/React.createElement(_input["default"], {
value: appLink,
onChange: function onChange(v) {
return _this.setState({
appLink: v
});
}
})), /*#__PURE__*/React.createElement(_form["default"].Item, {
label: "\u975E\u5C0F\u7A0B\u5E8F\u7AEF\u94FE\u63A5",
labelAlign: "left",
labelTextAlign: "right",
help: "\u5728\u975E\u5C0F\u7A0B\u5E8F\u7684\u6E20\u9053\u914D\u7F6E\u8DF3\u8F6C\u751F\u6548"
}, /*#__PURE__*/React.createElement(_input["default"], {
value: fallbackUrl,
onChange: function onChange(v) {
return _this.setState({
fallbackUrl: v
});
}
})))));
default:
return '暂无内容';
}
};
_this.handleChangeTab = function (key) {
// 根据key来请求接口
if (key === PAGE_TYPE_MAP.microPage) {
_this.setState({
tabIndex: key,
selectItem: [],
selectRes: [] // });
});
} else if (key === PAGE_TYPE_MAP.detail) {
_this.setState({
tabIndex: key,
selectItem: [],
selectRes: [] // });
});
} else {
_this.setState({
tabIndex: key,
selectItem: [],
selectRes: []
});
}
};
_this.callbackFn = function (fn) {
var _this$state2 = _this.state,
_this$state2$selectRe = _this$state2.selectRes,
selectRes = _this$state2$selectRe === void 0 ? [] : _this$state2$selectRe,
selectItem = _this$state2.selectItem,
h5Link = _this$state2.h5Link,
tabIndex = _this$state2.tabIndex,
customLinkType = _this$state2.customLinkType,
appLink = _this$state2.appLink,
appId = _this$state2.appId,
appCode = _this$state2.appCode,
fallbackUrl = _this$state2.fallbackUrl;
var resp = {
type: tabIndex,
result: tabIndex === PAGE_TYPE_MAP.detail ? selectItem : tabIndex === PAGE_TYPE_MAP.outside ? {
customLinkType: customLinkType,
h5Link: h5Link,
fallbackUrl: fallbackUrl,
appId: appId,
appLink: appLink,
appCode: appCode
} : selectRes
};
console.log(JSON.stringify(resp));
if (tabIndex !== PAGE_TYPE_MAP.outside && resp.result.length === 0) {
return _this.props.dialogProps && _this.props.dialogProps.onCancel(resp);
} else {
return fn && typeof fn === 'function' && fn(resp);
}
};
var _props$visible = props.visible,
visible = _props$visible === void 0 ? false : _props$visible,
data = props.data;
_this.behaviorHistory = {};
_this.state = {
visible: visible,
tabIndex: data.type || PAGE_TYPE_MAP.microPage,
currentPageSelect: '',
selectItem: data.type === PAGE_TYPE_MAP.detail ? data.result : data.result && data.result.length && [data.result[0].id] || [],
selectRes: data.result && data.result.length && data.result || [],
keyword: data.result && data.result.length && data.result[0].id || '',
customLinkType: data.type === PAGE_TYPE_MAP.outside ? data.result.customLinkType || 'h5' : 'h5',
// 自定义链接类型
customLinkValue: '',
// 自定义链接
h5Link: data.type === PAGE_TYPE_MAP.outside ? data.result.h5Link || '' : '',
fallbackUrl: data.result ? data.result.fallbackUrl || '' : '',
appId: data.type === PAGE_TYPE_MAP.outside ? data.result.appId || '' : '',
appLink: data.type === PAGE_TYPE_MAP.outside ? data.result.appLink || '' : '',
appCode: data.type === PAGE_TYPE_MAP.outside ? data.result.appCode || '' : '',
currentLinks: [] // 本页链接不从props 传,直接接口取
};
return _this;
}
LinkSelector.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps, prevState) {
// console.log(nextProps, prevState);
if ('visible' in nextProps && nextProps.visible !== prevState.visible) {
return {
visible: nextProps.visible
};
} else {
return prevState;
}
};
var _proto = LinkSelector.prototype;
_proto.componentDidMount = function componentDidMount() {
var _this2 = this;
var _this$props = this.props,
data = _this$props.data,
noSearchDefault = _this$props.noSearchDefault;
var _this$state3 = this.state,
tabIndex = _this$state3.tabIndex,
keyword = _this$state3.keyword; // console.log(tabIndex, keyword, data);
_axios["default"].get(_api["default"].bizData, {
params: {
storeId: getUrlParam('storeId') || null,
pageId: getUrlParam('pageId')
}
}).then(function (res) {
if (res.data && res.data.success) {
_this2.setState({
bizCode: res.data.result.bizCode,
bizId: res.data.result.bizId
});
} else {
_this2.showMessage('获取验签失败!');
}
});
}
/**
* 关闭弹窗
*/
;
_proto.render = function render() {
var _this3 = this;
var _this$state4 = this.state,
visible = _this$state4.visible,
tabIndex = _this$state4.tabIndex;
var dialogProps = this.props.dialogProps;
return /*#__PURE__*/React.createElement(_dialog["default"], {
visible: visible,
shouldUpdatePosition: true,
onOk: function onOk() {
var _this3$state = _this3.state,
selectItem = _this3$state.selectItem,
h5Link = _this3$state.h5Link,
tabIndex = _this3$state.tabIndex,
customLinkType = _this3$state.customLinkType,
appLink = _this3$state.appLink,
appId = _this3$state.appId,
appCode = _this3$state.appCode,
fallbackUrl = _this3$state.fallbackUrl;
var res = {
type: tabIndex
};
if (tabIndex === PAGE_TYPE_MAP.detail || tabIndex === PAGE_TYPE_MAP.microPage) {
res.result = selectItem;
} else {
res.result = {
customLinkType: customLinkType,
h5Link: h5Link,
fallbackUrl: fallbackUrl,
appId: appId,
appLink: appLink,
appCode: appCode
};
} // this.setState({ visible: false });
dialogProps.onOk && dialogProps.onOk(res);
},
onCancel: function onCancel() {
return dialogProps.onCancel();
},
onClose: function onClose() {
return dialogProps.onCancel();
},
title: "\u9009\u62E9\u94FE\u63A5",
className: "link-selector link-selector-wrapper-" + tabIndex
}, /*#__PURE__*/React.createElement(_tab["default"], {
size: "medium",
onChange: this.handleChangeTab,
activeKey: tabIndex
}, this.tabs.map(function (tabItem) {
return /*#__PURE__*/React.createElement(_tab["default"].Item, {
key: tabItem.key,
title: tabItem.title
}, _this3.renderForTabItem.call(_this3, tabItem.key));
})));
};
return LinkSelector;
}(React.PureComponent);
exports["default"] = LinkSelector;
var host = window.__b_apiHost__ ? window.__b_apiHost__ : location.protocol + "://" + location.host;
LinkSelector.propTypes = {};
LinkSelector.defaultProps = {
data: {},
visible: true,
apis: {},
dialogProps: {}
};