Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/heatmapUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ import { ColorHelper } from "powerbi-visuals-utils-colorutils";
import maxBy from "lodash.maxby";

import { IColorArray, TableHeatMapChartData } from "./dataInterfaces";
import { BaseLabelCardSettings, colorbrewer, SettingsModel, YAxisLabelsSettings } from "./settings";
import { BaseLabelCardSettings, colorbrewer, GeneralSettings, SettingsModel, YAxisLabelsSettings } from "./settings";

export const DimmedOpacity: number = 0.4;
export const DefaultOpacity: number = 1.0;
Expand Down Expand Up @@ -176,8 +176,8 @@ export function parseSettings(colorHelper: ColorHelper, settingsModel: SettingsM
settingsModel.general.stroke = foregroundColor;
settingsModel.general.textColor = foregroundColor;
} else {
settingsModel.general.stroke = "#E6E6E6";
settingsModel.general.textColor = "#AAAAAA";
settingsModel.general.stroke = GeneralSettings.DefaultStroke;
settingsModel.general.textColor = GeneralSettings.DefaultTextColor;
}

return settingsModel;
Expand Down
6 changes: 4 additions & 2 deletions src/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,8 @@ export class GeneralSettings extends FormattingSettingsCompositeCard {
public static BucketCountMinLimitWithGradientMiddle: number = 3;
public static DefaultBucketCount: number = 5;
public static ColorbrewerMaxBucketCount: number = 14;
public static DefaultStroke: string = "#E6E6E6";
public static DefaultTextColor: string = "#AAAAAA";

public enableColorbrewer = new formattingSettings.ToggleSwitch({
name: "enableColorbrewer",
Expand Down Expand Up @@ -449,8 +451,8 @@ export class GeneralSettings extends FormattingSettingsCompositeCard {
}
});

public stroke: string = "#E6E6E6";
public textColor: string = "#AAAAAA";
public stroke: string = GeneralSettings.DefaultStroke;
public textColor: string = GeneralSettings.DefaultTextColor;

private paletteGroup: FormattingSettingsGroup = new formattingSettings.Group({
name: "paletteGroup",
Expand Down
4 changes: 3 additions & 1 deletion src/visual.ts
Original file line number Diff line number Diff line change
Expand Up @@ -325,8 +325,10 @@ export class TableHeatMap implements IVisual {
this.processViewMode(options);

this.settingsModel = this.formattingSettingsService.populateFormattingSettingsModel(SettingsModel, options.dataViews[0]);
this.settingsModel.initBuckets();
// parseSettings can flip enableColorbrewer/activateGradientMiddle (e.g. in high-contrast mode),
// so it must run before initBuckets() so bucket constraints match the final, rendered mode.
this.settingsModel = parseSettings(this.colorHelper, this.settingsModel);
this.settingsModel.initBuckets();

this.render(this.converter(options.dataViews[0]), this.settingsModel, options.viewport);
this.host.eventService.renderingFinished(options);
Expand Down
16 changes: 15 additions & 1 deletion test/visualTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ import { TableHeatMap } from "../src/visual";
import { ClickEventType, createColorPalette, d3Click, parseColorString, renderTimeout } from "powerbi-visuals-utils-testutils";
import { ColorHelper } from "powerbi-visuals-utils-colorutils";
import { TableHeatMapChartData } from "../src/dataInterfaces";
import { colorbrewer, SettingsModel } from "../src/settings";
import { colorbrewer, GeneralSettings, SettingsModel } from "../src/settings";
import {
getOpacity, DimmedOpacity, DefaultOpacity, DimmedColor,
isDataViewValid, textLimit,
Expand Down Expand Up @@ -514,6 +514,20 @@ describe("TableHeatmap", () => {
}, DefaultTimeout);
});

it("recomputes bucket constraints for the post-parse mode (parseSettings runs before initBuckets)", (done) => {
// In high-contrast mode parseSettings forces enableColorbrewer and activateGradientMiddle off.
// Because parseSettings runs before initBuckets, the bucket constraints must reflect that final
// custom-gradient mode (min 1, max 18) rather than being stuck at the pre-parse colorbrewer limits.
visualBuilder.updateRenderTimeout(dataView, () => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const general = (visualBuilder as any).visual.settingsModel.general;
expect(general.enableColorbrewer.value).toBeFalse();
expect(general.buckets.options.minValue.value).toBe(GeneralSettings.BucketCountMinLimit);
expect(general.buckets.options.maxValue.value).toBe(GeneralSettings.BucketCountMaxLimit);
done();
}, DefaultTimeout);
});

});
});
});
Expand Down
Loading