import { ContentCopy, DeleteOutline, DriveFileRenameOutline, Link as LinkIcon, MoreVert, OpenInNew, } from '@mui/icons-material'; import { ButtonBase, ListItemIcon, ListItemText, Menu, MenuItem, Tooltip } from '@mui/material'; import { Resume } from '@reactive-resume/schema'; import Image from 'next/image'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { useTranslation } from 'next-i18next'; import { useState } from 'react'; import toast from 'react-hot-toast'; import { useMutation } from 'react-query'; import { RESUMES_QUERY } from '@/constants/index'; import { ServerError } from '@/services/axios'; import queryClient from '@/services/react-query'; import { deleteResume, DeleteResumeParams, duplicateResume, DuplicateResumeParams } from '@/services/resume'; import { useAppDispatch } from '@/store/hooks'; import { setModalState } from '@/store/modal/modalSlice'; import { getRelativeTime } from '@/utils/date'; import getResumeUrl from '@/utils/getResumeUrl'; import styles from './ResumePreview.module.scss'; type Props = { resume: Resume; }; const ResumePreview: React.FC = ({ resume }) => { const router = useRouter(); const { t } = useTranslation(); const dispatch = useAppDispatch(); const [anchorEl, setAnchorEl] = useState(null); const { mutateAsync: duplicateMutation } = useMutation(duplicateResume); const { mutateAsync: deleteMutation } = useMutation(deleteResume); const handleOpen = () => { handleClose(); router.push({ pathname: '/[username]/[slug]/build', query: { username: resume.user.username, slug: resume.slug }, }); }; const handleOpenMenu = (event: React.MouseEvent) => { setAnchorEl(event.currentTarget); }; const handleClose = () => { setAnchorEl(null); }; const handleRename = () => { handleClose(); dispatch( setModalState({ modal: 'dashboard.rename-resume', state: { open: true, payload: { item: resume, onComplete: () => { queryClient.invalidateQueries(RESUMES_QUERY); }, }, }, }) ); }; const handleDuplicate = async () => { handleClose(); await duplicateMutation({ id: resume.id }); queryClient.invalidateQueries(RESUMES_QUERY); }; const handleShareLink = async () => { handleClose(); const url = getResumeUrl(resume, { withHost: true }); await navigator.clipboard.writeText(url); toast.success(t('common.toast.success.resume-link-copied')); }; const handleDelete = async () => { handleClose(); await deleteMutation({ id: resume.id }); queryClient.invalidateQueries(RESUMES_QUERY); }; return (
{resume.image ? ( {resume.name} ) : null}
); }; export default ResumePreview;