@splunk/visualizations 25.9.1 → 25.10.0

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.
Files changed (53) hide show
  1. package/Area.js +2 -2
  2. package/Area.js.map +1 -1
  3. package/Bar.js +2 -2
  4. package/Bar.js.map +1 -1
  5. package/Bubble.js +2 -2
  6. package/Bubble.js.map +1 -1
  7. package/ChoroplethSvg.js +2 -2
  8. package/ChoroplethSvg.js.map +1 -1
  9. package/Column.js +2 -2
  10. package/Column.js.map +1 -1
  11. package/Ellipse.js +2 -2
  12. package/Ellipse.js.map +1 -1
  13. package/Events.js +2 -2
  14. package/Events.js.map +1 -1
  15. package/FillerGauge.js +2 -2
  16. package/FillerGauge.js.map +1 -1
  17. package/Image.js +2 -2
  18. package/Image.js.map +1 -1
  19. package/Line.js +2 -2
  20. package/Line.js.map +1 -1
  21. package/LinkGraph.js +118 -86
  22. package/LinkGraph.js.map +1 -1
  23. package/Map.js +6 -4
  24. package/Map.js.map +1 -1
  25. package/Markdown.js +2 -2
  26. package/Markdown.js.map +1 -1
  27. package/MarkerGauge.js +2 -2
  28. package/MarkerGauge.js.map +1 -1
  29. package/ParallelCoordinates.js +2 -2
  30. package/ParallelCoordinates.js.map +1 -1
  31. package/Pie.js +2 -2
  32. package/Pie.js.map +1 -1
  33. package/Punchcard.js +2 -2
  34. package/Punchcard.js.map +1 -1
  35. package/Rectangle.js +2 -2
  36. package/Rectangle.js.map +1 -1
  37. package/Sankey.js +2 -2
  38. package/Sankey.js.map +1 -1
  39. package/Scatter.js +2 -2
  40. package/Scatter.js.map +1 -1
  41. package/SingleValue.js +2 -2
  42. package/SingleValue.js.map +1 -1
  43. package/SingleValueIcon.js +2 -2
  44. package/SingleValueIcon.js.map +1 -1
  45. package/SingleValueRadial.js +2 -2
  46. package/SingleValueRadial.js.map +1 -1
  47. package/Table.js +21 -17
  48. package/Table.js.map +1 -1
  49. package/common/utils/mapUtils.js +3 -1
  50. package/common/utils/mapUtils.js.map +1 -1
  51. package/common/withDashboardViz.js +2 -2
  52. package/common/withDashboardViz.js.map +1 -1
  53. package/package.json +20 -20
package/LinkGraph.js CHANGED
@@ -265,7 +265,7 @@ var withFixedSizeContainer = function withFixedSizeContainer(Viz) {
265
265
  }
