export function sortResults()

in src/hooks/useTableSort.ts [70:109]


export function sortResults(
  columnsConfiguration: CompareResultsTableConfig,
  results: CompareResultsItem[],
  columnId: string | null,
  direction: 'asc' | 'desc' | null,
  defaultSortFunction: (
    resultA: CompareResultsItem,
    resultB: CompareResultsItem,
  ) => number,
) {
  let sortFunction = defaultSortFunction;

  let columnConfiguration: CompareResultsTableConfig[number] | undefined;
  if (columnId && direction) {
    columnConfiguration = columnsConfiguration.find(
      (column) => column.key === columnId,
    );
  }

  if (columnConfiguration) {
    if (!('sortFunction' in columnConfiguration)) {
      console.warn(
        `No sortFunction information for the columnConfiguration ${String(
          columnConfiguration.name ?? columnId,
        )}`,
      );
      return results;
    }

    sortFunction = columnConfiguration.sortFunction;
  }

  const directionedSortFunction =
    direction === 'desc'
      ? (itemA: CompareResultsItem, itemB: CompareResultsItem) =>
          sortFunction(itemB, itemA)
      : sortFunction;

  return results.toSorted(directionedSortFunction);
}