Order files alphabetically in sidebar and nested folders.

This commit solves issue #704. I added a function to get sorted children of the parent file when ever a file is created of renamed. This function is only called on the parent of the file that is create or renamed.
This commit is contained in:
Neelesh 2020-08-04 00:26:31 +05:30
parent 05e43c70b7
commit 855dceaafe

View file

@ -45,7 +45,7 @@ const initialState = () => {
name: 'root', name: 'root',
id: r, id: r,
_id: r, _id: r,
children: [a, b, c], children: [b, a, c],
fileType: 'folder', fileType: 'folder',
content: '' content: ''
}, },
@ -110,6 +110,12 @@ function deleteMany(state, ids) {
return newState; return newState;
} }
function sortedChildrenId(state, children) {
const childrenArray = state.filter(file => children.includes(file.id));
childrenArray.sort((a, b) => (a.name > b.name ? 1 : -1));
return childrenArray.map(child => child.id);
}
const files = (state, action) => { const files = (state, action) => {
if (state === undefined) { if (state === undefined) {
state = initialState(); // eslint-disable-line state = initialState(); // eslint-disable-line
@ -138,7 +144,7 @@ const files = (state, action) => {
return initialState(); return initialState();
case ActionTypes.CREATE_FILE: // eslint-disable-line case ActionTypes.CREATE_FILE: // eslint-disable-line
{ {
const newState = state.map((file) => { let newState = state.map((file) => {
if (file.id === action.parentId) { if (file.id === action.parentId) {
const newFile = Object.assign({}, file); const newFile = Object.assign({}, file);
newFile.children = [...newFile.children, action.id]; newFile.children = [...newFile.children, action.id];
@ -146,7 +152,8 @@ const files = (state, action) => {
} }
return file; return file;
}); });
return [...newState, newState = [
...newState,
{ {
name: action.name, name: action.name,
id: action.id, id: action.id,
@ -154,17 +161,31 @@ const files = (state, action) => {
content: action.content, content: action.content,
url: action.url, url: action.url,
children: action.children, children: action.children,
fileType: action.fileType || 'file' fileType: action.fileType || 'file',
}]; },
];
return newState.map((file) => {
if (file.id === action.parentId) {
file.children = sortedChildrenId(newState, file.children);
}
return file;
});
} }
case ActionTypes.UPDATE_FILE_NAME: case ActionTypes.UPDATE_FILE_NAME:
return state.map((file) => { {
const newState = state.map((file) => {
if (file.id !== action.id) { if (file.id !== action.id) {
return file; return file;
} }
return Object.assign({}, file, { name: action.name }); return Object.assign({}, file, { name: action.name });
}); });
return newState.map((file) => {
if (file.children.includes(action.id)) {
file.children = sortedChildrenId(newState, file.children);
}
return file;
});
}
case ActionTypes.DELETE_FILE: case ActionTypes.DELETE_FILE:
{ {
const newState = deleteMany(state, [action.id, ...getAllDescendantIds(state, action.id)]); const newState = deleteMany(state, [action.id, ...getAllDescendantIds(state, action.id)]);