266
266
  return React.createElement(FixSizeItem, {
267
267
  "data-test": "fix-size-item",
268
- "data-splunk-visualization-version": "25.9.1 - 5ba41e723",
268
+ "data-splunk-visualization-version": "25.10.0 - 8d01deb08",
269
269
  width: width,
270
270
  height: height,
271
271
  backgroundColor: backgroundColor
@@ -1409,7 +1409,7 @@ var Cover = styled_components_1.default.div.withConfig({
1409
1409
  componentId: "sc-1gsbnxb-0"
1410
1410
  })(["position:absolute;left:0;right:0;top:0;bottom:0;"]);
1411
1411
  var Blocker = styled_components_1.default.div.attrs({
1412
- 'data-splunk-visualization-version': "25.9.1 - 5ba41e723"
1412
+ 'data-splunk-visualization-version': "25.10.0 - 8d01deb08"
1413
1413
  }).withConfig({
1414
1414
  displayName: "withEditModeCover__Blocker",
1415
1415
  componentId: "sc-1gsbnxb-1"
@@ -1630,8 +1630,6 @@ module.exports = require("@splunk/react-ui/Button");
1630
1630
 
1631
1631
 
1632
1632
  var _toConsumableArray = __webpack_require__(7);
1633
- var _classCallCheck = __webpack_require__(11);
1634
- var _createClass = __webpack_require__(22);
1635
1633
  Object.defineProperty(exports, "__esModule", {
1636
1634
  value: true
1637
1635
  });
@@ -1639,13 +1637,18 @@ exports.getSecondaryColumnByField = exports.sortGraphColumn = exports.getNodesTo
1639
1637
  var lodash_1 = __webpack_require__(3);
1640
1638
  var hashString = function hashString() {
1641
1639
  var stringIn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
1642
- return stringIn.toString().split('').map(function (v) {
1640
+ var returnStringArray = stringIn.toString().split('').map(function (v) {
1643
1641
  return v.charCodeAt(0);
1644
- })
1642
+ });
1643
+ if (returnStringArray.length === 0) {
1644
+ return '-1';
1645
+ }
1646
+ var returnValue =
1645
1647
  // eslint-disable-next-line no-bitwise
1646
- .reduce(function (a, v) {
1648
+ returnStringArray.reduce(function (a, v) {
1647
1649
  return a + ((a << 7) + (a << 3)) ^ v;
1648
1650
  }).toString(16);
1651
+ return returnValue;
1649
1652
  };
1650
1653
  exports.hashString = hashString;
1651
1654
  var createNode = function createNode(graphDataModelIn, nodesIn, column, field, fieldIndex, nodeWidth, nodeHeight, nodeSpacingX, nodeSpacingY, shouldAddToGraphDataModel) {
@@ -1672,6 +1675,9 @@ var createNode = function createNode(graphDataModelIn, nodesIn, column, field, f
1672
1675
  } else {
1673
1676
  node.data.count += 1;
1674
1677
  }
1678
+ if (column.toString().length === 0) {
1679
+ node.data.isHidden = true;
1680
+ }
1675
1681
  var key = "".concat(fieldIndex, "-").concat(fieldHash, "-").concat(columnHash);
1676
1682
  if (shouldAddToGraphDataModel && !graphDataModel.nodes[key]) {
1677
1683
  nodes[columnHash] = node;
@@ -1693,7 +1699,7 @@ var createEdge = function createEdge(graphDataModelIn, nodesIn, edgesIn, nodeIn,
1693
1699
  var fieldHash = exports.hashString(field);
1694
1700
  var columnHash = exports.hashString(column);
1695
1701
  var graphDataModel = graphDataModelIn;
1696
- if (columns[fieldIndex + 1] && columns[fieldIndex + 1][columnIndex]) {
1702
+ if (columns[fieldIndex + 1]) {
1697
1703
  var sourceNode = "".concat(fieldIndex, "-").concat(fieldHash, "-").concat(columnHash);
1698
1704
  var nextColumnOverContent = columns[fieldIndex + 1][columnIndex];
1699
1705
  var targetNode = "".concat(fieldIndex + 1, "-").concat(exports.hashString(fields[fieldIndex + 1]), "-").concat(exports.hashString(nextColumnOverContent));
@@ -1771,83 +1777,103 @@ var createLinkGraphFromTable = function createLinkGraphFromTable(fieldsIn, colum
1771
1777
  });
1772
1778
  });
1773
1779
  graphDataModel.edges = Object.values(edges);
1780
+ graphDataModel.columns = columns;
1781
+ // hide all edges that go to or from a hidden node
1782
+ var edgeTemp;
1783
+ graphDataModel.edges.forEach(function (edge) {
1784
+ var _a, _b, _c, _d;
1785
+ if (((_b = (_a = graphDataModel.nodes[edge.sourceNode]) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.isHidden) || ((_d = (_c = graphDataModel.nodes[edge.targetNode]) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.isHidden)) {
1786
+ edgeTemp = edge;
1787
+ edgeTemp.isHidden = true;
1788
+ // show all paths from hidden nodes across the real data
1789
+ getAllPathsFromNodeID(graphDataModel, graphDataModel.nodes[edge.sourceNode]).edges.forEach(function (edgeToShowTemp) {
1790
+ var edgeToShow = edgeToShowTemp;
1791
+ edgeToShow.isHidden = false;
1792
+ });
1793
+ }
1794
+ });
1774
1795
  return graphDataModel;
1775
1796
  };
1776
1797
  exports.createLinkGraphFromTable = createLinkGraphFromTable;
1777
- var Edges = /*#__PURE__*/function () {
1778
- function Edges() {
1779
- _classCallCheck(this, Edges);
1780
- this.store = {};
1798
+ /* getAllPathsFromNodeID gets paths from a node via the data and not the graph
1799
+
1800
+ Given
1801
+
1802
+ a, b, c
1803
+ a, , c
1804
+ , , d
1805
+
1806
+ From a graph context a connects to d ( a to '', '' to d)
1807
+ From a data ROW context a does not connect to d
1808
+
1809
+ getAllPathsFromNodeID(graph, a) would return nodes a,b,'',c and edges a-b, b-c, a-'', ''-c
1810
+ */
1811
+ var getAllPathsFromNodeID = function getAllPathsFromNodeID(graphDataModel, node) {
1812
+ var newEdges = [];
1813
+ var nodes = [];
1814
+ if (!node) {
1815
+ return {
1816
+ nodes: [],
1817
+ edges: []
1818
+ };
1781
1819
  }
1782
- _createClass(Edges, [{
1783
- key: "constuctor",
1784
- value: function constuctor() {
1785
- this.store = {};
1786
- }
1787
- }, {
1788
- key: "addEdge",
1789
- value: function addEdge(source, target) {
1790
- if (!this.store[source]) {
1791
- this.store[source] = {};
1820
+ graphDataModel.columns[node.data.fieldIndex].forEach(function (value, index) {
1821
+ if (value === node.data.value) {
1822
+ var row = graphDataModel.columns.map(function (column) {
1823
+ return column[index];
1824
+ });
1825
+ // remove blank spaces from the start of the array
1826
+ var offset = 0;
1827
+ while (row[0] === '') {
1828
+ row.shift();
1829
+ offset += 1;
1792
1830
  }
1793
- this.store[source][target] = true;
1794
- }
1795
- }, {
1796
- key: "getNeighbors",
1797
- value: function getNeighbors(source) {
1798
- if (!this.store[source]) {
1799
- return {};
1831
+ // remove blank spaces from the end of the array
1832
+ while (row[row.length - 1] === '') {
1833
+ row.pop();
1834
+ }
1835
+ for (var i = 0; i < row.length - 1; i += 1) {
1836
+ if (graphDataModel.fields[i + 1]) {
1837
+ var fieldIndexStart = offset + i; // this is field.index not i
1838
+ var fieldHashStart = exports.hashString(graphDataModel.fields[offset + i].value);
1839
+ var columnHashStart = exports.hashString(row[i]);
1840
+ var fieldIndexEnd = offset + i + 1;
1841
+ var fieldHashEnd = exports.hashString(graphDataModel.fields[offset + i + 1].value);
1842
+ var columnHashEnd = exports.hashString(row[i + 1]);
1843
+ newEdges.push({
1844
+ sourceNode: "".concat(fieldIndexStart, "-").concat(fieldHashStart, "-").concat(columnHashStart),
1845
+ targetNode: "".concat(fieldIndexEnd, "-").concat(fieldHashEnd, "-").concat(columnHashEnd)
1846
+ });
1847
+ }
1800
1848
  }
1801
- return this.store[source];
1802
1849
  }
1803
- }]);
1804
- return Edges;
1805
- }();
1806
- var getNodesToHighlight = function getNodesToHighlight(graph, sourceNodeID) {
1807
- var edges = {
1808
- reverse: new Edges(),
1809
- forward: new Edges()
1810
- };
1811
- graph.edges.forEach(function (edge) {
1812
- edges.forward.addEdge(edge.sourceNode, edge.targetNode);
1813
- edges.reverse.addEdge(edge.targetNode, edge.sourceNode);
1814
1850
  });
1815
- var vs = Object.assign(Object.assign({}, traverse(edges.reverse, sourceNodeID)), traverse(edges.forward, sourceNodeID));
1816
- var vertices = new Set(Object.keys(vs));
1817
- var result = {
1818
- vertices: [],
1819
- edges: []
1820
- };
1821
- result.vertices = _toConsumableArray(vertices);
1822
- result.edges = _toConsumableArray(vertices).flatMap(function (v) {
1823
- return Object.keys(edges.forward.getNeighbors(v)).filter(function (u) {
1824
- return vertices.has(u);
1825
- }).map(function (u) {
1826
- return "".concat(v, "-").concat(u);
1851
+ var edges = [];
1852
+ newEdges.forEach(function (newEdge) {
1853
+ graphDataModel.edges.forEach(function (liveEdge) {
1854
+ if (liveEdge.sourceNode === newEdge.sourceNode && liveEdge.targetNode === newEdge.targetNode) {
1855
+ edges.push(liveEdge);
1856
+ nodes.push(newEdge.sourceNode);
1857
+ nodes.push(newEdge.targetNode);
1858
+ }
1827
1859
  });
1828
1860
  });
1829
- return result;
1861
+ return {
1862
+ nodes: _toConsumableArray(new Set(nodes)),
1863
+ edges: edges
1864
+ };
1830
1865
  };
1831
- exports.getNodesToHighlight = getNodesToHighlight;
1832
- var traverse = function traverse(edges, sourceNodeID) {
1833
- var visited = {};
1834
- var currentNodesToTraverse = [sourceNodeID];
1835
- var _loop = function _loop() {
1836
- var nextNodesToTraverse = [];
1837
- currentNodesToTraverse.forEach(function (node) {
1838
- visited[node] = true;
1839
- var neighbors = edges.getNeighbors(node);
1840
- Object.keys(neighbors).forEach(function (n) {
1841
- return nextNodesToTraverse.push(n);
1842
- });
1843
- });
1844
- currentNodesToTraverse = nextNodesToTraverse;
1866
+ var getNodesToHighlight = function getNodesToHighlight(graph, sourceNodeID) {
1867
+ var paths = getAllPathsFromNodeID(graph, graph.nodes[sourceNodeID]);
1868
+ var newEdges = paths.edges.map(function (edge) {
1869
+ return "".concat(edge.sourceNode, "-").concat(edge.targetNode);
1870
+ });
1871
+ return {
1872
+ nodes: paths.nodes,
1873
+ edges: newEdges
1845
1874
  };
1846
- while (currentNodesToTraverse.length) {
1847
- _loop();
1848
- }
1849
- return visited;
1850
1875
  };
1876
+ exports.getNodesToHighlight = getNodesToHighlight;
1851
1877
  // TODO: write tests once all sorting options are supported
1852
1878
  var sortGraphColumn = function sortGraphColumn(graph, field, sortKey, nodeHeight, nodeSpacingY) {
1853
1879
  var nodesToSort = Object.values(graph.nodes).filter(function (node) {
@@ -2415,13 +2441,13 @@ var Graph = /*#__PURE__*/function (_React$Component) {
2415
2441
  var _this3 = this;
2416
2442
  this.unhighlightAllEdges();
2417
2443
  var _PureLinkGraphUtils_ = PureLinkGraphUtils_1.getNodesToHighlight(this.props.graphDataModel, nodeID),
2418
- vertices = _PureLinkGraphUtils_.vertices,
2444
+ nodes = _PureLinkGraphUtils_.nodes,
2419
2445
  edges = _PureLinkGraphUtils_.edges;
2420
2446
  edges.forEach(function (e) {
2421
2447
  var element = _this3.viewport.querySelector("[data-test=\"edge-".concat(e, "\"]"));
2422
2448
  element.classList.add('hovering');
2423
2449
  });
2424
- vertices.forEach(function (uuid) {
2450
+ nodes.forEach(function (uuid) {
2425
2451
  var element = _this3.viewport.querySelector("[data-test=\"node-".concat(uuid, "\"]"));
2426
2452
  element.classList.add('hovering');
2427
2453
  });
@@ -2475,16 +2501,16 @@ var Graph = /*#__PURE__*/function (_React$Component) {
2475
2501
  value: value,
2476
2502
  state: selectedOption
2477
2503
  };
2478
- var _PureLinkGraphUtils_2 = PureLinkGraphUtils_1.getNodesToHighlight(this.props.graphDataModel, key),
2479
- vertices = _PureLinkGraphUtils_2.vertices;
2480
- vertices.map(function (k) {
2504
+ PureLinkGraphUtils_1.getNodesToHighlight(this.props.graphDataModel, key).nodes.map(function (k) {
2481
2505
  return nodes[k];
2482
2506
  }).forEach(function (node) {
2483
- var row = "row.".concat(node.data.field, ".value");
2484
- if (!payload[row]) {
2485
- payload[row] = [];
2507
+ if (node.data.isHidden !== true) {
2508
+ var row = "row.".concat(node.data.field, ".value");
2509
+ if (!payload[row]) {
2510
+ payload[row] = [];
2511
+ }
2512
+ payload[row].push(node.data.value);
2486
2513
  }
2487
- payload[row].push(node.data.value);
2488
2514
  });
2489
2515
  onNodeClick({
2490
2516
  payload: payload
@@ -2587,7 +2613,7 @@ var Graph = /*#__PURE__*/function (_React$Component) {
2587
2613
  };
2588
2614
  middle.currentX = start.currentX + start.currentW + (end.currentX - (start.currentX + start.currentW)) / 2;
2589
2615
  middle.currentY = start.currentY + start.currentH / 2 + (end.currentY - start.currentY - start.currentH / 2) / 2;
2590
- var svgData = "\n M".concat(start.currentX + start.currentW, ",").concat(start.currentY + start.currentH / 2, "\n L").concat(start.currentX + start.currentW, ",").concat(start.currentY + start.currentH / 2, "\n C").concat(middle.currentX, ",").concat(start.currentY + start.currentH / 2, "\n ").concat(middle.currentX, ",").concat(end.currentY + end.currentH / 2, "\n ").concat(end.currentX, ",").concat(end.currentY + end.currentH / 2, "\n L").concat(end.currentX, ",").concat(end.currentY + end.currentH / 2);
2616
+ var svgData = "\n M".concat(start.currentX + start.currentW, ",").concat(start.currentY + start.currentH / 2, "\n L").concat(start.currentX + start.currentW, ",").concat(start.currentY + start.currentH / 2, "\n C").concat(middle.currentX, ",").concat(start.currentY + start.currentH / 2, "\n ").concat(middle.currentX, ",").concat(end.currentY + end.currentH / 2, "\n ").concat(end.currentX, ",").concat(end.currentY + end.currentH / 2, "\n L").concat(end.currentX, ",").concat(end.currentY + end.currentH / 2, "\n L").concat(end.currentX + wIn, ",").concat(end.currentY + end.currentH / 2);
2591
2617
  edgeElement.setAttribute('d', svgData);
2592
2618
  }
2593
2619
  }
@@ -2622,7 +2648,10 @@ var Graph = /*#__PURE__*/function (_React$Component) {
2622
2648
  ref: function ref(c) {
2623
2649
  _this8.viewport = c;
2624
2650
  }
2625
- }, React.createElement(Nodes_1.default, {
2651
+ }, React.createElement(Edges_1.default, {
2652
+ edges: newEdges,
2653
+ linkWidth: linkWidth
2654
+ }), React.createElement(Nodes_1.default, {
2626
2655
  nodes: nodes,
2627
2656
  onNodeClick: function onNodeClick(k) {
2628
2657
  return _this8.handleMouseClick(k);
@@ -2637,9 +2666,6 @@ var Graph = /*#__PURE__*/function (_React$Component) {
2637
2666
  showValueCounts: showValueCounts,
2638
2667
  metadataFields: metadataFields,
2639
2668
  metadataColumns: metadataColumns
2640
- }), React.createElement(Edges_1.default, {
2641
- edges: newEdges,
2642
- linkWidth: linkWidth
2643
2669
  }));
2644
2670
  }
2645
2671
  }], [{
@@ -2707,6 +2733,9 @@ var Edges = function Edges(props) {
2707
2733
  }, edges.map(function (edge) {
2708
2734
  key = "edge-".concat(edge.sourceNode, "-").concat(edge.targetNode);
2709
2735
  return [React.createElement(GraphStyles_1.StyledEdgesPath, {
2736
+ style: {
2737
+ visibility: edge.isHidden ? 'hidden' : 'visible'
2738
+ },
2710
2739
  className: "edge",
2711
2740
  key: key,
2712
2741
  "data-test": key,
@@ -2740,6 +2769,9 @@ var Nodes = function Nodes(props) {
2740
2769
  "data-test": "node-".concat(key),
2741
2770
  "data-test-y-index": props.nodes[key].yIndex,
2742
2771
  key: key,
2772
+ style: {
2773
+ visibility: props.nodes[key].data.isHidden ? 'hidden' : 'visible'
2774
+ },
2743
2775
  onClick: function onClick() {
2744
2776
  return props.onNodeClick(key);
2745
2777
  },