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