choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
78 lines (55 loc) • 2.25 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = formatReactTemplate;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _react = require("react");
var _stringTemplate = _interopRequireDefault(require("string-template"));
var _isString = _interopRequireDefault(require("lodash/isString"));
var _isObject = _interopRequireDefault(require("lodash/isObject"));
var _isNil = _interopRequireDefault(require("lodash/isNil"));
var _flatMap = _interopRequireDefault(require("lodash/flatMap"));
function formatReactTemplate(template, map) {
var result = [template];
Object.keys(map).forEach(function (key) {
var node = map[key];
if (!(0, _isNil["default"])(node)) {
result = (0, _flatMap["default"])(result, function (text) {
if ((0, _isString["default"])(text)) {
var stringText = text;
if ((0, _react.isValidElement)(node)) {
var placeholder = "{".concat(key, "}");
if ((0, _isObject["default"])(node) && stringText.indexOf('[object Object]') > -1) {
placeholder = '[object Object]';
}
var _placeholder = placeholder,
length = _placeholder.length;
var textArr = [];
var index = stringText.indexOf(placeholder);
while (index > -1) {
if (index > 0) {
textArr.push(stringText.slice(0, index));
}
textArr.push(node);
stringText = stringText.slice(index + length);
index = stringText.indexOf(placeholder);
}
if (stringText) {
textArr.push(stringText);
}
return textArr;
}
return (0, _stringTemplate["default"])(text, map);
}
return text;
});
}
});
if (result.every(_isString["default"])) {
return result.join('');
}
return _react.createElement.apply(void 0, [_react.Fragment, {}].concat((0, _toConsumableArray2["default"])(result)));
}
//# sourceMappingURL=formatReactTemplate.js.map