devextreme
Version:
JavaScript/TypeScript Component Suite for Responsive Web Development
73 lines (72 loc) • 2.24 kB
JavaScript
/**
* DevExtreme (esm/__internal/ui/list/list.edit.decorator.swipe.js)
* Version: 25.2.7
* Build date: Tue May 05 2026
*
* Copyright (c) 2012 - 2026 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import {
fx
} from "../../../common/core/animation";
import {
move
} from "../../../common/core/animation/translator";
import {
Deferred
} from "../../../core/utils/deferred";
import {
getWidth
} from "../../../core/utils/size";
import EditDecorator from "../../ui/list/list.edit.decorator";
import {
register as registerDecorator
} from "../../ui/list/list.edit.decorator_registry";
class EditDecoratorSwipe extends EditDecorator {
_shouldHandleSwipe() {
return true
}
_renderItemPosition($itemElement, offset, animate) {
const deferred = Deferred();
const itemOffset = offset * this._itemElementWidth;
if (animate) {
fx.animate($itemElement.get(0), {
to: {
left: itemOffset
},
type: "slide",
complete() {
deferred.resolve($itemElement, offset)
}
})
} else {
move($itemElement, {
left: itemOffset
});
deferred.resolve()
}
return deferred.promise()
}
_swipeStartHandler($itemElement) {
this._itemElementWidth = getWidth($itemElement)
}
_swipeUpdateHandler($itemElement, e) {
const {
offset: offset
} = e;
this._renderItemPosition($itemElement, offset)
}
_swipeEndHandler($itemElement, e) {
const {
targetOffset: targetOffset
} = e;
this._renderItemPosition($itemElement, targetOffset, true).done(($element, offset) => {
if (Math.abs(offset)) {
this._list.deleteItem($element.get(0)).fail(() => {
this._renderItemPosition($element, 0, true)
})
}
})
}
}
registerDecorator("delete", "swipe", EditDecoratorSwipe);