// enums import { eSharedString } from '../../../../enums'; // interfaces import { IFleetFilterTrailer, IFleetFilterTruck } from '../../interfaces'; export class FleetFilterHelper { static sortFleetItems( list: (IFleetFilterTruck | IFleetFilterTrailer)[], activeSortName: string, direction: string ): any[] { const dir = direction === eSharedString.ASC ? 1 : -1; return [...list].sort((a, b) => { let aValue: string | number | undefined; let bValue: string | number | undefined; const isTruck = 'truckNumber' in a; if (activeSortName === eSharedString.UNIT_NO) { aValue = isTruck ? (a as IFleetFilterTruck).truckNumber?.toLowerCase() : (a as IFleetFilterTrailer).trailerNumber?.toLowerCase(); bValue = isTruck ? (b as IFleetFilterTruck).truckNumber?.toLowerCase() : (b as IFleetFilterTrailer).trailerNumber?.toLowerCase(); } else if (activeSortName === eSharedString.TYPE) { aValue = isTruck ? (a as IFleetFilterTruck).truckType?.id : (a as IFleetFilterTrailer).trailerType?.id; bValue = isTruck ? (b as IFleetFilterTruck).truckType?.id : (b as IFleetFilterTrailer).trailerType?.id; } return this.compareValues(aValue, bValue, dir); }); } static compareValues( aValue: string | number | undefined, bValue: string | number | undefined, direction: number ): number { if (!aValue && !bValue) return 0; if (!aValue) return 1 * direction; if (!bValue) return -1 * direction; if (typeof aValue === 'string' && typeof bValue === 'string') { return aValue.localeCompare(bValue) * direction; } return (aValue < bValue ? -1 : aValue > bValue ? 1 : 0) * direction; } }