import DataUnit from "../dataunit/DataUnit.js"; import { FieldDescriptor, Sort, SortMode } from "../dataunit/metadata/UnitMetadata.js"; import { FieldComparator } from "../dataunit/sorting/FieldComparator.js"; import { Record } from '../dataunit/interfaces/dataUnit.js'; /** * `SortingUtils`: Utilizado para auxiliar na ordenacao de registros. */ export default class SortingUtils { public static getSortingFunction(dataUnit: DataUnit, sorting?: Array): ((recordA: Record, recordB: Record) => number) | undefined { if (sorting == undefined || sorting.length == 0) { return undefined; } return (recordA, recordB) => { for (const sort of sorting) { if (sort.field){ let field = dataUnit.getField(sort.field) as FieldDescriptor; let onlyLabel = false; if(!field){ const sourceFieldName = dataUnit.getSourceFieldValue(sort.field) ?? ""; field = dataUnit.getField(sourceFieldName) as FieldDescriptor; onlyLabel = true; } const result = FieldComparator.compare(field, recordA, recordB, sort.mode === SortMode.ASC, onlyLabel); if (result != 0) { return result; } } } return 0; }; } }