1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-08-06 09:34:00 +00:00
seahub/frontend/src/components/sf-table/utils/tree.js

77 lines
2.3 KiB
JavaScript
Raw Normal View History

import { TREE_NODE_KEY } from '../constants/tree';
export const createTreeNode = (nodeId, nodeKey, depth, hasSubNodes) => {
return {
[TREE_NODE_KEY.ID]: nodeId,
[TREE_NODE_KEY.KEY]: nodeKey,
[TREE_NODE_KEY.DEPTH]: depth,
[TREE_NODE_KEY.HAS_SUB_NODES]: hasSubNodes,
};
};
/**
* for get row by node key from 'tree_node_key_row_id_map' directly
* @param {array} tree
* @returns tree_node_key_row_id_map
* tree_node_key_row_id_map: { [node_key]: _id, ... }
*/
export const generateKeyTreeNodeRowIdMap = (tree) => {
let tree_node_key_row_id_map = {};
tree.forEach((node) => {
tree_node_key_row_id_map[node[TREE_NODE_KEY.KEY]] = node[TREE_NODE_KEY.ID];
});
return tree_node_key_row_id_map;
};
export const getValidKeyTreeNodeFoldedMap = (keyTreeNodeFoldedMap, treeNodeKeyRecordIdMap) => {
if (!keyTreeNodeFoldedMap) return {};
let validKeyTreeNodeFoldedMap = {};
Object.keys(keyTreeNodeFoldedMap).forEach((nodeKey) => {
if (treeNodeKeyRecordIdMap[nodeKey]) {
// just keep the folded status of exist nodes
validKeyTreeNodeFoldedMap[nodeKey] = keyTreeNodeFoldedMap[nodeKey];
}
});
return validKeyTreeNodeFoldedMap;
};
export const getRecordIdByTreeNodeKey = (nodeKey, treeNodeKeyRecordIdMap) => {
return treeNodeKeyRecordIdMap[nodeKey];
};
export const getRecordsIdsByTreeNodeKeys = (nodesKeys, treeNodeKeyRecordIdMap) => {
if (!Array.isArray(nodesKeys) || nodesKeys.length === 0 || !treeNodeKeyRecordIdMap) {
return [];
}
let idExistMap = {};
let selectedIds = [];
nodesKeys.forEach((nodeKey) => {
const selectedId = treeNodeKeyRecordIdMap[nodeKey];
if (selectedId && !idExistMap[selectedId]) {
selectedIds.push(nodeKey);
idExistMap[selectedId] = true;
}
});
return selectedIds;
};
export const checkIsTreeNodeShown = (nodeKey, keyFoldedNodeMap) => {
const foldedNodeKeys = keyFoldedNodeMap && Object.keys(keyFoldedNodeMap);
if (!Array.isArray(foldedNodeKeys) || foldedNodeKeys.length === 0) {
return true;
}
// parent node is folded
return !foldedNodeKeys.some((foldedNodeKey) => nodeKey !== foldedNodeKey && nodeKey.includes(foldedNodeKey));
};
export const getTreeNodeId = (node) => {
return node ? node[TREE_NODE_KEY.ID] : '';
};
export const getTreeNodeKey = (node) => {
return node ? node[TREE_NODE_KEY.KEY] : '';
};