import { CollectionPanelFilesState, CollectionPanelFile, CollectionPanelDirectory, mapCollectionFileToCollectionPanelFile, mergeCollectionPanelFilesStates } from './collection-panel-files-state';
import { CollectionPanelFilesAction, collectionPanelFilesAction } from "./collection-panel-files-actions";
-import { createTree, mapTreeValues, getNode, setNode, getNodeAncestorsIds, getNodeDescendantsIds, setNodeValueWith, mapTree } from "~/models/tree";
-import { CollectionFileType } from "~/models/collection-file";
+import { createTree, mapTreeValues, getNode, setNode, getNodeAncestorsIds, getNodeDescendantsIds, setNodeValueWith, mapTree } from "models/tree";
+import { CollectionFileType } from "models/collection-file";
let fetchedFiles: any = {};
.map(toggleDescendants(data.id))[0],
ON_SEARCH_CHANGE: (searchValue) => {
- // node.children = children.filter((id: string) => id.replace(parentId, '').toLowerCase().indexOf(searchValue.toLowerCase()) > -1);
- const ids: string[] = [];
+ const fileIds: string[] = [];
+ const directoryIds: string[] = [];
const filteredFiles = Object.keys(fetchedFiles)
.filter((key: string) => {
const node = fetchedFiles[key];
const { id, value: { type, name } } = node;
if (type === CollectionFileType.DIRECTORY) {
- ids.push(id);
+ directoryIds.push(id);
return true;
}
const includeFile = name.toLowerCase().indexOf(searchValue.toLowerCase()) > -1;
if (includeFile) {
- ids.push(id);
+ fileIds.push(id);
}
return includeFile;
})
.reduce((prev, next) => {
const node = JSON.parse(JSON.stringify(fetchedFiles[next]));
- node.children = node.children.filter((key: string) => ids.indexOf(key) > -1);
- prev[next] = node;
+ const { value: { type }, children } = node;
+
+ node.children = node.children.filter((key: string) => {
+ const isFile = directoryIds.indexOf(key) === -1;
+ return isFile ?
+ fileIds.indexOf(key) > -1 :
+ !!fileIds.find(id => id.indexOf(key) > -1);
+ });
+
+ if (type === CollectionFileType.FILE || children.length > 0) {
+ prev[next] = node;
+ }
+
return prev;
}, {});
return mapTreeValues((v: CollectionPanelDirectory | CollectionPanelFile) => {
if (v.type === CollectionFileType.DIRECTORY) {
- return ({
+ return ({
...v,
collapsed: searchValue.length === 0,
});
},
SELECT_ALL_COLLECTION_FILES: () =>
- mapTreeValues(v => ({ ...v, selected: true }))({ ...state }),
+ mapTreeValues((v: any) => ({ ...v, selected: true }))({ ...state }),
UNSELECT_ALL_COLLECTION_FILES: () =>
- mapTreeValues(v => ({ ...v, selected: false }))({ ...state }),
+ mapTreeValues((v: any) => ({ ...v, selected: false }))({ ...state }),
default: () => state
}) as CollectionPanelFilesState;
if (node && node.value.type === CollectionFileType.DIRECTORY) {
return getNodeDescendantsIds(id)(tree)
.reduce((newTree, id) =>
- setNodeValueWith(v => ({ ...v, selected: node.value.selected }))(id)(newTree), tree);
+ setNodeValueWith((v: any) => ({ ...v, selected: node.value.selected }))(id)(newTree), tree);
}
return tree;
};
const selected = parentNode.children
.map(id => getNode(id)(tree))
.every(node => node !== undefined && node.value.selected);
- return setNodeValueWith(v => ({ ...v, selected }))(parentNode.id)(tree);
+ return setNodeValueWith((v: any) => ({ ...v, selected }))(parentNode.id)(tree);
}
return setNode(node)(tree);
}