diff options
Diffstat (limited to '')
-rw-r--r-- | src/features/todo/reducer.js | 67 |
1 files changed, 66 insertions, 1 deletions
diff --git a/src/features/todo/reducer.js b/src/features/todo/reducer.js index a13810b..bef7f03 100644 --- a/src/features/todo/reducer.js +++ b/src/features/todo/reducer.js @@ -5,6 +5,7 @@ export const todo_slice = createSlice({ initialState: { todos: [], last_id: 0, + current_sorting: "created_time", }, reducers: { @@ -48,13 +49,77 @@ export const todo_slice = createSlice({ state.todos[selected_todo].done = action.payload.done; state.todos[selected_todo].priority = action.payload.priority; }, + + sort_todo: (state, action) => { + switch (action.payload.where_clicked) { + case "priority": + const priority_order = { + Low: 1, + Medium: 2, + High: 3, + }; + + switch (state.current_sorting) { + case "priority-^": + state.current_sorting = "priority-v"; + state.todos.sort( + (a, b) => + priority_order[a.priority] - + priority_order[b.priority] + ); + break; + + case "priority-v": + state.current_sorting = "created_time"; + state.todos.sort((a, b) => + a.creation_date.localeCompare(b.creation_date) + ); + break; + + default: + state.current_sorting = "priority-^"; + state.todos.sort( + (a, b) => + priority_order[b.priority] - + priority_order[a.priority] + ); + break; + } + + break; + + case "due_date": + switch (state.current_sorting) { + case "due-date-^": + state.current_sorting = "due-date-v"; + state.todos.sort((a, b) => + a.due_date.localeCompare(b.due_date) + ); + break; + case "due-date-v": + state.current_sorting = "created_time"; + state.todos.sort((a, b) => + a.creation_date.localeCompare(b.creation_date) + ); + break; + default: + state.current_sorting = "due-date-^"; + state.todos.sort((a, b) => + b.due_date.localeCompare(a.due_date) + ); + break; + } + } + }, }, }); -export const { add_todo, change_done, remove_todo, edit_todo } = +export const { add_todo, change_done, remove_todo, edit_todo, sort_todo } = todo_slice.actions; export const select_todos = (state) => state.todo_list.todos; export const select_last_index = (state) => state.todo_list.last_id; +export const select_current_sorting = (state) => + state.todo_list.current_sorting; export default todo_slice.reducer; |