utils.tsx 810 B

123456789101112131415161718192021222324252627282930313233343536
  1. export type NetworkSpan = {
  2. data: Record<string, any>;
  3. endTimestamp: number;
  4. op: string;
  5. startTimestamp: number;
  6. description?: string;
  7. };
  8. export interface ISortConfig {
  9. asc: boolean;
  10. by: keyof NetworkSpan | string;
  11. getValue: (row: NetworkSpan) => any;
  12. }
  13. export function sortNetwork(
  14. network: NetworkSpan[],
  15. sortConfig: ISortConfig
  16. ): NetworkSpan[] {
  17. return [...network].sort((a, b) => {
  18. let valueA = sortConfig.getValue(a);
  19. let valueB = sortConfig.getValue(b);
  20. valueA = typeof valueA === 'string' ? valueA.toUpperCase() : valueA;
  21. valueB = typeof valueB === 'string' ? valueB.toUpperCase() : valueB;
  22. if (valueA === valueB) {
  23. return 0;
  24. }
  25. if (sortConfig.asc) {
  26. return valueA > valueB ? 1 : -1;
  27. }
  28. return valueB > valueA ? 1 : -1;
  29. });
  30. }