From 902f07601e53819a9b3dc1b348fe115cf9d3483b Mon Sep 17 00:00:00 2001 From: Wu Peirong Date: Fri, 7 Oct 2022 18:17:52 +0800 Subject: [PATCH] [resumes][feat] Change review page to dynamic routing --- apps/portal/package.json | 1 + .../src/components/resumes/ResumePdf.tsx | 8 +- apps/portal/src/pages/resumes/[resumeId].tsx | 111 ++++++++++++++++++ apps/portal/src/pages/resumes/review.tsx | 82 ------------- .../server/router/resumes-details-router.ts | 9 ++ yarn.lock | 2 +- 6 files changed, 128 insertions(+), 85 deletions(-) create mode 100644 apps/portal/src/pages/resumes/[resumeId].tsx delete mode 100644 apps/portal/src/pages/resumes/review.tsx diff --git a/apps/portal/package.json b/apps/portal/package.json index d57cdf43..9948c01e 100644 --- a/apps/portal/package.json +++ b/apps/portal/package.json @@ -22,6 +22,7 @@ "@trpc/react": "^9.27.2", "@trpc/server": "^9.27.2", "clsx": "^1.2.1", + "date-fns": "^2.29.3", "next": "12.3.1", "next-auth": "~4.10.3", "react": "18.2.0", diff --git a/apps/portal/src/components/resumes/ResumePdf.tsx b/apps/portal/src/components/resumes/ResumePdf.tsx index 12debea4..82e26395 100644 --- a/apps/portal/src/components/resumes/ResumePdf.tsx +++ b/apps/portal/src/components/resumes/ResumePdf.tsx @@ -6,7 +6,11 @@ import { Button, Spinner } from '@tih/ui'; pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.min.js`; -export default function ResumePdf() { +type Props = Readonly<{ + url: string; +}>; + +export default function ResumePdf({ url }: Props) { const [numPages, setNumPages] = useState(0); const [pageNumber] = useState(1); @@ -18,7 +22,7 @@ export default function ResumePdf() {
} onLoadSuccess={onPdfLoadSuccess}> diff --git a/apps/portal/src/pages/resumes/[resumeId].tsx b/apps/portal/src/pages/resumes/[resumeId].tsx new file mode 100644 index 00000000..41a40df4 --- /dev/null +++ b/apps/portal/src/pages/resumes/[resumeId].tsx @@ -0,0 +1,111 @@ +import formatDistanceToNow from 'date-fns/formatDistanceToNow'; +import Error from 'next/error'; +import { useRouter } from 'next/router'; +import { + AcademicCapIcon, + BriefcaseIcon, + CalendarIcon, + InformationCircleIcon, + MapPinIcon, + StarIcon, +} from '@heroicons/react/20/solid'; +import { Spinner } from '@tih/ui'; + +import CommentsSection from '~/components/resumes/comments/CommentsSection'; +import ResumePdf from '~/components/resumes/ResumePdf'; + +import { trpc } from '~/utils/trpc'; + +export default function ResumeReviewPage() { + const ErrorPage = ( + + ); + const router = useRouter(); + const { resumeId } = router.query; + // Safe to assert resumeId type as string because query is only sent if so + const detailsQuery = trpc.useQuery( + ['resumes.details.find', { resumeId: resumeId as string }], + { enabled: typeof resumeId === 'string' }, + ); + + return ( + <> + {detailsQuery.isError && ErrorPage} + {detailsQuery.isLoading && } + {detailsQuery.isFetched && detailsQuery.data && ( +
+
+

+ {detailsQuery.data.title} +

+ +
+
+
+
+
+
+
+
+
+
+
+ {detailsQuery.data.additionalInfo && ( +
+
+ )} +
+
+ +
+
+ {/* TODO: Update resumeId */} + +
+
+
+ )} + + ); +} diff --git a/apps/portal/src/pages/resumes/review.tsx b/apps/portal/src/pages/resumes/review.tsx deleted file mode 100644 index f75ae519..00000000 --- a/apps/portal/src/pages/resumes/review.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import { - AcademicCapIcon, - BriefcaseIcon, - CalendarIcon, - InformationCircleIcon, - MapPinIcon, - StarIcon, -} from '@heroicons/react/20/solid'; - -import CommentsSection from '~/components/resumes/comments/CommentsSection'; -import ResumePdf from '~/components/resumes/ResumePdf'; - -export default function ResumeReviewPage() { - return ( -
-
-

- Please help moi, applying for medtech startups in Singapore -

- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
- {/* TODO: Update resumeId */} - -
-
-
- ); -} diff --git a/apps/portal/src/server/router/resumes-details-router.ts b/apps/portal/src/server/router/resumes-details-router.ts index 1464cfad..d7c7529f 100644 --- a/apps/portal/src/server/router/resumes-details-router.ts +++ b/apps/portal/src/server/router/resumes-details-router.ts @@ -18,6 +18,15 @@ export const resumesDetailsRouter = createRouter().query('find', { stars: true, }, }, + resumesProfile: { + select: { + user: { + select: { + name: true, + }, + }, + }, + }, }, where: { id: resumeId, diff --git a/yarn.lock b/yarn.lock index 8a87bd65..bd4ae44d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6049,7 +6049,7 @@ damerau-levenshtein@^1.0.8: resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7" integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA== -date-fns@^2.29.1: +date-fns@^2.29.1, date-fns@^2.29.3: version "2.29.3" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.29.3.tgz#27402d2fc67eb442b511b70bbdf98e6411cd68a8" integrity sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==