@aibsweb/faceted-search
Version:
A generalized faceted search application.
122 lines (103 loc) • 4.84 kB
JavaScript
;
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;