Skip to content

Commit

Permalink
fix: use row loading state for drag/drop disabled state
Browse files Browse the repository at this point in the history
  • Loading branch information
tomivirkki committed Nov 1, 2021
1 parent a4a2e75 commit b247d04
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 4 deletions.
5 changes: 3 additions & 2 deletions packages/grid/src/vaadin-grid-drag-and-drop-mixin.js
Original file line number Diff line number Diff line change
Expand Up @@ -374,8 +374,9 @@ export const DragAndDropMixin = (superClass) =>
* @protected
*/
_filterDragAndDrop(row, model) {
const dragDisabled = !this.rowsDraggable || this.loading || (this.dragFilter && !this.dragFilter(model));
const dropDisabled = !this.dropMode || this.loading || (this.dropFilter && !this.dropFilter(model));
const loading = this.loading || row.hasAttribute('loading');
const dragDisabled = !this.rowsDraggable || loading || (this.dragFilter && !this.dragFilter(model));
const dropDisabled = !this.dropMode || loading || (this.dropFilter && !this.dropFilter(model));

const draggableElements = Array.from(row.children).map((cell) => cell._content);

Expand Down
34 changes: 32 additions & 2 deletions packages/grid/test/drag-and-drop.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -700,7 +700,7 @@ describe('drag and drop', () => {

beforeEach(() => {
grid.dataProvider = (_params, callback) => {
finishLoadingItems = () => callback(getTestItems());
finishLoadingItems = (items) => callback(items || getTestItems());
};
});

Expand All @@ -719,6 +719,19 @@ describe('drag and drop', () => {
grid.dragFilter = sinon.spy();
expect(grid.dragFilter.called).to.be.false;
});

it('should disable row drag for rows without an item', () => {
finishLoadingItems([getTestItems()[0], undefined]);
expect(getDraggable(grid, 1)).not.to.be.ok;
expect(grid.$.items.children[1].hasAttribute('drag-disabled')).to.be.true;
});

it('should enable row drag once items are available', () => {
finishLoadingItems([getTestItems()[0], undefined]);
finishLoadingItems();
expect(getDraggable(grid, 1)).to.be.ok;
expect(grid.$.items.children[1].hasAttribute('drag-disabled')).to.be.false;
});
});
});

Expand Down Expand Up @@ -782,7 +795,7 @@ describe('drag and drop', () => {

beforeEach(() => {
grid.dataProvider = (_params, callback) => {
finishLoadingItems = () => callback(getTestItems());
finishLoadingItems = (items) => callback(items || getTestItems());
};
});

Expand All @@ -805,6 +818,23 @@ describe('drag and drop', () => {
grid.dropFilter = sinon.spy();
expect(grid.dropFilter.called).to.be.false;
});

it('should disable drop on row for rows without an item', () => {
finishLoadingItems([getTestItems()[0], undefined]);
const row = grid.$.items.children[1];
fireDragOver(row, 'above');
expect(row.hasAttribute('dragover')).to.be.false;
expect(row.hasAttribute('drop-disabled')).to.be.true;
});

it('should enable drop on row once items are available', () => {
finishLoadingItems([getTestItems()[0], undefined]);
finishLoadingItems();
const row = grid.$.items.children[1];
fireDragOver(row, 'above');
expect(row.hasAttribute('dragover')).to.be.true;
expect(row.hasAttribute('drop-disabled')).to.be.false;
});
});
});

Expand Down

0 comments on commit b247d04

Please sign in to comment.