{"version":3,"file":"drag_and_drop_controller-2XF2Fevk.js","sources":["../../../app/frontend/entrypoints/admin/controllers/drag_and_drop_controller.js"],"sourcesContent":["import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n connect() {\n this.draggingRow = null;\n\n // Inject CSS dynamically\n this.injectStyles();\n }\n\n dragStart(event) {\n this.draggingRow = event.target;\n event.dataTransfer.effectAllowed = \"move\";\n event.dataTransfer.setData(\"text/html\", event.target.outerHTML);\n\n this.draggingRow.classList.add(\"dragging\");\n this.element.classList.add(\"no-hover\");\n\n this.toggleDeleteButtons(false);\n\n console.log(\"dragStart\");\n }\n\n dragOver(event) {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n const targetRow = event.target.closest(\"tr\");\n if (targetRow && targetRow !== this.draggingRow) {\n const tableBody = this.draggingRow.parentNode;\n const draggingIndex = [...tableBody.children].indexOf(this.draggingRow);\n const targetIndex = [...tableBody.children].indexOf(targetRow);\n if (draggingIndex < targetIndex) {\n tableBody.insertBefore(this.draggingRow, targetRow.nextSibling);\n } else {\n tableBody.insertBefore(this.draggingRow, targetRow);\n }\n }\n console.log(\"dragOver\");\n }\n\n dragEnd(event) {\n // Remove the 'dragging' class from the dragged row\n event.target.classList.remove(\"dragging\");\n this.draggingRow = null;\n\n // Re-enable hover effects by removing 'no-hover' from the table\n this.element.classList.remove(\"no-hover\");\n\n this.toggleDeleteButtons(true);\n this.saveNewOrder();\n console.log(\"dragEnd\");\n }\n\n\n saveNewOrder() {\n const rows = Array.from(this.element.querySelectorAll(\"tr[data-id]\"));\n const newOrder = rows.map((row) => row.dataset.id);\n\n fetch(this.element.dataset.updateUrl, {\n method: \"PATCH\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"X-CSRF-Token\": document.querySelector('meta[name=\"csrf-token\"]').getAttribute(\"content\"),\n },\n body: JSON.stringify({ order: newOrder }),\n })\n .then((response) => {\n if (!response.ok) {\n throw new Error(\"Failed to update order\");\n }\n })\n .then(() => {\n console.log(\"Order updated successfully\");\n })\n .catch((error) => {\n console.error(\"Error updating order:\", error);\n });\n }\n\n toggleDeleteButtons(visible) {\n const deleteButtons = this.element.querySelectorAll(\n \"button[data-controller='delete_confirmation']\"\n );\n console.log(deleteButtons)\n deleteButtons.forEach((button) => {\n button.style.visibility = visible ? \"visible\" : \"hidden\";\n });\n }\n\n injectStyles() {\n const style = document.createElement(\"style\");\n style.textContent = `\n /* Disable hover effects for all rows during drag-and-drop */\n .no-hover tr:not(.dragging):hover .opacity-0 {\n opacity: 0 !important; /* Prevent hover effects during drag */\n }\n\n /* Ensure the drag-and-drop icon is always visible for the row being dragged */\n tr.dragging .opacity-0 {\n opacity: 1 !important; /* Always show the icon for the dragged row */\n }\n\n /* Restore hover effects for rows when not dragging */\n tr:not(.dragging):hover .opacity-0 {\n opacity: 1; /* Show icons and buttons for hovered rows */\n }\n\n /* Default state for icons and buttons (hidden) */\n .opacity-0 {\n opacity: 0;\n transition: opacity 0.2s ease-in-out;\n }\n\n /* Optional: Visual indicator for the row being dragged */\n tr.dragging {\n background-color: rgba(80, 78, 78, 0.05);\n }\n `;\n document.head.appendChild(style);\n }\n}\n"],"names":["drag_and_drop_controller","Controller","event","targetRow","tableBody","draggingIndex","targetIndex","newOrder","row","response","error","visible","deleteButtons","button","style"],"mappings":"2CAEe,MAAKA,UAASC,CAAW,CACtC,SAAU,CACR,KAAK,YAAc,KAGnB,KAAK,aAAY,CAClB,CAED,UAAUC,EAAO,CACf,KAAK,YAAcA,EAAM,OACzBA,EAAM,aAAa,cAAgB,OACnCA,EAAM,aAAa,QAAQ,YAAaA,EAAM,OAAO,SAAS,EAE9D,KAAK,YAAY,UAAU,IAAI,UAAU,EACzC,KAAK,QAAQ,UAAU,IAAI,UAAU,EAErC,KAAK,oBAAoB,EAAK,EAE9B,QAAQ,IAAI,WAAW,CACxB,CAED,SAASA,EAAO,CACdA,EAAM,eAAc,EACpBA,EAAM,aAAa,WAAa,OAChC,MAAMC,EAAYD,EAAM,OAAO,QAAQ,IAAI,EAC3C,GAAIC,GAAaA,IAAc,KAAK,YAAa,CAC/C,MAAMC,EAAY,KAAK,YAAY,WAC7BC,EAAgB,CAAC,GAAGD,EAAU,QAAQ,EAAE,QAAQ,KAAK,WAAW,EAChEE,EAAc,CAAC,GAAGF,EAAU,QAAQ,EAAE,QAAQD,CAAS,EACzDE,EAAgBC,EAClBF,EAAU,aAAa,KAAK,YAAaD,EAAU,WAAW,EAE9DC,EAAU,aAAa,KAAK,YAAaD,CAAS,CAErD,CACD,QAAQ,IAAI,UAAU,CACvB,CAED,QAAQD,EAAO,CAEbA,EAAM,OAAO,UAAU,OAAO,UAAU,EACxC,KAAK,YAAc,KAGnB,KAAK,QAAQ,UAAU,OAAO,UAAU,EAExC,KAAK,oBAAoB,EAAI,EAC7B,KAAK,aAAY,EACjB,QAAQ,IAAI,SAAS,CACtB,CAGD,cAAe,CAEb,MAAMK,EADO,MAAM,KAAK,KAAK,QAAQ,iBAAiB,aAAa,CAAC,EAC9C,IAAKC,GAAQA,EAAI,QAAQ,EAAE,EAEjD,MAAM,KAAK,QAAQ,QAAQ,UAAW,CACpC,OAAQ,QACR,QAAS,CACP,eAAgB,mBAChB,eAAgB,SAAS,cAAc,yBAAyB,EAAE,aAAa,SAAS,CACzF,EACD,KAAM,KAAK,UAAU,CAAE,MAAOD,CAAQ,CAAE,CAC9C,CAAK,EACE,KAAME,GAAa,CAClB,GAAI,CAACA,EAAS,GACZ,MAAM,IAAI,MAAM,wBAAwB,CAElD,CAAO,EACA,KAAK,IAAM,CACV,QAAQ,IAAI,4BAA4B,CAChD,CAAO,EACA,MAAOC,GAAU,CAChB,QAAQ,MAAM,wBAAyBA,CAAK,CACpD,CAAO,CACJ,CAED,oBAAoBC,EAAS,CAC3B,MAAMC,EAAgB,KAAK,QAAQ,iBACjC,+CACN,EACI,QAAQ,IAAIA,CAAa,EACzBA,EAAc,QAASC,GAAW,CAChCA,EAAO,MAAM,WAAaF,EAAU,UAAY,QACtD,CAAK,CACF,CAED,cAAe,CACb,MAAMG,EAAQ,SAAS,cAAc,OAAO,EAC5CA,EAAM,YAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MA2BpB,SAAS,KAAK,YAAYA,CAAK,CAChC,CACH"}