in src/UXClient/Interfaces/ChartComponent.ts [169:260]
protected tooltipFormat (d, text, measureFormat: TooltipMeasureFormat, xyrMeasures = null) {
let dataType = this.getDataType(d.aggregateKey);
var title = d.aggregateName;
let cDO = this.getCDOFromAggKey(d.aggregateKey);
let shiftMillis = this.chartComponentData.getTemporalShiftMillis(d.aggregateKey);
let formatDate = (date) => this.formatDate(date, shiftMillis);
let titleGroup = text.append("div")
.attr("class", "tsi-tooltipTitleGroup");
this.createTooltipSeriesInfo(d, titleGroup, cDO);
if (dataType === DataTypes.Categorical) {
titleGroup.append('h4')
.attr('class', 'tsi-tooltipSubtitle tsi-tooltipTimeStamp')
.text(formatDate(d.dateTime) + ' - ' + formatDate(d.endDate));
}
if (dataType === DataTypes.Events) {
titleGroup.append('h4')
.attr('class', 'tsi-tooltipSubtitle tsi-tooltipTimeStamp')
.text(formatDate(d.dateTime));
}
let tooltipAttrs = cDO.tooltipAttributes;
if (shiftMillis !== 0 && tooltipAttrs) {
let shiftTuple = this.chartComponentData.getTemporalShiftStringTuple(d.aggregateKey);
if (shiftTuple !== null) {
let keyString = this.getString(shiftTuple[0]);
let valueString = (keyString === ShiftTypes.startAt) ? this.formatDate(new Date(shiftTuple[1]), 0) : shiftTuple[1];
tooltipAttrs = [...tooltipAttrs, [keyString, valueString]];
}
}
if (tooltipAttrs && tooltipAttrs.length > 0) {
let attrsGroup = text.append('div')
.attr('class', 'tsi-tooltipAttributeContainer tsi-tooltipFlexyBox');
tooltipAttrs.forEach((attrTuple, i) => {
let timeShiftRow = attrsGroup.append('div')
.attr('class', 'tsi-tooltipAttribute tsi-tooltipFlexyItem');
timeShiftRow.append('div')
.attr('class', 'tsi-tooltipAttrTitle')
.text(attrTuple[0]);
timeShiftRow.append('div')
.attr('class', 'tsi-tooltipAttrValue')
.text(attrTuple[1]);
})
}
if (d.measures && Object.keys(d.measures).length) {
let formatValue = (dataType === DataTypes.Events ? (d) => d : Utils.formatYAxisNumber)
if(dataType !== DataTypes.Numeric) {
let valueGroup = text.append('table')
.attr('class', 'tsi-tooltipValues tsi-tooltipTable');
Object.keys(d.measures).forEach((measureType, i) => {
if(!(dataType === DataTypes.Categorical) || d.measures[measureType] !== 0){
valueGroup.append('tr').classed('tsi-tableSpacer', true);
let tr = valueGroup.append('tr')
.classed('tsi-visibleValue', (dataType === DataTypes.Numeric && (measureType === this.chartComponentData.getVisibleMeasure(d.aggregateKey, d.splitBy))))
.style('border-left-color', Utils.getColorForValue(cDO, measureType));
tr.append('td')
.attr('class', 'tsi-valueLabel')
.text(measureType);
tr.append('td')
.attr('class', 'tsi-valueCell')
.text(formatValue(d.measures[measureType]))
}
});
} else {
let valueGroup = text.append('div')
.attr('class', 'tsi-tooltipFlexyBox');
let filteredMeasures = this.getFilteredMeasures(Object.keys(d.measures), this.chartComponentData.getVisibleMeasure(d.aggregateKey, d.splitBy), measureFormat, xyrMeasures);
filteredMeasures.forEach((measureType, i) => {
let valueItem = valueGroup.append('div')
.attr('class', 'tsi-tooltipFlexyItem')
.classed('tsi-visibleValue',
(dataType === DataTypes.Numeric &&
(measureType === this.chartComponentData.getVisibleMeasure(d.aggregateKey, d.splitBy)) &&
(measureFormat !== TooltipMeasureFormat.Scatter)));
let measureTitle = valueItem.append('div')
.attr('class', 'tsi-tooltipMeasureTitle')
Utils.appendFormattedElementsFromString(measureTitle, measureType);
valueItem.append('div')
.attr('class', 'tsi-tooltipMeasureValue')
.text(formatValue(d.measures[measureType]))
});
}
}
}