Skip to content

Commit 1eea863

Browse files
authored
Merge pull request #2633 from Akshat55/m-t-n
Merge branch 'master' into next
2 parents 3a9e829 + d2130e1 commit 1eea863

File tree

6 files changed

+259
-76
lines changed

6 files changed

+259
-76
lines changed

src/input/textarea-label.component.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,13 @@ import { TextArea } from "./text-area.directive";
3737
#wrapper>
3838
<svg
3939
*ngIf="!warn && invalid"
40-
ibmIcon="warning--filled"
40+
cdsIcon="warning--filled"
4141
size="16"
4242
class="cds--text-area__invalid-icon">
4343
</svg>
4444
<svg
4545
*ngIf="!invalid && warn"
46-
ibmIcon="warning--alt--filled"
46+
cdsIcon="warning--alt--filled"
4747
size="16"
4848
class="cds--text-input__invalid-icon cds--text-input__invalid-icon--warning">
4949
</svg>

src/number-input/number.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export class NumberChange {
6262
<input
6363
type="number"
6464
[id]="id"
65-
[value]="value"
65+
[attr.value]="value"
6666
[attr.min]="min"
6767
[attr.max]="max"
6868
[attr.step]="step"

src/table/table-header-item.class.ts

Lines changed: 52 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,57 @@
11
import { TableItem } from "./table-item.class";
2-
import {
3-
EventEmitter,
4-
TemplateRef
5-
} from "@angular/core";
2+
import { TemplateRef } from "@angular/core";
63

4+
export type SortType = "ASCENDING" | "DESCENDING" | "NONE";
75
export class TableHeaderItem {
6+
/**
7+
* If true, sort is set to ascending, if false descending will be true.
8+
*
9+
*/
10+
set ascending(asc: boolean) {
11+
this.sortDirection = asc ? "ASCENDING" : "DESCENDING";
12+
}
13+
get ascending() {
14+
return this.sortDirection === "ASCENDING";
15+
}
16+
17+
/**
18+
* If true, sort is set to descending, if false ascending will be true.
19+
*
20+
*/
21+
set descending(desc: boolean) {
22+
this.sortDirection = desc ? "DESCENDING" : "ASCENDING";
23+
}
24+
get descending() {
25+
return this.sortDirection === "DESCENDING";
26+
}
27+
28+
get title() {
29+
if (this._title) {
30+
return this._title;
31+
}
32+
33+
if (!this.data) {
34+
return "";
35+
}
36+
37+
if (typeof this.data === "string") {
38+
return this.data;
39+
}
40+
41+
if (
42+
this.data.toString &&
43+
this.data.constructor !== ({}).constructor
44+
) {
45+
return this.data.toString();
46+
}
47+
48+
// data can’t be reasonably converted to an end user readable string
49+
return "";
50+
}
51+
52+
set title(title) {
53+
this._title = title;
54+
}
855
/**
956
* Defines if column under this TableHeaderItem should be displayed.
1057
*
@@ -57,28 +104,6 @@ export class TableHeaderItem {
57104
*/
58105
style = {};
59106

60-
/**
61-
* If true, sort is set to ascending, if false descending will be true.
62-
*
63-
*/
64-
set ascending(asc) {
65-
this._ascending = asc;
66-
}
67-
get ascending() {
68-
return this._ascending;
69-
}
70-
71-
/**
72-
* If true, sort is set to descending, if false ascending will be true.
73-
*
74-
*/
75-
set descending(desc) {
76-
this._ascending = !desc;
77-
}
78-
get descending() {
79-
return !this._ascending;
80-
}
81-
82107
/**
83108
* Data for the header item.
84109
*/
@@ -200,40 +225,9 @@ export class TableHeaderItem {
200225
*/
201226
filterData: any;
202227

203-
/**
204-
* used in `ascending`
205-
*
206-
* @protected
207-
*/
208-
protected _ascending = true;
209-
210-
get title() {
211-
if (this._title) {
212-
return this._title;
213-
}
214-
215-
if (!this.data) {
216-
return "";
217-
}
218-
219-
if (typeof this.data === "string") {
220-
return this.data;
221-
}
222-
223-
if (
224-
this.data.toString &&
225-
this.data.constructor !== ({}).constructor
226-
) {
227-
return this.data.toString();
228-
}
228+
sortDirection: SortType = "NONE";
229229

230-
// data can’t be reasonably converted to an end user readable string
231-
return "";
232-
}
233230

234-
set title(title) {
235-
this._title = title;
236-
}
237231

238232
private _title: string;
239233

src/table/table-model.class.spec.ts

Lines changed: 142 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,19 +117,21 @@ describe("Table", () => {
117117
it("should sort data ascending", () => {
118118
let tableModel = new TableModel();
119119
tableModel.data = [
120-
[new TableItem({data: "D"}), new TableItem({data: "E"}), new TableItem({data: "F"})],
121-
[new TableItem({data: "G"}), new TableItem({data: "H"}), new TableItem({data: "I"})],
122-
[new TableItem({data: "A"}), new TableItem({data: "B"}), new TableItem({data: "C"})]
120+
[new TableItem({data: "D"}), new TableItem({data: "E"}), new TableItem({data: "F"})], // 0
121+
[new TableItem({data: "G"}), new TableItem({data: "H"}), new TableItem({data: "I"})], // 1
122+
[new TableItem({data: "A"}), new TableItem({data: "B"}), new TableItem({data: "C"})] // 2
123123
];
124124
tableModel.rowsSelected[1] = true;
125125
tableModel.rowsContext[1] = "success";
126+
tableModel.cycleSortState(1);
126127

127128
tableModel.sort(1);
128129
expect(tableModel.row(0)).toEqual([new TableItem({data: "A"}), new TableItem({data: "B"}), new TableItem({data: "C"})]);
129130
expect(tableModel.row(1)).toEqual([new TableItem({data: "D"}), new TableItem({data: "E"}), new TableItem({data: "F"})]);
130131
expect(tableModel.row(2)).toEqual([new TableItem({data: "G"}), new TableItem({data: "H"}), new TableItem({data: "I"})]);
131132
expect(tableModel.rowsSelected).toEqual([false, false, true]);
132133
expect(tableModel.rowsContext).toEqual([undefined, undefined, "success"]);
134+
expect(tableModel.rowsIndices).toEqual([2, 0, 1]);
133135
});
134136

135137
it("should sort data descending", () => {
@@ -149,8 +151,145 @@ describe("Table", () => {
149151
expect(tableModel.row(2)).toEqual([new TableItem({data: "A"}), new TableItem({data: "B"}), new TableItem({data: "C"})]);
150152
expect(tableModel.rowsSelected).toEqual([true, false, false]);
151153
expect(tableModel.rowsContext).toEqual(["success", undefined, undefined]);
154+
expect(tableModel.rowsIndices).toEqual([1, 0, 2]);
155+
});
156+
157+
it("should set sort direction to NONE", () => {
158+
let tableModel = new TableModel();
159+
tableModel.data = [
160+
[new TableItem({data: "G"}), new TableItem({data: "H"}), new TableItem({data: "I"})], // 0
161+
[new TableItem({data: "D"}), new TableItem({data: "E"}), new TableItem({data: "F"})], // 1
162+
[new TableItem({data: "A"}), new TableItem({data: "B"}), new TableItem({data: "C"})] // 2
163+
];
164+
// 1 is now the last element in the array
165+
tableModel.rowsIndices = [1, 0, 2];
166+
tableModel.rowsSelected[1] = true;
167+
tableModel.rowsContext[1] = "success";
168+
tableModel.header[1].sorted = true;
169+
tableModel.header[1].sortDirection = "NONE";
170+
171+
tableModel.sort(1);
172+
expect(tableModel.row(0)).toEqual([new TableItem({data: "D"}), new TableItem({data: "E"}), new TableItem({data: "F"})]);
173+
expect(tableModel.row(1)).toEqual([new TableItem({data: "G"}), new TableItem({data: "H"}), new TableItem({data: "I"})]);
174+
expect(tableModel.row(2)).toEqual([new TableItem({data: "A"}), new TableItem({data: "B"}), new TableItem({data: "C"})]);
175+
expect(tableModel.rowsSelected).toEqual([true, false, false]);
176+
expect(tableModel.rowsContext).toEqual(["success", undefined, undefined]);
177+
expect(tableModel.rowsIndices).toEqual([0, 1, 2]);
178+
});
179+
180+
it("should add new row without index to the end when sorted", () => {
181+
let tableModel = new TableModel();
182+
tableModel.data = [
183+
[new TableItem({data: "A"}), new TableItem({data: "B"}), new TableItem({data: "C"})], // 0
184+
[new TableItem({data: "D"}), new TableItem({data: "E"}), new TableItem({data: "F"})], // 1
185+
[new TableItem({data: "G"}), new TableItem({data: "H"}), new TableItem({data: "I"})] // 2
186+
];
187+
// 1 is now the last element in the array
188+
tableModel.rowsIndices = [0, 1, 2];
189+
tableModel.header[1].sortDirection = "DESCENDING";
190+
tableModel.sort(1);
191+
192+
expect(tableModel.row(0)).toEqual([new TableItem({data: "G"}), new TableItem({data: "H"}), new TableItem({data: "I"})]);
193+
expect(tableModel.row(1)).toEqual([new TableItem({data: "D"}), new TableItem({data: "E"}), new TableItem({data: "F"})]);
194+
expect(tableModel.row(2)).toEqual([new TableItem({data: "A"}), new TableItem({data: "B"}), new TableItem({data: "C"})]);
195+
expect(tableModel.rowsIndices).toEqual([2, 1, 0]);
196+
197+
// ADD ROW
198+
tableModel.addRow([new TableItem({data: "J"}), new TableItem({data: "K"}), new TableItem({data: "L"})]);
199+
expect(tableModel.row(3)).toEqual([new TableItem({data: "J"}), new TableItem({data: "K"}), new TableItem({data: "L"})]);
200+
201+
tableModel.header[1].sortDirection = "NONE";
202+
tableModel.sort(1);
203+
204+
expect(tableModel.row(0)).toEqual([new TableItem({data: "A"}), new TableItem({data: "B"}), new TableItem({data: "C"})]);
205+
expect(tableModel.row(1)).toEqual([new TableItem({data: "D"}), new TableItem({data: "E"}), new TableItem({data: "F"})]);
206+
expect(tableModel.row(2)).toEqual([new TableItem({data: "G"}), new TableItem({data: "H"}), new TableItem({data: "I"})]);
207+
expect(tableModel.row(3)).toEqual([new TableItem({data: "J"}), new TableItem({data: "K"}), new TableItem({data: "L"})]);
208+
expect(tableModel.rowsIndices).toEqual([0, 1, 2, 3]);
152209
});
153210

211+
it("should add new row at specified index when sorted", () => {
212+
let tableModel = new TableModel();
213+
tableModel.data = [
214+
[new TableItem({data: "G"}), new TableItem({data: "H"}), new TableItem({data: "I"})], // 2
215+
[new TableItem({data: "D"}), new TableItem({data: "E"}), new TableItem({data: "F"})], // 1
216+
[new TableItem({data: "A"}), new TableItem({data: "B"}), new TableItem({data: "C"})] // 0
217+
];
218+
// 1 is now the last element in the array
219+
tableModel.rowsIndices = [2, 1, 0];
220+
221+
// ADD ROW
222+
tableModel.addRow([new TableItem({data: "J"}), new TableItem({data: "K"}), new TableItem({data: "L"})], 1);
223+
expect(tableModel.row(1)).toEqual([new TableItem({data: "J"}), new TableItem({data: "K"}), new TableItem({data: "L"})]);
224+
expect(tableModel.rowsIndices).toEqual([2, 3, 1, 0]);
225+
226+
tableModel.header[1].sortDirection = "NONE";
227+
tableModel.sort(1);
228+
229+
expect(tableModel.row(0)).toEqual([new TableItem({data: "A"}), new TableItem({data: "B"}), new TableItem({data: "C"})]);
230+
expect(tableModel.row(1)).toEqual([new TableItem({data: "D"}), new TableItem({data: "E"}), new TableItem({data: "F"})]);
231+
expect(tableModel.row(2)).toEqual([new TableItem({data: "G"}), new TableItem({data: "H"}), new TableItem({data: "I"})]);
232+
expect(tableModel.row(3)).toEqual([new TableItem({data: "J"}), new TableItem({data: "K"}), new TableItem({data: "L"})]);
233+
expect(tableModel.rowsIndices).toEqual([0, 1, 2, 3]);
234+
});
235+
236+
it("should delete row at specified index when sorted", () => {
237+
let tableModel = new TableModel();
238+
tableModel.data = [
239+
[new TableItem({data: "G"}), new TableItem({data: "H"}), new TableItem({data: "I"})], // 3
240+
[new TableItem({data: "D"}), new TableItem({data: "E"}), new TableItem({data: "F"})], // 1
241+
[new TableItem({data: "J"}), new TableItem({data: "K"}), new TableItem({data: "L"})], // 2 <--- Delete
242+
[new TableItem({data: "A"}), new TableItem({data: "B"}), new TableItem({data: "C"})] // 0
243+
];
244+
// Table is currently in a sorted state
245+
tableModel.rowsIndices = [3, 1, 2, 0];
246+
247+
// DELETE ROW
248+
tableModel.deleteRow(2);
249+
expect(tableModel.rowsIndices).toEqual([2, 1, 0]);
250+
expect(tableModel.row(2)).toEqual([new TableItem({data: "A"}), new TableItem({data: "B"}), new TableItem({data: "C"})]);
251+
expect(tableModel.row(1)).toEqual([new TableItem({data: "D"}), new TableItem({data: "E"}), new TableItem({data: "F"})]);
252+
expect(tableModel.row(0)).toEqual([new TableItem({data: "G"}), new TableItem({data: "H"}), new TableItem({data: "I"})]);
253+
254+
// Sort and check rowIndices & row order
255+
tableModel.header[1].sortDirection = "NONE";
256+
tableModel.sort(1);
257+
258+
expect(tableModel.rowsIndices).toEqual([0, 1, 2]);
259+
expect(tableModel.row(0)).toEqual([new TableItem({data: "A"}), new TableItem({data: "B"}), new TableItem({data: "C"})]);
260+
expect(tableModel.row(1)).toEqual([new TableItem({data: "D"}), new TableItem({data: "E"}), new TableItem({data: "F"})]);
261+
expect(tableModel.row(2)).toEqual([new TableItem({data: "G"}), new TableItem({data: "H"}), new TableItem({data: "I"})]);
262+
});
263+
264+
it("should delete last row with the highest index when sorted", () => {
265+
let tableModel = new TableModel();
266+
tableModel.data = [
267+
[new TableItem({data: "G"}), new TableItem({data: "H"}), new TableItem({data: "I"})], // 2
268+
[new TableItem({data: "D"}), new TableItem({data: "E"}), new TableItem({data: "F"})], // 1
269+
[new TableItem({data: "J"}), new TableItem({data: "K"}), new TableItem({data: "L"})], // 3 <--- Delete
270+
[new TableItem({data: "A"}), new TableItem({data: "B"}), new TableItem({data: "C"})] // 0
271+
];
272+
// Table is currently in a sorted state
273+
tableModel.rowsIndices = [2, 1, 3, 0];
274+
275+
// DELETE ROW
276+
tableModel.deleteRow(2);
277+
expect(tableModel.rowsIndices).toEqual([2, 1, 0]);
278+
expect(tableModel.row(2)).toEqual([new TableItem({data: "A"}), new TableItem({data: "B"}), new TableItem({data: "C"})]);
279+
expect(tableModel.row(1)).toEqual([new TableItem({data: "D"}), new TableItem({data: "E"}), new TableItem({data: "F"})]);
280+
expect(tableModel.row(0)).toEqual([new TableItem({data: "G"}), new TableItem({data: "H"}), new TableItem({data: "I"})]);
281+
282+
// Sort and check rowIndices & row order
283+
tableModel.header[1].sortDirection = "NONE";
284+
tableModel.sort(1);
285+
286+
expect(tableModel.rowsIndices).toEqual([0, 1, 2]);
287+
expect(tableModel.row(0)).toEqual([new TableItem({data: "A"}), new TableItem({data: "B"}), new TableItem({data: "C"})]);
288+
expect(tableModel.row(1)).toEqual([new TableItem({data: "D"}), new TableItem({data: "E"}), new TableItem({data: "F"})]);
289+
expect(tableModel.row(2)).toEqual([new TableItem({data: "G"}), new TableItem({data: "H"}), new TableItem({data: "I"})]);
290+
});
291+
292+
154293
/* ****************************************************************
155294
*********** ***********
156295
*********** ROWS ***********

0 commit comments

Comments
 (0)