SpeedLimitSection/utils/milepostsUtil.ts
src/ui/components/widgets/SpeedLimitSection/utils/milepostsUtil.tsunknown
typescript
a year ago
2.4 kB
7
Indexable
import _ from 'lodash' export const checkOverlapMileposts = ( newSpeedLimit: any, existingSpeedLimits: any[], subdivision: string, idSpeedLimitItem?: string ): boolean => { // Get the speed limits within the same subdivision const speedLimitsOfSameDivision = existingSpeedLimits?.filter( item => item?.subdivision === subdivision && item?.temporary_speed_limit_id !== idSpeedLimitItem ) // Append the new speed limit to the existing speed limit const newSpeedLimits = [ ...speedLimitsOfSameDivision, { start_mile: newSpeedLimit.startMile, end_mile: newSpeedLimit.endMile } ] // Normalize the new speed limits let normalizedSpeedLimits = newSpeedLimits.map(speedLimit => { if (speedLimit.start_mile > speedLimit.end_mile) { return { start_mile: speedLimit.end_mile, end_mile: speedLimit.start_mile } } return speedLimit }) // Sort speed limits by start mile normalizedSpeedLimits.sort((a, b) => a.start_mile - b.start_mile) // Check for overlaps for (let i = 0; i < normalizedSpeedLimits.length - 1; i++) { if ( normalizedSpeedLimits[i].end_mile > normalizedSpeedLimits[i + 1].start_mile ) { return false } } return true } export const checkInvalidMileposts = ( newSpeedLimit: { startMile: number; endMile: number }, startLimit: string, endLimit: string ): boolean => { const { startMile, endMile } = newSpeedLimit const startLimitNum = Number(startLimit) const endLimitNum = Number(endLimit) if (startMile === undefined || endMile === undefined) { return true } return !( (startLimitNum < endLimitNum && startMile <= endMile && startMile >= startLimitNum && endMile <= endLimitNum) || (startLimitNum > endLimitNum && startMile >= endMile && startMile <= startLimitNum && endMile >= endLimitNum) ) } export const getWholeMileposts = (trackCoordinatesData: any[]) => { // Get unique track coords by milepost and lat, lng const uniqueTrackCoords = _.uniqBy(trackCoordinatesData, coord => [ coord.milepost, coord.gps_coordinates.lat, coord.gps_coordinates.lng ].join() ) const wholeMilepostTrackCoords = uniqueTrackCoords.filter( (coord: any) => coord.milepost % 10 === 0 ) return wholeMilepostTrackCoords }
Editor is loading...
Leave a Comment