Skip to content

Commit 823cfd6

Browse files
Copilotdamyanpetev
andauthored
fix: expression property setters replace state instead of being additive (#60)
--------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: damyanpetev <damyanpetev@users.noreply.github.com>
1 parent 555b4cf commit 823cfd6

2 files changed

Lines changed: 51 additions & 5 deletions

File tree

src/components/grid.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,8 @@ export class IgcGridLite<T extends object = any> extends EventEmitterBase<IgcGri
243243
* Set the sort state for the grid.
244244
*/
245245
public set sortingExpressions(expressions: SortingExpression<T>[]) {
246-
if (this.hasUpdated && expressions.length) {
246+
this._stateController.sorting.reset();
247+
if (this.hasUpdated) {
247248
this.sort(expressions);
248249
} else {
249250
for (const expr of expressions) {
@@ -264,7 +265,8 @@ export class IgcGridLite<T extends object = any> extends EventEmitterBase<IgcGri
264265
* Set the filter state for the grid.
265266
*/
266267
public set filterExpressions(expressions: FilterExpression<T>[]) {
267-
if (this.hasUpdated && expressions.length) {
268+
this._stateController.filtering.reset();
269+
if (this.hasUpdated) {
268270
this.filter(expressions);
269271
} else {
270272
this._stateController.filtering.setRaw(expressions);
@@ -381,9 +383,7 @@ export class IgcGridLite<T extends object = any> extends EventEmitterBase<IgcGri
381383
expr.condition = (getFilterOperandsFor(this.getColumn(expr.key)!) as any)[expr.condition];
382384
}
383385

384-
if (expressions.length) {
385-
this._stateController.filtering.filter(expressions);
386-
}
386+
this._stateController.filtering.filter(expressions);
387387
}
388388

389389
/**

test/grid.properties.test.ts

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,52 @@ describe('Grid properties', () => {
146146
expect(TDD.rows.first.data.id).to.equal(8);
147147
});
148148

149+
it('Sort expressions late binding replaces previous state', async () => {
150+
await TDD.updateProperty('sortingExpressions', [{ key: 'id', direction: 'descending' }]);
151+
expect(TDD.grid.sortingExpressions).lengthOf(1);
152+
expect(TDD.rows.first.data.id).to.equal(8);
153+
154+
await TDD.updateProperty('sortingExpressions', [{ key: 'name', direction: 'ascending' }]);
155+
expect(TDD.grid.sortingExpressions).lengthOf(1);
156+
expect(TDD.grid.sortingExpressions[0].key).to.equal('name');
157+
});
158+
159+
it('Sort expressions late binding clears state with empty array', async () => {
160+
await TDD.updateProperty('sortingExpressions', [{ key: 'id', direction: 'descending' }]);
161+
expect(TDD.grid.sortingExpressions).lengthOf(1);
162+
163+
await TDD.updateProperty('sortingExpressions', []);
164+
expect(TDD.grid.sortingExpressions).lengthOf(0);
165+
});
166+
167+
it('Filter expressions late binding replaces previous state', async () => {
168+
await TDD.updateColumns({ field: 'id', dataType: 'number' });
169+
await TDD.updateProperty('filterExpressions', [
170+
{ key: 'id', condition: 'greaterThanOrEqual', searchTerm: 8 },
171+
]);
172+
expect(TDD.grid.filterExpressions).lengthOf(1);
173+
expect(TDD.grid.totalItems).to.equal(1);
174+
175+
await TDD.updateProperty('filterExpressions', [
176+
{ key: 'name', condition: 'startsWith', searchTerm: 'A' },
177+
]);
178+
expect(TDD.grid.filterExpressions).lengthOf(1);
179+
expect(TDD.grid.filterExpressions[0].key).to.equal('name');
180+
});
181+
182+
it('Filter expressions late binding clears state with empty array', async () => {
183+
await TDD.updateColumns({ field: 'id', dataType: 'number' });
184+
await TDD.updateProperty('filterExpressions', [
185+
{ key: 'id', condition: 'greaterThanOrEqual', searchTerm: 8 },
186+
]);
187+
expect(TDD.grid.filterExpressions).lengthOf(1);
188+
expect(TDD.grid.totalItems).to.equal(1);
189+
190+
await TDD.updateProperty('filterExpressions', []);
191+
expect(TDD.grid.filterExpressions).lengthOf(0);
192+
expect(TDD.grid.totalItems).to.equal(data.length);
193+
});
194+
149195
it('Sort expressions (get)', async () => {
150196
await TDD.sort([
151197
{ key: 'name', direction: 'descending' },

0 commit comments

Comments
 (0)