From b3df50b7a40a2e05df08b59a1494fd190dabc8f1 Mon Sep 17 00:00:00 2001 From: Keane Chan Date: Thu, 27 Oct 2022 15:42:15 +0800 Subject: [PATCH] [resumes][feat] add resolve functionality --- .../migration.sql | 2 + apps/portal/prisma/schema.prisma | 1 + apps/portal/src/pages/resumes/[resumeId].tsx | 56 ++++++++++++++++--- .../resumes/resumes-resume-user-router.ts | 17 ++++++ .../portal/src/utils/resumes/resumeFilters.ts | 2 +- 5 files changed, 68 insertions(+), 10 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..a98ea68a 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, @@ -71,10 +72,21 @@ export default function ResumeReviewPage() { utils.invalidateQueries(['resumes.resume.user.findUserCreated']); }, }); + const resolveMutation = trpc.useMutation('resumes.resume.user.resolve', { + onSuccess() { + 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 +151,13 @@ export default function ResumeReviewPage() { setIsEditMode(true); }; + const onResolveButtonClick = () => { + resolveMutation.mutate({ + id: resumeId as string, + val: !isResumeResolved, + }); + }; + const renderReviewButton = () => { if (session === null) { return ( @@ -206,17 +225,36 @@ export default function ResumeReviewPage() {
{userIsOwner && ( - + )}