Reorder mat-table rows with angular material's drag-and-drop












2














Angular 7 brought the powerful DragDropModule with it: https://material.angular.io/cdk/drag-drop/examples



The documentation deals with rearranging items within lists or transferring items between several lists. However, it doesn't talk about tables.



I was wondering whether there is a comfortable way of using angular material's drag-and-drop system for reordering rows in mat-table or cdk-table.



(You can add cdkDropList to mat-table which makes the mechanism work but without all the fancy animations and default drag placeholders.)



Does something like an easy-to-implement default for sorting table rows via drag-and-drop exist?



Thanks for your help :)










share|improve this question






















  • You described that the mechanism is working. For me it is not working using the actual angular 7.1 . When I am adding a cdkDropList to the mat-table, I always get an Uncaught TypeError: Cannot read property 'clientRect' of undefined.
    – jet miller
    Nov 27 '18 at 18:23


















2














Angular 7 brought the powerful DragDropModule with it: https://material.angular.io/cdk/drag-drop/examples



The documentation deals with rearranging items within lists or transferring items between several lists. However, it doesn't talk about tables.



I was wondering whether there is a comfortable way of using angular material's drag-and-drop system for reordering rows in mat-table or cdk-table.



(You can add cdkDropList to mat-table which makes the mechanism work but without all the fancy animations and default drag placeholders.)



Does something like an easy-to-implement default for sorting table rows via drag-and-drop exist?



Thanks for your help :)










share|improve this question






















  • You described that the mechanism is working. For me it is not working using the actual angular 7.1 . When I am adding a cdkDropList to the mat-table, I always get an Uncaught TypeError: Cannot read property 'clientRect' of undefined.
    – jet miller
    Nov 27 '18 at 18:23
















2












2








2







Angular 7 brought the powerful DragDropModule with it: https://material.angular.io/cdk/drag-drop/examples



The documentation deals with rearranging items within lists or transferring items between several lists. However, it doesn't talk about tables.



I was wondering whether there is a comfortable way of using angular material's drag-and-drop system for reordering rows in mat-table or cdk-table.



(You can add cdkDropList to mat-table which makes the mechanism work but without all the fancy animations and default drag placeholders.)



Does something like an easy-to-implement default for sorting table rows via drag-and-drop exist?



Thanks for your help :)










share|improve this question













Angular 7 brought the powerful DragDropModule with it: https://material.angular.io/cdk/drag-drop/examples



The documentation deals with rearranging items within lists or transferring items between several lists. However, it doesn't talk about tables.



I was wondering whether there is a comfortable way of using angular material's drag-and-drop system for reordering rows in mat-table or cdk-table.



(You can add cdkDropList to mat-table which makes the mechanism work but without all the fancy animations and default drag placeholders.)



Does something like an easy-to-implement default for sorting table rows via drag-and-drop exist?



Thanks for your help :)







angular drag-and-drop angular-material mat-table






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 19 '18 at 15:06









David Brem

1131111




1131111












  • You described that the mechanism is working. For me it is not working using the actual angular 7.1 . When I am adding a cdkDropList to the mat-table, I always get an Uncaught TypeError: Cannot read property 'clientRect' of undefined.
    – jet miller
    Nov 27 '18 at 18:23




















  • You described that the mechanism is working. For me it is not working using the actual angular 7.1 . When I am adding a cdkDropList to the mat-table, I always get an Uncaught TypeError: Cannot read property 'clientRect' of undefined.
    – jet miller
    Nov 27 '18 at 18:23


















You described that the mechanism is working. For me it is not working using the actual angular 7.1 . When I am adding a cdkDropList to the mat-table, I always get an Uncaught TypeError: Cannot read property 'clientRect' of undefined.
– jet miller
Nov 27 '18 at 18:23






You described that the mechanism is working. For me it is not working using the actual angular 7.1 . When I am adding a cdkDropList to the mat-table, I always get an Uncaught TypeError: Cannot read property 'clientRect' of undefined.
– jet miller
Nov 27 '18 at 18:23














