12345678910111213141516171819202122232425262728293031323334353637 |
- import _ from "lodash";
- export const pathsToTree = (paths: string[]) => {
- let __result = [];
- let level = { __result, __prefix: "" };
- paths.forEach((path) => {
- path.split("/").reduce((r, label, i, a) => {
- if (!r[label]) {
- const __prefix = `${r.__prefix ? r.__prefix + "/" : ""}${label}`;
- r[label] = { __result: [], __prefix };
- r.__result.push({
- key: __prefix,
- label,
- isDir: a.length !== i + 1,
- children: r[label].__result,
- });
- }
- return r[label];
- }, level);
- });
- return __result;
- };
- type TreeNodeLike = {
- children?: TreeNodeLike[];
- };
- export const getTreeLeafs = <T extends TreeNodeLike>(
- treeNode: T
- ): T[] => {
- if (treeNode.children?.length) {
- return _.flatMap<T, T>(treeNode.children as T[], getTreeLeafs);
- }
- return [treeNode];
- };
|