in src/chicletSlicer.ts [796:944]
private updateSelection(rowSelection: Selection<any>): void {
let settings: ChicletSlicerSettings = this.settings,
data: ChicletSlicerData = this.slicerData;
if (data && settings) {
this.slicerHeader
.classed('hidden', !settings.header.show);
this.slicerHeader
.select(ChicletSlicer.HeaderTextSelector.selector)
.text(settings.header.title.trim())
.style({
'border-style': this.getBorderStyle(settings.header.outline),
'border-color': settings.header.outlineColor,
'border-width': this.getBorderWidth(settings.header.outline, settings.header.outlineWeight),
'color': settings.header.fontColor,
'background-color': settings.header.background,
'font-size': PixelConverter.fromPoint(settings.header.textSize),
});
this.slicerBody
.classed(
ChicletSlicer.SlicerBodyHorizontalSelector.class,
settings.general.orientation === Orientation.HORIZONTAL)
.classed(
ChicletSlicer.SlicerBodyVerticalSelector.class,
settings.general.orientation === Orientation.VERTICAL);
let slicerText: Selection<any> = rowSelection.selectAll(ChicletSlicer.LabelTextSelector.selector),
textProperties: TextProperties = ChicletSlicer.getChicletTextProperties(settings.slicerText.textSize),
formatString: string = data.formatString;
let slicerBodyViewport: IViewport = this.getSlicerBodyViewport(this.currentViewport);
slicerText.text((d: ChicletSlicerDataPoint) => {
textProperties.text = valueFormatter.format(d.category, formatString);
if (this.settings.slicerText.width === 0) {
this.settings.slicerText.width = Math.round(
slicerBodyViewport.width / (this.tableView.computedColumns || ChicletSlicer.MinColumns)
);
}
let maxWidth: number = this.settings.slicerText.width -
ChicletSlicer.СhicletTotalInnerRightLeftPaddings -
ChicletSlicer.СellTotalInnerBorders -
settings.slicerText.outlineWeight;
return textMeasurementService.getTailoredTextOrDefault(textProperties, maxWidth);
});
rowSelection
.style({
'padding': PixelConverter.toString(settings.slicerText.padding)
});
rowSelection
.selectAll(ChicletSlicer.SlicerImgWrapperSelector.selector)
.style({
'max-height': settings.images.imageSplit + '%',
'display': (dataPoint: ChicletSlicerDataPoint) => (dataPoint.imageURL)
? 'flex'
: 'none'
})
.classed({
'hidden': (dataPoint: ChicletSlicerDataPoint) => {
if (!(dataPoint.imageURL)) {
return true;
}
if (settings.images.imageSplit < ChicletSlicer.MinImageSplitToHide) {
return true;
}
},
'imageRound': settings.images.imageRound,
'stretchImage': settings.images.stretchImage,
'bottomImage': settings.images.bottomImage
})
.attr('src', (d: ChicletSlicerDataPoint) => {
return d.imageURL ? d.imageURL : '';
});
rowSelection.selectAll(ChicletSlicer.SlicerTextWrapperSelector.selector)
.style('height', (d: ChicletSlicerDataPoint): string => {
let height: number = ChicletSlicer.MaxImageSplit;
if (d.imageURL) {
height -= settings.images.imageSplit;
}
return `${height}%`;
})
.classed('hidden', (d: ChicletSlicerDataPoint) => {
if (settings.images.imageSplit > ChicletSlicer.MaxImageSplitToHide) {
return true;
}
});
rowSelection.selectAll(ChicletSlicer.ItemContainerSelector.selector).style({
'color': settings.slicerText.fontColor,
'border-style': this.getBorderStyle(settings.slicerText.outline),
'border-color': settings.slicerText.outlineColor,
'border-width': this.getBorderWidth(settings.slicerText.outline, settings.slicerText.outlineWeight),
'font-size': PixelConverter.fromPoint(settings.slicerText.textSize),
'border-radius': this.getBorderRadius(settings.slicerText.borderStyle),
});
if (settings.slicerText.background) {
let backgroundColor: string = hexToRGBString(
settings.slicerText.background,
(ChicletSlicer.MaxTransparency - settings.slicerText.transparency) / ChicletSlicer.MaxTransparency);
this.slicerBody.style('background-color', backgroundColor);
}
else {
this.slicerBody.style('background-color', null);
}
if (this.interactivityService && this.slicerBody) {
this.interactivityService.applySelectionStateToData(data.slicerDataPoints);
let slicerBody: Selection<any> = this.slicerBody.attr('width', this.currentViewport.width),
slicerItemContainers: Selection<any> = slicerBody.selectAll(ChicletSlicer.ItemContainerSelector.selector),
slicerItemLabels: Selection<any> = slicerBody.selectAll(ChicletSlicer.LabelTextSelector.selector),
slicerItemInputs: Selection<any> = slicerBody.selectAll(ChicletSlicer.InputSelector.selector),
slicerClear: Selection<any> = this.slicerHeader.select(ChicletSlicer.ClearSelector.selector);
let behaviorOptions: ChicletSlicerBehaviorOptions = {
dataPoints: data.slicerDataPoints,
slicerItemContainers: slicerItemContainers,
slicerItemLabels: slicerItemLabels,
slicerItemInputs: slicerItemInputs,
slicerClear: slicerClear,
interactivityService: this.interactivityService,
slicerSettings: data.slicerSettings,
identityFields: data.identityFields,
isHighContrastMode: this.colorHelper.isHighContrast
};
this.interactivityService.bind(data.slicerDataPoints, this.behavior, behaviorOptions, {
hasSelectionOverride: data.hasSelectionOverride,
});
this.behavior.styleSlicerInputs(
rowSelection.select(ChicletSlicer.ItemContainerSelector.selector),
this.interactivityService.hasSelection());
}
else {
this.behavior.styleSlicerInputs(rowSelection.select(ChicletSlicer.ItemContainerSelector.selector), false);
}
}
};