1
1
/*jshint esversion: 6 */
2
2
3
3
document . addEventListener ( 'alpine:init' , ( ) => {
4
- Alpine . data ( 'tableWrapper' , ( wire , showBulkActionsAlpine ) => ( {
4
+
5
+ Alpine . data ( 'laravellivewiretable' , ( wire , showBulkActionsAlpine , tableID , primaryKeyName ) => ( {
5
6
listeners : [ ] ,
6
7
childElementOpen : false ,
7
8
filtersOpen : wire . entangle ( 'filterSlideDownDefaultVisible' ) ,
@@ -12,6 +13,144 @@ document.addEventListener('alpine:init', () => {
12
13
selectAllStatus : wire . entangle ( 'selectAll' ) ,
13
14
delaySelectAll : wire . entangle ( 'delaySelectAll' ) ,
14
15
hideBulkActionsWhenEmpty : wire . entangle ( 'hideBulkActionsWhenEmpty' ) ,
16
+ dragging : false ,
17
+ reorderEnabled : false ,
18
+ sourceID : '' ,
19
+ targetID : '' ,
20
+ evenRowClasses : '' ,
21
+ oddRowClasses : '' ,
22
+ currentlyHighlightedElement : '' ,
23
+ evenRowClassArray : { } ,
24
+ oddRowClassArray : { } ,
25
+ evenNotInOdd : { } ,
26
+ oddNotInEven : { } ,
27
+ orderedRows : [ ] ,
28
+ defaultReorderColumn : wire . get ( 'defaultReorderColumn' ) ,
29
+ reorderStatus : wire . entangle ( 'reorderStatus' ) ,
30
+ currentlyReorderingStatus : wire . entangle ( 'currentlyReorderingStatus' ) ,
31
+ hideReorderColumnUnlessReorderingStatus : wire . entangle ( 'hideReorderColumnUnlessReorderingStatus' ) ,
32
+ reorderDisplayColumn : wire . entangle ( 'reorderDisplayColumn' ) ,
33
+ dragStart ( event ) {
34
+ this . $nextTick ( ( ) => { this . setupEvenOddClasses ( ) } ) ;
35
+ this . sourceID = event . target . id ;
36
+ event . dataTransfer . effectAllowed = 'move' ;
37
+ event . dataTransfer . setData ( 'text/plain' , event . target . id ) ;
38
+ event . target . classList . add ( "laravel-livewire-tables-dragging" ) ;
39
+ } ,
40
+ dragOverEvent ( event ) {
41
+ if ( typeof this . currentlyHighlightedElement == 'object' ) {
42
+ this . currentlyHighlightedElement . classList . remove ( 'laravel-livewire-tables-highlight-bottom' , 'laravel-livewire-tables-highlight-top' ) ;
43
+ }
44
+ let target = event . target . closest ( 'tr' ) ;
45
+ this . currentlyHighlightedElement = target ;
46
+
47
+ if ( event . offsetY < ( target . getBoundingClientRect ( ) . height / 2 ) ) {
48
+ target . classList . add ( 'laravel-livewire-tables-highlight-top' ) ;
49
+ target . classList . remove ( 'laravel-livewire-tables-highlight-bottom' ) ;
50
+ }
51
+ else {
52
+ target . classList . remove ( 'laravel-livewire-tables-highlight-top' ) ;
53
+ target . classList . add ( 'laravel-livewire-tables-highlight-bottom' ) ;
54
+ }
55
+ } ,
56
+ dragLeaveEvent ( event ) {
57
+ event . target . closest ( 'tr' ) . classList . remove ( 'laravel-livewire-tables-highlight-bottom' , 'laravel-livewire-tables-highlight-top' ) ;
58
+ } ,
59
+ dropEvent ( event ) {
60
+ if ( typeof this . currentlyHighlightedElement == 'object' ) {
61
+ this . currentlyHighlightedElement . classList . remove ( 'laravel-livewire-tables-highlight-bottom' , 'laravel-livewire-tables-highlight-top' ) ;
62
+ }
63
+
64
+ let target = event . target . closest ( 'tr' ) ;
65
+ let parent = event . target . closest ( 'tr' ) . parentNode ;
66
+ let element = document . getElementById ( this . sourceID ) . closest ( 'tr' ) ;
67
+ element . classList . remove ( "laravel-livewire-table-dragging" ) ;
68
+ let originalPosition = element . rowIndex ;
69
+ let newPosition = target . rowIndex ;
70
+ let table = document . getElementById ( tableID ) ;
71
+ let loopStart = originalPosition ;
72
+ if ( event . offsetY > ( target . getBoundingClientRect ( ) . height / 2 ) ) {
73
+ parent . insertBefore ( element , target . nextSibling ) ;
74
+ }
75
+ else {
76
+ parent . insertBefore ( element , target ) ;
77
+ }
78
+ if ( newPosition < originalPosition ) {
79
+ loopStart = newPosition ;
80
+ }
81
+
82
+ /*
83
+ let evenList = parentNode.querySelectorAll("table[tableType='rappasoft-laravel-livewire-tables']>tbody>tr:nth-child(even of tr.rappasoft-striped-row) ").forEach(function (elem) {
84
+ elem.classList.remove(...this.oddNotInEven);
85
+ row.classList.add(...this.evenNotInOdd);
86
+ });
87
+ */
88
+ let nextLoop = 'even' ;
89
+ for ( let i = 1 , row ; row = table . rows [ i ] ; i ++ ) {
90
+ if ( ! row . classList . contains ( 'hidden' ) && ! row . classList . contains ( 'md:hidden' ) ) {
91
+ if ( nextLoop === 'even' ) {
92
+ row . classList . remove ( ...this . oddNotInEven ) ;
93
+ row . classList . add ( ...this . evenNotInOdd ) ;
94
+ nextLoop = 'odd' ;
95
+ }
96
+ else {
97
+ row . classList . remove ( ...this . evenNotInOdd ) ;
98
+ row . classList . add ( ...this . oddNotInEven ) ;
99
+ nextLoop = 'even' ;
100
+ }
101
+ }
102
+ }
103
+ } ,
104
+ reorderToggle ( ) {
105
+ if ( this . currentlyReorderingStatus ) {
106
+ console . log ( "Disable Reordering" ) ;
107
+ wire . disableReordering ( ) ;
108
+ }
109
+ else {
110
+ if ( this . hideReorderColumnUnlessReorderingStatus ) {
111
+ this . reorderDisplayColumn = true ;
112
+ console . log ( "enableReordering" ) ;
113
+ }
114
+ this . setupEvenOddClasses ( ) ;
115
+ wire . enableReordering ( ) ;
116
+ }
117
+ this . $nextTick ( ( ) => { this . setupEvenOddClasses ( ) } ) ;
118
+ } ,
119
+ cancelReorder ( ) {
120
+ if ( this . hideReorderColumnUnlessReorderingStatus ) {
121
+ this . reorderDisplayColumn = false ;
122
+ }
123
+ console . log ( "cancelReorder" ) ;
124
+
125
+ wire . disableReordering ( ) ;
126
+
127
+ } ,
128
+ updateOrderedItems ( ) {
129
+ let table = document . getElementById ( tableID ) ;
130
+ let orderedRows = [ ] ;
131
+ for ( let i = 1 , row ; row = table . rows [ i ] ; i ++ ) {
132
+ orderedRows . push ( { [ primaryKeyName ] : row . getAttribute ( 'rowpk' ) , [ this . defaultReorderColumn ] : i } ) ;
133
+ }
134
+ wire . storeReorder ( orderedRows ) ;
135
+ } ,
136
+ setupEvenOddClasses ( ) {
137
+ if ( this . evenNotInOdd . length === undefined || this . evenNotInOdd . length == 0 || this . oddNotInEven . length === undefined || this . oddNotInEven . length == 0 )
138
+ {
139
+ let tbody = document . getElementById ( tableID ) . getElementsByTagName ( 'tbody' ) [ 0 ] ;
140
+ let evenRowClassArray = [ ] ;
141
+ let oddRowClassArray = [ ] ;
142
+
143
+ if ( tbody . rows [ 0 ] !== undefined && tbody . rows [ 1 ] !== undefined ) {
144
+ evenRowClassArray = Array . from ( tbody . rows [ 0 ] . classList ) ;
145
+ oddRowClassArray = Array . from ( tbody . rows [ 1 ] . classList ) ;
146
+ this . evenNotInOdd = evenRowClassArray . filter ( element => ! oddRowClassArray . includes ( element ) ) ;
147
+ this . oddNotInEven = oddRowClassArray . filter ( element => ! evenRowClassArray . includes ( element ) ) ;
148
+
149
+ evenRowClassArray = [ ]
150
+ oddRowClassArray = [ ]
151
+ }
152
+ }
153
+ } ,
15
154
toggleSelectAll ( ) {
16
155
if ( ! showBulkActionsAlpine ) {
17
156
return ;
@@ -75,6 +214,7 @@ document.addEventListener('alpine:init', () => {
75
214
this . listeners . forEach ( ( listener ) => {
76
215
listener ( ) ;
77
216
} ) ;
217
+
78
218
}
79
219
} ) ) ;
80
220
@@ -227,144 +367,4 @@ document.addEventListener('alpine:init', () => {
227
367
228
368
229
369
} ) ) ;
230
- Alpine . data ( 'reorderFunction' , ( wire , tableID , primaryKeyName ) => ( {
231
- dragging : false ,
232
- reorderEnabled : false ,
233
- sourceID : '' ,
234
- targetID : '' ,
235
- evenRowClasses : '' ,
236
- oddRowClasses : '' ,
237
- currentlyHighlightedElement : '' ,
238
- evenRowClassArray : { } ,
239
- oddRowClassArray : { } ,
240
- evenNotInOdd : { } ,
241
- oddNotInEven : { } ,
242
- orderedRows : [ ] ,
243
- defaultReorderColumn : wire . get ( 'defaultReorderColumn' ) ,
244
- reorderStatus : wire . get ( 'reorderStatus' ) ,
245
- currentlyReorderingStatus : wire . entangle ( 'currentlyReorderingStatus' ) ,
246
- hideReorderColumnUnlessReorderingStatus : wire . entangle ( 'hideReorderColumnUnlessReorderingStatus' ) ,
247
- reorderDisplayColumn : wire . entangle ( 'reorderDisplayColumn' ) ,
248
- dragStart ( event ) {
249
- this . $nextTick ( ( ) => { this . setupEvenOddClasses ( ) } ) ;
250
- this . sourceID = event . target . id ;
251
- event . dataTransfer . effectAllowed = 'move' ;
252
- event . dataTransfer . setData ( 'text/plain' , event . target . id ) ;
253
- event . target . classList . add ( "laravel-livewire-tables-dragging" ) ;
254
- } ,
255
- dragOverEvent ( event ) {
256
- if ( typeof this . currentlyHighlightedElement == 'object' ) {
257
- this . currentlyHighlightedElement . classList . remove ( 'laravel-livewire-tables-highlight-bottom' , 'laravel-livewire-tables-highlight-top' ) ;
258
- }
259
- let target = event . target . closest ( 'tr' ) ;
260
- this . currentlyHighlightedElement = target ;
261
-
262
- if ( event . offsetY < ( target . getBoundingClientRect ( ) . height / 2 ) ) {
263
- target . classList . add ( 'laravel-livewire-tables-highlight-top' ) ;
264
- target . classList . remove ( 'laravel-livewire-tables-highlight-bottom' ) ;
265
- }
266
- else {
267
- target . classList . remove ( 'laravel-livewire-tables-highlight-top' ) ;
268
- target . classList . add ( 'laravel-livewire-tables-highlight-bottom' ) ;
269
- }
270
- } ,
271
- dragLeaveEvent ( event ) {
272
- event . target . closest ( 'tr' ) . classList . remove ( 'laravel-livewire-tables-highlight-bottom' , 'laravel-livewire-tables-highlight-top' ) ;
273
- } ,
274
- dropEvent ( event ) {
275
- if ( typeof this . currentlyHighlightedElement == 'object' ) {
276
- this . currentlyHighlightedElement . classList . remove ( 'laravel-livewire-tables-highlight-bottom' , 'laravel-livewire-tables-highlight-top' ) ;
277
- }
278
-
279
- let target = event . target . closest ( 'tr' ) ;
280
- let parent = event . target . closest ( 'tr' ) . parentNode ;
281
- let element = document . getElementById ( this . sourceID ) . closest ( 'tr' ) ;
282
- element . classList . remove ( "laravel-livewire-table-dragging" ) ;
283
- let originalPosition = element . rowIndex ;
284
- let newPosition = target . rowIndex ;
285
- let table = document . getElementById ( tableID ) ;
286
- let loopStart = originalPosition ;
287
- if ( event . offsetY > ( target . getBoundingClientRect ( ) . height / 2 ) ) {
288
- parent . insertBefore ( element , target . nextSibling ) ;
289
- }
290
- else {
291
- parent . insertBefore ( element , target ) ;
292
- }
293
- if ( newPosition < originalPosition ) {
294
- loopStart = newPosition ;
295
- }
296
-
297
- /*
298
- let evenList = parentNode.querySelectorAll("table[tableType='rappasoft-laravel-livewire-tables']>tbody>tr:nth-child(even of tr.rappasoft-striped-row) ").forEach(function (elem) {
299
- elem.classList.remove(...this.oddNotInEven);
300
- row.classList.add(...this.evenNotInOdd);
301
- });
302
- */
303
- let nextLoop = 'even' ;
304
- for ( let i = 1 , row ; row = table . rows [ i ] ; i ++ ) {
305
- if ( ! row . classList . contains ( 'hidden' ) && ! row . classList . contains ( 'md:hidden' ) ) {
306
- if ( nextLoop === 'even' ) {
307
- row . classList . remove ( ...this . oddNotInEven ) ;
308
- row . classList . add ( ...this . evenNotInOdd ) ;
309
- nextLoop = 'odd' ;
310
- }
311
- else {
312
- row . classList . remove ( ...this . evenNotInOdd ) ;
313
- row . classList . add ( ...this . oddNotInEven ) ;
314
- nextLoop = 'even' ;
315
- }
316
- }
317
- }
318
- } ,
319
- reorderToggle ( ) {
320
- this . $nextTick ( ( ) => { this . setupEvenOddClasses ( ) } ) ;
321
- if ( this . currentlyReorderingStatus ) {
322
- wire . disableReordering ( ) ;
323
-
324
- }
325
- else {
326
- this . setupEvenOddClasses ( ) ;
327
- if ( this . hideReorderColumnUnlessReorderingStatus ) {
328
- this . reorderDisplayColumn = true ;
329
- }
330
- wire . enableReordering ( ) ;
331
-
332
- }
333
- } ,
334
- cancelReorder ( ) {
335
- if ( this . hideReorderColumnUnlessReorderingStatus ) {
336
- this . reorderDisplayColumn = false ;
337
- }
338
- wire . disableReordering ( ) ;
339
-
340
- } ,
341
- updateOrderedItems ( ) {
342
- let table = document . getElementById ( tableID ) ;
343
- let orderedRows = [ ] ;
344
- for ( let i = 1 , row ; row = table . rows [ i ] ; i ++ ) {
345
- orderedRows . push ( { [ primaryKeyName ] : row . getAttribute ( 'rowpk' ) , [ this . defaultReorderColumn ] : i } ) ;
346
- }
347
- wire . storeReorder ( orderedRows ) ;
348
- } ,
349
- setupEvenOddClasses ( ) {
350
- if ( this . evenNotInOdd . length === undefined || this . evenNotInOdd . length == 0 || this . oddNotInEven . length === undefined || this . oddNotInEven . length == 0 )
351
- {
352
- let tbody = document . getElementById ( tableID ) . getElementsByTagName ( 'tbody' ) [ 0 ] ;
353
- let evenRowClassArray = [ ] ;
354
- let oddRowClassArray = [ ] ;
355
-
356
- if ( tbody . rows [ 0 ] !== undefined && tbody . rows [ 1 ] !== undefined ) {
357
- evenRowClassArray = Array . from ( tbody . rows [ 0 ] . classList ) ;
358
- oddRowClassArray = Array . from ( tbody . rows [ 1 ] . classList ) ;
359
- this . evenNotInOdd = evenRowClassArray . filter ( element => ! oddRowClassArray . includes ( element ) ) ;
360
- this . oddNotInEven = oddRowClassArray . filter ( element => ! evenRowClassArray . includes ( element ) ) ;
361
-
362
- evenRowClassArray = [ ]
363
- oddRowClassArray = [ ]
364
- }
365
- }
366
- } ,
367
- init ( ) {
368
- }
369
- } ) ) ;
370
370
} ) ;
0 commit comments