import { getLoadingStatus } from 'app/shared/modules/loading/getStatus'; import { StoreState } from 'app/common/store/store.types'; import { VESSEL_DETAILS } from 'app/modules/vesselDetails/root/store/vesselDetails.constants'; import { createSelector } from 'reselect'; import { PoolPointsRow } from './poolPoints.types'; const poolPointsStateSlice = (state: StoreState) => state.vesselDetails.poolPoints; export const selectPoolPointsKeyFigures = (state: StoreState) => poolPointsStateSlice(state).keyFigures; export const selectPoolPointsAllocation = (state: StoreState) => poolPointsStateSlice(state).allocation; export const selectPoolPointsKeyFiguresLoadingStatus = (state: StoreState): boolean => { return getLoadingStatus([ VESSEL_DETAILS.FETCH_POOL_POINTS_KEY_FIGURES_SELECTOR ])(state); }; export const selectPhysical = (state: StoreState) => selectPoolPointsAllocation(state).physicalSpecs?.rows; export const selectCommercial = (state: StoreState) => selectPoolPointsAllocation(state).commercialFlexibility?.rows; export const selectAdditionalTrading = (state: StoreState) => selectPoolPointsAllocation(state).additionalTrading?.rows; export const selectTotals = (state: StoreState) => selectPoolPointsAllocation(state); export const selectPoolPointsXLSData = createSelector( selectPhysical, selectCommercial, selectAdditionalTrading, selectTotals, (physical, commercial, additional, totals) => { const physicalRows:PoolPointsRow[] = physical ? physical.map(data => ( { factor: data.label, parameter: data.value, pointRange: data.points, poolPoints: data.vesselPoints, } )) : []; const commercialRows:PoolPointsRow[] = commercial ? commercial.map(data => ( { factor: data.label, parameter: data.value, pointRange: data.points, poolPoints: data.vesselPoints, } )) : []; const additionalRows:PoolPointsRow[] = additional ? additional.map(data => ( { factor: data.label, parameter: data.value, pointRange: data.points, poolPoints: data.vesselPoints, } )) : []; let totalRows: PoolPointsRow[] = []; if (physical) { totalRows.push( { factor: 'Pool Points based on Physical Specs', poolPoints: totals.physicalSpecs?.summary[0].value, }); } if (commercial) { totalRows.push( { factor: 'Pool Points based on Commercial flexibility', poolPoints: totals.commercialFlexibility?.summary[0].value, }); } if (additional) { totalRows.push( { factor: 'Pool Points based on Additional Trading', poolPoints: totals.additionalTrading?.summary[0].value, }); } totalRows.push( { factor: 'Base Points', poolPoints: totals.totalPoolPoints?.rows[1].value, }); totalRows.push( { factor: 'Total Pool Points', poolPoints: totals.totalPoolPoints?.summary[0].value, }); const merged = [ ...physicalRows, ...commercialRows, ...additionalRows, ...totalRows ]; return merged; } );