diff --git a/components/pages/todos/AddChoreDialog.tsx b/components/pages/todos/AddChoreDialog.tsx index b2a189c..099d690 100644 --- a/components/pages/todos/AddChoreDialog.tsx +++ b/components/pages/todos/AddChoreDialog.tsx @@ -248,7 +248,7 @@ const AddChoreDialog = (addChoreDialogProps: IAddChoreDialog) => { marginL-8 value={selectedAssignees} onChange={(value) => { - setSelectedAssignees([...selectedAssignees, ...value]); + setSelectedAssignees(value); }} style={{marginVertical: 5}} mode={PickerModes.MULTI} diff --git a/hooks/firebase/useCreateTodo.ts b/hooks/firebase/useCreateTodo.ts index afffdde..06e4979 100644 --- a/hooks/firebase/useCreateTodo.ts +++ b/hooks/firebase/useCreateTodo.ts @@ -31,6 +31,9 @@ export const useCreateTodo = () => { // Create the one original to do const newDoc = firestore().collection('Todos').doc(); let originalTodo = {...todoData, id: newDoc.id, familyId: profileData?.familyId, creatorId: currentUser?.uid, connectedTodoId: newDoc.id}; + + originalTodo = resolveTodoAlternatingAssignees(todoData, originalTodo, 0); + await firestore() .collection("Todos") .add(originalTodo); @@ -59,13 +62,17 @@ export const useCreateTodo = () => { }); // TODO: for the next 52 weeks + let index = 1; for (let i = 0; i < 4; i++) { dates?.forEach((dateToAdd) => { + index ++; let newTodoDate = addWeeks(dateToAdd, i); if (compareAsc(newTodoDate, originalTodo.date) !== 0) { 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); } }) @@ -78,7 +85,9 @@ export const useCreateTodo = () => { const nextMonth = addMonths(date, i); 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); } } else if (todoData.repeatType === REPEAT_TYPE.ONCE_A_YEAR) { @@ -89,7 +98,9 @@ export const useCreateTodo = () => { const nextMonth = addYears(date, i); 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); } } @@ -104,4 +115,15 @@ export const useCreateTodo = () => { 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; } \ No newline at end of file diff --git a/hooks/firebase/useUpdateTodo.ts b/hooks/firebase/useUpdateTodo.ts index 0b58924..35b254c 100644 --- a/hooks/firebase/useUpdateTodo.ts +++ b/hooks/firebase/useUpdateTodo.ts @@ -2,7 +2,7 @@ import { useMutation, useQueryClient } from "react-query"; import firestore from "@react-native-firebase/firestore"; import {IToDo, REPEAT_TYPE} from "@/hooks/firebase/types/todoData"; 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"; export const useUpdateTodo = () => { @@ -79,18 +79,24 @@ export const useUpdateTodo = () => { } console.log(todosToAddCycles); let newDoc = firestore().collection("Todos").doc(); - const newTodo = { ...todoData, id: newDoc.id, date: todoData.date, connectedTodoId: newDoc?.id }; - batch.set(newDoc, newTodo); + let originalTodo = { ...todoData, id: newDoc.id, date: todoData.date, connectedTodoId: newDoc?.id }; + originalTodo = resolveTodoAlternatingAssignees(todoData, originalTodo, 0); + batch.set(newDoc, originalTodo); console.log(dates); - for (let i = 0; i < todosToAddCycles; i++) { + let index = 1; + for (let i = 0; i <= todosToAddCycles; i++) { dates?.forEach((dateToAdd) => { + index++; let newTodoDate = addWeeks(dateToAdd, i); + if (compareAsc(newTodoDate, originalTodo.date) !== 0) { - console.log("ENTER") 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); + } }) } } else if (todoData.repeatType === REPEAT_TYPE.ONCE_A_MONTH) { @@ -100,9 +106,10 @@ export const useUpdateTodo = () => { for (let i = 0; i < 12; i++) { let date = todoData?.date; const nextMonth = addMonths(date, i); - const newTodo = { ...todoData, date: nextMonth, connectedTodoId: firstTodo?.connectedTodoId }; 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); } } else if (todoData.repeatType === REPEAT_TYPE.ONCE_A_YEAR) { @@ -112,9 +119,10 @@ export const useUpdateTodo = () => { for (let i = 0; i < 5; i++) { let date = todoData?.date; const nextMonth = addYears(date, i); - const newTodo = { ...todoData, date: nextMonth, connectedTodoId: firstTodo?.connectedTodoId }; 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); } } @@ -179,11 +187,14 @@ const updateRepeatDaysTodos = async (batch: any, todoData: IToDo, firstTodo: ITo dates.push(newDate); }); + let index = 0; for (let i = 0; i < todosToAddCycles; i++) { dates?.forEach((dateToAdd) => { + index ++; let newTodoDate = addWeeks(dateToAdd, i); 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(); batch.set(docRef, newTodo);