import intersectRect from './intersect/intersect-rect'; import { logger } from '../logger'; // eslint-disable-line import createLabel from './createLabel'; const rect = (parent, node) => { // Add outer g element const shapeSvg = parent .insert('g') .attr('class', 'cluster') .attr('id', node.id); // add the rect const rect = shapeSvg.insert('rect', ':first-child'); // Create the label and insert it after the rect const label = shapeSvg.insert('g').attr('class', 'cluster-label'); const text = label.node().appendChild(createLabel(node.labelText, node.labelStyle)); // Get the size of the label const bbox = text.getBBox(); const padding = 0 * node.padding; const halfPadding = padding / 2; // center the rect around its coordinate rect .attr('rx', node.rx) .attr('ry', node.ry) .attr('x', node.x - node.width / 2 - halfPadding) .attr('y', node.y - node.height / 2 - halfPadding) .attr('width', node.width + padding) .attr('height', node.height + padding); const adj = (node.width + node.padding - bbox.width) / 2; // Center the label label.attr('transform', 'translate(' + adj + ', ' + (node.y - node.height / 2) + ')'); // label.attr('transform', 'translate(' + 70 + ', ' + -node.height / 2 + ')'); const rectBox = rect.node().getBBox(); node.width = rectBox.width; node.height = rectBox.height; node.intersect = function(point) { return intersectRect(node, point); }; return shapeSvg; }; const shapes = { rect }; const clusterElems = {}; export const insertCluster = (elem, node) => { clusterElems[node.id] = shapes[node.shape](elem, node); }; export const getClusterTitleWidth = (elem, node) => { const label = createLabel(node.labelText, node.labelStyle); elem.node().appendChild(label); const width = label.getBBox().width; elem.node().removeChild(label); return width; }; export const positionCluster = node => { const el = clusterElems[node.id]; el.attr('transform', 'translate(' + node.x + ', ' + node.y + ')'); };