Skip to content

Commit b01918a

Browse files
Rashi Krishnaparth-007
authored andcommitted
Merged PR 174902: [JS SDK simplify functions]: Final updated features of JS SDK
## This PR adds the following features in JS SDK: 1. Method to move visual - (Report, Page, Visual) 2. Method to resize visual - (Report, Page, Visual) 3. Method to show/ hide visual - (Report, Page, Visual) 4. Method to resize Page - (Report, Page) 5. Method to get active page - (Report) 6. Method to get slicers - (Page) 7. Method to add/ remove context menu - (Report) 8. Method to add/ remove options menu - (Report) 9. Filter builder classes # Checklist - [X] Build and test scripts are passing, if available - [X] Open errors/warning details are shared with the reviewer - [X] There are no violations to the applicable coding guidelines - [X] Application has a consistent exception management setup - [X] Code does not contain commented code - [X] Is testing performed and results captured in ADO and list of test cases executed shared in PR? - [X] Generic exception type is not handled - [X] Stacktrace of error is not returned - [X] All external packages/libraries are installed from an online package manager Related work items: #556945, #556982, #557990, #558047, #558568, #558774, #559269, #559270, #559675, #560267, #560343, #562588, #562621, #562622, #562623, #562689, #562693, #562694, #563307, #563335, #564462, #564992, #565015, #566324, #566493, #566939, #567286, #570360, #570361, #570466, #570469, #571363, #571440, #572234, #572247, #573012, #573015, #573664, #574414, #574522, #574523, #575744
1 parent 01f10a3 commit b01918a

21 files changed

+5136
-250
lines changed

dist/powerbi-client.d.ts

Lines changed: 826 additions & 17 deletions
Large diffs are not rendered by default.

dist/powerbi.js

