protected tooltipFormat()

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]))
                });   
            }
        }
    }