- Introduced attribute id in the eventData type

- INtroduced new method to save the event data from the google and microsoft providers only if there isn't already an event with the same id
This commit is contained in:
Dejan
2024-10-05 21:59:59 +02:00
parent 6ad587ef31
commit d1d3fd0ca1
3 changed files with 35 additions and 6 deletions

View File

@ -6,7 +6,7 @@ import { colorMap } from "@/contexts/SettingsContext";
import { TouchableOpacity } from "react-native-gesture-handler"; import { TouchableOpacity } from "react-native-gesture-handler";
import { fetchGoogleCalendarEvents } from "@/calendar-integration/google-calendar-utils"; import { fetchGoogleCalendarEvents } from "@/calendar-integration/google-calendar-utils";
import { fetchMicrosoftCalendarEvents } from "@/calendar-integration/microsoft-calendar-utils"; import { fetchMicrosoftCalendarEvents } from "@/calendar-integration/microsoft-calendar-utils";
import { useCreateEvent } from "@/hooks/firebase/useCreateEvent"; import { useCreateEventFromProvider } from "@/hooks/firebase/useCreateEvent";
import { useAuthContext } from "@/contexts/AuthContext"; import { useAuthContext } from "@/contexts/AuthContext";
import { useUpdateUserData } from "@/hooks/firebase/useUpdateUserData"; import { useUpdateUserData } from "@/hooks/firebase/useUpdateUserData";
import { GoogleSignin } from "@react-native-google-signin/google-signin"; import { GoogleSignin } from "@react-native-google-signin/google-signin";
@ -48,7 +48,7 @@ const CalendarSettingsPage = (props: {
const [startDate, setStartDate] = useState<boolean>(true); const [startDate, setStartDate] = useState<boolean>(true);
const { profileData } = useAuthContext(); const { profileData } = useAuthContext();
const { mutateAsync: createEvent } = useCreateEvent(); const { mutateAsync: createEventFromProvider } = useCreateEventFromProvider();
const { mutateAsync: updateUserData } = useUpdateUserData(); const { mutateAsync: updateUserData } = useUpdateUserData();
const fetchAndSaveGoogleEvents = () => { const fetchAndSaveGoogleEvents = () => {
@ -67,7 +67,7 @@ const CalendarSettingsPage = (props: {
}; };
async function saveData(item) { async function saveData(item) {
await createEvent(item); await createEventFromProvider(item);
} }
const fetchAndSaveMicrosoftEvents = () => { const fetchAndSaveMicrosoftEvents = () => {

View File

@ -10,4 +10,5 @@ export interface EventData {
surpriseEvent?: boolean, surpriseEvent?: boolean,
notes?: string, notes?: string,
reminders?: string[] reminders?: string[]
id?: string,
} }

View File

@ -1,7 +1,7 @@
import {useAuthContext} from "@/contexts/AuthContext"; import { useAuthContext } from "@/contexts/AuthContext";
import {useMutation, useQueryClient} from "react-query"; import { useMutation, useQueryClient } from "react-query";
import firestore from "@react-native-firebase/firestore"; import firestore from "@react-native-firebase/firestore";
import {EventData} from "@/hooks/firebase/types/eventData"; import { EventData } from "@/hooks/firebase/types/eventData";
export const useCreateEvent = () => { export const useCreateEvent = () => {
const {user: currentUser} = useAuthContext() const {user: currentUser} = useAuthContext()
@ -22,4 +22,32 @@ export const useCreateEvent = () => {
queryClients.invalidateQueries("events") queryClients.invalidateQueries("events")
} }
}) })
}
export const useCreateEventFromProvider = () => {
const {user: currentUser} = useAuthContext()
const queryClients = useQueryClient()
return useMutation({
mutationKey: ["createEventFromProvider"],
mutationFn: async (eventData: Partial<EventData>) => {
try {
const snapshot = await firestore()
.collection("Events")
.where("id", "==", eventData.id)
.get();
if (snapshot.empty) {
await firestore()
.collection("Events")
.add({...eventData, creatorId: currentUser?.uid})
}
} catch (e) {
console.error(e)
}
},
onSuccess: () => {
queryClients.invalidateQueries("events")
}
})
} }