import React, { createContext, useReducer, useEffect } from "react"; import { TaskReducer } from "./taskReducer"; import { v4 as uuidv4 } from "uuid"; import AsyncStorage from "@react-native-async-storage/async-storage"; const getExistingTasks = async () => { try { const tasks = await AsyncStorage.getItem("tasks"); console.log(tasks, "Obtained existing classes from AsyncStorage!"); return tasks ? JSON.parse(tasks) : []; } catch (e) { console.log("Failed to fetch task data from AsyncStorage!"); error.log(e); } }; export const TaskContext = createContext(); export const TaskContextProvider = (props) => { const [contextTasks, dispatch] = useReducer(TaskReducer, []); useEffect(() => { async function fetchExistingTasks() { const existingTasks = await getExistingTasks(); Object.keys(existingTasks).forEach((key) => { dispatch({ type: "RELOAD_TASK", task: { id: existingTasks[key]["id"], taskName: existingTasks[key]["taskName"], taskSchedule: existingTasks[key]["taskSchedule"], taskPriority: existingTasks[key]["taskPriority"], taskDesc: existingTasks[key]["taskDesc"], taskTags: existingTasks[key]["taskTags"], }, }); }); } fetchExistingTasks(); }, []); useEffect(() => { if (contextTasks) { AsyncStorage.setItem("tasks", JSON.stringify(contextTasks)); } }, [contextTasks]); return ( <TaskContext.Provider value={{ contextTasks, dispatch }}> {props.children} </TaskContext.Provider> ); };