[offers][feat] Add multiple company analysis UI

pull/501/head^2
Ai Ling 3 years ago
parent 5f81a3d0a0
commit 21efdd7754

@ -6,27 +6,18 @@ import OfferPercentileAnalysisText from './OfferPercentileAnalysisText';
import OfferProfileCard from './OfferProfileCard'; import OfferProfileCard from './OfferProfileCard';
import { OVERALL_TAB } from '../constants'; import { OVERALL_TAB } from '../constants';
import type { import type { AnalysisUnit, ProfileAnalysis } from '~/types/offers';
Analysis,
AnalysisHighestOffer,
ProfileAnalysis,
} from '~/types/offers';
type OfferAnalysisData = {
offer?: AnalysisHighestOffer;
offerAnalysis?: Analysis;
};
type OfferAnalysisContentProps = Readonly<{ type OfferAnalysisContentProps = Readonly<{
analysis: OfferAnalysisData; offerAnalysis: AnalysisUnit;
tab: string; tab: string;
}>; }>;
function OfferAnalysisContent({ function OfferAnalysisContent({
analysis: { offer, offerAnalysis }, offerAnalysis,
tab, tab,
}: OfferAnalysisContentProps) { }: OfferAnalysisContentProps) {
if (!offerAnalysis || !offer || offerAnalysis.noOfOffers === 0) { if (!offerAnalysis || offerAnalysis.noOfOffers === 0) {
if (tab === OVERALL_TAB) { if (tab === OVERALL_TAB) {
return ( return (
<p className="m-10"> <p className="m-10">
@ -44,11 +35,7 @@ function OfferAnalysisContent({
} }
return ( return (
<> <>
<OfferPercentileAnalysisText <OfferPercentileAnalysisText offerAnalysis={offerAnalysis} tab={tab} />
companyName={offer.company.name}
offerAnalysis={offerAnalysis}
tab={tab}
/>
<p className="mt-5">Here are some of the top offers relevant to you:</p> <p className="mt-5">Here are some of the top offers relevant to you:</p>
{offerAnalysis.topPercentileOffers.map((topPercentileOffer) => ( {offerAnalysis.topPercentileOffers.map((topPercentileOffer) => (
<OfferProfileCard <OfferProfileCard
@ -61,7 +48,7 @@ function OfferAnalysisContent({
} }
type OfferAnalysisProps = Readonly<{ type OfferAnalysisProps = Readonly<{
allAnalysis?: ProfileAnalysis | null; allAnalysis: ProfileAnalysis;
isError: boolean; isError: boolean;
isLoading: boolean; isLoading: boolean;
}>; }>;
@ -72,35 +59,32 @@ export default function OfferAnalysis({
isLoading, isLoading,
}: OfferAnalysisProps) { }: OfferAnalysisProps) {
const [tab, setTab] = useState(OVERALL_TAB); const [tab, setTab] = useState(OVERALL_TAB);
const [analysis, setAnalysis] = useState<OfferAnalysisData | null>(null); const [analysis, setAnalysis] = useState<AnalysisUnit>(
allAnalysis.overallAnalysis,
);
useEffect(() => { useEffect(() => {
if (tab === OVERALL_TAB) { if (tab === OVERALL_TAB) {
setAnalysis({ setAnalysis(allAnalysis.overallAnalysis);
offer: allAnalysis?.overallHighestOffer,
offerAnalysis: allAnalysis?.overallAnalysis,
});
} else { } else {
setAnalysis({ setAnalysis(allAnalysis.companyAnalysis[parseInt(tab, 10)]);
offer: allAnalysis?.overallHighestOffer,
offerAnalysis: allAnalysis?.companyAnalysis[0],
});
} }
}, [tab, allAnalysis]); }, [tab, allAnalysis]);
const tabOptions = [ const companyTabs = allAnalysis.companyAnalysis.map((value, index) => ({
label: value.companyName,
value: `${index}`,
}));
let tabOptions = [
{ {
label: OVERALL_TAB, label: OVERALL_TAB,
value: OVERALL_TAB, value: OVERALL_TAB,
}, },
{
label: allAnalysis?.overallHighestOffer.company.name || '',
value: allAnalysis?.overallHighestOffer.company.id || '',
},
]; ];
tabOptions = tabOptions.concat(companyTabs);
return ( return (
analysis && (
<div> <div>
{isError && ( {isError && (
<p className="m-10 text-center"> <p className="m-10 text-center">
@ -117,10 +101,9 @@ export default function OfferAnalysis({
onChange={setTab} onChange={setTab}
/> />
<HorizontalDivider className="mb-5" /> <HorizontalDivider className="mb-5" />
<OfferAnalysisContent analysis={analysis} tab={tab} /> <OfferAnalysisContent offerAnalysis={analysis} tab={tab} />
</div> </div>
)} )}
</div> </div>
)
); );
} }

@ -1,17 +1,15 @@
import { OVERALL_TAB } from '../constants'; import { OVERALL_TAB } from '../constants';
import type { Analysis } from '~/types/offers'; import type { AnalysisUnit } from '~/types/offers';
type OfferPercentileAnalysisTextProps = Readonly<{ type OfferPercentileAnalysisTextProps = Readonly<{
companyName: string; offerAnalysis: AnalysisUnit;
offerAnalysis: Analysis;
tab: string; tab: string;
}>; }>;
export default function OfferPercentileAnalysisText({ export default function OfferPercentileAnalysisText({
tab, tab,
companyName, offerAnalysis: { noOfOffers, percentile, companyName },
offerAnalysis: { noOfOffers, percentile },
}: OfferPercentileAnalysisTextProps) { }: OfferPercentileAnalysisTextProps) {
return tab === OVERALL_TAB ? ( return tab === OVERALL_TAB ? (
<p> <p>

@ -41,11 +41,13 @@ export default function OfferProfileCard({
</div> </div>
<div className="col-span-10"> <div className="col-span-10">
<p className="font-bold">{profileName}</p> <p className="font-bold">{profileName}</p>
{previousCompanies.length > 0 && (
<div className="flex flex-row"> <div className="flex flex-row">
<BuildingOffice2Icon className="mr-2 h-5" /> <BuildingOffice2Icon className="mr-2 h-5" />
<span className="mr-2 font-bold">Current:</span> <span className="mr-2 font-bold">Current:</span>
<span>{previousCompanies[0]}</span> <span>{previousCompanies[0]}</span>
</div> </div>
)}
<div className="flex flex-row"> <div className="flex flex-row">
<CalendarDaysIcon className="mr-2 h-5" /> <CalendarDaysIcon className="mr-2 h-5" />
<span className="mr-2 font-bold">YOE:</span> <span className="mr-2 font-bold">YOE:</span>

@ -17,12 +17,17 @@ export default function OffersSubmissionAnalysis({
<h5 className="mb-8 text-center text-4xl font-bold text-slate-900"> <h5 className="mb-8 text-center text-4xl font-bold text-slate-900">
Result Result
</h5> </h5>
{!analysis && (
<p className="mb-8 text-center">Error generating analysis.</p>
)}
{analysis && (
<OfferAnalysis <OfferAnalysis
key={3} key={3}
allAnalysis={analysis} allAnalysis={analysis}
isError={isError} isError={isError}
isLoading={isLoading} isLoading={isLoading}
/> />
)}
</div> </div>
); );
} }

@ -70,7 +70,9 @@ export default function OffersSubmissionResult() {
return ( return (
<> <>
{getAnalysis.isLoading && ( {getAnalysis.isLoading && (
<Spinner className="m-10" display="block" size="lg" /> <div className="m-10 flex w-full justify-center">
<Spinner display="block" size="lg" />
</div>
)} )}
{!getAnalysis.isLoading && ( {!getAnalysis.isLoading && (
<div ref={pageRef} className="fixed h-full w-full overflow-y-scroll"> <div ref={pageRef} className="fixed h-full w-full overflow-y-scroll">

Loading…
Cancel
Save