From f23a30a352ba939d71a934d6256c616604618ed5 Mon Sep 17 00:00:00 2001 From: mgiannopoulos24 <79588074+mgiannopoulos24@users.noreply.github.com> Date: Thu, 11 Dec 2025 19:50:11 +0200 Subject: [PATCH] Add drag-and-drop functionality to snippets table --- src/css/manage.scss | 12 ++++++++ src/js/manage.ts | 3 +- src/js/services/manage/index.ts | 1 + src/js/services/manage/ordering.ts | 36 +++++++++++++++++++++++ src/php/admin-menus/class-manage-menu.php | 4 +-- 5 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 src/js/services/manage/ordering.ts diff --git a/src/css/manage.scss b/src/css/manage.scss index f3a4a373..6a15e92b 100644 --- a/src/css/manage.scss +++ b/src/css/manage.scss @@ -213,3 +213,15 @@ td.column-description { } } } + +/* Drag and Drop Sorting */ + +.sortable-placeholder { + background-color: #f9f9f9; + border: 1px dashed #ccc; + block-size: 50px; +} + +.wp-list-table tbody tr { + cursor: move; +} \ No newline at end of file diff --git a/src/js/manage.ts b/src/js/manage.ts index 634cad9b..85460416 100644 --- a/src/js/manage.ts +++ b/src/js/manage.ts @@ -1,5 +1,6 @@ -import { handleShowCloudPreview, handleSnippetActivationSwitches, handleSnippetPriorityChanges } from './services/manage' +import { handleShowCloudPreview, handleSnippetActivationSwitches, handleSnippetOrdering, handleSnippetPriorityChanges } from './services/manage' handleSnippetActivationSwitches() handleSnippetPriorityChanges() handleShowCloudPreview() +handleSnippetOrdering() \ No newline at end of file diff --git a/src/js/services/manage/index.ts b/src/js/services/manage/index.ts index 62016a71..82026cc5 100644 --- a/src/js/services/manage/index.ts +++ b/src/js/services/manage/index.ts @@ -1,3 +1,4 @@ export { handleSnippetActivationSwitches } from './activation' export { handleSnippetPriorityChanges } from './priority' export { handleShowCloudPreview } from './cloud' +export { handleSnippetOrdering } from './ordering' \ No newline at end of file diff --git a/src/js/services/manage/ordering.ts b/src/js/services/manage/ordering.ts new file mode 100644 index 00000000..7078505e --- /dev/null +++ b/src/js/services/manage/ordering.ts @@ -0,0 +1,36 @@ +import $ from 'jquery' +import { updateSnippet } from './requests' +import type { Snippet } from '../../types/Snippet' + +export const handleSnippetOrdering = () => { + const table = $('.wp-list-table tbody') + + if (!table.length) { + return + } + + ( table).sortable({ + items: '> tr', + cursor: 'move', + axis: 'y', + containment: 'parent', + cancel: 'input, textarea, button, select, option, a', + placeholder: 'sortable-placeholder', + update: () => { + const rows = table.find('tr') + + rows.each(function (index) { + const row = $(this) + const priorityInput = row.find('.snippet-priority') + const currentPriority = parseInt( priorityInput.val(), 10) + const newPriority = index + 1 + + if (currentPriority !== newPriority) { + priorityInput.val(newPriority) + const snippet: Partial = { priority: newPriority } + updateSnippet('priority', row[0], snippet) + } + }) + } + }) +} \ No newline at end of file diff --git a/src/php/admin-menus/class-manage-menu.php b/src/php/admin-menus/class-manage-menu.php index d342dde9..d23d01d8 100644 --- a/src/php/admin-menus/class-manage-menu.php +++ b/src/php/admin-menus/class-manage-menu.php @@ -193,7 +193,7 @@ public function enqueue_assets() { wp_enqueue_script( 'code-snippets-manage-js', plugins_url( 'dist/manage.js', $plugin->file ), - [ 'wp-i18n' ], + [ 'jquery-ui-sortable', 'wp-i18n' ], $plugin->version, true ); @@ -334,4 +334,4 @@ public function ajax_callback() { wp_send_json_success(); } -} +} \ No newline at end of file