cx 24.3.7 → 24.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/data.js CHANGED
@@ -1503,17 +1503,28 @@ LastValue.prototype.result = null;
1503
1503
  }
1504
1504
  */
1505
1505
 
1506
- function transform(o, f) {
1507
- var res = {};
1508
- for (var k in o) res[k] = f(o[k], k);
1509
- return res;
1510
- }
1511
1506
  var Grouper = /*#__PURE__*/ (function () {
1512
1507
  function Grouper(key, aggregates, dataGetter, nameGetter) {
1513
- this.keys = Object.keys(key).map(function (k) {
1508
+ this.keys = Object.keys(key).map(function (keyField) {
1509
+ var isSimpleField = keyField.indexOf(".") === -1;
1510
+ var keySetter;
1511
+ if (isSimpleField) {
1512
+ // use simple field setter wherever possible
1513
+ keySetter = function set(result, value) {
1514
+ result[keyField] = value;
1515
+ return result;
1516
+ };
1517
+ } else {
1518
+ // for complex paths, use deep setter
1519
+ var binding = Binding.get(keyField);
1520
+ keySetter = function keySetter(result, value) {
1521
+ return binding.set(result, value);
1522
+ };
1523
+ }
1514
1524
  return {
1515
- name: k,
1516
- value: getSelector(key[k]),
1525
+ name: keyField,
1526
+ keySetter: keySetter,
1527
+ value: getSelector(key[keyField]),
1517
1528
  };
1518
1529
  });
1519
1530
  if (nameGetter) this.nameGetter = getSelector(nameGetter);
@@ -1524,11 +1535,12 @@ var Grouper = /*#__PURE__*/ (function () {
1524
1535
  };
1525
1536
  this.aggregates =
1526
1537
  aggregates &&
1527
- transform(aggregates, function (prop) {
1538
+ transformValues(aggregates, function (prop) {
1539
+ var _prop$weight;
1528
1540
  if (!AggregateFunction[prop.type]) throw new Error("Unknown aggregate function '" + prop.type + "'.");
1529
1541
  return {
1530
1542
  value: getSelector(prop.value),
1531
- weight: getSelector(prop.weight || 1),
1543
+ weight: getSelector((_prop$weight = prop.weight) != null ? _prop$weight : 1),
1532
1544
  type: prop.type,
1533
1545
  };
1534
1546
  });
@@ -1545,7 +1557,7 @@ var Grouper = /*#__PURE__*/ (function () {
1545
1557
  indexes: [],
1546
1558
  aggregates:
1547
1559
  this.aggregates &&
1548
- transform(this.aggregates, function (prop) {
1560
+ transformValues(this.aggregates, function (prop) {
1549
1561
  var f = AggregateFunction[prop.type];
1550
1562
  return {
1551
1563
  processor: f(),
@@ -1590,16 +1602,18 @@ var Grouper = /*#__PURE__*/ (function () {
1590
1602
  if (level == this.keys.length) {
1591
1603
  var key = {};
1592
1604
  this.keys.forEach(function (k, i) {
1593
- return (key[k.name] = path[i]);
1605
+ key = k.keySetter(key, path[i]);
1594
1606
  });
1595
1607
  results.push({
1596
1608
  key: key,
1597
1609
  name: g.name,
1598
1610
  records: g.records,
1599
1611
  indexes: g.indexes,
1600
- aggregates: transform(g.aggregates, function (p) {
1601
- return p.processor.getResult();
1602
- }),
1612
+ aggregates: resolveKeyPaths(
1613
+ transformValues(g.aggregates, function (p) {
1614
+ return p.processor.getResult();
1615
+ }),
1616
+ ),
1603
1617
  });
1604
1618
  } else {
1605
1619
  Object.keys(g).forEach(function (k) {
@@ -1616,6 +1630,23 @@ var Grouper = /*#__PURE__*/ (function () {
1616
1630
  return Grouper;
1617
1631
  })();
1618
1632
 
1633
+ // transform object values using a function
1634
+ function transformValues(o, f) {
1635
+ var res = {};
1636
+ for (var k in o) res[k] = f(o[k], k);
1637
+ return res;
1638
+ }
1639
+
1640
+ // transform keys like 'a.b.c' into nested objects
1641
+ function resolveKeyPaths(o) {
1642
+ var res = {};
1643
+ for (var k in o) {
1644
+ if (k.indexOf(".") > 0) res = Binding.get(k).set(res, o[k]);
1645
+ else res[k] = o[k];
1646
+ }
1647
+ return res;
1648
+ }
1649
+
1619
1650
  function defaultCompare(av, bv) {
1620
1651
  if (av == null) {
1621
1652
  if (bv == null) return 0;