order.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.domainOf = exports.applyOrder = exports.normalizeComparator = exports.createGroups = void 0;
  4. const d3_array_1 = require("d3-array");
  5. const helper_1 = require("../../utils/helper");
  6. const array_1 = require("../../utils/array");
  7. const helper_2 = require("./helper");
  8. function createGroups(groupBy, I, mark) {
  9. const { encode } = mark;
  10. if (groupBy === null)
  11. return [I];
  12. const G = normalizeGroupBy(groupBy)
  13. .map((k) => { var _a; return [k, (_a = (0, helper_2.columnOf)(encode, k)) === null || _a === void 0 ? void 0 : _a[0]]; })
  14. .filter(([, column]) => (0, helper_1.defined)(column));
  15. const key = (i) => G.map(([, V]) => V[i]).join('-');
  16. return Array.from((0, d3_array_1.group)(I, key).values());
  17. }
  18. exports.createGroups = createGroups;
  19. function normalizeComparator(order) {
  20. if (Array.isArray(order))
  21. return createFieldsOrder(order);
  22. if (typeof order === 'function')
  23. return createFunctionOrder(order);
  24. if (order === 'series')
  25. return createSeriesOrder;
  26. if (order === 'value')
  27. return createValueOrder;
  28. if (order === 'sum')
  29. return createSumOrder;
  30. if (order === 'maxIndex')
  31. return createMaxIndexOrder;
  32. return () => null;
  33. }
  34. exports.normalizeComparator = normalizeComparator;
  35. function applyOrder(groups, comparator) {
  36. for (const group of groups) {
  37. group.sort(comparator);
  38. }
  39. }
  40. exports.applyOrder = applyOrder;
  41. function domainOf(value, scale) {
  42. return (scale === null || scale === void 0 ? void 0 : scale.domain) || Array.from(new Set(value));
  43. }
  44. exports.domainOf = domainOf;
  45. function normalizeGroupBy(groupBy) {
  46. if (Array.isArray(groupBy))
  47. return groupBy;
  48. return [groupBy];
  49. }
  50. function createSeriesOrder(data, Y, S) {
  51. return ascendingComparator((i) => S[i]);
  52. }
  53. function createFunctionOrder(order) {
  54. return (data, Y, S) => {
  55. return ascendingComparator((i) => order(data[i]));
  56. };
  57. }
  58. function createFieldsOrder(order) {
  59. return (data, Y, S) => {
  60. return (i, j) => order.reduce((eq, f) => (eq !== 0 ? eq : (0, d3_array_1.ascending)(data[i][f], data[j][f])), 0);
  61. };
  62. }
  63. function createValueOrder(data, Y, S) {
  64. return ascendingComparator((i) => Y[i]);
  65. }
  66. function createSumOrder(data, Y, S) {
  67. const I = (0, array_1.indexOf)(data);
  68. const groups = Array.from((0, d3_array_1.group)(I, (i) => S[+i]).entries());
  69. const seriesSum = new Map(groups.map(([k, GI]) => [k, GI.reduce((s, i) => s + +Y[i])]));
  70. return ascendingComparator((i) => seriesSum.get(S[i]));
  71. }
  72. function createMaxIndexOrder(data, Y, S) {
  73. const I = (0, array_1.indexOf)(data);
  74. const groups = Array.from((0, d3_array_1.group)(I, (i) => S[+i]).entries());
  75. const seriesMaxIndex = new Map(groups.map(([k, GI]) => [k, (0, d3_array_1.maxIndex)(GI, (i) => Y[i])]));
  76. return ascendingComparator((i) => seriesMaxIndex.get(S[i]));
  77. }
  78. function ascendingComparator(order) {
  79. return (i, j) => (0, d3_array_1.ascending)(order(i), order(j));
  80. }
  81. //# sourceMappingURL=order.js.map