@@ -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