Skip to content

Commit 052db3b

Browse files
committed
fix(ngx-layout): Fix a circular dependency issue in webpack builds
1 parent 20af9bd commit 052db3b

File tree

6 files changed

+44
-9
lines changed

6 files changed

+44
-9
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { Directive } from '@angular/core';
2+
import { NgxHasFocusDragAndDropAbstractDirective } from './has-focus.directive';
3+
4+
/**
5+
* An abstract class to avoid circular dependency with the ItemDirective and the HostDirective
6+
*/
7+
@Directive()
8+
export abstract class NgxAccessibleAbstractDragAndDropItemDirective extends NgxHasFocusDragAndDropAbstractDirective {
9+
/**
10+
* An unique id of the draggable item
11+
*/
12+
abstract itemId: string;
13+
14+
/**
15+
* Marks the item as focussed and selected
16+
*/
17+
abstract markAsActive(): void;
18+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export * from './drag-and-drop-item.directive';
2+
export * from './has-focus.directive';
3+
export * from './drag-and-drop.service';
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
export * from './display-content/display-content.component';
2-
export * from './drag-and-drop/drag-and-drop.service';
2+
export * from './drag-and-drop';

libs/layout/src/lib/directives/drag-and-drop/drag-and-drop-host.directive.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import { ContentChildren, Directive, ElementRef, Input, QueryList } from '@angular/core';
22

3-
import { NgxAccessibleDragAndDropAbstractService } from '../../abstracts';
4-
import { NgxAccessibleDragAndDropItemDirective } from './drag-and-drop-item.directive';
3+
import {
4+
NgxAccessibleAbstractDragAndDropItemDirective,
5+
NgxAccessibleDragAndDropAbstractService,
6+
} from '../../abstracts';
57
import { NgxAccessibleDragAndDropContainerDirective } from './drag-and-drop-container.directive';
68

79
/**
@@ -16,8 +18,7 @@ export class NgxAccessibleDragAndDropHostDirective {
1618
/**
1719
* A list of all the drag and drop items
1820
*/
19-
@ContentChildren(NgxAccessibleDragAndDropItemDirective, { descendants: true })
20-
public items: QueryList<NgxAccessibleDragAndDropItemDirective>;
21+
public items: Record<string, NgxAccessibleAbstractDragAndDropItemDirective> = {};
2122

2223
/**
2324
* A list of all the drag and drop containers
@@ -41,7 +42,7 @@ export class NgxAccessibleDragAndDropHostDirective {
4142
* @param id - The id of the drag and drop item
4243
*/
4344
public markAsActive(id: string): void {
44-
this.items?.find((item) => item.itemId === id)?.markAsActive();
45+
this.items[id].markAsActive();
4546
}
4647

4748
/**
@@ -59,4 +60,8 @@ export class NgxAccessibleDragAndDropHostDirective {
5960
.setDragAndDropDescription(this.elementRef.nativeElement, this.description)
6061
.subscribe();
6162
}
63+
64+
public registerDragAndDropItem(item: NgxAccessibleAbstractDragAndDropItemDirective): void {
65+
this.items[item.itemId] = item;
66+
}
6267
}

libs/layout/src/lib/directives/drag-and-drop/drag-and-drop-item.directive.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ import {
1111
} from '@angular/core';
1212
import { CdkDropList } from '@angular/cdk/drag-drop';
1313

14-
import { NgxAccessibleDragAndDropAbstractService } from '../../abstracts';
14+
import {
15+
NgxAccessibleAbstractDragAndDropItemDirective,
16+
NgxAccessibleDragAndDropAbstractService,
17+
} from '../../abstracts';
1518
import { NgxAccessibleDragAndDropMoveEvent, NgxAccessibleDragAndDropMoveType } from '../../types';
16-
import { NgxHasFocusDragAndDropAbstractDirective } from './has-focus.directive';
1719
import { NgxAccessibleDragAndDropContainerDirective } from './drag-and-drop-container.directive';
1820
import { NgxAccessibleDragAndDropHostDirective } from './drag-and-drop-host.directive';
1921

@@ -28,7 +30,7 @@ import { NgxAccessibleDragAndDropHostDirective } from './drag-and-drop-host.dire
2830
'[attr.tabIndex]': 'tabIndex()',
2931
},
3032
})
31-
export class NgxAccessibleDragAndDropItemDirective extends NgxHasFocusDragAndDropAbstractDirective {
33+
export class NgxAccessibleDragAndDropItemDirective extends NgxAccessibleAbstractDragAndDropItemDirective {
3234
/**
3335
* The tab index of the item
3436
*/
@@ -152,6 +154,13 @@ export class NgxAccessibleDragAndDropItemDirective extends NgxHasFocusDragAndDro
152154
.subscribe();
153155
}
154156

157+
/**
158+
* Registers the item with the drop host
159+
*/
160+
ngOnInit(): void {
161+
this.dropHost.registerDragAndDropItem(this);
162+
}
163+
155164
/**
156165
* Handles the pressing of a button in the drag and drop host
157166
*/

0 commit comments

Comments
 (0)