2 Answers
2






active

oldest

votes


















2














The styling is done by CSS (look at the CSS tab on the example page). I tweaked it to work with mat-table:



.cdk-drag-preview {
box-sizing: border-box;
border-radius: 4px;
box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2),
0 8px 10px 1px rgba(0, 0, 0, 0.14),
0 3px 14px 2px rgba(0, 0, 0, 0.12);
}

.cdk-drag-placeholder {
opacity: 0;
}

.cdk-drag-animating {
transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
}

.cdk-drop-list-dragging .mat-row:not(.cdk-drag-placeholder) {
transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
}


I placed this in my main styles.scss file.





For anyone wondering how to implement drag and drop on a mat-table, you need to:




  1. Add cdkDropList to mat-table

  2. Add (cdkDropListDropped)="onListDrop($event)" to mat-table

  3. Add cdkDrag to mat-row


onListDrop will look something like:



onListDrop(event: CdkDragDrop<string>) {
// Swap the elements around
moveItemInArray(this.myArray, event.previousIndex, event.currentIndex);
}


moveItemInArray is an Angular Material function. You can import it.






share|improve this answer































    0














    its not working for mat table , can you post more described answer or any piece of code






    share|improve this answer





















    • I've added a few points to the end of my answer that explains what you need to add to get drag and drop to work on a mat-table
      – Lee Gunn
      Dec 5 '18 at 10:35











    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53377450%2freorder-mat-table-rows-with-angular-materials-drag-and-drop%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    2














    The styling is done by CSS (look at the CSS tab on the example page). I tweaked it to work with mat-table:



    .cdk-drag-preview {
    box-sizing: border-box;
    border-radius: 4px;
    box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2),
    0 8px 10px 1px rgba(0, 0, 0, 0.14),
    0 3px 14px 2px rgba(0, 0, 0, 0.12);
    }

    .cdk-drag-placeholder {
    opacity: 0;
    }

    .cdk-drag-animating {
    transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
    }

    .cdk-drop-list-dragging .mat-row:not(.cdk-drag-placeholder) {
    transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
    }


    I placed this in my main styles.scss file.





    For anyone wondering how to implement drag and drop on a mat-table, you need to:




    1. Add cdkDropList to mat-table

    2. Add (cdkDropListDropped)="onListDrop($event)" to mat-table

    3. Add cdkDrag to mat-row


    onListDrop will look something like:



    onListDrop(event: CdkDragDrop<string>) {
    // Swap the elements around
    moveItemInArray(this.myArray, event.previousIndex, event.currentIndex);
    }


    moveItemInArray is an Angular Material function. You can import it.






    share|improve this answer




























      2














      The styling is done by CSS (look at the CSS tab on the example page). I tweaked it to work with mat-table:



      .cdk-drag-preview {
      box-sizing: border-box;
      border-radius: 4px;
      box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2),
      0 8px 10px 1px rgba(0, 0, 0, 0.14),
      0 3px 14px 2px rgba(0, 0, 0, 0.12);
      }

      .cdk-drag-placeholder {
      opacity: 0;
      }

      .cdk-drag-animating {
      transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
      }

      .cdk-drop-list-dragging .mat-row:not(.cdk-drag-placeholder) {
      transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
      }


      I placed this in my main styles.scss file.





      For anyone wondering how to implement drag and drop on a mat-table, you need to:




      1. Add cdkDropList to mat-table

      2. Add (cdkDropListDropped)="onListDrop($event)" to mat-table

      3. Add cdkDrag to mat-row


      onListDrop will look something like:



      onListDrop(event: CdkDragDrop<string>) {
      // Swap the elements around
      moveItemInArray(this.myArray, event.previousIndex, event.currentIndex);
      }


      moveItemInArray is an Angular Material function. You can import it.






      share|improve this answer


























        2












        2








        2






        The styling is done by CSS (look at the CSS tab on the example page). I tweaked it to work with mat-table:



        .cdk-drag-preview {
        box-sizing: border-box;
        border-radius: 4px;
        box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2),
        0 8px 10px 1px rgba(0, 0, 0, 0.14),
        0 3px 14px 2px rgba(0, 0, 0, 0.12);
        }

        .cdk-drag-placeholder {
        opacity: 0;
        }

        .cdk-drag-animating {
        transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
        }

        .cdk-drop-list-dragging .mat-row:not(.cdk-drag-placeholder) {
        transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
        }


        I placed this in my main styles.scss file.





        For anyone wondering how to implement drag and drop on a mat-table, you need to:




        1. Add cdkDropList to mat-table

        2. Add (cdkDropListDropped)="onListDrop($event)" to mat-table

        3. Add cdkDrag to mat-row


        onListDrop will look something like:



        onListDrop(event: CdkDragDrop<string>) {
        // Swap the elements around
        moveItemInArray(this.myArray, event.previousIndex, event.currentIndex);
        }


        moveItemInArray is an Angular Material function. You can import it.






        share|improve this answer














        The styling is done by CSS (look at the CSS tab on the example page). I tweaked it to work with mat-table:



        .cdk-drag-preview {
        box-sizing: border-box;
        border-radius: 4px;
        box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2),
        0 8px 10px 1px rgba(0, 0, 0, 0.14),
        0 3px 14px 2px rgba(0, 0, 0, 0.12);
        }

        .cdk-drag-placeholder {
        opacity: 0;
        }

        .cdk-drag-animating {
        transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
        }

        .cdk-drop-list-dragging .mat-row:not(.cdk-drag-placeholder) {
        transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
        }


        I placed this in my main styles.scss file.





        For anyone wondering how to implement drag and drop on a mat-table, you need to:




        1. Add cdkDropList to mat-table

        2. Add (cdkDropListDropped)="onListDrop($event)" to mat-table

        3. Add cdkDrag to mat-row


        onListDrop will look something like:



        onListDrop(event: CdkDragDrop<string>) {
        // Swap the elements around
        moveItemInArray(this.myArray, event.previousIndex, event.currentIndex);
        }


        moveItemInArray is an Angular Material function. You can import it.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Dec 12 '18 at 10:03

























        answered Dec 5 '18 at 10:28









        Lee Gunn

        5,33522323




        5,33522323

























            0














            its not working for mat table , can you post more described answer or any piece of code






            share|improve this answer





















            • I've added a few points to the end of my answer that explains what you need to add to get drag and drop to work on a mat-table
              – Lee Gunn
              Dec 5 '18 at 10:35
















            0














            its not working for mat table , can you post more described answer or any piece of code






            share|improve this answer





















            • I've added a few points to the end of my answer that explains what you need to add to get drag and drop to work on a mat-table
              – Lee Gunn
              Dec 5 '18 at 10:35














            0












            0








            0






            its not working for mat table , can you post more described answer or any piece of code






            share|improve this answer












            its not working for mat table , can you post more described answer or any piece of code







            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Nov 28 '18 at 3:21









            Smriti Jha

            12




            12












            • I've added a few points to the end of my answer that explains what you need to add to get drag and drop to work on a mat-table
              – Lee Gunn
              Dec 5 '18 at 10:35


















            • I've added a few points to the end of my answer that explains what you need to add to get drag and drop to work on a mat-table
              – Lee Gunn
              Dec 5 '18 at 10:35
















            I've added a few points to the end of my answer that explains what you need to add to get drag and drop to work on a mat-table
            – Lee Gunn
            Dec 5 '18 at 10:35




            I've added a few points to the end of my answer that explains what you need to add to get drag and drop to work on a mat-table
            – Lee Gunn
            Dec 5 '18 at 10:35


















            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53377450%2freorder-mat-table-rows-with-angular-materials-drag-and-drop%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            MongoDB - Not Authorized To Execute Command

            How to fix TextFormField cause rebuild widget in Flutter

            in spring boot 2.1 many test slices are not allowed anymore due to multiple @BootstrapWith