From 7930e30c0cea14dbabff62a41d3761d8ac02412b Mon Sep 17 00:00:00 2001 From: "peirong.wu" Date: Tue, 25 Oct 2022 11:58:30 +0800 Subject: [PATCH] [resumes][feat] clickable button from review info tags --- apps/portal/src/pages/resumes/[resumeId].tsx | 92 ++++++++++++++++++- apps/portal/src/pages/resumes/browse.tsx | 20 ++-- apps/portal/src/pages/resumes/submit.tsx | 6 +- .../browse => utils/resumes}/resumeFilters.ts | 14 +-- 4 files changed, 104 insertions(+), 28 deletions(-) rename apps/portal/src/{components/resumes/browse => utils/resumes}/resumeFilters.ts (93%) diff --git a/apps/portal/src/pages/resumes/[resumeId].tsx b/apps/portal/src/pages/resumes/[resumeId].tsx index 38c7cf31..0d3ec979 100644 --- a/apps/portal/src/pages/resumes/[resumeId].tsx +++ b/apps/portal/src/pages/resumes/[resumeId].tsx @@ -21,9 +21,25 @@ import ResumeCommentsList from '~/components/resumes/comments/ResumeCommentsList import ResumePdf from '~/components/resumes/ResumePdf'; import ResumeExpandableText from '~/components/resumes/shared/ResumeExpandableText'; +import type { + FilterOption, + LocationFilter, +} from '~/utils/resumes/resumeFilters'; +import { + BROWSE_TABS_VALUES, + EXPERIENCES, + INITIAL_FILTER_STATE, + LOCATIONS, + ROLES, + SORT_OPTIONS, +} from '~/utils/resumes/resumeFilters'; import { trpc } from '~/utils/trpc'; import SubmitResumeForm from './submit'; +import type { + ExperienceFilter, + RoleFilter, +} from '../../utils/resumes/resumeFilters'; export default function ResumeReviewPage() { const ErrorPage = ( @@ -57,7 +73,8 @@ export default function ResumeReviewPage() { }, }); const userIsOwner = - session?.user?.id != null && session.user.id === detailsQuery.data?.userId; + session?.user?.id !== undefined && + session.user.id === detailsQuery.data?.userId; const [isEditMode, setIsEditMode] = useState(false); const [showCommentsForm, setShowCommentsForm] = useState(false); @@ -79,6 +96,46 @@ export default function ResumeReviewPage() { } }; + const onInfoTagClick = ({ + locationLabel, + experienceLabel, + roleLabel, + }: { + experienceLabel?: string; + locationLabel?: string; + roleLabel?: string; + }) => { + const getFilterValue = ( + label: string, + filterOptions: Array< + FilterOption + >, + ) => filterOptions.find((option) => option.label === label)?.value; + + router.push({ + pathname: '/resumes/browse', + query: { + currentPage: JSON.stringify(1), + searchValue: JSON.stringify(''), + shortcutSelected: JSON.stringify('all'), + sortOrder: JSON.stringify(SORT_OPTIONS.LATEST), + tabsValue: JSON.stringify(BROWSE_TABS_VALUES.ALL), + userFilters: JSON.stringify({ + ...INITIAL_FILTER_STATE, + ...(locationLabel && { + location: [getFilterValue(locationLabel, LOCATIONS)], + }), + ...(roleLabel && { + role: [getFilterValue(roleLabel, ROLES)], + }), + ...(experienceLabel && { + experience: [getFilterValue(experienceLabel, EXPERIENCES)], + }), + }), + }, + }); + }; + const onEditButtonClick = () => { setIsEditMode(true); }; @@ -199,21 +256,48 @@ export default function ResumeReviewPage() { aria-hidden="true" className="mr-1.5 h-5 w-5 flex-shrink-0 text-indigo-400" /> - {detailsQuery.data.role} +
setSortOrder(key)}> + onClick={() => setSortOrder(value)}> ))}
diff --git a/apps/portal/src/pages/resumes/submit.tsx b/apps/portal/src/pages/resumes/submit.tsx index 7901056b..b7c9cb70 100644 --- a/apps/portal/src/pages/resumes/submit.tsx +++ b/apps/portal/src/pages/resumes/submit.tsx @@ -19,14 +19,10 @@ import { TextInput, } from '@tih/ui'; -import { - EXPERIENCES, - LOCATIONS, - ROLES, -} from '~/components/resumes/browse/resumeFilters'; import SubmissionGuidelines from '~/components/resumes/submit-form/SubmissionGuidelines'; import { RESUME_STORAGE_KEY } from '~/constants/file-storage-keys'; +import { EXPERIENCES, LOCATIONS, ROLES } from '~/utils/resumes/resumeFilters'; import { trpc } from '~/utils/trpc'; const FILE_SIZE_LIMIT_MB = 3; diff --git a/apps/portal/src/components/resumes/browse/resumeFilters.ts b/apps/portal/src/utils/resumes/resumeFilters.ts similarity index 93% rename from apps/portal/src/components/resumes/browse/resumeFilters.ts rename to apps/portal/src/utils/resumes/resumeFilters.ts index e0c4b0b5..1731647f 100644 --- a/apps/portal/src/components/resumes/browse/resumeFilters.ts +++ b/apps/portal/src/utils/resumes/resumeFilters.ts @@ -4,7 +4,7 @@ export type CustomFilter = { numComments: number; }; -type RoleFilter = +export type RoleFilter = | 'Android Engineer' | 'Backend Engineer' | 'DevOps Engineer' @@ -12,7 +12,7 @@ type RoleFilter = | 'Full-Stack Engineer' | 'iOS Engineer'; -type ExperienceFilter = +export type ExperienceFilter = | 'Entry Level (0 - 2 years)' | 'Freshman' | 'Junior' @@ -21,7 +21,7 @@ type ExperienceFilter = | 'Senior' | 'Sophomore'; -type LocationFilter = 'India' | 'Singapore' | 'United States'; +export type LocationFilter = 'India' | 'Singapore' | 'United States'; export type FilterValue = ExperienceFilter | LocationFilter | RoleFilter; @@ -54,10 +54,10 @@ export const BROWSE_TABS_VALUES = { STARRED: 'starred', }; -export const SORT_OPTIONS: Record = { - latest: 'Latest', - popular: 'Popular', - topComments: 'Most Comments', +export const SORT_OPTIONS: Record = { + LATEST: 'latest', + POPULAR: 'popular', + TOPCOMMENTS: 'topComments', }; export const ROLES: Array> = [