Skip to content

Commit

Permalink
PerformanceFix (#20)
Browse files Browse the repository at this point in the history
* PerformanceFix

* New tests were added

* Additional new tests

* Corrected functions and tests
  • Loading branch information
EugeneElkin authored and uve committed Dec 8, 2017
1 parent c4e4170 commit aea87ee
Show file tree
Hide file tree
Showing 6 changed files with 120 additions and 6 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
## 1.1.2
* FIX: Bins selection performance was increased

## 1.1.1
* FIX: Negative values are supported
* UPD: API was updated up to version 1.8
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "powerbi-visuals-histogram",
"version": "1.1.1",
"version": "1.1.2",
"description": "A histogram chart plots data ranges into intervals. Useful for estimating density.",
"repository": {
"type": "git",
Expand Down Expand Up @@ -51,7 +51,7 @@
"powerbi-visuals-utils-colorutils": "^1.0.0",
"powerbi-visuals-utils-dataviewutils": "1.2.0",
"powerbi-visuals-utils-formattingutils": "^3.0.0",
"powerbi-visuals-utils-interactivityutils": "^1.0.0",
"powerbi-visuals-utils-interactivityutils": "^2.0.1",
"powerbi-visuals-utils-svgutils": "^1.1.0",
"powerbi-visuals-utils-testutils": "^1.0.2",
"powerbi-visuals-utils-tooltiputils": "^1.0.0",
Expand Down
2 changes: 1 addition & 1 deletion pbiviz.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"displayName": "Histogram",
"guid": "Histogram1445664487616",
"visualClassName": "Histogram",
"version": "1.1.1",
"version": "1.1.2",
"description": "A histogram chart plots data ranges into intervals. Useful for estimating density.",
"supportUrl": "http://community.powerbi.com",
"gitHubUrl": "https://github.com/Microsoft/PowerBI-visuals-histogram"
Expand Down
4 changes: 3 additions & 1 deletion src/behavior.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,9 +70,11 @@ module powerbi.extensibility.visual {

if (!areDataPointsSelected) {
dataPoint.subDataPoints.forEach((subDataPoint: SelectableDataPoint) => {
selectionHandler.handleSelection(subDataPoint, true);
selectionHandler.handleSelection(subDataPoint, true, true);
});

selectionHandler.syncSelectionState(false);

this.selectedDataPoints = dataPoint.subDataPoints;
} else {
this.createAnEmptySelectedDataPoints();
Expand Down
18 changes: 16 additions & 2 deletions src/visual.ts
Original file line number Diff line number Diff line change
Expand Up @@ -396,8 +396,8 @@ module powerbi.extensibility.visual {
let minYValue: number = yAxisSettings.start < maxYvalue
? yAxisSettings.start
: 0;
settings.yAxis.start = Histogram.getCorrectXAxisValue(minYValue);
settings.yAxis.end = Histogram.getCorrectXAxisValue(maxYvalue);
settings.yAxis.start = Histogram.getCorrectYAxisValue(minYValue);
settings.yAxis.end = Histogram.getCorrectYAxisValue(maxYvalue);

// min-max for X axis
xAxisSettings = settings.xAxis;
Expand Down Expand Up @@ -496,11 +496,25 @@ module powerbi.extensibility.visual {
}

public static getCorrectXAxisValue(value: number): number {
if (value === undefined || isNaN(value)) {
return 0;
}

return Math.max(
Math.min(value, Histogram.MaxXAxisEndValue),
Histogram.MinXAxisStartValue);
}

public static getCorrectYAxisValue(value: number): number {
if (value === undefined || isNaN(value)) {
return 0;
}

return Math.max(
Math.min(value, Histogram.MaxXAxisEndValue),
0);
}

public static areValuesNumbers(categoryColumn: DataViewCategoryColumn): boolean {
return categoryColumn
&& categoryColumn.source
Expand Down
95 changes: 95 additions & 0 deletions test/visualTest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,60 @@ module powerbi.extensibility.visual.test {
expect(parseFloat(visualBuilder.yAxisTicks.first().text())).toBe(0);
});

it("Y-axis start < 0 validation", () => {
dataView.metadata.objects = {
yAxis: {
start: -52,
end: 78
}
};

visualBuilder.updateFlushAllD3Transitions(dataView);

expect(parseFloat(visualBuilder.yAxisTicks.first().text())).toBe(0);
});

it("Y-axis end < 0 validation", () => {
dataView.metadata.objects = {
yAxis: {
start: 0,
end: -78
}
};

visualBuilder.updateFlushAllD3Transitions(dataView);

expect(parseFloat(visualBuilder.yAxisTicks.first().text())).toBe(0);
expect(parseFloat(visualBuilder.yAxisTicks.last().text())).toBeGreaterThanOrEqual(0);
});

it("Y-axis start is undefined validation", () => {
dataView.metadata.objects = {
yAxis: {
start: undefined,
end: 78
}
};

visualBuilder.updateFlushAllD3Transitions(dataView);

expect(parseFloat(visualBuilder.yAxisTicks.first().text())).toBe(0);
});

it("Y-axis end is undefined validation", () => {
dataView.metadata.objects = {
yAxis: {
start: 0,
end: undefined
}
};

visualBuilder.updateFlushAllD3Transitions(dataView);

expect(parseFloat(visualBuilder.yAxisTicks.first().text())).toBe(0);
expect(parseFloat(visualBuilder.yAxisTicks.last().text())).toBeGreaterThanOrEqual(0);
});

it("X-axis default ticks", () => {
dataViewBuilder.valuesCategory = [
9, 10, 11, 12, 13, 14
Expand Down Expand Up @@ -733,6 +787,39 @@ module powerbi.extensibility.visual.test {
}
});

describe("getCorrectYAxisValue", () => {
it("the method should return a value that equals MaxXAxisEndValue", () => {
checkCorrectYAxisValue(Number.MAX_VALUE, VisualClass.MaxXAxisEndValue);
});

it("the method should return a value that equals MinXAxisStartValue", () => {
checkCorrectYAxisValue(-Number.MAX_VALUE, 0);
});

it("the method should return the same value", () => {
const value: number = 42;

checkCorrectYAxisValue(value, value);
});

it("the method should return a 0 if value is undefined ", () => {
checkCorrectYAxisValue(undefined, 0);
});

it("the method should return a 0 if value is NaN ", () => {
checkCorrectYAxisValue(parseInt("someString"), 0);
});

function checkCorrectYAxisValue(
actualValue: number,
expectedValue: number): void {

const value: number = VisualClass.getCorrectYAxisValue(actualValue);

expect(value).toBe(expectedValue);
}
});

describe("getCorrectXAxisValue", () => {
it("the method should return a value that equals MaxXAxisEndValue", () => {
checkCorrectXAxisValue(Number.MAX_VALUE, VisualClass.MaxXAxisEndValue);
Expand All @@ -748,6 +835,14 @@ module powerbi.extensibility.visual.test {
checkCorrectXAxisValue(value, value);
});

it("the method should return a 0 if value is undefined ", () => {
checkCorrectXAxisValue(undefined, 0);
});

it("the method should return a 0 if value is NaN ", () => {
checkCorrectXAxisValue(parseInt("someString"), 0);
});

function checkCorrectXAxisValue(
actualValue: number,
expectedValue: number): void {
Expand Down

0 comments on commit aea87ee

Please sign in to comment.