import React, { createContext, useReducer, useEffect } from "react"; import { ClassReducer } from "./classReducer"; import { v4 as uuidv4 } from "uuid"; import AsyncStorage from "@react-native-async-storage/async-storage"; const getExistingClasses = async () => { try { const classes = await AsyncStorage.getItem("classes"); console.log(classes); return classes ? JSON.parse(classes) : []; } catch (e) { console.log("Failed to fetch class data from storage"); } }; export const ClassContext = createContext(); export const ClassContextProvider = (props) => { const [contextClasses, dispatch] = useReducer(ClassReducer, []); // Loading initial state useEffect(() => { async function fetchExistingClasses() { const existingClasses = await getExistingClasses(); Object.keys(existingClasses).forEach((key) => { dispatch({ type: "RELOAD_CLASS", class: { id: existingClasses[key]["id"], className: existingClasses[key]["className"], classNum: existingClasses[key]["classNum"], roomNum: existingClasses[key]["roomNum"], college: existingClasses[key]["college"], addDatesArr: existingClasses[key]["classTimes"], }, }); }); } fetchExistingClasses(); }, []); //Add to AsyncStorage useEffect(() => { if (contextClasses) { AsyncStorage.setItem("classes", JSON.stringify(contextClasses)); } }, [contextClasses]); return ( <ClassContext.Provider value={{ contextClasses, dispatch }}> {props.children} </ClassContext.Provider> ); }; const loadClassesAsyncStorage = async () => { const existingClasses = await AsyncStorage.getItem("classes"); let classes = await existingClasses; console.log(classes, "CLASSES FROM ASYNCSTORAGE"); };