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 };