[resumes][refactor] Refactor routers from reviews -> comments

pull/363/head
Terence Ho 3 years ago
parent e7bcd18cc5
commit e6f2ea0af9

@ -41,16 +41,19 @@ export default function ResumeCommentsForm({
}); });
const trpcContext = trpc.useContext(); const trpcContext = trpc.useContext();
const reviewCreateMutation = trpc.useMutation('resumes.reviews.user.create', { const commentCreateMutation = trpc.useMutation(
'resumes.comments.user.create',
{
onSuccess: () => { onSuccess: () => {
// New review added, invalidate query to trigger refetch // New Comment added, invalidate query to trigger refetch
trpcContext.invalidateQueries(['resumes.reviews.list']); trpcContext.invalidateQueries(['resumes.comments.list']);
}, },
}); },
);
// TODO: Give a feedback to the user if the action succeeds/fails // TODO: Give a feedback to the user if the action succeeds/fails
const onSubmit: SubmitHandler<IFormInput> = async (data) => { const onSubmit: SubmitHandler<IFormInput> = async (data) => {
return await reviewCreateMutation.mutate( return await commentCreateMutation.mutate(
{ {
resumeId, resumeId,
...data, ...data,
@ -89,7 +92,7 @@ export default function ResumeCommentsForm({
<div className="mt-4 space-y-4"> <div className="mt-4 space-y-4">
<TextArea <TextArea
{...(register('general'), {})} {...(register('general'), {})}
disabled={reviewCreateMutation.isLoading} disabled={commentCreateMutation.isLoading}
label="General" label="General"
placeholder="General comments about the resume" placeholder="General comments about the resume"
onChange={(value) => onValueChange('general', value)} onChange={(value) => onValueChange('general', value)}
@ -97,7 +100,7 @@ export default function ResumeCommentsForm({
<TextArea <TextArea
{...(register('education'), {})} {...(register('education'), {})}
disabled={reviewCreateMutation.isLoading} disabled={commentCreateMutation.isLoading}
label="Education" label="Education"
placeholder="Comments about the Education section" placeholder="Comments about the Education section"
onChange={(value) => onValueChange('education', value)} onChange={(value) => onValueChange('education', value)}
@ -105,7 +108,7 @@ export default function ResumeCommentsForm({
<TextArea <TextArea
{...(register('experience'), {})} {...(register('experience'), {})}
disabled={reviewCreateMutation.isLoading} disabled={commentCreateMutation.isLoading}
label="Experience" label="Experience"
placeholder="Comments about the Experience section" placeholder="Comments about the Experience section"
onChange={(value) => onValueChange('experience', value)} onChange={(value) => onValueChange('experience', value)}
@ -113,7 +116,7 @@ export default function ResumeCommentsForm({
<TextArea <TextArea
{...(register('projects'), {})} {...(register('projects'), {})}
disabled={reviewCreateMutation.isLoading} disabled={commentCreateMutation.isLoading}
label="Projects" label="Projects"
placeholder="Comments about the Projects section" placeholder="Comments about the Projects section"
onChange={(value) => onValueChange('projects', value)} onChange={(value) => onValueChange('projects', value)}
@ -121,7 +124,7 @@ export default function ResumeCommentsForm({
<TextArea <TextArea
{...(register('skills'), {})} {...(register('skills'), {})}
disabled={reviewCreateMutation.isLoading} disabled={commentCreateMutation.isLoading}
label="Skills" label="Skills"
placeholder="Comments about the Skills section" placeholder="Comments about the Skills section"
onChange={(value) => onValueChange('skills', value)} onChange={(value) => onValueChange('skills', value)}
@ -130,7 +133,7 @@ export default function ResumeCommentsForm({
<div className="flex justify-end space-x-2 pt-4"> <div className="flex justify-end space-x-2 pt-4">
<Button <Button
disabled={reviewCreateMutation.isLoading} disabled={commentCreateMutation.isLoading}
label="Cancel" label="Cancel"
type="button" type="button"
variant="tertiary" variant="tertiary"
@ -138,8 +141,8 @@ export default function ResumeCommentsForm({
/> />
<Button <Button
disabled={!isDirty || reviewCreateMutation.isLoading} disabled={!isDirty || commentCreateMutation.isLoading}
isLoading={reviewCreateMutation.isLoading} isLoading={commentCreateMutation.isLoading}
label="Submit" label="Submit"
type="submit" type="submit"
variant="primary" variant="primary"

@ -21,7 +21,7 @@ export default function ResumeCommentsList({
const { data: sessionData } = useSession(); const { data: sessionData } = useSession();
const [tab, setTab] = useState(RESUME_COMMENTS_SECTIONS[0].value); const [tab, setTab] = useState(RESUME_COMMENTS_SECTIONS[0].value);
const commentsQuery = trpc.useQuery(['resumes.reviews.list', { resumeId }]); const commentsQuery = trpc.useQuery(['resumes.comments.list', { resumeId }]);
const renderButton = () => { const renderButton = () => {
if (sessionData === null) { if (sessionData === null) {
return <ResumeSignInButton text="to join discussion" />; return <ResumeSignInButton text="to join discussion" />;

@ -9,10 +9,10 @@ import { questionsAnswerCommentRouter } from './questions-answer-comment-router'
import { questionsAnswerRouter } from './questions-answer-router'; import { questionsAnswerRouter } from './questions-answer-router';
import { questionsQuestionCommentRouter } from './questions-question-comment-router'; import { questionsQuestionCommentRouter } from './questions-question-comment-router';
import { questionsQuestionRouter } from './questions-question-router'; import { questionsQuestionRouter } from './questions-question-router';
import { resumeCommentsRouter } from './resumes/resumes-comments-router';
import { resumesCommentsUserRouter } from './resumes/resumes-comments-user-router';
import { resumesRouter } from './resumes/resumes-resume-router'; import { resumesRouter } from './resumes/resumes-resume-router';
import { resumesResumeUserRouter } from './resumes/resumes-resume-user-router'; import { resumesResumeUserRouter } from './resumes/resumes-resume-user-router';
import { resumeReviewsRouter } from './resumes/resumes-reviews-router';
import { resumesReviewsUserRouter } from './resumes/resumes-reviews-user-router';
import { resumesStarUserRouter } from './resumes/resumes-star-user-router'; import { resumesStarUserRouter } from './resumes/resumes-star-user-router';
import { todosRouter } from './todos'; import { todosRouter } from './todos';
import { todosUserRouter } from './todos-user-router'; import { todosUserRouter } from './todos-user-router';
@ -29,8 +29,8 @@ export const appRouter = createRouter()
.merge('resumes.resume.', resumesRouter) .merge('resumes.resume.', resumesRouter)
.merge('resumes.resume.user.', resumesResumeUserRouter) .merge('resumes.resume.user.', resumesResumeUserRouter)
.merge('resumes.resume.', resumesStarUserRouter) .merge('resumes.resume.', resumesStarUserRouter)
.merge('resumes.reviews.', resumeReviewsRouter) .merge('resumes.comments.', resumeCommentsRouter)
.merge('resumes.reviews.user.', resumesReviewsUserRouter) .merge('resumes.comments.user.', resumesCommentsUserRouter)
.merge('questions.answers.comments.', questionsAnswerCommentRouter) .merge('questions.answers.comments.', questionsAnswerCommentRouter)
.merge('questions.answers.', questionsAnswerRouter) .merge('questions.answers.', questionsAnswerRouter)
.merge('questions.questions.comments.', questionsQuestionCommentRouter) .merge('questions.questions.comments.', questionsQuestionCommentRouter)

@ -4,7 +4,7 @@ import { createRouter } from '../context';
import type { ResumeComment } from '~/types/resume-comments'; import type { ResumeComment } from '~/types/resume-comments';
export const resumeReviewsRouter = createRouter().query('list', { export const resumeCommentsRouter = createRouter().query('list', {
input: z.object({ input: z.object({
resumeId: z.string(), resumeId: z.string(),
}), }),

@ -3,14 +3,14 @@ import { ResumesSection } from '@prisma/client';
import { createProtectedRouter } from '../context'; import { createProtectedRouter } from '../context';
type IResumeCommentInput = Readonly<{ type ResumeCommentInput = Readonly<{
description: string; description: string;
resumeId: string; resumeId: string;
section: ResumesSection; section: ResumesSection;
userId: string; userId: string;
}>; }>;
export const resumesReviewsUserRouter = createProtectedRouter().mutation( export const resumesCommentsUserRouter = createProtectedRouter().mutation(
'create', 'create',
{ {
input: z.object({ input: z.object({
@ -27,7 +27,7 @@ export const resumesReviewsUserRouter = createProtectedRouter().mutation(
input; input;
// For each section, convert them into ResumesComment model if provided // For each section, convert them into ResumesComment model if provided
const comments: Array<IResumeCommentInput> = [ const comments: Array<ResumeCommentInput> = [
{ description: education, section: ResumesSection.EDUCATION }, { description: education, section: ResumesSection.EDUCATION },
{ description: experience, section: ResumesSection.EXPERIENCE }, { description: experience, section: ResumesSection.EXPERIENCE },
{ description: general, section: ResumesSection.GENERAL }, { description: general, section: ResumesSection.GENERAL },

@ -1,10 +1,10 @@
import type { ResumesSection } from '@prisma/client'; import type { ResumesSection } from '@prisma/client';
/** /**
* Returned by `resumeReviewsRouter` (query for 'resumes.reviews.list') and received as prop by `Comment` in `CommentsList` * Returned by `resumeCommentsRouter` (query for 'resumes.comments.list') and received as prop by `Comment` in `CommentsList`
* frontend-friendly representation of the query * frontend-friendly representation of the query
*/ */
export type ResumeComment = { export type ResumeComment = Readonly<{
createdAt: Date; createdAt: Date;
description: string; description: string;
hasVoted: boolean; hasVoted: boolean;
@ -18,4 +18,4 @@ export type ResumeComment = {
name: string?; name: string?;
userId: string; userId: string;
}; };
}; }>;

Loading…
Cancel
Save