From 0933cce7b5f5bf59d18a1ec5d60314fce97f9982 Mon Sep 17 00:00:00 2001 From: Terence <45381509+Vielheim@users.noreply.github.com> Date: Fri, 7 Oct 2022 14:19:37 +0800 Subject: [PATCH] [resumes][feat] Add API to submit & query for resume reviews (#313) * [resumes][feat] Add route to submit resume reviews * [resumes][feat] Add router to query for comments * [resumes][refactor] Change limit of upvotes query * [resumes][chore] revert changes * [resumes][chore] remove comment * [resumes][chore] Use ResumesSection enum instead of hard-coded string * [resumes][refactor] Add check for user session in comments * [resumes][fix] fix linting issues Co-authored-by: Terence Ho <> --- .../resumes/comments/CommentsForm.tsx | 24 +++++++-- .../resumes/comments/CommentsList.tsx | 24 +++++---- .../resumes/comments/CommentsListButton.tsx | 48 +++++++++++++++++ .../resumes/comments/CommentsSection.tsx | 19 +++++-- .../components/resumes/comments/constants.ts | 13 ++--- apps/portal/src/pages/resumes/review.tsx | 2 +- apps/portal/src/server/router/index.ts | 6 ++- .../server/router/resumes-reviews-router.ts | 44 +++++++++++++++ .../router/resumes-reviews-user-router.ts | 54 +++++++++++++++++++ 9 files changed, 209 insertions(+), 25 deletions(-) create mode 100644 apps/portal/src/components/resumes/comments/CommentsListButton.tsx create mode 100644 apps/portal/src/server/router/resumes-reviews-router.ts create mode 100644 apps/portal/src/server/router/resumes-reviews-user-router.ts diff --git a/apps/portal/src/components/resumes/comments/CommentsForm.tsx b/apps/portal/src/components/resumes/comments/CommentsForm.tsx index a20bfd0c..98ff8d82 100644 --- a/apps/portal/src/components/resumes/comments/CommentsForm.tsx +++ b/apps/portal/src/components/resumes/comments/CommentsForm.tsx @@ -3,7 +3,10 @@ import type { SubmitHandler } from 'react-hook-form'; import { useForm } from 'react-hook-form'; import { Button, Dialog, TextInput } from '@tih/ui'; +import { trpc } from '~/utils/trpc'; + type CommentsFormProps = Readonly<{ + resumeId: string; setShowCommentsForm: (show: boolean) => void; }>; @@ -18,6 +21,7 @@ type IFormInput = { type InputKeys = keyof IFormInput; export default function CommentsForm({ + resumeId, setShowCommentsForm, }: CommentsFormProps) { const [showDialog, setShowDialog] = useState(false); @@ -35,10 +39,17 @@ export default function CommentsForm({ skills: '', }, }); + const reviewCreateMutation = trpc.useMutation('resumes.reviews.user.create'); - // TODO: Implement mutation to database - const onSubmit: SubmitHandler = (data) => { - alert(JSON.stringify(data)); + // TODO: Give a feedback to the user if the action succeeds/fails + const onSubmit: SubmitHandler = async (data) => { + await reviewCreateMutation.mutate({ + resumeId, + ...data, + }); + + // Redirect back to comments section + setShowCommentsForm(false); }; const onCancel = () => { @@ -54,8 +65,11 @@ export default function CommentsForm({ }; return ( - <> +

Add your review

+

+ Please fill in at least one section to submit your review +

Note that your review will not be saved!
- +
); } diff --git a/apps/portal/src/components/resumes/comments/CommentsList.tsx b/apps/portal/src/components/resumes/comments/CommentsList.tsx index 397c9551..0b1d2d35 100644 --- a/apps/portal/src/components/resumes/comments/CommentsList.tsx +++ b/apps/portal/src/components/resumes/comments/CommentsList.tsx @@ -1,25 +1,31 @@ import { useState } from 'react'; -import { Button, Tabs } from '@tih/ui'; +import { Tabs } from '@tih/ui'; +import { trpc } from '~/utils/trpc'; + +import CommentsListButton from './CommentsListButton'; import { COMMENTS_SECTIONS } from './constants'; type CommentsListProps = Readonly<{ + resumeId: string; setShowCommentsForm: (show: boolean) => void; }>; export default function CommentsList({ + resumeId, setShowCommentsForm, }: CommentsListProps) { const [tab, setTab] = useState(COMMENTS_SECTIONS[0].value); + const commentsQuery = trpc.useQuery(['resumes.reviews.list', { resumeId }]); + + /* eslint-disable no-console */ + console.log(commentsQuery.data); + /* eslint-enable no-console */ + return ( - <> -