From 411affdfda3437f27d8b36b8742ba58fcfe4862d Mon Sep 17 00:00:00 2001 From: Zhang Ziqing Date: Wed, 2 Nov 2022 17:22:46 +0800 Subject: [PATCH] [offers][feat] integrate location for offer table and profile --- .../offers/dashboard/DashboardOfferCard.tsx | 12 ++++++ .../components/offers/profile/OfferCard.tsx | 41 +++++++++++++++++++ .../components/offers/table/OffersTable.tsx | 13 ++++++ apps/portal/src/components/offers/types.ts | 28 +++++++++++++ apps/portal/src/pages/offers/index.tsx | 33 +++++++++++++++ 5 files changed, 127 insertions(+) diff --git a/apps/portal/src/components/offers/dashboard/DashboardOfferCard.tsx b/apps/portal/src/components/offers/dashboard/DashboardOfferCard.tsx index 3b013c2c..a901aba7 100644 --- a/apps/portal/src/components/offers/dashboard/DashboardOfferCard.tsx +++ b/apps/portal/src/components/offers/dashboard/DashboardOfferCard.tsx @@ -33,6 +33,7 @@ export default function DashboardProfileCard({
+<<<<<<< HEAD

{getLabelForJobTitleType(title as JobTitleType)}{' '} {jobType && <>({JobTypeLabel[jobType]})} @@ -66,6 +67,17 @@ export default function DashboardProfileCard({

)}
+======= +

+ {getLabelForJobTitleType(title as JobTitleType)} +

+

+ {location + ? `Company: ${company.name}, ${location.cityName}` + : `Company: ${company.name}`} +

+ {level &&

Level: {level}

} +>>>>>>> ac2d047d ([offers][feat] integrate location for offer table and profile)

diff --git a/apps/portal/src/components/offers/profile/OfferCard.tsx b/apps/portal/src/components/offers/profile/OfferCard.tsx index 42212fce..0668716f 100644 --- a/apps/portal/src/components/offers/profile/OfferCard.tsx +++ b/apps/portal/src/components/offers/profile/OfferCard.tsx @@ -35,6 +35,7 @@ export default function OfferCard({ }: Props) { function UpperSection() { return ( +<<<<<<< HEAD

@@ -70,6 +71,17 @@ export default function OfferCard({
)}
+======= +
+
+
+ + + + + {location ? `${companyName}, ${location.cityName}` : companyName} + +>>>>>>> ac2d047d ([offers][feat] integrate location for offer table and profile)
{!duration && receivedMonth && ( @@ -99,6 +111,7 @@ export default function OfferCard({ } return ( +<<<<<<< HEAD
{jobType === JobType.FULLTIME @@ -142,6 +155,34 @@ export default function OfferCard({
{bonus}
)} +======= + <> + +
+
+ {(totalCompensation || monthlySalary) && ( +
+ + + + +

+ {totalCompensation && `TC: ${totalCompensation}`} + {monthlySalary && `Monthly Salary: ${monthlySalary}`} +

+
+
+ )} + {(base || stocks || bonus) && totalCompensation && ( +
+

+ Base / year: {base ?? 'N/A'} ⋅ Stocks / year:{' '} + {stocks ?? 'N/A'} ⋅ Bonus / year: {bonus ?? 'N/A'} +

+
+ )} +
+>>>>>>> ac2d047d ([offers][feat] integrate location for offer table and profile) {negotiationStrategy && (
diff --git a/apps/portal/src/components/offers/table/OffersTable.tsx b/apps/portal/src/components/offers/table/OffersTable.tsx index 209a9ec8..6023ed36 100644 --- a/apps/portal/src/components/offers/table/OffersTable.tsx +++ b/apps/portal/src/components/offers/table/OffersTable.tsx @@ -25,14 +25,19 @@ import type { DashboardOffer, GetOffersResponse, Paging } from '~/types/offers'; const NUMBER_OF_OFFERS_IN_PAGE = 10; export type OffersTableProps = Readonly<{ + cityFilter: string; companyFilter: string; companyName?: string; countryFilter: string; jobTitleFilter: string; }>; export default function OffersTable({ +<<<<<<< HEAD countryFilter, companyName, +======= + cityFilter, +>>>>>>> ac2d047d ([offers][feat] integrate location for offer table and profile) companyFilter, jobTitleFilter, }: OffersTableProps) { @@ -106,6 +111,8 @@ export default function OffersTable({ [ 'offers.list', { + // Location: 'Singapore, Singapore', // TODO: Geolocation + cityId: cityFilter, companyId: companyFilter, countryId: countryFilter, currency, @@ -165,11 +172,17 @@ export default function OffersTable({ /> ))} +<<<<<<< HEAD
Display offers in +======= +
+
+ Display offers in +>>>>>>> ac2d047d ([offers][feat] integrate location for offer table and profile) setCurrency(value)} selectedCurrency={currency} diff --git a/apps/portal/src/components/offers/types.ts b/apps/portal/src/components/offers/types.ts index b38d1540..bb3c6841 100644 --- a/apps/portal/src/components/offers/types.ts +++ b/apps/portal/src/components/offers/types.ts @@ -3,6 +3,30 @@ import type { JobType } from '@prisma/client'; import type { MonthYear } from '~/components/shared/MonthYearPicker'; import type { Location } from '~/types/offers'; +<<<<<<< HEAD +======= + +export const HOME_URL = '/offers'; + +/* + * Offer Profile + */ + +export const JobTypeLabel = { + FULLTIME: 'Full-time', + INTERN: 'Internship', +}; + +export enum EducationBackgroundType { + Bachelor = 'Bachelor', + Diploma = 'Diploma', + Masters = 'Masters', + PhD = 'PhD', + Professional = 'Professional', + Secondary = 'Secondary', + SelfTaught = 'Self-taught', +} +>>>>>>> ac2d047d ([offers][feat] integrate location for offer table and profile) export type OffersProfilePostData = { background: BackgroundPostData; @@ -33,6 +57,10 @@ type ExperiencePostData = { id?: string; jobType?: string | null; level?: string | null; +<<<<<<< HEAD +======= + location?: Location | null; +>>>>>>> ac2d047d ([offers][feat] integrate location for offer table and profile) monthlySalary?: Money | null; title?: string | null; totalCompensation?: Money | null; diff --git a/apps/portal/src/pages/offers/index.tsx b/apps/portal/src/pages/offers/index.tsx index b1773a28..6864860b 100644 --- a/apps/portal/src/pages/offers/index.tsx +++ b/apps/portal/src/pages/offers/index.tsx @@ -12,10 +12,19 @@ import type { JobTitleType } from '~/components/shared/JobTitles'; import { JobTitleLabels } from '~/components/shared/JobTitles'; import JobTitlesTypeahead from '~/components/shared/JobTitlesTypahead'; +<<<<<<< HEAD import { useSearchParamSingle } from '~/utils/offers/useSearchParam'; export default function OffersHomePage() { const [countryFilter, setCountryFilter] = useState(''); +======= +import CitiesTypeahead from '../../components/shared/CitiesTypeahead'; + +export default function OffersHomePage() { + const [jobTitleFilter, setjobTitleFilter] = useState('software-engineer'); + const [companyFilter, setCompanyFilter] = useState(''); + const [cityFilter, setCityFilter] = useState(''); +>>>>>>> ac2d047d ([offers][feat] integrate location for offer table and profile) const { event: gaEvent } = useGoogleAnalytics(); const [selectedCompanyName, setSelectedCompanyName] = @@ -35,6 +44,7 @@ export default function OffersHomePage() { . ⭐ +<<<<<<< HEAD
@@ -52,6 +62,23 @@ export default function OffersHomePage() { }); } else { setCountryFilter(''); +======= +
+ + + + { + if (option) { + setCityFilter(option.value); + gaEvent({ + action: `offers.table_filter_city_${option.value}`, + category: 'engagement', + label: 'Filter by city', + }); +>>>>>>> ac2d047d ([offers][feat] integrate location for offer table and profile) } }} /> @@ -131,10 +158,16 @@ export default function OffersHomePage() {
>>>>>> ac2d047d ([offers][feat] integrate location for offer table and profile) />