- Take turns implementation for the todos

This commit is contained in:
Dejan
2024-10-29 00:05:15 +01:00
parent 7771f397b6
commit b9aa24a0c2
3 changed files with 46 additions and 13 deletions

View File

@ -248,7 +248,7 @@ const AddChoreDialog = (addChoreDialogProps: IAddChoreDialog) => {
marginL-8 marginL-8
value={selectedAssignees} value={selectedAssignees}
onChange={(value) => { onChange={(value) => {
setSelectedAssignees([...selectedAssignees, ...value]); setSelectedAssignees(value);
}} }}
style={{marginVertical: 5}} style={{marginVertical: 5}}
mode={PickerModes.MULTI} mode={PickerModes.MULTI}

View File

@ -31,6 +31,9 @@ export const useCreateTodo = () => {
// Create the one original to do // Create the one original to do
const newDoc = firestore().collection('Todos').doc(); const newDoc = firestore().collection('Todos').doc();
let originalTodo = {...todoData, id: newDoc.id, familyId: profileData?.familyId, creatorId: currentUser?.uid, connectedTodoId: newDoc.id}; let originalTodo = {...todoData, id: newDoc.id, familyId: profileData?.familyId, creatorId: currentUser?.uid, connectedTodoId: newDoc.id};
originalTodo = resolveTodoAlternatingAssignees(todoData, originalTodo, 0);
await firestore() await firestore()
.collection("Todos") .collection("Todos")
.add(originalTodo); .add(originalTodo);
@ -59,13 +62,17 @@ export const useCreateTodo = () => {
}); });
// TODO: for the next 52 weeks // TODO: for the next 52 weeks
let index = 1;
for (let i = 0; i < 4; i++) { for (let i = 0; i < 4; i++) {
dates?.forEach((dateToAdd) => { dates?.forEach((dateToAdd) => {
index ++;
let newTodoDate = addWeeks(dateToAdd, i); let newTodoDate = addWeeks(dateToAdd, i);
if (compareAsc(newTodoDate, originalTodo.date) !== 0) { if (compareAsc(newTodoDate, originalTodo.date) !== 0) {
let docRef = firestore().collection("Todos").doc(); let docRef = firestore().collection("Todos").doc();
const newTodo = { ...originalTodo, id: docRef.id, date: newTodoDate, connectedTodoId: newDoc.id }; let newTodo = { ...originalTodo, id: docRef.id, date: newTodoDate, connectedTodoId: newDoc.id };
newTodo = resolveTodoAlternatingAssignees(todoData, newTodo, index);
batch.set(docRef, newTodo); batch.set(docRef, newTodo);
} }
}) })
@ -78,7 +85,9 @@ export const useCreateTodo = () => {
const nextMonth = addMonths(date, i); const nextMonth = addMonths(date, i);
let docRef = firestore().collection("Todos").doc(); let docRef = firestore().collection("Todos").doc();
const newTodo = { ...originalTodo, id: docRef.id, date: nextMonth, connectedTodoId: newDoc.id }; let newTodo = { ...originalTodo, id: docRef.id, date: nextMonth, connectedTodoId: newDoc.id };
newTodo = resolveTodoAlternatingAssignees(todoData, newTodo, i);
batch.set(docRef, newTodo); batch.set(docRef, newTodo);
} }
} else if (todoData.repeatType === REPEAT_TYPE.ONCE_A_YEAR) { } else if (todoData.repeatType === REPEAT_TYPE.ONCE_A_YEAR) {
@ -89,7 +98,9 @@ export const useCreateTodo = () => {
const nextMonth = addYears(date, i); const nextMonth = addYears(date, i);
let docRef = firestore().collection("Todos").doc(); let docRef = firestore().collection("Todos").doc();
const newTodo = { ...originalTodo, id: docRef.id, date: nextMonth, connectedTodoId: newDoc.id }; let newTodo = { ...originalTodo, id: docRef.id, date: nextMonth, connectedTodoId: newDoc.id };
newTodo = resolveTodoAlternatingAssignees(todoData, newTodo, i);
batch.set(docRef, newTodo); batch.set(docRef, newTodo);
} }
} }
@ -104,4 +115,15 @@ export const useCreateTodo = () => {
queryClients.invalidateQueries("todos") queryClients.invalidateQueries("todos")
} }
}) })
}
export const resolveTodoAlternatingAssignees = (todoData, newTodo, i) => {
if (todoData.assignees && todoData.rotate && todoData?.assignees?.length !== 0) {
const assignees = todoData.assignees;
const assignee = assignees[i % assignees.length];
newTodo = {...newTodo, assignees: [assignee]};
}
return newTodo;
} }

View File

