import React, { ReactNode } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { redirectTo } from 'app/common/store/router/router.actions';
import { vesselDetailsRoute, VesselDetailsVoyageRoute } from 'app/common/routes';
import { getCurrentPoolId } from 'app/shared/store/filters/selectors';
import numberPipe from 'app/shared/pipes/number.pipe';
import { DashboardVesselListLabel } from 'app/modules/dashboard/components/dashboardVesselListLabel';
import Laden from '../vesselIcon/svgs/laden.component.svg';
import Ballast from '../vesselIcon/svgs/ballast.component.svg';
import Placeholder from '../vesselIcon/svgs/placeholder-vessel.component.svg';
import { VesselIconWithClock } from 'app/modules/dashboard/vesselIcon/vesselIconWithClock';
import { VesselIconWithSun } from 'app/modules/dashboard/vesselIcon/vesselIconWithSun';
import { VesselLoadingIcon } from 'app/modules/dashboard/vesselIcon/vesselLoadingIcon';
import { VesselDischargingIcon } from 'app/modules/dashboard/vesselIcon/vesselDischargingIcon';
import { Caption, Headline, Paragraph } from 'app/shared/components/text/text';
import cx from 'classnames';
const primaryIconColor = '#003E5E';
const defautltSvgProps = { fill: primaryIconColor, width: '100%', height: '100%' };
const mapImageStatus = (status) => {
switch (status) {
case 'Ballast':
return (
);
case 'Discharging':
return ;
case 'Loading':
return ;
case 'Laden':
return (
);
case 'Waiting':
case 'Waiting Days':
return (
);
default:
return ;
}
};
interface Data {
name: string;
vesselCode: string;
partnerAxCode: string;
earnings: number;
consumption: number;
cO2: number;
voyageDays: number;
vesselStatus: string;
voyageType?: string;
voyageStatus?: string;
portName?: string;
velocity?: number;
isOnVoyage?: boolean;
}
interface IHoverTooltips {
earnings: ReactNode;
consumption: ReactNode;
co2Emission: ReactNode;
voyageDays: ReactNode;
}
export interface Props {
data: Data;
isCurrentVoyage?: boolean;
hoverTooltips: IHoverTooltips;
}
const DashboardVesselListItem = ({ data, isCurrentVoyage, hoverTooltips }: Props) => {
const dispatch = useDispatch();
const poolId = useSelector(getCurrentPoolId);
const showData = data.isOnVoyage ?? true;
const showEarnigns = !isCurrentVoyage || data.voyageType?.toLowerCase() !== 'unfixed';
const contentClass = cx('c-dashboard-vessel-list-item__content', { 'c-dashboard-vessel-list-item__content--previous-period': !isCurrentVoyage });
const redirect = () => {
dispatch(redirectTo({
routeName: isCurrentVoyage ? VesselDetailsVoyageRoute : vesselDetailsRoute,
options: {
pool: poolId,
partnerAxCode: data.partnerAxCode,
vesselCode: data.vesselCode,
},
}));
};
return
{showData ? mapImageStatus(data.voyageStatus) : mapImageStatus('none')}
{data.name}
{showData ? data.voyageType : 'Not on voyage'}
{ showData &&
{data.voyageStatus}
}
{data.portName}
{data.velocity !== undefined ? `${data.velocity} knots` : ''}
{showEarnigns && showData ? numberPipe.format(data.earnings, 2, 2) : '-'}
{showData && data.consumption ? numberPipe.format(data.consumption) : '-'}
{showData && data.cO2 ? numberPipe.format(data.cO2) : '-'}
{ isCurrentVoyage &&
{showData && data.voyageDays ? numberPipe.format(data.voyageDays) : '-'}
}
{showData ? data.vesselStatus : '-'}
;
};
export { DashboardVesselListItem };