mirror of
https://github.com/urosran/cally.git
synced 2025-07-14 17:25:46 +00:00
- Take turns implementation for the todos
This commit is contained in:
@ -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}
|
||||||
|
@ -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;
|
||||||
}
|
}
|
@ -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);
|
||||||
|
Reference in New Issue
Block a user