From 410d8712c34d4b19e6cb534d13438341f07e6f20 Mon Sep 17 00:00:00 2001 From: Keane Chan Date: Thu, 27 Oct 2022 16:08:01 +0800 Subject: [PATCH] [resumes][fix] add resolve resume functionality (#442) * [resumes][fix] button getting cut off * [resumes][feat] add resolve functionality * [resumes][feat] replace student roles with internship * [resumes][feat] fetch isResolved field --- .../migration.sql | 2 + apps/portal/prisma/schema.prisma | 1 + apps/portal/src/pages/resumes/[resumeId].tsx | 75 +++++++++++++------ apps/portal/src/pages/resumes/browse.tsx | 2 +- .../router/resumes/resumes-resume-router.ts | 1 + .../resumes/resumes-resume-user-router.ts | 19 +++++ apps/portal/src/types/resume.d.ts | 1 + .../portal/src/utils/resumes/resumeFilters.ts | 14 +--- 8 files changed, 83 insertions(+), 32 deletions(-) create mode 100644 apps/portal/prisma/migrations/20221027052436_resumes_add_is_resolved_status/migration.sql diff --git a/apps/portal/prisma/migrations/20221027052436_resumes_add_is_resolved_status/migration.sql b/apps/portal/prisma/migrations/20221027052436_resumes_add_is_resolved_status/migration.sql new file mode 100644 index 00000000..5716b7a2 --- /dev/null +++ b/apps/portal/prisma/migrations/20221027052436_resumes_add_is_resolved_status/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "ResumesResume" ADD COLUMN "isResolved" BOOLEAN NOT NULL DEFAULT false; diff --git a/apps/portal/prisma/schema.prisma b/apps/portal/prisma/schema.prisma index bf57a55d..ec549a84 100644 --- a/apps/portal/prisma/schema.prisma +++ b/apps/portal/prisma/schema.prisma @@ -120,6 +120,7 @@ model ResumesResume { location String @db.Text url String additionalInfo String? @db.Text + isResolved Boolean @default(false) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt user User @relation(fields: [userId], references: [id], onDelete: Cascade) diff --git a/apps/portal/src/pages/resumes/[resumeId].tsx b/apps/portal/src/pages/resumes/[resumeId].tsx index 15d50e83..bd1d4066 100644 --- a/apps/portal/src/pages/resumes/[resumeId].tsx +++ b/apps/portal/src/pages/resumes/[resumeId].tsx @@ -9,6 +9,7 @@ import { AcademicCapIcon, BriefcaseIcon, CalendarIcon, + CheckCircleIcon, InformationCircleIcon, MapPinIcon, PencilSquareIcon, @@ -57,24 +58,33 @@ export default function ResumeReviewPage() { ); const starMutation = trpc.useMutation('resumes.resume.star', { onSuccess() { - utils.invalidateQueries(['resumes.resume.findOne']); - utils.invalidateQueries(['resumes.resume.findAll']); - utils.invalidateQueries(['resumes.resume.user.findUserStarred']); - utils.invalidateQueries(['resumes.resume.user.findUserCreated']); + invalidateResumeQueries(); }, }); const unstarMutation = trpc.useMutation('resumes.resume.unstar', { onSuccess() { - utils.invalidateQueries(['resumes.resume.findOne']); - utils.invalidateQueries(['resumes.resume.findAll']); - utils.invalidateQueries(['resumes.resume.user.findUserStarred']); - utils.invalidateQueries(['resumes.resume.user.findUserCreated']); + invalidateResumeQueries(); }, }); + const resolveMutation = trpc.useMutation('resumes.resume.user.resolve', { + onSuccess() { + invalidateResumeQueries(); + }, + }); + + const invalidateResumeQueries = () => { + utils.invalidateQueries(['resumes.resume.findOne']); + utils.invalidateQueries(['resumes.resume.findAll']); + utils.invalidateQueries(['resumes.resume.user.findUserStarred']); + utils.invalidateQueries(['resumes.resume.user.findUserCreated']); + }; + const userIsOwner = session?.user?.id !== undefined && session.user.id === detailsQuery.data?.userId; + const isResumeResolved = detailsQuery.data?.isResolved; + const [isEditMode, setIsEditMode] = useState(false); const [showCommentsForm, setShowCommentsForm] = useState(false); @@ -139,6 +149,13 @@ export default function ResumeReviewPage() { setIsEditMode(true); }; + const onResolveButtonClick = () => { + resolveMutation.mutate({ + id: resumeId as string, + val: !isResumeResolved, + }); + }; + const renderReviewButton = () => { if (session === null) { return ( @@ -175,10 +192,7 @@ export default function ResumeReviewPage() { url: detailsQuery.data.url, }} onClose={() => { - utils.invalidateQueries(['resumes.resume.findOne']); - utils.invalidateQueries(['resumes.resume.findAll']); - utils.invalidateQueries(['resumes.resume.user.findUserStarred']); - utils.invalidateQueries(['resumes.resume.user.findUserCreated']); + invalidateResumeQueries(); setIsEditMode(false); }} /> @@ -206,17 +220,36 @@ export default function ResumeReviewPage() {
{userIsOwner && ( - + )}