diff --git a/src/components/builder/left/LeftNavbar.js b/src/components/builder/left/LeftNavbar.js index 0d1aec43..245403b7 100644 --- a/src/components/builder/left/LeftNavbar.js +++ b/src/components/builder/left/LeftNavbar.js @@ -1,5 +1,6 @@ import { Link } from 'gatsby'; import React, { memo } from 'react'; +import { Tooltip } from '@material-ui/core'; import sections from '../../../data/leftSections'; import Avatar from '../../shared/Avatar'; import Logo from '../../shared/Logo'; @@ -8,9 +9,13 @@ import styles from './LeftNavbar.module.css'; const LeftNavbar = () => (
- - - + +
+ + + +
+

diff --git a/src/components/dashboard/ResumePreview.js b/src/components/dashboard/ResumePreview.js index 691ff6fe..e71fe97e 100644 --- a/src/components/dashboard/ResumePreview.js +++ b/src/components/dashboard/ResumePreview.js @@ -11,7 +11,7 @@ import styles from './ResumePreview.module.css'; const ResumePreview = ({ resume }) => { const [anchorEl, setAnchorEl] = useState(null); const { emitter, events } = useContext(ModalContext); - const { deleteResume } = useContext(DatabaseContext); + const { duplicateResume, deleteResume } = useContext(DatabaseContext); const handleOpen = () => navigate(`/app/builder/${resume.id}`); @@ -19,6 +19,11 @@ const ResumePreview = ({ resume }) => { setAnchorEl(event.currentTarget); }; + const handleDuplicate = () => { + duplicateResume(resume); + setAnchorEl(null); + }; + const handleRename = () => { emitter.emit(events.CREATE_RESUME_MODAL, resume); setAnchorEl(null); @@ -62,6 +67,7 @@ const ResumePreview = ({ resume }) => { open={Boolean(anchorEl)} onClose={handleMenuClose} > + Duplicate Rename Delete diff --git a/src/contexts/DatabaseContext.js b/src/contexts/DatabaseContext.js index 23f78209..862df98e 100644 --- a/src/contexts/DatabaseContext.js +++ b/src/contexts/DatabaseContext.js @@ -10,6 +10,7 @@ const DEBOUNCE_WAIT_TIME = 4000; const defaultState = { isUpdating: false, createResume: () => {}, + duplicateResume: () => {}, deleteResume: () => {}, getResume: async () => {}, getResumes: async () => {}, @@ -66,6 +67,21 @@ const DatabaseProvider = ({ children }) => { firebase.database().ref(`resumes/${id}`).set(resume); }; + const duplicateResume = (originalResume) => { + const id = uuid(); + const createdAt = firebase.database.ServerValue.TIMESTAMP; + + const resume = { + ...originalResume, + id, + name: `${originalResume.name} Copy`, + createdAt, + updatedAt: createdAt, + }; + + firebase.database().ref(`resumes/${id}`).set(resume); + }; + const updateResume = async (resume) => { setUpdating(true); @@ -83,11 +99,6 @@ const DatabaseProvider = ({ children }) => { const debouncedUpdateResume = debounce(updateResume, DEBOUNCE_WAIT_TIME); const deleteResume = async (id) => { - await firebase - .storage() - .ref(`/users/${user.uid}/photographs/${id}`) - .delete(); - await firebase.database().ref(`/resumes/${id}`).remove(); }; @@ -97,6 +108,7 @@ const DatabaseProvider = ({ children }) => { isUpdating, getResume, createResume, + duplicateResume, updateResume, deleteResume, debouncedUpdateResume, diff --git a/src/pages/r/view.module.css b/src/pages/r/view.module.css index f33c1747..48b02575 100644 --- a/src/pages/r/view.module.css +++ b/src/pages/r/view.module.css @@ -9,5 +9,5 @@ } .footer { - @apply mb-16 text-center opacity-50 leading-loose; + @apply mb-16 text-white text-center opacity-50 leading-loose; } \ No newline at end of file