From 0e96c6939e84ed283ba7229ee9cf8144025c5718 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Oliva?= Date: Fri, 19 May 2023 20:24:40 -0600 Subject: First attempt at sorting to do entries. --- src/features/todo/reducer.js | 67 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) (limited to 'src/features') 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; -- cgit v1.2.3