From a905f31b2c650f0380fa0bb360fdcd1d187cbe25 Mon Sep 17 00:00:00 2001 From: Peirong <35712975+peironggg@users.noreply.github.com> Date: Tue, 11 Oct 2022 16:36:09 +0800 Subject: [PATCH] [resumes][fix] fix resumes starring lag + add zoom controls (#359) * [resumes][fix] Fix star button delay * [resumes][feat] add zoom controls for pdf --- .../src/components/resumes/ResumePdf.tsx | 46 +++++++++--- .../resumes/comments/CommentListItems.tsx | 2 +- .../resumes/comments/CommentsForm.tsx | 2 +- apps/portal/src/pages/resumes/[resumeId].tsx | 72 +++++++++++++------ apps/portal/src/server/router/index.ts | 2 +- .../router/resumes/resumes-resume-router.ts | 4 +- .../resumes/resumes-star-user-router.ts | 48 +++++-------- 7 files changed, 114 insertions(+), 62 deletions(-) diff --git a/apps/portal/src/components/resumes/ResumePdf.tsx b/apps/portal/src/components/resumes/ResumePdf.tsx index a190606e..668d0f6f 100644 --- a/apps/portal/src/components/resumes/ResumePdf.tsx +++ b/apps/portal/src/components/resumes/ResumePdf.tsx @@ -1,7 +1,12 @@ import { useState } from 'react'; import { Document, Page, pdfjs } from 'react-pdf'; import type { PDFDocumentProxy } from 'react-pdf/node_modules/pdfjs-dist'; -import { ArrowLeftIcon, ArrowRightIcon } from '@heroicons/react/20/solid'; +import { + ArrowLeftIcon, + ArrowRightIcon, + MagnifyingGlassMinusIcon, + MagnifyingGlassPlusIcon, +} from '@heroicons/react/20/solid'; import { Button, Spinner } from '@tih/ui'; pdfjs.GlobalWorkerOptions.workerSrc = `//unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.js`; @@ -13,6 +18,7 @@ type Props = Readonly<{ export default function ResumePdf({ url }: Props) { const [numPages, setNumPages] = useState(0); const [pageNumber, setPageNumber] = useState(1); + const [scale, setScale] = useState(1); const onPdfLoadSuccess = (pdf: PDFDocumentProxy) => { setNumPages(pdf.numPages); @@ -20,14 +26,36 @@ export default function ResumePdf({ url }: Props) { return (
- } - noData="" - onLoadSuccess={onPdfLoadSuccess}> - - +
+ } + noData="" + onLoadSuccess={onPdfLoadSuccess}> + +
+
+
+
diff --git a/apps/portal/src/server/router/index.ts b/apps/portal/src/server/router/index.ts index c018c3f7..8dd5e08c 100644 --- a/apps/portal/src/server/router/index.ts +++ b/apps/portal/src/server/router/index.ts @@ -28,7 +28,7 @@ export const appRouter = createRouter() .merge('companies.', companiesRouter) .merge('resumes.resume.', resumesRouter) .merge('resumes.resume.user.', resumesResumeUserRouter) - .merge('resumes.star.user.', resumesStarUserRouter) + .merge('resumes.resume.', resumesStarUserRouter) .merge('resumes.reviews.', resumeReviewsRouter) .merge('resumes.reviews.user.', resumesReviewsUserRouter) .merge('questions.answers.comments.', questionsAnswerCommentRouter) diff --git a/apps/portal/src/server/router/resumes/resumes-resume-router.ts b/apps/portal/src/server/router/resumes/resumes-resume-router.ts index 177b076e..34d7d6f0 100644 --- a/apps/portal/src/server/router/resumes/resumes-resume-router.ts +++ b/apps/portal/src/server/router/resumes/resumes-resume-router.ts @@ -62,7 +62,9 @@ export const resumesRouter = createRouter() }, stars: { where: { - userId, + OR: { + userId, + }, }, }, user: { diff --git a/apps/portal/src/server/router/resumes/resumes-star-user-router.ts b/apps/portal/src/server/router/resumes/resumes-star-user-router.ts index 40daea7d..9e780858 100644 --- a/apps/portal/src/server/router/resumes/resumes-star-user-router.ts +++ b/apps/portal/src/server/router/resumes/resumes-star-user-router.ts @@ -2,38 +2,14 @@ import { z } from 'zod'; import { createProtectedRouter } from '../context'; -export const resumesStarUserRouter = createProtectedRouter().mutation( - 'create_or_delete', - { +export const resumesStarUserRouter = createProtectedRouter() + .mutation('unstar', { input: z.object({ resumeId: z.string(), }), async resolve({ ctx, input }) { const { resumeId } = input; - // Update_star will only be called if user is logged in - const userId = ctx.session!.user!.id; - - // Use the resumeId and resumeProfileId to check if star exists - const resumesStar = await ctx.prisma.resumesStar.findUnique({ - select: { - id: true, - }, - where: { - userId_resumeId: { - resumeId, - userId, - }, - }, - }); - - if (resumesStar === null) { - return await ctx.prisma.resumesStar.create({ - data: { - resumeId, - userId, - }, - }); - } + const userId = ctx.session.user.id; return await ctx.prisma.resumesStar.delete({ where: { userId_resumeId: { @@ -43,5 +19,19 @@ export const resumesStarUserRouter = createProtectedRouter().mutation( }, }); }, - }, -); + }) + .mutation('star', { + input: z.object({ + resumeId: z.string(), + }), + async resolve({ ctx, input }) { + const { resumeId } = input; + const userId = ctx.session.user.id; + return await ctx.prisma.resumesStar.create({ + data: { + resumeId, + userId, + }, + }); + }, + });