Lines changed: 1602 additions & 125 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/powerbi.min.js

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "powerbi-client",
3-
"version": "2.18.1",
3+
"version": "2.18.2",
44
"description": "JavaScript library for embedding Power BI into your apps. Provides service which makes it easy to embed different types of components and an object model which allows easy interaction with these components such as changing pages, applying filters, and responding to data selection.",
55
"main": "dist/powerbi.js",
66
"types": "dist/powerbi-client.d.ts",
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT License.
3+
4+
import {
5+
AdvancedFilter,
6+
IFilterTarget,
7+
AdvancedFilterLogicalOperators,
8+
IAdvancedFilterCondition,
9+
AdvancedFilterConditionOperators
10+
} from "powerbi-models";
11+
12+
import { IFilterBuilder } from './filterBuilder';
13+
14+
/**
15+
* Power BI Advanced filter builder component
16+
*
17+
* @export
18+
* @class AdvancedFilterBuilder
19+
* @implements {IFilterBuilder}
20+
*/
21+
export class AdvancedFilterBuilder implements IFilterBuilder {
22+
private target: IFilterTarget;
23+
private logicalOperator: AdvancedFilterLogicalOperators;
24+
private conditions: IAdvancedFilterCondition[] = [];
25+
26+
/**
27+
* Sets target property for Advanced filter
28+
*
29+
* ```javascript
30+
*
31+
* const advancedFilterBuilder = new AdvancedFilterBuilder().withTarget(tableName, columnName);
32+
* ```
33+
*
34+
* @returns {AdvancedFilterBuilder}
35+
*/
36+
withTarget(table: string, column: string): AdvancedFilterBuilder {
37+
this.target = { table: table, column: column };
38+
return this;
39+
}
40+
41+
/**
42+
* Sets target property for Advanced filter with target object
43+
*
44+
* ```javascript
45+
* const target = {
46+
* table: 'table1',
47+
* column: 'column1'
48+
* };
49+
*
50+
* const advancedFilterBuilder = new AdvancedFilterBuilder().withTargetObject(target);
51+
* ```
52+
*
53+
* @returns {AdvancedFilterBuilder}
54+
*/
55+
withTargetObject(target: IFilterTarget): AdvancedFilterBuilder {
56+
this.target = target;
57+
return this;
58+
}
59+
60+
/**
61+
* Sets And as logical operator for Advanced filter
62+
*
63+
* ```javascript
64+
*
65+
* const advancedFilterBuilder = new AdvancedFilterBuilder().and();
66+
* ```
67+
*
68+
* @returns {AdvancedFilterBuilder}
69+
*/
70+
and(): AdvancedFilterBuilder {
71+
this.logicalOperator = "And";
72+
return this;
73+
}
74+
75+
/**
76+
* Sets Or as logical operator for Advanced filter
77+
*
78+
* ```javascript
79+
*
80+
* const advancedFilterBuilder = new AdvancedFilterBuilder().or();
81+
* ```
82+
*
83+
* @returns {AdvancedFilterBuilder}
84+
*/
85+
or(): AdvancedFilterBuilder {
86+
this.logicalOperator = "Or";
87+
return this;
88+
}
89+
90+
/**
91+
* Adds a condition in Advanced filter
92+
*
93+
* ```javascript
94+
*
95+
* // Add two conditions
96+
* const advancedFilterBuilder = new AdvancedFilterBuilder().addCondition("Contains", "Wash").addCondition("Contains", "Park");
97+
* ```
98+
*
99+
* @returns {AdvancedFilterBuilder}
100+
*/
101+
addCondition(operator: AdvancedFilterConditionOperators, value?: (string | number | boolean | Date)): AdvancedFilterBuilder {
102+
const condition: IAdvancedFilterCondition = {
103+
operator: operator,
104+
value: value
105+
};
106+
this.conditions.push(condition);
107+
return this;
108+
}
109+
110+
/**
111+
* Creates Advanced filter
112+
*
113+
* ```javascript
114+
*
115+
* const advancedFilterBuilder = new AdvancedFilterBuilder().build();
116+
* ```
117+
*
118+
* @returns {AdvancedFilter}
119+
*/
120+
build(): AdvancedFilter {
121+
const advancedFilter = new AdvancedFilter(this.target, this.logicalOperator, this.conditions);
122+
return advancedFilter;
123+
}
124+
}
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT License.
3+
4+
import {
5+
BasicFilter,
6+
BasicFilterOperators,
7+
IFilterTarget
8+
} from "powerbi-models";
9+
10+
import { IFilterBuilder } from './filterBuilder';
11+
12+
/**
13+
* Power BI Basic filter builder component
14+
*
15+
* @export
16+
* @class BasicFilterBuilder
17+
* @implements {IFilterBuilder}
18+
*/
19+
export class BasicFilterBuilder implements IFilterBuilder {
20+
private target: IFilterTarget;
21+
private values: Array<(string | number | boolean)>;
22+
private operator: BasicFilterOperators;
23+
private isRequireSingleSelection = false;
24+
25+
/**
26+
* Sets target property for Basic filter
27+
*
28+
* ```javascript
29+
*
30+
* const basicFilterBuilder = new BasicFilterBuilder().withTarget(tableName, columnName);
31+
* ```
32+
*
33+
* @returns {BasicFilterBuilder}
34+
*/
35+
withTarget(table: string, column: string): BasicFilterBuilder {
36+
this.target = { table: table, column: column };
37+
return this;
38+
}
39+
40+
/**
41+
* Sets target property for Basic filter with target object
42+
*
43+
* ```javascript
44+
* const target = {
45+
* table: 'table1',
46+
* column: 'column1'
47+
* };
48+
*
49+
* const basicFilterBuilder = new BasicFilterBuilder().withTargetObject(target);
50+
* ```
51+
*
52+
* @returns {BasicFilterBuilder}
53+
*/
54+
withTargetObject(target: IFilterTarget): BasicFilterBuilder {
55+
this.target = target;
56+
return this;
57+
}
58+
59+
/**
60+
* Sets In as operator for Basic filter
61+
*
62+
* ```javascript
63+
*
64+
* const basicFilterBuilder = new BasicFilterBuilder().in([values]);
65+
* ```
66+
*
67+
* @returns {BasicFilterBuilder}
68+
*/
69+
in(values: Array<(string | number | boolean)>): BasicFilterBuilder {
70+
this.operator = "In";
71+
this.values = values;
72+
return this;
73+
}
74+
75+
/**
76+
* Sets NotIn as operator for Basic filter
77+
*
78+
* ```javascript
79+
*
80+
* const basicFilterBuilder = new BasicFilterBuilder().notIn([values]);
81+
* ```
82+
*
83+
* @returns {BasicFilterBuilder}
84+
*/
85+
notIn(values: Array<(string | number | boolean)>): BasicFilterBuilder {
86+
this.operator = "NotIn";
87+
this.values = values;
88+
return this;
89+
}
90+
91+
/**
92+
* Sets All as operator for Basic filter
93+
*
94+
* ```javascript
95+
*
96+
* const basicFilterBuilder = new BasicFilterBuilder().all();
97+
* ```
98+
*
99+
* @returns {BasicFilterBuilder}
100+
*/
101+
all(): BasicFilterBuilder {
102+
this.operator = "All";
103+
this.values = [];
104+
return this;
105+
}
106+
107+
/**
108+
* Sets required single selection property for Basic filter
109+
*
110+
* ```javascript
111+
*
112+
* const basicFilterBuilder = new BasicFilterBuilder().requireSingleSelection(isRequireSingleSelection);
113+
* ```
114+
*
115+
* @returns {BasicFilterBuilder}
116+
*/
117+
requireSingleSelection(isRequireSingleSelection = false): BasicFilterBuilder {
118+
this.isRequireSingleSelection = isRequireSingleSelection;
119+
return this;
120+
}
121+
122+
/**
123+
* Creates Basic filter
124+
*
125+
* ```javascript
126+
*
127+
* const basicFilterBuilder = new BasicFilterBuilder().build();
128+
* ```
129+
*
130+
* @returns {BasicFilter}
131+
*/
132+
build(): BasicFilter {
133+
const basicFilter = new BasicFilter(this.target, this.operator, this.values);
134+
basicFilter.requireSingleSelection = this.isRequireSingleSelection;
135+
return basicFilter;
136+
}
137+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT License.
3+
4+
import { Filter } from "powerbi-models";
5+
6+
/**
7+
* Generic filter builder for BasicFilter, AdvancedFilter, RelativeDate, RelativeTime and TopN
8+
*
9+
* @interface IFilterBuilder
10+
*/
11+
export interface IFilterBuilder {
12+
withTarget(table: string, column: string): IFilterBuilder;
13+
build(): Filter;
14+
}

src/FilterBuilders/index.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Copyright (c) Microsoft Corporation.
2+
// Licensed under the MIT License.
3+
4+
export {
5+
BasicFilterBuilder
6+
} from "./basicFilterBuilder";
7+
export {
8+
AdvancedFilterBuilder
9+
} from "./advancedFilterBuilder";
10+
export {
11+
TopNFilterBuilder
12+
} from "./topNFilterBuilder";
13+
export {
14+
RelativeDateFilterBuilder
15+
} from "./relativeDateFilterBuilder";
16+
export {
17+
RelativeTimeFilterBuilder
18+
} from "./relativeTimeFilterBuilder";

0 commit comments

Comments
 (0)