mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-16 01:32:02 +10:00
- implement duplicate resume functionality
This commit is contained in:
@ -1,5 +1,6 @@
|
|||||||
import { Link } from 'gatsby';
|
import { Link } from 'gatsby';
|
||||||
import React, { memo } from 'react';
|
import React, { memo } from 'react';
|
||||||
|
import { Tooltip } from '@material-ui/core';
|
||||||
import sections from '../../../data/leftSections';
|
import sections from '../../../data/leftSections';
|
||||||
import Avatar from '../../shared/Avatar';
|
import Avatar from '../../shared/Avatar';
|
||||||
import Logo from '../../shared/Logo';
|
import Logo from '../../shared/Logo';
|
||||||
@ -8,9 +9,13 @@ import styles from './LeftNavbar.module.css';
|
|||||||
|
|
||||||
const LeftNavbar = () => (
|
const LeftNavbar = () => (
|
||||||
<div className={styles.container}>
|
<div className={styles.container}>
|
||||||
<Link to="/app/dashboard">
|
<Tooltip title="Go Back to Dashboard" placement="right">
|
||||||
<Logo size="40px" />
|
<div>
|
||||||
</Link>
|
<Link to="/app/dashboard">
|
||||||
|
<Logo size="40px" />
|
||||||
|
</Link>
|
||||||
|
</div>
|
||||||
|
</Tooltip>
|
||||||
|
|
||||||
<hr className="my-6" />
|
<hr className="my-6" />
|
||||||
|
|
||||||
|
|||||||
@ -11,7 +11,7 @@ import styles from './ResumePreview.module.css';
|
|||||||
const ResumePreview = ({ resume }) => {
|
const ResumePreview = ({ resume }) => {
|
||||||
const [anchorEl, setAnchorEl] = useState(null);
|
const [anchorEl, setAnchorEl] = useState(null);
|
||||||
const { emitter, events } = useContext(ModalContext);
|
const { emitter, events } = useContext(ModalContext);
|
||||||
const { deleteResume } = useContext(DatabaseContext);
|
const { duplicateResume, deleteResume } = useContext(DatabaseContext);
|
||||||
|
|
||||||
const handleOpen = () => navigate(`/app/builder/${resume.id}`);
|
const handleOpen = () => navigate(`/app/builder/${resume.id}`);
|
||||||
|
|
||||||
@ -19,6 +19,11 @@ const ResumePreview = ({ resume }) => {
|
|||||||
setAnchorEl(event.currentTarget);
|
setAnchorEl(event.currentTarget);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleDuplicate = () => {
|
||||||
|
duplicateResume(resume);
|
||||||
|
setAnchorEl(null);
|
||||||
|
};
|
||||||
|
|
||||||
const handleRename = () => {
|
const handleRename = () => {
|
||||||
emitter.emit(events.CREATE_RESUME_MODAL, resume);
|
emitter.emit(events.CREATE_RESUME_MODAL, resume);
|
||||||
setAnchorEl(null);
|
setAnchorEl(null);
|
||||||
@ -62,6 +67,7 @@ const ResumePreview = ({ resume }) => {
|
|||||||
open={Boolean(anchorEl)}
|
open={Boolean(anchorEl)}
|
||||||
onClose={handleMenuClose}
|
onClose={handleMenuClose}
|
||||||
>
|
>
|
||||||
|
<MenuItem onClick={handleDuplicate}>Duplicate</MenuItem>
|
||||||
<MenuItem onClick={handleRename}>Rename</MenuItem>
|
<MenuItem onClick={handleRename}>Rename</MenuItem>
|
||||||
<MenuItem onClick={handleDelete}>
|
<MenuItem onClick={handleDelete}>
|
||||||
<span className="text-red-600 font-medium">Delete</span>
|
<span className="text-red-600 font-medium">Delete</span>
|
||||||
|
|||||||
@ -10,6 +10,7 @@ const DEBOUNCE_WAIT_TIME = 4000;
|
|||||||
const defaultState = {
|
const defaultState = {
|
||||||
isUpdating: false,
|
isUpdating: false,
|
||||||
createResume: () => {},
|
createResume: () => {},
|
||||||
|
duplicateResume: () => {},
|
||||||
deleteResume: () => {},
|
deleteResume: () => {},
|
||||||
getResume: async () => {},
|
getResume: async () => {},
|
||||||
getResumes: async () => {},
|
getResumes: async () => {},
|
||||||
@ -66,6 +67,21 @@ const DatabaseProvider = ({ children }) => {
|
|||||||
firebase.database().ref(`resumes/${id}`).set(resume);
|
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) => {
|
const updateResume = async (resume) => {
|
||||||
setUpdating(true);
|
setUpdating(true);
|
||||||
|
|
||||||
@ -83,11 +99,6 @@ const DatabaseProvider = ({ children }) => {
|
|||||||
const debouncedUpdateResume = debounce(updateResume, DEBOUNCE_WAIT_TIME);
|
const debouncedUpdateResume = debounce(updateResume, DEBOUNCE_WAIT_TIME);
|
||||||
|
|
||||||
const deleteResume = async (id) => {
|
const deleteResume = async (id) => {
|
||||||
await firebase
|
|
||||||
.storage()
|
|
||||||
.ref(`/users/${user.uid}/photographs/${id}`)
|
|
||||||
.delete();
|
|
||||||
|
|
||||||
await firebase.database().ref(`/resumes/${id}`).remove();
|
await firebase.database().ref(`/resumes/${id}`).remove();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -97,6 +108,7 @@ const DatabaseProvider = ({ children }) => {
|
|||||||
isUpdating,
|
isUpdating,
|
||||||
getResume,
|
getResume,
|
||||||
createResume,
|
createResume,
|
||||||
|
duplicateResume,
|
||||||
updateResume,
|
updateResume,
|
||||||
deleteResume,
|
deleteResume,
|
||||||
debouncedUpdateResume,
|
debouncedUpdateResume,
|
||||||
|
|||||||
@ -9,5 +9,5 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.footer {
|
.footer {
|
||||||
@apply mb-16 text-center opacity-50 leading-loose;
|
@apply mb-16 text-white text-center opacity-50 leading-loose;
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user