Skip to content

Draggable.Sortable on Table Rows Using rowspan #626

@sshaw

Description

@sshaw

Looks like it does not work for this case. I imaging imagine it's because the there's no tag-level grouping of the related rows.

Of course I do not want invalid HTML but for fun I wrapped related rows in a span but things did still not work.

Before Drag

Image

After Drag

Image

Code

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Draggable.js Table Row Example</title>
        <script src="https://unpkg.com/@shopify/[email protected]/lib/draggable.bundle.js"></script>
        <style>
         table {
             width: 100%;
             max-width: 600px;
             border-collapse: collapse;
             margin: 20px auto;
             font-family: Arial, sans-serif;
         }
         th, td {
             border: 1px solid #ddd;
             padding: 8px;
             text-align: left;
         }
         th {
             background-color: #f2f2f2;
         }
         tr {
             background-color: #fff;
             cursor: move;
         }
         tr.dragging {
             opacity: 0.5;
             background-color: #f0f0f0;
         }
         tr:hover {
             background-color: #f5f5f5;
         }
        </style>
    </head>
    <body>
        <table id="sortableTable">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>Name</th>
                    <th>Role</th>
                </tr>
            </thead>
            <tbody id="tableBody">
                <tr data-user-id="1" data-user-row="first">
                    <td rowspan="2">1</td>
                    <td rowspan="2">Alice</td>
                    <td>Developer</td>
                </tr>
                <tr data-user-id="1" data-user-row="sub">
                    <td>Team Lead</td>
                </tr>
                <tr data-user-id="2" data-user-row="first">
                    <td rowspan="3">2</td>
                    <td rowspan="3">Bob</td>
                    <td>Designer</td>
                </tr>
                <tr data-user-id="2" data-user-row="sub">
                    <td>UI Specialist</td>
                </tr>
                <tr data-user-id="2" data-user-row="sub">
                    <td>Illustrator</td>
                </tr>

                <tr data-user-id="3" data-user-row="first">
                    <td rowspan="1">3</td>
                    <td rowspan="1">Tommy</td>
                    <td>Manager</td>
                </tr>


                <tr data-user-id="4" data-user-row="first">
                    <td rowspan="2">4</td>
                    <td rowspan="2">Diana</td>
                    <td>Analyst</td>
                </tr>
                <tr data-user-id="4" data-user-row="sub">
                    <td>Data Scientist</td>
                </tr>
            </tbody>
        </table>

        <script>
         document.addEventListener('DOMContentLoaded', () => {
             const tableBody = document.querySelector('#tableBody');
             const sortable = new Draggable.Sortable([tableBody], {
                 draggable: 'tr',
                 mirror: {
                     constrainDimensions: true,
                 },
             });
         });
        </script>
    </body>
</html>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions