Skip to content

Commit a27e6cc

Browse files
author
CALABRO Raphael (UA 2118)
committed
Upgraded to rxjs6 syntax and removed lodash
Fixed "compare" method for null and undefined values Using const and let when possible Using triple equals to avoid comparison errors Fixed unit test by casting "bulb" to allow assignation to SortOrder type Removed lodash dependency and updated dependencies versions. Updated systemjs and karma configurations Fixed code style. Upgraded version number to 2.0.0 Using SortOrder as argument to better convey the possible values Added unit tests for new code and fixed onSortChange emissions Updated NodeJS version for Travis
1 parent 9d3c4e6 commit a27e6cc

File tree

8 files changed

+132
-97
lines changed

8 files changed

+132
-97
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
language: node_js
22
node_js:
3-
- '5'
3+
- '8'
44
before_install:
55
- npm install -g codeclimate-test-reporter
66
script: npm test -- --browsers PhantomJS

examples/systemjs/app/data-filter.pipe.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import * as _ from "lodash";
21
import {Pipe, PipeTransform} from "@angular/core";
32

43
@Pipe({
@@ -8,7 +7,7 @@ export class DataFilterPipe implements PipeTransform {
87

98
transform(array: any[], query: string): any {
109
if (query) {
11-
return _.filter(array, row=>row.name.indexOf(query) > -1);
10+
return array.filter(row=>row.name.indexOf(query) > -1);
1211
}
1312
return array;
1413
}

karma.conf.js

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,13 +68,6 @@ module.exports = function (config) {
6868
watched: false
6969
},
7070

71-
// Lodash
72-
{
73-
pattern: 'node_modules/lodash/lodash.js',
74-
included: false,
75-
watched: false
76-
},
77-
7871
// The testing library
7972
{
8073
pattern: 'systemjs.config.js',

package.json

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "angular2-datatable",
3-
"version": "0.6.0",
3+
"version": "2.0.0",
44
"description": "DataTable component for Angular2 framework",
55
"main": "index.js",
66
"scripts": {
@@ -19,8 +19,7 @@
1919
},
2020
"keywords": [
2121
"angular",
22-
"angularjs",
23-
"angular2",
22+
"angular6",
2423
"ng",
2524
"ng2",
2625
"table",
@@ -35,12 +34,13 @@
3534
},
3635
"homepage": "https://github.com/mariuszfoltak/angular2-datatable#readme",
3736
"devDependencies": {
38-
"@angular/core": "^2.1.0",
39-
"@angular/compiler": "^2.1.0",
40-
"@angular/common": "^2.1.0",
41-
"@angular/platform-browser": "^2.1.0",
42-
"@angular/platform-browser-dynamic": "^2.1.0",
43-
"@angular/compiler-cli": "^2.1.0",
37+
"@angular/common": "^6.0.0",
38+
"@angular/compiler": "^6.0.0",
39+
"@angular/compiler-cli": "^6.0.0",
40+
"@angular/core": "^6.0.0",
41+
"@angular/platform-browser": "^6.0.0",
42+
"@angular/platform-browser-dynamic": "^6.0.0",
43+
"@types/jasmine": "^2.5.35",
4444
"core-js": "^2.4.1",
4545
"http-server": "^0.9.0",
4646
"jasmine-core": "^2.4.1",
@@ -49,24 +49,18 @@
4949
"karma-coverage": "^1.1.1",
5050
"karma-jasmine": "^1.0.2",
5151
"karma-phantomjs-launcher": "^1.0.2",
52-
"lodash": "^4.0.0",
5352
"phantomjs-prebuilt": "^2.1.7",
5453
"remap-istanbul": "^0.7.0",
55-
"rxjs": "5.0.0-beta.12",
56-
"systemjs": "^0.19.39",
57-
"typescript": "~2.1.0",
58-
"zone.js": "^0.6.25",
5954
"rimraf": "^2.5.4",
60-
"@types/lodash": "ts2.0",
61-
"@types/jasmine": "^2.5.35"
62-
},
63-
"dependencies": {
64-
"lodash": "^4.0.0"
55+
"rxjs": "^6.0.0",
56+
"systemjs": "^0.19.47",
57+
"typescript": "~2.7.2",
58+
"zone.js": "^0.6.25"
6559
},
6660
"peerDependencies": {
67-
"@angular/core": "^2.0.0",
68-
"@angular/common": "^2.0.0",
69-
"@angular/platform-browser": "^2.0.0",
70-
"rxjs": "^5.0.0-beta.12"
61+
"@angular/core": "^6.0.0",
62+
"@angular/common": "^6.0.0",
63+
"@angular/platform-browser": "^6.0.0",
64+
"rxjs": "^6.0.0"
7165
}
7266
}

src/BootstrapPaginator.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import {Component, Input, OnChanges} from "@angular/core";
22
import {DataTable} from "./DataTable";
3-
import * as _ from "lodash";
43

54
@Component({
65
selector: "mfBootstrapPaginator",
@@ -57,7 +56,7 @@ export class BootstrapPaginator implements OnChanges {
5756

5857
ngOnChanges(changes: any): any {
5958
if (changes.rowsOnPageSet) {
60-
this.minRowsOnPage = _.min(this.rowsOnPageSet)
59+
this.minRowsOnPage = this.rowsOnPageSet.reduce((previous, current) => current < previous ? current : previous);
6160
}
6261
}
6362
}

src/DataTable.spec.ts

Lines changed: 56 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import {SimpleChange, Component} from "@angular/core";
33
import {DataTable, PageEvent, SortEvent} from "./DataTable";
44
import {TestBed, ComponentFixture} from "@angular/core/testing";
55
import {By} from "@angular/platform-browser";
6-
import * as _ from "lodash";
6+
import {switchMap} from 'rxjs/operators';
7+
import {range} from "rxjs";
78

89
@Component({
910
template: `<table [mfData]="[]"></table>`
@@ -29,13 +30,13 @@ describe("DataTable directive tests", ()=> {
2930
{id: 5, name: 'Ðrone'},
3031
{id: 4, name: 'Ananas'}
3132
];
32-
datatable.ngOnChanges({inputData: new SimpleChange(null, datatable.inputData)});
33+
datatable.ngOnChanges({inputData: new SimpleChange(null, datatable.inputData, false)});
3334
});
3435

3536
describe("initializing", ()=> {
3637

3738
it("data should be empty array if inputData is undefined or null", () => {
38-
datatable.ngOnChanges({inputData: new SimpleChange(null, null)});
39+
datatable.ngOnChanges({inputData: new SimpleChange(null, null, false)});
3940
datatable.ngDoCheck();
4041
expect(datatable.data).toEqual([]);
4142
});
@@ -108,12 +109,19 @@ describe("DataTable directive tests", ()=> {
108109
});
109110

110111
datatable.rowsOnPage = 3;
111-
datatable.ngOnChanges({rowsOnPage: new SimpleChange(2, 3)});
112+
datatable.ngOnChanges({rowsOnPage: new SimpleChange(2, 3, false)});
112113
datatable.ngDoCheck();
113114
expect(datatable.data).toEqual([{id: 3, name: 'banana'}, {id: 1, name: 'Duck'}, {id: 2, name: 'ącki'}]);
114-
115-
116115
});
116+
117+
it("should emit a dataLength of 0 when inputData is null or undefined", (done) => {
118+
datatable.onPageChange.subscribe((pageOptions: PageEvent)=> {
119+
expect(pageOptions.dataLength).toEqual(0);
120+
done();
121+
});
122+
datatable.inputData = null;
123+
datatable.setPage(2, 3);
124+
})
117125
});
118126

119127
describe("sorting", ()=> {
@@ -128,8 +136,8 @@ describe("DataTable directive tests", ()=> {
128136
datatable.sortBy = "id";
129137
datatable.sortOrder = "asc";
130138
datatable.ngOnChanges({
131-
sortBy: new SimpleChange(null, datatable.sortBy),
132-
sortOrder: new SimpleChange(null, datatable.sortOrder)
139+
sortBy: new SimpleChange(null, datatable.sortBy, false),
140+
sortOrder: new SimpleChange(null, datatable.sortOrder, false)
133141
});
134142
datatable.ngDoCheck();
135143
expect(datatable.data).toEqual([
@@ -151,8 +159,8 @@ describe("DataTable directive tests", ()=> {
151159
datatable.sortBy = "id";
152160
datatable.sortOrder = "desc";
153161
datatable.ngOnChanges({
154-
sortBy: new SimpleChange(null, datatable.sortBy),
155-
sortOrder: new SimpleChange(null, datatable.sortOrder)
162+
sortBy: new SimpleChange(null, datatable.sortBy, false),
163+
sortOrder: new SimpleChange(null, datatable.sortOrder, false)
156164
});
157165
datatable.ngDoCheck();
158166

@@ -167,7 +175,7 @@ describe("DataTable directive tests", ()=> {
167175
datatable.ngDoCheck();
168176
datatable.sortBy = "id";
169177
datatable.ngOnChanges({
170-
sortBy: new SimpleChange(null, datatable.sortBy)
178+
sortBy: new SimpleChange(null, datatable.sortBy, false)
171179
});
172180
datatable.ngDoCheck();
173181
expect(datatable.sortOrder).toEqual("asc");
@@ -181,10 +189,10 @@ describe("DataTable directive tests", ()=> {
181189
});
182190
datatable.ngDoCheck();
183191
datatable.sortBy = "id";
184-
datatable.sortOrder = "bulb";
192+
datatable.sortOrder = "bulb" as any;
185193
datatable.ngOnChanges({
186-
sortBy: new SimpleChange(null, datatable.sortBy),
187-
sortOrder: new SimpleChange(null, datatable.sortOrder)
194+
sortBy: new SimpleChange(null, datatable.sortBy, false),
195+
sortOrder: new SimpleChange(null, datatable.sortOrder, false)
188196
});
189197
datatable.ngDoCheck();
190198
expect(datatable.sortOrder).toEqual("asc");
@@ -197,24 +205,40 @@ describe("DataTable directive tests", ()=> {
197205
]);
198206
});
199207

208+
it("should set sortOrder to 'asc' if setSort is given something else than 'asc' or 'desc'", () => {
209+
datatable.setSort("id", "bulb" as any);
210+
expect(datatable.getSort()).toEqual({sortBy: "id", sortOrder: "asc"});
211+
datatable.ngDoCheck();
212+
expect(datatable.sortOrder).toEqual("asc");
213+
expect(datatable.data).toEqual([
214+
{id: 1, name: 'Duck'},
215+
{id: 2, name: 'ącki'},
216+
{id: 3, name: 'banana'},
217+
{id: 4, name: 'Ananas'},
218+
{id: 5, name: 'Ðrone'}
219+
]);
220+
});
221+
200222
it("shouldn't change order when only order provided", (done)=> {
201223
done();
202224
datatable.onSortChange.subscribe(()=> {
203225
done.fail("OnSortChange shouldn't been fired");
204226
});
205227
datatable.ngDoCheck();
206228
datatable.sortOrder = "desc";
207-
datatable.ngOnChanges({sortOrder: new SimpleChange(null, datatable.sortOrder)});
229+
datatable.ngOnChanges({sortOrder: new SimpleChange(null, datatable.sortOrder, false)});
208230
datatable.ngDoCheck();
209231
expect(datatable.data).toEqual(datatable.inputData);
210232
});
211233

212234
it("should call output event when sorting changed", (done)=> {
213235
datatable.ngDoCheck();
214-
datatable.sortByChange.switchMap((sortBy: string)=> {
215-
expect(sortBy).toEqual("id");
216-
return datatable.sortOrderChange;
217-
}).subscribe((sortOrder: string)=> {
236+
datatable.sortByChange.pipe(
237+
switchMap((sortBy: string)=> {
238+
expect(sortBy).toEqual("id");
239+
return datatable.sortOrderChange;
240+
})
241+
).subscribe((sortOrder: string)=> {
218242
expect(sortOrder).toEqual("desc");
219243
done();
220244
});
@@ -228,8 +252,8 @@ describe("DataTable directive tests", ()=> {
228252
done.fail("Shouldn't call sortOrderChange");
229253
});
230254
done();
231-
datatable.sortOrder = "bulb";
232-
datatable.ngOnChanges({sortOrder: new SimpleChange(null, datatable.sortOrder)});
255+
datatable.sortOrder = "bulb" as any;
256+
datatable.ngOnChanges({sortOrder: new SimpleChange(null, datatable.sortOrder, false)});
233257
datatable.ngDoCheck();
234258
});
235259
// Wywołanie outputa gdy zmiana z innej strony
@@ -272,14 +296,16 @@ describe("DataTable directive tests", ()=> {
272296
{name: 'Claire', age: 9},
273297
{name: 'Anna', age: 34},
274298
{name: 'Claire', age: 16},
299+
{name: 'Anna', age: 12},
275300
{name: 'Claire', age: 7},
276301
{name: 'Anna', age: 12}
277302
];
278-
datatable.ngOnChanges({inputData: new SimpleChange(datatable.inputData, newData)});
303+
datatable.ngOnChanges({inputData: new SimpleChange(datatable.inputData, newData, false)});
279304
datatable.setSort(['name', 'age'], "asc");
280305
datatable.ngDoCheck();
281306

282307
expect(datatable.data).toEqual([
308+
{name: 'Anna', age: 12},
283309
{name: 'Anna', age: 12},
284310
{name: 'Anna', age: 34},
285311
{name: 'Claire', age: 7},
@@ -297,7 +323,7 @@ describe("DataTable directive tests", ()=> {
297323
{name: 'Claire', city: {zip: '11111'}},
298324
{name: 'Anna', city: {zip: '21111'}}
299325
];
300-
datatable.ngOnChanges({inputData: new SimpleChange(datatable.inputData, newData)});
326+
datatable.ngOnChanges({inputData: new SimpleChange(datatable.inputData, newData, false)});
301327
datatable.setSort("city.zip", "asc");
302328
datatable.ngDoCheck();
303329

@@ -315,7 +341,7 @@ describe("DataTable directive tests", ()=> {
315341
describe("data change", ()=> {
316342
it("should refresh data when inputData change", ()=> {
317343
let newData = [{id: 5, name: 'Ðrone'}, {id: 4, name: 'Ananas'}];
318-
datatable.ngOnChanges({inputData: new SimpleChange(datatable.inputData, newData)});
344+
datatable.ngOnChanges({inputData: new SimpleChange(datatable.inputData, newData, false)});
319345
datatable.ngDoCheck();
320346
expect(datatable.data).toEqual([{id: 5, name: 'Ðrone'}, {id: 4, name: 'Ananas'}]);
321347
});
@@ -347,7 +373,7 @@ describe("DataTable directive tests", ()=> {
347373
done();
348374
});
349375
let newData = [{id: 5, name: 'Ðrone'}, {id: 4, name: 'Ananas'}];
350-
datatable.ngOnChanges({inputData: new SimpleChange(datatable.inputData, newData)});
376+
datatable.ngOnChanges({inputData: new SimpleChange(datatable.inputData, newData, false)});
351377
datatable.ngDoCheck();
352378
});
353379

@@ -375,7 +401,7 @@ describe("DataTable directive tests", ()=> {
375401
expect(opt.rowsOnPage).toEqual(2);
376402
done();
377403
});
378-
_.times(3, ()=>datatable.inputData.pop());
404+
range(0, 3).forEach(()=>datatable.inputData.pop());
379405
datatable.ngDoCheck();
380406
});
381407

@@ -384,7 +410,7 @@ describe("DataTable directive tests", ()=> {
384410
datatable.ngDoCheck();
385411

386412
let newData = [{id: 5, name: 'Ðrone'}, {id: 4, name: 'Ananas'}];
387-
datatable.ngOnChanges({inputData: new SimpleChange(datatable.inputData, newData)});
413+
datatable.ngOnChanges({inputData: new SimpleChange(datatable.inputData, newData, false)});
388414
datatable.ngDoCheck();
389415
expect(datatable.data).toEqual(newData);
390416
});
@@ -406,7 +432,7 @@ describe("DataTable directive tests", ()=> {
406432
datatable.ngDoCheck();
407433

408434
let newData = [{id: 5, name: 'Ðrone'}, {id: 1, name: 'Duck'}, {id: 4, name: 'Ananas'}];
409-
datatable.ngOnChanges({inputData: new SimpleChange(datatable.inputData, newData)});
435+
datatable.ngOnChanges({inputData: new SimpleChange(datatable.inputData, newData, false)});
410436
datatable.ngDoCheck();
411437
expect(datatable.data).toEqual([{id: 1, name: 'Duck'}]);
412438
});
@@ -436,7 +462,7 @@ describe("DataTable directive tests", ()=> {
436462
datatable.ngDoCheck();
437463

438464
let newData = [];
439-
datatable.ngOnChanges({inputData: new SimpleChange(datatable.inputData, newData)});
465+
datatable.ngOnChanges({inputData: new SimpleChange(datatable.inputData, newData, false)});
440466
datatable.ngDoCheck();
441467
expect(datatable.activePage).toEqual(1);
442468
});
@@ -445,7 +471,7 @@ describe("DataTable directive tests", ()=> {
445471
datatable.setPage(2, 1);
446472
datatable.ngDoCheck();
447473

448-
_.times(5, ()=>datatable.inputData.pop());
474+
range(0, 5).forEach(()=>datatable.inputData.pop());
449475
datatable.ngDoCheck();
450476
expect(datatable.inputData.length).toEqual(0);
451477
expect(datatable.activePage).toEqual(1);

0 commit comments

Comments
 (0)