mirror of
https://github.com/urosran/cally.git
synced 2025-07-10 15:17:17 +00:00
- Implemented the complete update of recurring todo and handle changing the recurring rule and date
This commit is contained in:
@ -2,7 +2,7 @@ import {useMutation, useQueryClient} from "react-query";
|
||||
import firestore from "@react-native-firebase/firestore";
|
||||
import {useAuthContext} from "@/contexts/AuthContext";
|
||||
import {DAYS_OF_WEEK_ENUM, IToDo, REPEAT_TYPE} from "@/hooks/firebase/types/todoData";
|
||||
import {addDays, addMonths, addWeeks, compareAsc, format, getDay, subDays} from "date-fns";
|
||||
import {addDays, addMonths, addWeeks, addYears, compareAsc, format, subDays} from "date-fns";
|
||||
|
||||
export const daysOfWeek = [
|
||||
DAYS_OF_WEEK_ENUM.MONDAY,
|
||||
@ -21,14 +21,20 @@ export const useCreateTodo = () => {
|
||||
mutationKey: ["createTodo"],
|
||||
mutationFn: async (todoData: Partial<IToDo>) => {
|
||||
try {
|
||||
// Create the one original to do
|
||||
const newDoc = firestore().collection('Todos').doc();
|
||||
let originalTodo = {...todoData, id: newDoc.id, familyId: profileData?.familyId, creatorId: currentUser?.uid}
|
||||
await firestore()
|
||||
.collection("Todos")
|
||||
.add(originalTodo);
|
||||
if (todoData.repeatType === REPEAT_TYPE.NONE) {
|
||||
const newDoc = firestore().collection('Todos').doc();
|
||||
let originalTodo = {...todoData, id: newDoc.id, familyId: profileData?.familyId, creatorId: currentUser?.uid}
|
||||
await firestore()
|
||||
.collection("Todos")
|
||||
.add(originalTodo);
|
||||
} else {
|
||||
// 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};
|
||||
await firestore()
|
||||
.collection("Todos")
|
||||
.add(originalTodo);
|
||||
|
||||
if (todoData.repeatType !== REPEAT_TYPE.NONE) {
|
||||
const batch = firestore().batch();
|
||||
|
||||
if (todoData.repeatType === REPEAT_TYPE.EVERY_WEEK) {
|
||||
@ -57,36 +63,33 @@ export const useCreateTodo = () => {
|
||||
dates?.forEach((dateToAdd) => {
|
||||
let newTodoDate = addWeeks(dateToAdd, i);
|
||||
if (compareAsc(newTodoDate, originalTodo.date) !== 0) {
|
||||
const newTodo = { ...originalTodo, date: newTodoDate, connectedTodoId: newDoc.id };
|
||||
|
||||
let docRef = firestore().collection("Todos").doc();
|
||||
const newTodo = { ...originalTodo, id: docRef.id, date: newTodoDate, connectedTodoId: newDoc.id };
|
||||
batch.set(docRef, newTodo);
|
||||
console.log(newTodo);
|
||||
}
|
||||
})
|
||||
}
|
||||
} else if (todoData.repeatType === REPEAT_TYPE.ONCE_A_MONTH) {
|
||||
|
||||
// for the next 12 months
|
||||
for (let i = 0; i < 12; i++) {
|
||||
for (let i = 1; i < 12; i++) {
|
||||
let date = originalTodo.date;
|
||||
const nextMonth = addMonths(date, i + 1);
|
||||
const newTodo = { ...originalTodo, date: nextMonth, connectedTodoId: newDoc.id };
|
||||
console.log(newTodo);
|
||||
const nextMonth = addMonths(date, i);
|
||||
|
||||
let docRef = firestore().collection("Todos").doc();
|
||||
const newTodo = { ...originalTodo, id: docRef.id, date: nextMonth, connectedTodoId: newDoc.id };
|
||||
batch.set(docRef, newTodo);
|
||||
}
|
||||
} else if (todoData.repeatType === REPEAT_TYPE.ONCE_A_YEAR) {
|
||||
|
||||
// for the next 5 years
|
||||
for (let i = 0; i < 5; i++) {
|
||||
for (let i = 1; i < 5; i++) {
|
||||
let date = originalTodo.date;
|
||||
const nextMonth = addMonths(date, i + 1);
|
||||
const newTodo = { ...originalTodo, date: nextMonth, connectedTodoId: newDoc.id };
|
||||
console.log(newTodo);
|
||||
const nextMonth = addYears(date, i);
|
||||
|
||||
let docRef = firestore().collection("Todos").doc();
|
||||
const newTodo = { ...originalTodo, id: docRef.id, date: nextMonth, connectedTodoId: newDoc.id };
|
||||
batch.set(docRef, newTodo);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user