11/*jshint esversion: 6 */
22
33document . addEventListener ( 'alpine:init' , ( ) => {
4-
4+
55 Alpine . data ( 'laravellivewiretable' , ( wire , showBulkActionsAlpine , tableID , primaryKeyName ) => ( {
66 listeners : [ ] ,
77 childElementOpen : false ,
@@ -103,13 +103,11 @@ document.addEventListener('alpine:init', () => {
103103 } ,
104104 reorderToggle ( ) {
105105 if ( this . currentlyReorderingStatus ) {
106- console . log ( "Disable Reordering" ) ;
107106 wire . disableReordering ( ) ;
108107 }
109108 else {
110109 if ( this . hideReorderColumnUnlessReorderingStatus ) {
111110 this . reorderDisplayColumn = true ;
112- console . log ( "enableReordering" ) ;
113111 }
114112 this . setupEvenOddClasses ( ) ;
115113 wire . enableReordering ( ) ;
@@ -120,7 +118,6 @@ document.addEventListener('alpine:init', () => {
120118 if ( this . hideReorderColumnUnlessReorderingStatus ) {
121119 this . reorderDisplayColumn = false ;
122120 }
123- console . log ( "cancelReorder" ) ;
124121
125122 wire . disableReordering ( ) ;
126123
@@ -367,4 +364,217 @@ document.addEventListener('alpine:init', () => {
367364
368365
369366 } ) ) ;
367+
368+
369+ Alpine . data ( 'tableWrapper' , ( wire , showBulkActionsAlpine ) => ( {
370+ listeners : [ ] ,
371+ childElementOpen : false ,
372+ filtersOpen : wire . entangle ( 'filterSlideDownDefaultVisible' ) ,
373+ paginationCurrentCount : wire . entangle ( 'paginationCurrentCount' ) ,
374+ paginationTotalItemCount : wire . entangle ( 'paginationTotalItemCount' ) ,
375+ paginationCurrentItems : wire . entangle ( 'paginationCurrentItems' ) ,
376+ selectedItems : wire . entangle ( 'selected' ) ,
377+ selectAllStatus : wire . entangle ( 'selectAll' ) ,
378+ delaySelectAll : wire . entangle ( 'delaySelectAll' ) ,
379+ hideBulkActionsWhenEmpty : wire . entangle ( 'hideBulkActionsWhenEmpty' ) ,
380+ toggleSelectAll ( ) {
381+ if ( ! showBulkActionsAlpine ) {
382+ return ;
383+ }
384+
385+ if ( this . paginationTotalItemCount === this . selectedItems . length ) {
386+ this . clearSelected ( ) ;
387+ this . selectAllStatus = false ;
388+ } else {
389+ if ( this . delaySelectAll )
390+ {
391+ this . setAllItemsSelected ( ) ;
392+ }
393+ else
394+ {
395+ this . setAllSelected ( ) ;
396+ }
397+ }
398+ } ,
399+ setAllItemsSelected ( ) {
400+ if ( ! showBulkActionsAlpine ) {
401+ return ;
402+ }
403+ this . selectAllStatus = true ;
404+ this . selectAllOnPage ( ) ;
405+ } ,
406+ setAllSelected ( ) {
407+ if ( ! showBulkActionsAlpine ) {
408+ return ;
409+ }
410+ if ( this . delaySelectAll )
411+ {
412+ this . selectAllStatus = true ;
413+ this . selectAllOnPage ( ) ;
414+ }
415+ else
416+ {
417+ wire . setAllSelected ( ) ;
418+ }
419+ } ,
420+ clearSelected ( ) {
421+ if ( ! showBulkActionsAlpine ) {
422+ return ;
423+ }
424+ this . selectAllStatus = false ;
425+ wire . clearSelected ( ) ;
426+ } ,
427+ selectAllOnPage ( ) {
428+ if ( ! showBulkActionsAlpine ) {
429+ return ;
430+ }
431+
432+ let tempSelectedItems = this . selectedItems ;
433+ const iterator = this . paginationCurrentItems . values ( ) ;
434+ for ( const value of iterator ) {
435+ tempSelectedItems . push ( value . toString ( ) ) ;
436+ }
437+ this . selectedItems = [ ...new Set ( tempSelectedItems ) ] ;
438+ } ,
439+ destroy ( ) {
440+ this . listeners . forEach ( ( listener ) => {
441+ listener ( ) ;
442+ } ) ;
443+ }
444+ } ) ) ;
445+
446+ Alpine . data ( 'reorderFunction' , ( wire , tableID , primaryKeyName ) => ( {
447+ dragging : false ,
448+ reorderEnabled : false ,
449+ sourceID : '' ,
450+ targetID : '' ,
451+ evenRowClasses : '' ,
452+ oddRowClasses : '' ,
453+ currentlyHighlightedElement : '' ,
454+ evenRowClassArray : { } ,
455+ oddRowClassArray : { } ,
456+ evenNotInOdd : { } ,
457+ oddNotInEven : { } ,
458+ orderedRows : [ ] ,
459+ defaultReorderColumn : wire . get ( 'defaultReorderColumn' ) ,
460+ reorderStatus : wire . get ( 'reorderStatus' ) ,
461+ currentlyReorderingStatus : wire . entangle ( 'currentlyReorderingStatus' ) ,
462+ hideReorderColumnUnlessReorderingStatus : wire . entangle ( 'hideReorderColumnUnlessReorderingStatus' ) ,
463+ reorderDisplayColumn : wire . entangle ( 'reorderDisplayColumn' ) ,
464+ dragStart ( event ) {
465+ this . $nextTick ( ( ) => { this . setupEvenOddClasses ( ) } ) ;
466+ this . sourceID = event . target . id ;
467+ event . dataTransfer . effectAllowed = 'move' ;
468+ event . dataTransfer . setData ( 'text/plain' , event . target . id ) ;
469+ event . target . classList . add ( "laravel-livewire-tables-dragging" ) ;
470+ } ,
471+ dragOverEvent ( event ) {
472+ if ( typeof this . currentlyHighlightedElement == 'object' ) {
473+ this . currentlyHighlightedElement . classList . remove ( 'laravel-livewire-tables-highlight-bottom' , 'laravel-livewire-tables-highlight-top' ) ;
474+ }
475+ let target = event . target . closest ( 'tr' ) ;
476+ this . currentlyHighlightedElement = target ;
477+
478+ if ( event . offsetY < ( target . getBoundingClientRect ( ) . height / 2 ) ) {
479+ target . classList . add ( 'laravel-livewire-tables-highlight-top' ) ;
480+ target . classList . remove ( 'laravel-livewire-tables-highlight-bottom' ) ;
481+ }
482+ else {
483+ target . classList . remove ( 'laravel-livewire-tables-highlight-top' ) ;
484+ target . classList . add ( 'laravel-livewire-tables-highlight-bottom' ) ;
485+ }
486+ } ,
487+ dragLeaveEvent ( event ) {
488+ event . target . closest ( 'tr' ) . classList . remove ( 'laravel-livewire-tables-highlight-bottom' , 'laravel-livewire-tables-highlight-top' ) ;
489+ } ,
490+ dropEvent ( event ) {
491+ if ( typeof this . currentlyHighlightedElement == 'object' ) {
492+ this . currentlyHighlightedElement . classList . remove ( 'laravel-livewire-tables-highlight-bottom' , 'laravel-livewire-tables-highlight-top' ) ;
493+ }
494+
495+ let target = event . target . closest ( 'tr' ) ;
496+ let parent = event . target . closest ( 'tr' ) . parentNode ;
497+ let element = document . getElementById ( this . sourceID ) . closest ( 'tr' ) ;
498+ element . classList . remove ( "laravel-livewire-table-dragging" ) ;
499+ let originalPosition = element . rowIndex ;
500+ let newPosition = target . rowIndex ;
501+ let table = document . getElementById ( tableID ) ;
502+ let loopStart = originalPosition ;
503+ if ( event . offsetY > ( target . getBoundingClientRect ( ) . height / 2 ) ) {
504+ parent . insertBefore ( element , target . nextSibling ) ;
505+ }
506+ else {
507+ parent . insertBefore ( element , target ) ;
508+ }
509+ if ( newPosition < originalPosition ) {
510+ loopStart = newPosition ;
511+ }
512+ let nextLoop = 'even' ;
513+ for ( let i = 1 , row ; row = table . rows [ i ] ; i ++ ) {
514+ if ( ! row . classList . contains ( 'hidden' ) && ! row . classList . contains ( 'md:hidden' ) ) {
515+ if ( nextLoop === 'even' ) {
516+ row . classList . remove ( ...this . oddNotInEven ) ;
517+ row . classList . add ( ...this . evenNotInOdd ) ;
518+ nextLoop = 'odd' ;
519+ }
520+ else {
521+ row . classList . remove ( ...this . evenNotInOdd ) ;
522+ row . classList . add ( ...this . oddNotInEven ) ;
523+ nextLoop = 'even' ;
524+ }
525+ }
526+ }
527+ } ,
528+ reorderToggle ( ) {
529+ this . $nextTick ( ( ) => { this . setupEvenOddClasses ( ) } ) ;
530+ if ( this . currentlyReorderingStatus ) {
531+ wire . disableReordering ( ) ;
532+
533+ }
534+ else {
535+ this . setupEvenOddClasses ( ) ;
536+ if ( this . hideReorderColumnUnlessReorderingStatus ) {
537+ this . reorderDisplayColumn = true ;
538+ }
539+ wire . enableReordering ( ) ;
540+
541+ }
542+ } ,
543+ cancelReorder ( ) {
544+ if ( this . hideReorderColumnUnlessReorderingStatus ) {
545+ this . reorderDisplayColumn = false ;
546+ }
547+ wire . disableReordering ( ) ;
548+
549+ } ,
550+ updateOrderedItems ( ) {
551+ let table = document . getElementById ( tableID ) ;
552+ let orderedRows = [ ] ;
553+ for ( let i = 1 , row ; row = table . rows [ i ] ; i ++ ) {
554+ orderedRows . push ( { [ primaryKeyName ] : row . getAttribute ( 'rowpk' ) , [ this . defaultReorderColumn ] : i } ) ;
555+ }
556+ wire . storeReorder ( orderedRows ) ;
557+ } ,
558+ setupEvenOddClasses ( ) {
559+ if ( this . evenNotInOdd . length === undefined || this . evenNotInOdd . length == 0 || this . oddNotInEven . length === undefined || this . oddNotInEven . length == 0 )
560+ {
561+ let tbody = document . getElementById ( tableID ) . getElementsByTagName ( 'tbody' ) [ 0 ] ;
562+ let evenRowClassArray = [ ] ;
563+ let oddRowClassArray = [ ] ;
564+
565+ if ( tbody . rows [ 0 ] !== undefined && tbody . rows [ 1 ] !== undefined ) {
566+ evenRowClassArray = Array . from ( tbody . rows [ 0 ] . classList ) ;
567+ oddRowClassArray = Array . from ( tbody . rows [ 1 ] . classList ) ;
568+ this . evenNotInOdd = evenRowClassArray . filter ( element => ! oddRowClassArray . includes ( element ) ) ;
569+ this . oddNotInEven = oddRowClassArray . filter ( element => ! evenRowClassArray . includes ( element ) ) ;
570+
571+ evenRowClassArray = [ ]
572+ oddRowClassArray = [ ]
573+ }
574+ }
575+ } ,
576+ init ( ) {
577+ }
578+ } ) ) ;
579+
370580} ) ;
0 commit comments