import { Record } from "../interfaces/dataUnit.js"; import { compareValues } from '../metadata/DataType.js'; import { FieldDescriptor } from '../metadata/UnitMetadata.js'; export class FieldComparator { public static compare(field: FieldDescriptor, recordA: Record, recordB: Record, asc: boolean = true, onlyLabel: boolean = false): number { const valueA = (asc ? recordA : recordB)[field.name]; const valueB = (asc ? recordB : recordA)[field.name]; return FieldComparator.compareValues(field, valueA, valueB, onlyLabel); } public static compareValues(descriptor: FieldDescriptor, valueA: any, valueB: any, onlyLabel: boolean = false): number { const undefinedComparison = this.compareUndefined(valueA == undefined, valueB == undefined); return (undefinedComparison != undefined) ? undefinedComparison : compareValues(valueA, valueB, descriptor, onlyLabel); } public static compareUndefined(isUndefinedA: boolean, isUndefinedB: boolean): number | undefined { if (!isUndefinedA && !isUndefinedB) return; if (isUndefinedA && isUndefinedB) return 0; return isUndefinedA ? -1 : 1; } }