UNPKG

@aibsweb/faceted-search

Version:
122 lines (103 loc) 4.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _tooltipOverlayContent = _interopRequireDefault(require("../tooltip-overlay-content")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; return newObj; } } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } var NODE_RADIUS = 2; var NODE_SENSITIVITY_RADIUS = 6; var onMouseEnter = function onMouseEnter(style, contentComponent, tooltipId) { return function (_ref) { var screenX = _ref.screenX, screenY = _ref.screenY; var customEvent = new CustomEvent("".concat(tooltipId, "_TOOLTIP_CHANGE"), { detail: { tooltipOpen: true, style: style, contentComponent: contentComponent, screenX: screenX, screenY: screenY } }); document.dispatchEvent(customEvent); }; }; var onMouseLeave = function onMouseLeave(tooltipId) { return function () { var customEvent = new CustomEvent("".concat(tooltipId, "_TOOLTIP_CHANGE"), { detail: { tooltipOpen: false } }); document.dispatchEvent(customEvent); }; }; /** * Renders dendrogram nodes * * @param {Object} props Component Props */ var DendrogramNodes = (0, _react.memo)(function (_ref2) { var data = _ref2.data, dataAccessors = _ref2.dataAccessors, verticalOffset = _ref2.verticalOffset, _ref2$tooltipId = _ref2.tooltipId, tooltipId = _ref2$tooltipId === void 0 ? 'header' : _ref2$tooltipId; return _react["default"].createElement("g", { className: "nodes", key: "nodes" }, data.map(function (d) { // Add tooltip content for node/label if it exists. var toolTipFields = [{ name: 'Taxonomic Node', value: d.data[dataAccessors.id] }, { name: 'Label', value: d.data[dataAccessors.label] || 'No label' }]; var tooltipContent = toolTipFields.reduce(function (acc, item) { return [].concat(_toConsumableArray(acc), _toConsumableArray(item.value ? [item] : [])); }, []); // Create the tooltip overlay comonent var tooltipContentComponent = (0, _tooltipOverlayContent["default"])(tooltipContent); // Set the style for tooltip positioning var tooltipStyle = { height: NODE_SENSITIVITY_RADIUS, left: d.x, top: d.y, width: 0 }; // Shared props var circleProps = { cx: d.x, cy: d.y + verticalOffset, onMouseEnter: onMouseEnter(tooltipStyle, tooltipContentComponent, tooltipId), onMouseLeave: onMouseLeave(tooltipId) }; return _react["default"].createElement(_react["default"].Fragment, { key: d.data[dataAccessors.key] }, _react["default"].createElement("circle", _extends({ className: "node", key: "".concat(d.data[dataAccessors.key], "-node"), r: NODE_RADIUS }, circleProps)), _react["default"].createElement("circle", _extends({ className: "hover-sensitivity-node", key: "".concat(d.data[dataAccessors.key], "-hover-sensitivity"), r: NODE_SENSITIVITY_RADIUS }, circleProps))); })); }); DendrogramNodes.propTypes = { data: _propTypes["default"].arrayOf(_propTypes["default"].object), dataAccessors: _propTypes["default"].object.isRequired, tooltipId: _propTypes["default"].string, verticalOffset: _propTypes["default"].number }; var _default = DendrogramNodes; exports["default"] = _default;