@ -2,7 +2,7 @@ import { useMutation, useQueryClient } from "react-query";
import firestore from "@react-native-firebase/firestore"; import firestore from "@react-native-firebase/firestore";
import {IToDo, REPEAT_TYPE} from "@/hooks/firebase/types/todoData"; import {IToDo, REPEAT_TYPE} from "@/hooks/firebase/types/todoData";
import {addDays, addMonths, addWeeks, addYears, compareAsc, format, subDays} from "date-fns"; import {addDays, addMonths, addWeeks, addYears, compareAsc, format, subDays} from "date-fns";
import {daysOfWeek} from "@/hooks/firebase/useCreateTodo"; import {daysOfWeek, resolveTodoAlternatingAssignees} from "@/hooks/firebase/useCreateTodo";
import {useAuthContext} from "@/contexts/AuthContext"; import {useAuthContext} from "@/contexts/AuthContext";
export const useUpdateTodo = () => { export const useUpdateTodo = () => {
@ -79,18 +79,24 @@ export const useUpdateTodo = () => {
} }
console.log(todosToAddCycles); console.log(todosToAddCycles);
let newDoc = firestore().collection("Todos").doc(); let newDoc = firestore().collection("Todos").doc();
const newTodo = { ...todoData, id: newDoc.id, date: todoData.date, connectedTodoId: newDoc?.id }; let originalTodo = { ...todoData, id: newDoc.id, date: todoData.date, connectedTodoId: newDoc?.id };
batch.set(newDoc, newTodo); originalTodo = resolveTodoAlternatingAssignees(todoData, originalTodo, 0);
batch.set(newDoc, originalTodo);
console.log(dates); console.log(dates);
for (let i = 0; i < todosToAddCycles; i++) { let index = 1;
for (let i = 0; i <= todosToAddCycles; i++) {
dates?.forEach((dateToAdd) => { dates?.forEach((dateToAdd) => {
index++;
let newTodoDate = addWeeks(dateToAdd, i); let newTodoDate = addWeeks(dateToAdd, i);
if (compareAsc(newTodoDate, originalTodo.date) !== 0) {
console.log("ENTER")
let docRef = firestore().collection("Todos").doc(); let docRef = firestore().collection("Todos").doc();
const newTodo = { ...todoData, id: docRef.id, date: newTodoDate, connectedTodoId: newDoc?.id }; let newTodo = { ...todoData, id: docRef.id, date: newTodoDate, connectedTodoId: newDoc?.id };
newTodo = resolveTodoAlternatingAssignees(todoData, newTodo, index);
batch.set(docRef, newTodo); batch.set(docRef, newTodo);
}
}) })
} }
} else if (todoData.repeatType === REPEAT_TYPE.ONCE_A_MONTH) { } else if (todoData.repeatType === REPEAT_TYPE.ONCE_A_MONTH) {
@ -100,9 +106,10 @@ export const useUpdateTodo = () => {
for (let i = 0; i < 12; i++) { for (let i = 0; i < 12; i++) {
let date = todoData?.date; let date = todoData?.date;
const nextMonth = addMonths(date, i); const nextMonth = addMonths(date, i);
const newTodo = { ...todoData, date: nextMonth, connectedTodoId: firstTodo?.connectedTodoId };
let docRef = firestore().collection("Todos").doc(); let docRef = firestore().collection("Todos").doc();
let newTodo = { ...todoData, id: docRef.id, date: nextMonth, connectedTodoId: firstTodo?.connectedTodoId };
newTodo = resolveTodoAlternatingAssignees(todoData, newTodo, i);
batch.set(docRef, newTodo); batch.set(docRef, newTodo);
} }
} else if (todoData.repeatType === REPEAT_TYPE.ONCE_A_YEAR) { } else if (todoData.repeatType === REPEAT_TYPE.ONCE_A_YEAR) {
@ -112,9 +119,10 @@ export const useUpdateTodo = () => {
for (let i = 0; i < 5; i++) { for (let i = 0; i < 5; i++) {
let date = todoData?.date; let date = todoData?.date;
const nextMonth = addYears(date, i); const nextMonth = addYears(date, i);
const newTodo = { ...todoData, date: nextMonth, connectedTodoId: firstTodo?.connectedTodoId };
let docRef = firestore().collection("Todos").doc(); let docRef = firestore().collection("Todos").doc();
let newTodo = { ...todoData, id: docRef.id, date: nextMonth, connectedTodoId: firstTodo?.connectedTodoId };
newTodo = resolveTodoAlternatingAssignees(todoData, newTodo, i);
batch.set(docRef, newTodo); batch.set(docRef, newTodo);
} }
} }
@ -179,11 +187,14 @@ const updateRepeatDaysTodos = async (batch: any, todoData: IToDo, firstTodo: ITo
dates.push(newDate); dates.push(newDate);
}); });
let index = 0;
for (let i = 0; i < todosToAddCycles; i++) { for (let i = 0; i < todosToAddCycles; i++) {
dates?.forEach((dateToAdd) => { dates?.forEach((dateToAdd) => {
index ++;
let newTodoDate = addWeeks(dateToAdd, i); let newTodoDate = addWeeks(dateToAdd, i);
if (compareAsc(newTodoDate, firstTodo?.date) !== 0) { if (compareAsc(newTodoDate, firstTodo?.date) !== 0) {
const newTodo = {...todoData, date: newTodoDate}; let newTodo = {...todoData, date: newTodoDate};
newTodo = resolveTodoAlternatingAssignees(todoData, newTodo, index);
let docRef = firestore().collection("Todos").doc(); let docRef = firestore().collection("Todos").doc();
batch.set(docRef, newTodo); batch.set(docRef, newTodo);