@jay.kou/rak-ssr
Version:
A react based UI components for admin system
213 lines (206 loc) • 6.86 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.findTreeItem = findTreeItem;
exports.normalizeSelect = normalizeSelect;
exports.normalizeTree = normalizeTree;
exports.normalizeTreeSelect = normalizeTreeSelect;
exports.withCheckable = withCheckable;
exports.withDisabled = withDisabled;
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _proUtils = require("@ant-design/pro-utils");
function normalizeTreeItem(item, titleKey, valueKey, options) {
var _ref = options || {},
parentKey = _ref.parentKey,
icon = _ref.icon,
isTop = _ref.isTop;
if (item.children) {
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, item), {}, {
key: item[valueKey],
title: item[titleKey],
nodeId: parentKey,
isTop: isTop,
icon: icon,
children: item.children.map(function (child) {
return normalizeTreeItem(child, titleKey, valueKey, {
parentKey: item[valueKey],
icon: icon
});
})
});
}
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, item), {}, {
key: item[valueKey],
title: item[titleKey],
nodeId: parentKey,
isTop: isTop
});
}
/**
* 规范化tree的数据, 可以指定title和key的取值字段.
* 同时给每个节点增加nodeId字段, 方便取父节点id
* 增加isTop字段, 判断是不是第一级
*/
function normalizeTree(treeData, options) {
var _ref2 = options || {},
_ref2$titleKey = _ref2.titleKey,
titleKey = _ref2$titleKey === void 0 ? 'title' : _ref2$titleKey,
_ref2$valueKey = _ref2.valueKey,
valueKey = _ref2$valueKey === void 0 ? 'id' : _ref2$valueKey,
icon = _ref2.icon;
return treeData.map(function (row) {
return normalizeTreeItem(row, titleKey, valueKey, {
parentKey: '',
icon: icon || row.icon,
isTop: true
});
});
}
function normalizeTreeSelectItem(item, titleKey, valueKey) {
if (item.children) {
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, item), {}, {
value: item[valueKey],
title: item[titleKey],
children: item.children.map(function (child) {
return normalizeTreeSelectItem(child, titleKey, valueKey);
})
});
}
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, item), {}, {
value: item[valueKey],
title: item[titleKey]
});
}
/**
* 规范化treeSelect的数据, 可以指定title和value的取值字段.
* treeSelect和上文的tree的数据结构不一样, 一个是key, 一个是value
*/
function normalizeTreeSelect(treeData, options) {
var _ref3 = options || {},
_ref3$titleKey = _ref3.titleKey,
titleKey = _ref3$titleKey === void 0 ? 'label' : _ref3$titleKey,
_ref3$valueKey = _ref3.valueKey,
valueKey = _ref3$valueKey === void 0 ? 'id' : _ref3$valueKey;
return treeData.map(function (row) {
return normalizeTreeSelectItem(row, titleKey, valueKey);
});
}
/**
* 规范化select的数据, 可以指定label和value的取值字段, 也可以传入renderLabel函数自定显示文本
*
*/
function normalizeSelect() {
var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var options = arguments.length > 1 ? arguments[1] : undefined;
var _ref4 = options || {},
_ref4$labelKey = _ref4.labelKey,
labelKey = _ref4$labelKey === void 0 ? 'name' : _ref4$labelKey,
_ref4$valueKey = _ref4.valueKey,
valueKey = _ref4$valueKey === void 0 ? 'id' : _ref4$valueKey,
renderLabel = _ref4.renderLabel;
return data.map(function (row) {
/**
* antd Select 组件的 options 接受以下字段:
* label: 文本显示
* title: 原生 title 提示
* value: 下拉值
*/
var disabled = row.disabled,
title = row.title,
selectOptions = row.options,
className = row.className;
var label;
if (renderLabel) {
label = renderLabel(row);
} else {
label = row[labelKey];
}
var _options = selectOptions ? normalizeSelect(selectOptions, options) : undefined;
return (0, _proUtils.omitUndefined)({
label: label,
value: row[valueKey],
disabled: disabled,
title: title,
className: className,
options: _options
});
});
}
function withDisabledItem(item, func) {
if (item.children) {
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, item), {}, {
disabled: func && func(item),
children: item.children.map(function (child) {
return withDisabledItem(child, func);
})
});
}
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, item), {}, {
disabled: func && func(item)
});
}
/**
* 这个一个装饰器函数, 用于给treeData的每一个节点添加disabled属性
* 这样通过传入一个函数就可以控制节点是否为disabled
* 函数的参数是node(节点)
*/
function withDisabled(treeData, func) {
if (!func) return treeData;
return treeData.map(function (row) {
return withDisabledItem(row, func);
});
}
function withCheckableItem(item, func) {
if (item.children) {
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, item), {}, {
checkable: func && func(item),
children: item.children.map(function (child) {
return withCheckableItem(child, func);
})
});
}
return (0, _objectSpread2.default)((0, _objectSpread2.default)({}, item), {}, {
checkable: func && func(item)
});
}
/**
* 这个一个装饰器函数, 用于给treeData的每一个节点添加checkable属性
* 这样通过传入一个函数就可以控制节点是否为可勾选
* 函数的参数是node(节点)
*/
function withCheckable(treeData, func) {
if (!func) return treeData;
return treeData.map(function (row) {
return withCheckableItem(row, func);
});
}
/**
* 遍历tree, 找到目标节点, 找不到返回undefined
*/
function findTreeItem() {
var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var key = arguments.length > 1 ? arguments[1] : undefined;
var valueKey = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'id';
var result;
// eslint-disable-next-line no-plusplus
for (var i = 0; i < data.length; i++) {
// eslint-disable-next-line @typescript-eslint/no-use-before-define
var target = findTreeItemLoop(data[i], key, valueKey);
if (target) {
result = target;
break;
}
}
return result;
}
function findTreeItemLoop(data, key, valueKey) {
if (data[valueKey] === key) {
return data;
}
if (data.children && data.children.length) {
return findTreeItem(data.children, key, valueKey);
}
return undefined;
}