Skip to content

Commit

Permalink
fix(platform): table drag and drop bugs (#9351)
Browse files Browse the repository at this point in the history
* fix(platform): table dnd bugs

* fix: unit tests

* fix: test, unreachable logic, redundant var

---------

Co-authored-by: Inna Atanasova <39598672+InnaAtanasova@users.noreply.github.com>
  • Loading branch information
mikerodonnell89 and InnaAtanasova authored Feb 15, 2023
1 parent b9dd46e commit 5a77b7b
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 45 deletions.
54 changes: 26 additions & 28 deletions libs/cdk/src/lib/utils/drag-and-drop/dnd-list/dnd-list.directive.ts
Original file line number Diff line number Diff line change
Expand Up @@ -143,40 +143,38 @@ export class DndListDirective<T> implements AfterContentInit, OnDestroy {
const replacedItemIndex = this._closestItemIndex;
const draggedItem = items[draggedItemIndex];

if (!replacedItemIndex) {
return;
}

if (draggedItemIndex !== replacedItemIndex) {
if (draggedItemIndex < replacedItemIndex) {
for (let i = draggedItemIndex; i < replacedItemIndex; i++) {
items[i] = items[i + 1];
}
} else {
for (let i = draggedItemIndex; i > replacedItemIndex; i--) {
items[i] = items[i - 1];
if (replacedItemIndex || replacedItemIndex === 0) {
if (draggedItemIndex !== replacedItemIndex) {
if (draggedItemIndex < replacedItemIndex) {
for (let i = draggedItemIndex; i < replacedItemIndex; i++) {
items[i] = items[i + 1];
}
} else {
for (let i = draggedItemIndex; i > replacedItemIndex; i--) {
items[i] = items[i - 1];
}
}
}

/** Replacing items */
items[replacedItemIndex] = draggedItem;
/** Replacing items */
items[replacedItemIndex] = draggedItem;

this.itemsChange.emit(items);
}
this.itemsChange.emit(items);
}

this.itemDropped.emit({
replacedItemIndex,
draggedItemIndex,
items
});
this.itemDropped.emit({
replacedItemIndex,
draggedItemIndex,
items
});

this._removeAllLines();
this._removeAllReplaceIndicators();
this._removeAllLines();
this._removeAllReplaceIndicators();

/** Reset */
this._elementsCoordinates = [];
this._closestItemIndex = null;
this._closestItemPosition = null;
/** Reset */
this._elementsCoordinates = [];
this._closestItemIndex = null;
this._closestItemPosition = null;
}
}

/** @hidden */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ const ITEMS: ExampleItem[] = [
children: []
},
{
name: 'Other1',
name: 'Other 4',
children: [
{
name: 'Camcorder View',
Expand All @@ -300,10 +300,10 @@ const ITEMS: ExampleItem[] = [
verified: true
},
{
name: 'Other 2',
name: 'Other 5',
children: [
{
name: 'Other 1',
name: 'Other 6',
children: [
{
name: 'Beam Breaker B-1',
Expand Down
6 changes: 3 additions & 3 deletions libs/platform/src/lib/table/table.component.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1215,8 +1215,8 @@ class TreeTableDataProviderMock extends TableDataProvider<SourceTreeItem> {
calculateTableElementsMetaData();

expect(tableComponent._tableRows[0].expanded).toBeTrue();
expect(tableComponent._tableRows[2].level).toEqual(0);
expect(tableComponent._tableRows[3].level).toEqual(1);
expect(tableComponent._tableRows[2].level).toEqual(1);
expect(tableComponent._tableRows[3].level).toEqual(2);
});

it('should prevent from dropping row inside itself', () => {
Expand Down Expand Up @@ -1332,7 +1332,7 @@ class TreeTableDataProviderMock extends TableDataProvider<SourceTreeItem> {

fixture.detectChanges();

expect(draggedRow).toEqual(tableComponent._tableRowsVisible[5]);
expect(draggedRow.parent).toEqual(tableComponent._tableRowsVisible[5]);
});
});
});
Expand Down
15 changes: 4 additions & 11 deletions libs/platform/src/lib/table/table.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1602,8 +1602,8 @@ export class TableComponent<T = any> extends Table<T> implements AfterViewInit,

/** @hidden */
private _dragDropUpdateDropRowAttributes(dragRow: TableRow, dropRow: TableRow): void {
dragRow.parent = dropRow.parent;
dragRow.level = dropRow.level;
dragRow.parent = dropRow;
dragRow.level = dropRow.level + 1;

if (!this._isTreeRow(dropRow)) {
dropRow.type = TableRowType.TREE;
Expand All @@ -1618,8 +1618,6 @@ export class TableComponent<T = any> extends Table<T> implements AfterViewInit,
/** @hidden */
private _dragDropRearrangeTreeRows(dragRow: TableRow, dropRow: TableRow): void {
const allRows = this._tableRows;
let rowsBefore: any;
let rowsAfter: any;

const dragRowIndex = allRows.findIndex((row) => row === dragRow);
const dragRowChildren = this._findRowChildren(dragRow);
Expand All @@ -1629,13 +1627,8 @@ export class TableComponent<T = any> extends Table<T> implements AfterViewInit,
const dropRowIndex = allRows.findIndex((row) => row === dropRow);
const dropRowChildren = this._findRowChildren(dropRow);

if (dragRowIndex > dropRowIndex) {
rowsBefore = allRows.slice(0, dropRowChildren.length + 1 - dropRowIndex);
rowsAfter = allRows.slice(dropRowChildren.length + 1 - dropRowIndex);
} else {
rowsBefore = allRows.slice(0, dropRowIndex + dropRowChildren.length + 1);
rowsAfter = allRows.slice(dropRowIndex + dropRowChildren.length + 1);
}
const rowsBefore = allRows.slice(0, dropRowIndex + dropRowChildren.length + 1);
const rowsAfter = allRows.slice(dropRowIndex + dropRowChildren.length + 1);

this._tableRows = [...rowsBefore, ...rowsToMove, ...rowsAfter];
}
Expand Down

0 comments on commit 5a77b7b

Please sign in to comment.