blob: 178b05444166276c421e9a8a31af08aee510595b [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import icons from './icons';
icons['KAFKA-CONSUMER'] = icons.KAFKA;
export default (d3, graph, tool, funcs, tip) => {
const nodeEnter = graph
.append('g')
.call(
d3
.drag()
.on('start', funcs.dragstart)
.on('drag', funcs.dragged)
.on('end', funcs.dragended),
)
.on('mouseover', function(d) {
tip.html((data) => `<div>${data.name}</div>`).show(d, this);
})
.on('mouseout', function() {
tip.hide(this);
})
.on('click', (d) => {
event.stopPropagation();
event.preventDefault();
tool.attr('style', 'display: none');
funcs.handleNodeClick(d);
if (d.isReal) {
tool.attr('transform', `translate(${d.x},${d.y - 20})`).attr('style', 'display: block');
}
});
nodeEnter
.append('image')
.attr('width', 49)
.attr('height', 49)
.attr('x', 2)
.attr('y', 10)
.attr('style', 'cursor: move;')
.attr('xlink:href', (d) => (d.sla < 98 ? icons.CUBEERROR : icons.CUBE));
nodeEnter
.append('image')
.attr('width', 32)
.attr('height', 32)
.attr('x', 6)
.attr('y', -10)
.attr('style', 'opacity: 0.5;')
.attr('xlink:href', icons.LOCAL);
nodeEnter
.append('image')
.attr('width', 18)
.attr('height', 18)
.attr('x', 13)
.attr('y', -7)
.attr('xlink:href', (d) =>
!d.type || d.type === 'N/A' ? icons.UNDEFINED : icons[d.type.toUpperCase().replace('-', '')],
);
nodeEnter
.append('text')
.attr('class', 'topo-text')
.attr('text-anchor', 'middle')
.attr('x', 22)
.attr('y', 70)
.text((d) => (d.name.length > 20 ? `${d.name.substring(0, 20)}...` : d.name));
return nodeEnter;
};