From c3d2b4d3256de222dd711d666c24074f253fd0f9 Mon Sep 17 00:00:00 2001 From: Ai Ling <50992674+ailing35@users.noreply.github.com> Date: Sun, 23 Oct 2022 18:51:12 +0800 Subject: [PATCH 01/29] [offers][feat] Add toast (#417) * [offers][feat] Add toasts * [offers][fix] Disable empty comments --- .../offersSubmission/OffersProfileSave.tsx | 48 +++++++++---------- .../offers/profile/ProfileComments.tsx | 31 ++++++++++-- .../offers/profile/comments/CommentCard.tsx | 5 ++ .../pages/offers/profile/[offerProfileId].tsx | 11 ++++- apps/portal/src/utils/offers/link.tsx | 1 - 5 files changed, 65 insertions(+), 31 deletions(-) diff --git a/apps/portal/src/components/offers/offersSubmission/OffersProfileSave.tsx b/apps/portal/src/components/offers/offersSubmission/OffersProfileSave.tsx index f113ffdb..fbf357dc 100644 --- a/apps/portal/src/components/offers/offersSubmission/OffersProfileSave.tsx +++ b/apps/portal/src/components/offers/offersSubmission/OffersProfileSave.tsx @@ -1,9 +1,9 @@ import { useRouter } from 'next/router'; -import { useState } from 'react'; -import { setTimeout } from 'timers'; -import { CheckIcon, DocumentDuplicateIcon } from '@heroicons/react/20/solid'; -import { BookmarkSquareIcon, EyeIcon } from '@heroicons/react/24/outline'; -import { Button, TextInput } from '@tih/ui'; +// Import { useState } from 'react'; +// import { setTimeout } from 'timers'; +import { DocumentDuplicateIcon } from '@heroicons/react/20/solid'; +import { EyeIcon } from '@heroicons/react/24/outline'; +import { Button, TextInput, useToast } from '@tih/ui'; import { copyProfileLink, @@ -20,18 +20,18 @@ export default function OffersProfileSave({ profileId, token, }: OfferProfileSaveProps) { - const [linkCopied, setLinkCopied] = useState(false); - const [isSaving, setSaving] = useState(false); - const [isSaved, setSaved] = useState(false); + const { showToast } = useToast(); + // Const [isSaving, setSaving] = useState(false); + // const [isSaved, setSaved] = useState(false); const router = useRouter(); - const saveProfile = () => { - setSaving(true); - setTimeout(() => { - setSaving(false); - setSaved(true); - }, 5); - }; + // Const saveProfile = () => { + // setSaving(true); + // setTimeout(() => { + // setSaving(false); + // setSaved(true); + // }, 5); + // }; return (
@@ -44,7 +44,7 @@ export default function OffersProfileSave({ To keep you offer profile strictly anonymous, only people who have the link below can edit it.

-
+
{ - copyProfileLink(profileId, token), setLinkCopied(true); + copyProfileLink(profileId, token); + showToast({ + title: `Profile edit link copied to clipboard!`, + variant: 'success', + }); }} />
-
- {linkCopied && ( -

Link copied to clipboard!

- )} -
- -

+ {/*

If you do not want to keep the edit link, you can opt to save this profile under your user account. It will still only be editable by you. @@ -83,7 +81,7 @@ export default function OffersProfileSave({ variant="primary" onClick={saveProfile} /> -

+
*/}

Discussions

@@ -131,7 +154,7 @@ export default function ProfileComments({
-
- - +
@@ -559,7 +561,7 @@ export default function ResumeHomePage() { end={getTabTotalPages()} label="pagination" start={1} - onSelect={(page) => setCurrentPage(page)} + onSelect={setCurrentPage} />
)} 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 fe3b1d57..dee4627d 100644 --- a/apps/portal/src/server/router/resumes/resumes-resume-router.ts +++ b/apps/portal/src/server/router/resumes/resumes-resume-router.ts @@ -15,6 +15,7 @@ export const resumesRouter = createRouter() searchValue: z.string(), skip: z.number(), sortOrder: z.string(), + take: z.number(), }), async resolve({ ctx, input }) { const { @@ -25,6 +26,7 @@ export const resumesRouter = createRouter() numComments, skip, searchValue, + take, } = input; const userId = ctx.session?.user?.id; const totalRecords = await ctx.prisma.resumesResume.count({ @@ -37,6 +39,7 @@ export const resumesRouter = createRouter() experience: { in: experienceFilters }, location: { in: locationFilters }, role: { in: roleFilters }, + title: { contains: searchValue, mode: 'insensitive' }, }, }); const resumesData = await ctx.prisma.resumesResume.findMany({ @@ -74,7 +77,7 @@ export const resumesRouter = createRouter() } : { comments: { _count: 'desc' } }, skip, - take: 10, + take, where: { ...(numComments === 0 && { comments: { diff --git a/apps/portal/src/server/router/resumes/resumes-resume-user-router.ts b/apps/portal/src/server/router/resumes/resumes-resume-user-router.ts index 10bf5c81..71bd905f 100644 --- a/apps/portal/src/server/router/resumes/resumes-resume-user-router.ts +++ b/apps/portal/src/server/router/resumes/resumes-resume-user-router.ts @@ -53,6 +53,7 @@ export const resumesResumeUserRouter = createProtectedRouter() searchValue: z.string(), skip: z.number(), sortOrder: z.string(), + take: z.number(), }), async resolve({ ctx, input }) { const userId = ctx.session.user.id; @@ -64,6 +65,7 @@ export const resumesResumeUserRouter = createProtectedRouter() sortOrder, numComments, skip, + take, } = input; const totalRecords = await ctx.prisma.resumesStar.count({ where: { @@ -76,6 +78,7 @@ export const resumesResumeUserRouter = createProtectedRouter() experience: { in: experienceFilters }, location: { in: locationFilters }, role: { in: roleFilters }, + title: { contains: searchValue, mode: 'insensitive' }, }, userId, }, @@ -121,7 +124,7 @@ export const resumesResumeUserRouter = createProtectedRouter() }, }, skip, - take: 10, + take, where: { resume: { ...(numComments === 0 && { @@ -167,6 +170,7 @@ export const resumesResumeUserRouter = createProtectedRouter() searchValue: z.string(), skip: z.number(), sortOrder: z.string(), + take: z.number(), }), async resolve({ ctx, input }) { const userId = ctx.session.user.id; @@ -177,6 +181,7 @@ export const resumesResumeUserRouter = createProtectedRouter() sortOrder, searchValue, numComments, + take, skip, } = input; const totalRecords = await ctx.prisma.resumesResume.count({ @@ -189,6 +194,7 @@ export const resumesResumeUserRouter = createProtectedRouter() experience: { in: experienceFilters }, location: { in: locationFilters }, role: { in: roleFilters }, + title: { contains: searchValue, mode: 'insensitive' }, userId, }, }); @@ -224,7 +230,7 @@ export const resumesResumeUserRouter = createProtectedRouter() } : { comments: { _count: 'desc' } }, skip, - take: 10, + take, where: { ...(numComments === 0 && { comments: { diff --git a/packages/ui/src/Pagination/Pagination.tsx b/packages/ui/src/Pagination/Pagination.tsx index 92a6cf18..59c72a36 100644 --- a/packages/ui/src/Pagination/Pagination.tsx +++ b/packages/ui/src/Pagination/Pagination.tsx @@ -69,6 +69,7 @@ export default function Pagination({ pageNumberSet.add(page); elements.push( { @@ -83,7 +84,7 @@ export default function Pagination({ addPage(i); } - if (lastAddedPage < current - pagePadding) { + if (lastAddedPage < current - pagePadding - 1) { elements.push(); } @@ -91,7 +92,7 @@ export default function Pagination({ addPage(i); } - if (lastAddedPage < end - pagePadding) { + if (lastAddedPage < end - pagePadding - 1) { elements.push(); } From 26055d2ed0ebb5058fda79aa199ead6512726b1b Mon Sep 17 00:00:00 2001 From: Zhang Ziqing <69516975+ziqing26@users.noreply.github.com> Date: Mon, 24 Oct 2022 00:36:05 +0800 Subject: [PATCH 03/29] [offers][fix] remove dark theme for table (#420) --- apps/portal/src/components/offers/table/OffersTable.tsx | 4 ++-- .../src/components/offers/table/OffersTablePagination.tsx | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/portal/src/components/offers/table/OffersTable.tsx b/apps/portal/src/components/offers/table/OffersTable.tsx index d636add7..423c0324 100644 --- a/apps/portal/src/components/offers/table/OffersTable.tsx +++ b/apps/portal/src/components/offers/table/OffersTable.tsx @@ -109,7 +109,7 @@ export default function OffersTable({ function renderHeader() { return ( - + {[ 'Company', @@ -145,7 +145,7 @@ export default function OffersTable({
) : ( - +
{renderHeader()} {offers.map((offer) => ( diff --git a/apps/portal/src/components/offers/table/OffersTablePagination.tsx b/apps/portal/src/components/offers/table/OffersTablePagination.tsx index ad0bc0e6..1be80ff0 100644 --- a/apps/portal/src/components/offers/table/OffersTablePagination.tsx +++ b/apps/portal/src/components/offers/table/OffersTablePagination.tsx @@ -19,13 +19,13 @@ export default function OffersTablePagination({ + className="border-b bg-white hover:bg-slate-50 dark:border-slate-700 dark:bg-slate-800 dark:hover:bg-slate-600"> @@ -25,7 +25,7 @@ export default function OfferTableRow({ + {[ 'Company', @@ -145,7 +145,7 @@ export default function OffersTable({ ) : ( -
{company.name} {formatDate(monthYearReceived)} View Profile diff --git a/apps/portal/src/components/offers/table/OffersTable.tsx b/apps/portal/src/components/offers/table/OffersTable.tsx index 423c0324..3801d7b0 100644 --- a/apps/portal/src/components/offers/table/OffersTable.tsx +++ b/apps/portal/src/components/offers/table/OffersTable.tsx @@ -109,7 +109,7 @@ export default function OffersTable({ function renderHeader() { return ( -
+
{renderHeader()} {offers.map((offer) => ( diff --git a/apps/portal/src/components/offers/table/OffersTablePagination.tsx b/apps/portal/src/components/offers/table/OffersTablePagination.tsx index 1be80ff0..1a24a045 100644 --- a/apps/portal/src/components/offers/table/OffersTablePagination.tsx +++ b/apps/portal/src/components/offers/table/OffersTablePagination.tsx @@ -19,13 +19,13 @@ export default function OffersTablePagination({