aboutsummaryrefslogtreecommitdiff
path: root/src/features/todo/reducer.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/features/todo/reducer.js')
-rw-r--r--src/features/todo/reducer.js67
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;