mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-19 03:01:53 +10:00
- creating and updating resumes
This commit is contained in:
@ -1,8 +1,16 @@
|
||||
import React, { createContext, useState } from "react";
|
||||
|
||||
const defaultState = {
|
||||
authModal: {},
|
||||
createResumeModal: {},
|
||||
authModal: {
|
||||
isOpen: false,
|
||||
setOpen: () => {},
|
||||
},
|
||||
createResumeModal: {
|
||||
isOpen: false,
|
||||
setOpen: () => {},
|
||||
data: null,
|
||||
setData: () => {},
|
||||
},
|
||||
};
|
||||
|
||||
const ModalContext = createContext(defaultState);
|
||||
@ -10,6 +18,7 @@ const ModalContext = createContext(defaultState);
|
||||
const ModalProvider = ({ children }) => {
|
||||
const [authOpen, setAuthOpen] = useState(false);
|
||||
const [createResumeOpen, setCreateResumeOpen] = useState(false);
|
||||
const [createResumeData, setCreateResumeData] = useState(null);
|
||||
|
||||
return (
|
||||
<ModalContext.Provider
|
||||
@ -18,6 +27,8 @@ const ModalProvider = ({ children }) => {
|
||||
createResumeModal: {
|
||||
isOpen: createResumeOpen,
|
||||
setOpen: setCreateResumeOpen,
|
||||
data: createResumeData,
|
||||
setData: setCreateResumeData,
|
||||
},
|
||||
}}
|
||||
>
|
||||
|
||||
74
src/contexts/ResumeContext.js
Normal file
74
src/contexts/ResumeContext.js
Normal file
@ -0,0 +1,74 @@
|
||||
import firebase from "gatsby-plugin-firebase";
|
||||
import React, { createContext, useContext, useEffect, useState } from "react";
|
||||
import { v4 as uuidv4 } from "uuid";
|
||||
import { transformCollectionSnapshot } from "../utils";
|
||||
import UserContext from "./UserContext";
|
||||
|
||||
const defaultState = {
|
||||
resumes: [],
|
||||
createResume: async () => {},
|
||||
};
|
||||
|
||||
const ResumeContext = createContext(defaultState);
|
||||
|
||||
const ResumeProvider = ({ children }) => {
|
||||
const [resumes, setResumes] = useState([null]);
|
||||
const [collectionRef, setCollectionRef] = useState(null);
|
||||
const { user } = useContext(UserContext);
|
||||
|
||||
useEffect(() => {
|
||||
if (user) {
|
||||
setCollectionRef(`users/${user.uid}/resumes`);
|
||||
}
|
||||
}, [user]);
|
||||
|
||||
useEffect(() => {
|
||||
if (collectionRef) {
|
||||
firebase
|
||||
.firestore()
|
||||
.collection(collectionRef)
|
||||
.onSnapshot((snapshot) =>
|
||||
transformCollectionSnapshot(snapshot, setResumes)
|
||||
);
|
||||
}
|
||||
}, [collectionRef]);
|
||||
|
||||
const createResume = async ({ name }) => {
|
||||
const id = uuidv4();
|
||||
const createdAt = firebase.firestore.FieldValue.serverTimestamp();
|
||||
await firebase.firestore().collection(collectionRef).doc(id).set({
|
||||
id,
|
||||
name,
|
||||
createdAt,
|
||||
updatedAt: createdAt,
|
||||
});
|
||||
};
|
||||
|
||||
const updateResume = async (resume) => {
|
||||
const { id, name } = resume;
|
||||
|
||||
if (resumes.find((x) => x.id === id) === resume) return;
|
||||
|
||||
await firebase.firestore().collection(collectionRef).doc(id).update({
|
||||
id,
|
||||
name,
|
||||
updatedAt: firebase.firestore.FieldValue.serverTimestamp(),
|
||||
});
|
||||
};
|
||||
|
||||
return (
|
||||
<ResumeContext.Provider
|
||||
value={{
|
||||
resumes,
|
||||
createResume,
|
||||
updateResume,
|
||||
}}
|
||||
>
|
||||
{children}
|
||||
</ResumeContext.Provider>
|
||||
);
|
||||
};
|
||||
|
||||
export default ResumeContext;
|
||||
|
||||
export { ResumeProvider };
|
||||
Reference in New Issue
Block a user