feat: treeToResourcePaths

This commit is contained in:
cha0s 2021-01-23 17:30:15 -06:00
parent c5a928b7e7
commit 0ee7b771da
5 changed files with 43 additions and 15 deletions

View File

@ -4,7 +4,7 @@ import {promisify} from 'util';
import {Model, Sequelize, Types} from '@latus/db/server';
import glob from 'glob';
import {pathsToTree} from '../tree-utils';
import {pathsToTree} from '../tree';
export default () => class Project extends Model {

View File

@ -4,7 +4,7 @@ import {promisify} from 'util';
import {decorateWithLatus, gatherWithLatus} from '@latus/core';
import {treeToPaths} from '../tree-utils';
import {treeToPaths} from '../tree';
const readFile = promisify(fs.readFile).bind(fs);
const stat = promisify(fs.stat).bind(fs);

View File

@ -6,7 +6,7 @@ import {
import {
addPathToTree,
removePathFromTree,
} from '../tree-utils';
} from '../tree';
export const projectsSelector = (state) => state.projects;

View File

@ -4,7 +4,7 @@ import natsort from 'natsort';
import {
getFlatDataFromTree,
getTreeFromFlatData,
// removeNodeAtPath,
walk,
} from 'react-sortable-tree';
const getKey = ({path}) => path;
@ -16,16 +16,6 @@ const getParentKey = ({path}) => {
export const pathToNode = (path) => ({path, label: basename(path)});
export const treeToPaths = (tree) => (
getFlatDataFromTree({
getNodeKey: ({node: {path}}) => path,
ignoreCollapsed: false,
treeData: tree,
})
.map(({path}) => path.pop())
.sort(natsort({insensitive: true}))
);
export const pathsToTree = (paths) => (
getTreeFromFlatData({
flatData: paths
@ -37,6 +27,32 @@ export const pathsToTree = (paths) => (
})
);
export const treeToResourcePaths = (tree) => {
const files = [];
walk({
callback: ({node: {children, path}}) => {
if (!children) {
files.push(path);
}
},
getNodeKey: ({node: {path}}) => path,
ignoreCollapsed: false,
treeData: tree,
});
return files
.sort(natsort({insensitive: true}));
};
export const treeToPaths = (tree) => (
getFlatDataFromTree({
getNodeKey: ({node: {path}}) => path,
ignoreCollapsed: false,
treeData: tree,
})
.map(({path}) => path.pop())
.sort(natsort({insensitive: true}))
);
export const addPathToTree = (tree, path) => {
const paths = treeToPaths(tree);
const parts = path.split('/');

View File

@ -4,8 +4,9 @@ import {
addPathToTree,
pathsToTree,
removePathFromTree,
treeToResourcePaths,
treeToPaths,
} from '../src/tree-utils';
} from '../src/tree';
it('can get a tree from paths', () => {
expect(pathsToTree(['/foo', '/bar', '/bar/baz.txt', '/boo']))
@ -18,6 +19,17 @@ it('can get a tree from paths', () => {
]);
});
it('can get resource paths from a tree', () => {
expect(treeToResourcePaths([
{path: '/foo', label: 'foo'},
{path: '/bar', label: 'bar', children: [
{path: '/bar/baz.txt', label: 'baz.txt'},
]},
{path: '/boo', label: 'boo'},
]))
.to.deep.equal(['/bar/baz.txt', '/boo', '/foo']);
});
it('can get paths from a tree', () => {
expect(treeToPaths([
{path: '/foo', label: 'foo'},