diff --git a/src/Umbraco.Web.UI.Client/src/packages/core/sorter/sorter.controller.ts b/src/Umbraco.Web.UI.Client/src/packages/core/sorter/sorter.controller.ts index 1a11a3108c..f10cc64948 100644 --- a/src/Umbraco.Web.UI.Client/src/packages/core/sorter/sorter.controller.ts +++ b/src/Umbraco.Web.UI.Client/src/packages/core/sorter/sorter.controller.ts @@ -109,6 +109,10 @@ export type UmbSorterConfig = */ export class UmbSorterController implements UmbController { // + // A sorter that is requested to become the next sorter: + static originalSorter?: UmbSorterController; + static originalIndex?: number; + // A sorter that is requested to become the next sorter: static dropSorter?: UmbSorterController; @@ -295,8 +299,9 @@ export class UmbSorterController; + UmbSorterController.originalIndex = this.#model.indexOf(UmbSorterController.activeItem); + if (!UmbSorterController.activeItem) { console.error('Could not find item related to this element.'); return; @@ -393,11 +402,25 @@ export class UmbSorterController { + #handleDragEnd = async (event?: DragEvent) => { + // If not good drop, revert model? + if (!UmbSorterController.activeElement || !UmbSorterController.activeItem) { return; } + if ( + UmbSorterController.originalSorter && + event?.dataTransfer != null && + event?.dataTransfer?.dropEffect === 'none' + ) { + // Revert move, to start position. + UmbSorterController.originalSorter.moveItemInModel( + UmbSorterController.originalIndex ?? 0, + UmbSorterController.activeSorter!, + ); + } + UmbSorterController.activeElement.style.transform = ''; this.#removePlaceholderStyle(); @@ -421,6 +444,8 @@ export class UmbSorterController