2020-01-01 13:55:28 +05:30
|
|
|
import { decorateData, sortTree } from '../stores/utils';
|
2019-07-07 11:18:12 +05:30
|
|
|
|
|
|
|
export const splitParent = path => {
|
|
|
|
const idx = path.lastIndexOf('/');
|
|
|
|
|
|
|
|
return {
|
|
|
|
parent: idx >= 0 ? path.substring(0, idx) : null,
|
|
|
|
name: idx >= 0 ? path.substring(idx + 1) : path,
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create file objects from a list of file paths.
|
|
|
|
*/
|
2020-11-24 15:15:51 +05:30
|
|
|
export const decorateFiles = ({ data, tempFile = false, content = '', rawPath = '' }) => {
|
2019-07-07 11:18:12 +05:30
|
|
|
const treeList = [];
|
|
|
|
const entries = {};
|
|
|
|
|
|
|
|
// These mutable variable references end up being exported and used by `createTempEntry`
|
|
|
|
let file;
|
|
|
|
let parentPath;
|
|
|
|
|
|
|
|
const insertParent = path => {
|
|
|
|
if (!path) {
|
|
|
|
return null;
|
|
|
|
} else if (entries[path]) {
|
|
|
|
return entries[path];
|
|
|
|
}
|
|
|
|
|
|
|
|
const { parent, name } = splitParent(path);
|
|
|
|
const parentFolder = parent && insertParent(parent);
|
|
|
|
parentPath = parentFolder && parentFolder.path;
|
|
|
|
|
|
|
|
const tree = decorateData({
|
|
|
|
id: path,
|
|
|
|
name,
|
|
|
|
path,
|
|
|
|
type: 'tree',
|
|
|
|
tempFile,
|
|
|
|
changed: tempFile,
|
|
|
|
opened: tempFile,
|
|
|
|
parentPath,
|
|
|
|
});
|
|
|
|
|
|
|
|
Object.assign(entries, {
|
|
|
|
[path]: tree,
|
|
|
|
});
|
|
|
|
|
|
|
|
if (parentFolder) {
|
|
|
|
parentFolder.tree.push(tree);
|
|
|
|
} else {
|
|
|
|
treeList.push(tree);
|
|
|
|
}
|
|
|
|
|
|
|
|
return tree;
|
|
|
|
};
|
|
|
|
|
|
|
|
data.forEach(path => {
|
|
|
|
const { parent, name } = splitParent(path);
|
|
|
|
|
|
|
|
const fileFolder = parent && insertParent(parent);
|
|
|
|
|
|
|
|
if (name) {
|
|
|
|
parentPath = fileFolder && fileFolder.path;
|
|
|
|
|
|
|
|
file = decorateData({
|
|
|
|
id: path,
|
|
|
|
name,
|
|
|
|
path,
|
|
|
|
type: 'blob',
|
|
|
|
tempFile,
|
|
|
|
changed: tempFile,
|
|
|
|
content,
|
2019-07-31 22:56:46 +05:30
|
|
|
rawPath,
|
2019-07-07 11:18:12 +05:30
|
|
|
parentPath,
|
|
|
|
});
|
|
|
|
|
|
|
|
Object.assign(entries, {
|
|
|
|
[path]: file,
|
|
|
|
});
|
|
|
|
|
|
|
|
if (fileFolder) {
|
|
|
|
fileFolder.tree.push(file);
|
|
|
|
} else {
|
|
|
|
treeList.push(file);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return {
|
|
|
|
entries,
|
|
|
|
treeList: sortTree(treeList),
|
|
|
|
file,
|
|
|
|
parentPath,
|
|
|
|
};
|
|
|
|
};
|