@igo2/common 20.1.0-next.15 → 20.1.0-next.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/badge/index.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ declare class IgoBadgeIconDirective implements OnInit {
|
|
|
20
20
|
private inheritColor;
|
|
21
21
|
set igoMatBadgeColor(value: string);
|
|
22
22
|
private color;
|
|
23
|
-
set igoMatBadgeBackgroundColor(value: string);
|
|
23
|
+
set igoMatBadgeBackgroundColor(value: string | null);
|
|
24
24
|
private backgroundColor;
|
|
25
25
|
get badge(): any;
|
|
26
26
|
private originalColor;
|
package/drag-drop/index.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { OnDestroy, ModuleWithProviders } from '@angular/core';
|
|
3
|
-
import {
|
|
4
|
-
import { FlatTreeControl } from '@angular/cdk/tree';
|
|
3
|
+
import { CdkTree } from '@angular/cdk/tree';
|
|
5
4
|
import { MatTreeNode } from '@angular/material/tree';
|
|
6
5
|
|
|
7
6
|
declare class DragAndDropDirective {
|
|
@@ -17,13 +16,10 @@ declare class DragAndDropDirective {
|
|
|
17
16
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DragAndDropDirective, "[igoDragAndDrop]", never, { "allowedExtensions": { "alias": "allowedExtensions"; "required": false; "isSignal": true; }; }, { "filesDropped": "filesDropped"; "filesInvalid": "filesInvalid"; }, never, never, true, never>;
|
|
18
17
|
}
|
|
19
18
|
|
|
20
|
-
interface
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
level: number;
|
|
25
|
-
descendantLevels?: number;
|
|
26
|
-
data: T;
|
|
19
|
+
interface TreeDropEvent<T> {
|
|
20
|
+
node: T;
|
|
21
|
+
ref: T;
|
|
22
|
+
position: DropPositionType;
|
|
27
23
|
}
|
|
28
24
|
interface DropPosition {
|
|
29
25
|
x: number;
|
|
@@ -32,20 +28,19 @@ interface DropPosition {
|
|
|
32
28
|
type: DropPositionType;
|
|
33
29
|
}
|
|
34
30
|
type DropPositionType = 'above' | 'below' | 'inside';
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
position: DropPositionType;
|
|
31
|
+
interface DropPermission {
|
|
32
|
+
canDrop: boolean;
|
|
33
|
+
message?: string;
|
|
34
|
+
params?: Record<string, unknown>;
|
|
40
35
|
}
|
|
36
|
+
|
|
41
37
|
interface DragNodeListeners {
|
|
42
38
|
element: HTMLElement;
|
|
43
39
|
listeners: [string, EventListenerOrEventListenerObject][];
|
|
44
40
|
}
|
|
45
|
-
interface
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
params?: Record<string, unknown>;
|
|
41
|
+
interface ITreeConfig<T> {
|
|
42
|
+
isGroup: (node: T) => boolean;
|
|
43
|
+
descendantLevels: (node: T) => number | undefined;
|
|
49
44
|
}
|
|
50
45
|
/**
|
|
51
46
|
* This directive should be use with a MatTree flatened
|
|
@@ -54,32 +49,43 @@ interface DropPermission {
|
|
|
54
49
|
* Tree: --dragging
|
|
55
50
|
* Node: --drag-hover | --dragged
|
|
56
51
|
*/
|
|
57
|
-
declare class TreeDragDropDirective
|
|
52
|
+
declare class TreeDragDropDirective<T extends {
|
|
53
|
+
id: string | number;
|
|
54
|
+
} = {
|
|
55
|
+
id: string | number;
|
|
56
|
+
}, K = T> implements OnDestroy {
|
|
58
57
|
private elementRef;
|
|
59
58
|
private renderer;
|
|
60
|
-
draggedNode:
|
|
61
|
-
dropNodeTarget:
|
|
59
|
+
draggedNode: T;
|
|
60
|
+
dropNodeTarget: _angular_core.WritableSignal<T>;
|
|
62
61
|
expandTimeout: number;
|
|
63
62
|
nodesListeners: DragNodeListeners[] | undefined;
|
|
64
63
|
private nodesEffect;
|
|
65
|
-
dropLineTarget: HTMLElement
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
dropLineTarget: _angular_core.WritableSignal<HTMLElement>;
|
|
65
|
+
previousDropLine: _angular_core.WritableSignal<HTMLElement>;
|
|
66
|
+
dropPosition: _angular_core.WritableSignal<DropPosition>;
|
|
67
|
+
highlightedNode: T | undefined;
|
|
68
|
+
readonly tree: _angular_core.InputSignal<CdkTree<T, K>>;
|
|
69
|
+
readonly childrenAccessor: _angular_core.InputSignal<(node: T) => T[]>;
|
|
70
|
+
readonly config: _angular_core.InputSignal<ITreeConfig<T>>;
|
|
68
71
|
/** The default is 5 */
|
|
69
72
|
readonly maxLevel: _angular_core.InputSignal<number>;
|
|
70
73
|
readonly treeDragDropIsDisabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
71
|
-
readonly dragStart: _angular_core.OutputEmitterRef<
|
|
72
|
-
readonly
|
|
73
|
-
readonly
|
|
74
|
+
readonly dragStart: _angular_core.OutputEmitterRef<T>;
|
|
75
|
+
readonly dropped: _angular_core.OutputEmitterRef<TreeDropEvent<T>>;
|
|
76
|
+
readonly droppedError: _angular_core.OutputEmitterRef<DropPermission>;
|
|
74
77
|
hostDragOver(event: Event): void;
|
|
78
|
+
hostDragLeave(event: DragEvent): void;
|
|
75
79
|
hostDrop(event: DragEvent): void;
|
|
76
|
-
dragging: boolean
|
|
80
|
+
dragging: _angular_core.WritableSignal<boolean>;
|
|
77
81
|
readonly nodes: _angular_core.Signal<readonly MatTreeNode<any, any>[]>;
|
|
78
82
|
constructor();
|
|
83
|
+
get isGroup(): (node: T) => boolean;
|
|
84
|
+
get getDescendantLevels(): (node: T) => number | undefined;
|
|
79
85
|
ngOnDestroy(): void;
|
|
80
|
-
onDragStart(node:
|
|
86
|
+
onDragStart(node: T): void;
|
|
81
87
|
dragEnd(): void;
|
|
82
|
-
dragOver(node:
|
|
88
|
+
dragOver(node: T, event: DragEvent): void;
|
|
83
89
|
dragLeave(): void;
|
|
84
90
|
drop(event: DragEvent): void;
|
|
85
91
|
private addNodeClass;
|
|
@@ -90,12 +96,15 @@ declare class TreeDragDropDirective implements OnDestroy {
|
|
|
90
96
|
private setHighlightedNode;
|
|
91
97
|
private addDropTargetLine;
|
|
92
98
|
private removeDropTargetLine;
|
|
99
|
+
private hideDropTargetLine;
|
|
100
|
+
private showDropTargetLine;
|
|
93
101
|
private updateDropTargetLinePosition;
|
|
94
102
|
private handleGroupExpansion;
|
|
95
103
|
private getNodeElement;
|
|
96
104
|
private canDropNode;
|
|
97
105
|
private canDropGroup;
|
|
98
106
|
private validateMaxHierarchyLevel;
|
|
107
|
+
private getDescendants;
|
|
99
108
|
private isHoverDescendant;
|
|
100
109
|
private getPosition;
|
|
101
110
|
private getPositionY;
|
|
@@ -105,9 +114,13 @@ declare class TreeDragDropDirective implements OnDestroy {
|
|
|
105
114
|
* @param level if level is defined with go to the defined levle to find ancestor. Sinon on prend le current ancestor
|
|
106
115
|
*/
|
|
107
116
|
private getNodeAncestors;
|
|
117
|
+
private getAncestorsPath;
|
|
118
|
+
private findPath;
|
|
119
|
+
private getNodeLevel;
|
|
108
120
|
private getDirectDescendants;
|
|
109
|
-
|
|
110
|
-
static
|
|
121
|
+
private findTreeNode;
|
|
122
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TreeDragDropDirective<any, any>, never>;
|
|
123
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TreeDragDropDirective<any, any>, "[igoTreeDragDrop]", never, { "tree": { "alias": "tree"; "required": true; "isSignal": true; }; "childrenAccessor": { "alias": "childrenAccessor"; "required": true; "isSignal": true; }; "config": { "alias": "config"; "required": true; "isSignal": true; }; "maxLevel": { "alias": "maxLevel"; "required": false; "isSignal": true; }; "treeDragDropIsDisabled": { "alias": "treeDragDropIsDisabled"; "required": false; "isSignal": true; }; }, { "dragStart": "dragStart"; "dropped": "dropped"; "droppedError": "droppedError"; }, ["nodes"], never, true, never>;
|
|
111
124
|
}
|
|
112
125
|
|
|
113
126
|
/**
|
|
@@ -121,4 +134,4 @@ declare class IgoDrapDropModule {
|
|
|
121
134
|
}
|
|
122
135
|
|
|
123
136
|
export { DragAndDropDirective, IgoDrapDropModule, TreeDragDropDirective };
|
|
124
|
-
export type { DropPermission, DropPosition, DropPositionType,
|
|
137
|
+
export type { DropPermission, DropPosition, DropPositionType, ITreeConfig, TreeDropEvent };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"igo2-common-badge.mjs","sources":["../../../packages/common/badge/src/badge-icon.directive.ts","../../../packages/common/badge/src/badge-icon.module.ts","../../../packages/common/badge/src/igo2-common-badge.ts"],"sourcesContent":["import { Directive, ElementRef, Input, OnInit, inject } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\n\n/**\n * This directive allow to add an icon inside a matBadge.\n * A value must be set into the matBadge directive ex: matBadge=\"icon\".\n * The badge content will be overrided by this current directive.\n */\n@Directive({\n selector: '[igoMatBadgeIcon]',\n standalone: true,\n providers: [MatIconModule]\n})\nexport class IgoBadgeIconDirective implements OnInit {\n private el = inject(ElementRef);\n\n @Input()\n set igoMatBadgeIcon(value: string) {\n this.html = `\n <mat-icon class=\"mat-icon material-symbols-outlined\" style=\"height: 16px; width: 16px; font-size: 16px;\">${value}</mat-icon>\n `;\n this.updateHtml();\n }\n private html: string;\n\n @Input()\n set matBadgeHidden(value: boolean) {\n this.hidden = value;\n this.updateHidden();\n }\n private hidden = false;\n\n @Input()\n set matBadgeDisabled(value: boolean) {\n this.disabled = value;\n this.updateDisabled();\n }\n private disabled = false;\n\n @Input()\n set igoMatBadgeInverseColor(value: boolean) {\n this.inverseColor = value;\n this.updateColor();\n }\n private inverseColor = false;\n\n @Input()\n set igoMatBadgeInheritColor(value: boolean) {\n this.inheritColor = value;\n this.updateColor();\n }\n private inheritColor = false;\n\n @Input()\n set igoMatBadgeColor(value: string) {\n this.color = value;\n this.updateColor();\n }\n private color;\n\n @Input()\n set igoMatBadgeBackgroundColor(value: string) {\n this.backgroundColor = value;\n this.updateColor();\n }\n private backgroundColor;\n\n get badge() {\n return this.el.nativeElement.querySelector('.mat-badge-content');\n }\n\n private originalColor: string;\n\n ngOnInit() {\n this.badge.style.alignItems = 'center';\n this.badge.style.justifyContent = 'center';\n\n this.updateHidden();\n this.updateColor();\n this.updateHtml();\n }\n\n private updateHtml() {\n if (!this.badge) {\n return;\n }\n this.badge.innerHTML = '';\n if (this.html) {\n this.badge.innerHTML = this.html;\n }\n }\n private updateColor() {\n if (!this.badge) {\n return;\n }\n\n if (this.color || this.backgroundColor) {\n this.badge.style.color = this.color ? this.color : '';\n this.badge.style.background = this.backgroundColor\n ? this.backgroundColor\n : '';\n } else if (this.inheritColor) {\n if (this.inverseColor) {\n this.badge.style.color = 'currentColor';\n this.badge.style.background = 'none';\n } else {\n this.badge.style.color = '';\n this.badge.style.background = 'currentColor';\n }\n } else if (!this.inheritColor) {\n if (this.inverseColor) {\n this.badge.style.color = window\n .getComputedStyle(this.badge, null)\n .getPropertyValue('background-color');\n this.badge.style.background = 'none';\n } else {\n this.badge.style.color = '';\n this.badge.style.background = '';\n }\n }\n this.originalColor = this.badge.style.color;\n this.updateDisabled();\n }\n\n private updateHidden() {\n if (!this.badge) {\n return;\n }\n this.badge.style.display = this.hidden ? 'none' : 'flex';\n }\n\n private updateDisabled() {\n if (!this.badge || !this.inverseColor) {\n return;\n }\n if (this.disabled) {\n this.originalColor = this.badge.style.color;\n this.badge.style.color = '#b9b9b9';\n } else {\n this.badge.style.color = this.originalColor;\n }\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { IgoBadgeIconDirective } from './badge-icon.directive';\n\n/**\n * @deprecated import the IgoBadgeIconDirective directly\n */\n@NgModule({\n imports: [IgoBadgeIconDirective],\n exports: [IgoBadgeIconDirective]\n})\nexport class IgoMatBadgeIconModule {\n static forRoot(): ModuleWithProviders<IgoMatBadgeIconModule> {\n return {\n ngModule: IgoMatBadgeIconModule,\n providers: []\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;AAGA;;;;AAIG;MAMU,qBAAqB,CAAA;AACxB,IAAA,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC;IAE/B,IACI,eAAe,CAAC,KAAa,EAAA;QAC/B,IAAI,CAAC,IAAI,GAAG;iHACiG,KAAK,CAAA;KACjH;QACD,IAAI,CAAC,UAAU,EAAE;IACnB;AACQ,IAAA,IAAI;IAEZ,IACI,cAAc,CAAC,KAAc,EAAA;AAC/B,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QACnB,IAAI,CAAC,YAAY,EAAE;IACrB;IACQ,MAAM,GAAG,KAAK;IAEtB,IACI,gBAAgB,CAAC,KAAc,EAAA;AACjC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;QACrB,IAAI,CAAC,cAAc,EAAE;IACvB;IACQ,QAAQ,GAAG,KAAK;IAExB,IACI,uBAAuB,CAAC,KAAc,EAAA;AACxC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QACzB,IAAI,CAAC,WAAW,EAAE;IACpB;IACQ,YAAY,GAAG,KAAK;IAE5B,IACI,uBAAuB,CAAC,KAAc,EAAA;AACxC,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK;QACzB,IAAI,CAAC,WAAW,EAAE;IACpB;IACQ,YAAY,GAAG,KAAK;IAE5B,IACI,gBAAgB,CAAC,KAAa,EAAA;AAChC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;QAClB,IAAI,CAAC,WAAW,EAAE;IACpB;AACQ,IAAA,KAAK;IAEb,IACI,0BAA0B,CAAC,
|
|
1
|
+
{"version":3,"file":"igo2-common-badge.mjs","sources":["../../../packages/common/badge/src/badge-icon.directive.ts","../../../packages/common/badge/src/badge-icon.module.ts","../../../packages/common/badge/src/igo2-common-badge.ts"],"sourcesContent":["import { Directive, ElementRef, Input, OnInit, inject } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\n\n/**\n * This directive allow to add an icon inside a matBadge.\n * A value must be set into the matBadge directive ex: matBadge=\"icon\".\n * The badge content will be overrided by this current directive.\n */\n@Directive({\n selector: '[igoMatBadgeIcon]',\n standalone: true,\n providers: [MatIconModule]\n})\nexport class IgoBadgeIconDirective implements OnInit {\n private el = inject(ElementRef);\n\n @Input()\n set igoMatBadgeIcon(value: string) {\n this.html = `\n <mat-icon class=\"mat-icon material-symbols-outlined\" style=\"height: 16px; width: 16px; font-size: 16px;\">${value}</mat-icon>\n `;\n this.updateHtml();\n }\n private html: string;\n\n @Input()\n set matBadgeHidden(value: boolean) {\n this.hidden = value;\n this.updateHidden();\n }\n private hidden = false;\n\n @Input()\n set matBadgeDisabled(value: boolean) {\n this.disabled = value;\n this.updateDisabled();\n }\n private disabled = false;\n\n @Input()\n set igoMatBadgeInverseColor(value: boolean) {\n this.inverseColor = value;\n this.updateColor();\n }\n private inverseColor = false;\n\n @Input()\n set igoMatBadgeInheritColor(value: boolean) {\n this.inheritColor = value;\n this.updateColor();\n }\n private inheritColor = false;\n\n @Input()\n set igoMatBadgeColor(value: string) {\n this.color = value;\n this.updateColor();\n }\n private color;\n\n @Input()\n set igoMatBadgeBackgroundColor(value: string | null) {\n this.backgroundColor = value;\n this.updateColor();\n }\n private backgroundColor;\n\n get badge() {\n return this.el.nativeElement.querySelector('.mat-badge-content');\n }\n\n private originalColor: string;\n\n ngOnInit() {\n this.badge.style.alignItems = 'center';\n this.badge.style.justifyContent = 'center';\n\n this.updateHidden();\n this.updateColor();\n this.updateHtml();\n }\n\n private updateHtml() {\n if (!this.badge) {\n return;\n }\n this.badge.innerHTML = '';\n if (this.html) {\n this.badge.innerHTML = this.html;\n }\n }\n private updateColor() {\n if (!this.badge) {\n return;\n }\n\n if (this.color || this.backgroundColor) {\n this.badge.style.color = this.color ? this.color : '';\n this.badge.style.background = this.backgroundColor\n ? this.backgroundColor\n : '';\n } else if (this.inheritColor) {\n if (this.inverseColor) {\n this.badge.style.color = 'currentColor';\n this.badge.style.background = 'none';\n } else {\n this.badge.style.color = '';\n this.badge.style.background = 'currentColor';\n }\n } else if (!this.inheritColor) {\n if (this.inverseColor) {\n this.badge.style.color = window\n .getComputedStyle(this.badge, null)\n .getPropertyValue('background-color');\n this.badge.style.background = 'none';\n } else {\n this.badge.style.color = '';\n this.badge.style.background = '';\n }\n }\n this.originalColor = this.badge.style.color;\n this.updateDisabled();\n }\n\n private updateHidden() {\n if (!this.badge) {\n return;\n }\n this.badge.style.display = this.hidden ? 'none' : 'flex';\n }\n\n private updateDisabled() {\n if (!this.badge || !this.inverseColor) {\n return;\n }\n if (this.disabled) {\n this.originalColor = this.badge.style.color;\n this.badge.style.color = '#b9b9b9';\n } else {\n this.badge.style.color = this.originalColor;\n }\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { IgoBadgeIconDirective } from './badge-icon.directive';\n\n/**\n * @deprecated import the IgoBadgeIconDirective directly\n */\n@NgModule({\n imports: [IgoBadgeIconDirective],\n exports: [IgoBadgeIconDirective]\n})\nexport class IgoMatBadgeIconModule {\n static forRoot(): ModuleWithProviders<IgoMatBadgeIconModule> {\n return {\n ngModule: IgoMatBadgeIconModule,\n providers: []\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, output, HostListener, HostBinding, Directive, inject, ElementRef, Renderer2, effect, booleanAttribute, contentChildren, NgModule } from '@angular/core';
|
|
3
|
-
import { SelectionModel } from '@angular/cdk/collections';
|
|
2
|
+
import { input, output, HostListener, HostBinding, Directive, inject, ElementRef, Renderer2, signal, effect, booleanAttribute, contentChildren, untracked, NgModule } from '@angular/core';
|
|
4
3
|
import { MatTreeNode } from '@angular/material/tree';
|
|
5
4
|
|
|
6
5
|
class DragAndDropDirective {
|
|
@@ -89,65 +88,107 @@ class TreeDragDropDirective {
|
|
|
89
88
|
elementRef = inject(ElementRef);
|
|
90
89
|
renderer = inject(Renderer2);
|
|
91
90
|
draggedNode;
|
|
92
|
-
dropNodeTarget;
|
|
91
|
+
dropNodeTarget = signal(null, ...(ngDevMode ? [{ debugName: "dropNodeTarget" }] : []));
|
|
93
92
|
expandTimeout;
|
|
94
93
|
nodesListeners;
|
|
95
94
|
nodesEffect = effect(() => {
|
|
96
95
|
this.nodes();
|
|
97
96
|
this.addAllListener();
|
|
98
97
|
}, ...(ngDevMode ? [{ debugName: "nodesEffect" }] : []));
|
|
99
|
-
dropLineTarget;
|
|
100
|
-
|
|
101
|
-
|
|
98
|
+
dropLineTarget = signal(null, ...(ngDevMode ? [{ debugName: "dropLineTarget" }] : []));
|
|
99
|
+
previousDropLine = signal(null, ...(ngDevMode ? [{ debugName: "previousDropLine" }] : []));
|
|
100
|
+
dropPosition = signal(null, ...(ngDevMode ? [{ debugName: "dropPosition" }] : []));
|
|
101
|
+
// Use a Set or just manage classes manually since SelectionModel was providing simple toggle
|
|
102
|
+
// But we can stick to simple class logic
|
|
103
|
+
highlightedNode;
|
|
104
|
+
tree = input.required(...(ngDevMode ? [{ debugName: "tree" }] : []));
|
|
105
|
+
childrenAccessor = input.required(...(ngDevMode ? [{ debugName: "childrenAccessor" }] : []));
|
|
106
|
+
config = input.required(...(ngDevMode ? [{ debugName: "config" }] : []));
|
|
102
107
|
/** The default is 5 */
|
|
103
108
|
maxLevel = input(5, ...(ngDevMode ? [{ debugName: "maxLevel" }] : []));
|
|
104
109
|
treeDragDropIsDisabled = input(false, ...(ngDevMode ? [{ debugName: "treeDragDropIsDisabled", transform: booleanAttribute }] : [{
|
|
105
110
|
transform: booleanAttribute
|
|
106
111
|
}]));
|
|
107
112
|
dragStart = output();
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
// eslint-disable-next-line @angular-eslint/no-output-on-prefix
|
|
111
|
-
onDropError = output();
|
|
113
|
+
dropped = output();
|
|
114
|
+
droppedError = output();
|
|
112
115
|
hostDragOver(event) {
|
|
113
116
|
event.preventDefault();
|
|
114
117
|
}
|
|
118
|
+
hostDragLeave(event) {
|
|
119
|
+
const rect = this.elementRef.nativeElement.getBoundingClientRect();
|
|
120
|
+
if (event.clientY < rect.top ||
|
|
121
|
+
event.clientY >= rect.bottom ||
|
|
122
|
+
event.clientX < rect.left ||
|
|
123
|
+
event.clientX >= rect.right) {
|
|
124
|
+
this.dragLeave();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
115
127
|
hostDrop(event) {
|
|
116
128
|
this.drop(event);
|
|
117
129
|
}
|
|
118
|
-
dragging;
|
|
130
|
+
dragging = signal(false, ...(ngDevMode ? [{ debugName: "dragging" }] : []));
|
|
119
131
|
nodes = contentChildren(MatTreeNode, ...(ngDevMode ? [{ debugName: "nodes", descendants: true }] : [{ descendants: true }]));
|
|
120
132
|
constructor() {
|
|
121
|
-
this.
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
133
|
+
this.dropped.subscribe(() => this.dragEnd());
|
|
134
|
+
effect(() => {
|
|
135
|
+
const disabled = this.treeDragDropIsDisabled();
|
|
136
|
+
disabled ? this.removeAllListener() : this.addAllListener();
|
|
137
|
+
});
|
|
138
|
+
effect(() => {
|
|
139
|
+
const current = this.dropLineTarget();
|
|
140
|
+
const parent = this.elementRef.nativeElement.parentElement;
|
|
141
|
+
if (!current) {
|
|
142
|
+
untracked(() => {
|
|
143
|
+
const previous = this.previousDropLine();
|
|
144
|
+
if (previous !== null) {
|
|
145
|
+
this.renderer.removeChild(parent, previous);
|
|
146
|
+
this.previousDropLine.set(null);
|
|
147
|
+
}
|
|
148
|
+
});
|
|
125
149
|
}
|
|
126
|
-
|
|
127
|
-
this.
|
|
150
|
+
else {
|
|
151
|
+
this.renderer.appendChild(parent, current);
|
|
128
152
|
}
|
|
129
153
|
});
|
|
130
154
|
effect(() => {
|
|
131
|
-
const
|
|
132
|
-
|
|
155
|
+
const targetNode = this.dropNodeTarget();
|
|
156
|
+
const position = this.dropPosition();
|
|
157
|
+
const dropLineTarget = this.dropLineTarget();
|
|
158
|
+
if (targetNode) {
|
|
159
|
+
this.setHighlightedNode(targetNode);
|
|
160
|
+
if (position) {
|
|
161
|
+
if (dropLineTarget) {
|
|
162
|
+
this.updateDropTargetLinePosition(position, dropLineTarget);
|
|
163
|
+
}
|
|
164
|
+
this.handleGroupExpansion(targetNode, position.type === 'inside');
|
|
165
|
+
}
|
|
166
|
+
}
|
|
133
167
|
});
|
|
134
168
|
}
|
|
169
|
+
get isGroup() {
|
|
170
|
+
return this.config().isGroup;
|
|
171
|
+
}
|
|
172
|
+
get getDescendantLevels() {
|
|
173
|
+
return this.config().descendantLevels;
|
|
174
|
+
}
|
|
135
175
|
ngOnDestroy() {
|
|
136
176
|
this.removeAllListener();
|
|
177
|
+
this.removeDropTargetLine();
|
|
137
178
|
if (this.nodesEffect) {
|
|
138
|
-
// EffectRef provides destroy() to stop the effect
|
|
139
179
|
this.nodesEffect.destroy();
|
|
140
180
|
this.nodesEffect = undefined;
|
|
141
181
|
}
|
|
142
182
|
}
|
|
143
183
|
onDragStart(node) {
|
|
144
|
-
this.
|
|
184
|
+
this.addDropTargetLine();
|
|
185
|
+
this.dragging.set(true);
|
|
145
186
|
this.draggedNode = node;
|
|
146
187
|
this.addNodeClass(node.id, '--dragged');
|
|
147
188
|
this.dragStart.emit(node);
|
|
148
189
|
}
|
|
149
190
|
dragEnd() {
|
|
150
|
-
this.dragging
|
|
191
|
+
this.dragging.set(false);
|
|
151
192
|
if (this.draggedNode) {
|
|
152
193
|
this.removeNodeClass(this.draggedNode.id, '--dragged');
|
|
153
194
|
this.draggedNode = null;
|
|
@@ -158,71 +199,81 @@ class TreeDragDropDirective {
|
|
|
158
199
|
dragOver(node, event) {
|
|
159
200
|
event.preventDefault();
|
|
160
201
|
event.stopPropagation();
|
|
161
|
-
this.dropNodeTarget
|
|
202
|
+
this.dropNodeTarget.set(node);
|
|
162
203
|
const position = this.getPosition(event, node);
|
|
163
|
-
this.
|
|
164
|
-
this.setHighlightedNode(node);
|
|
165
|
-
this.handleGroupExpansion(node, position.type === 'inside');
|
|
204
|
+
this.dropPosition.set(position);
|
|
166
205
|
}
|
|
167
206
|
dragLeave() {
|
|
168
207
|
clearTimeout(this.expandTimeout);
|
|
169
208
|
this.expandTimeout = null;
|
|
170
|
-
this.highlightedNode
|
|
209
|
+
if (this.highlightedNode) {
|
|
210
|
+
this.removeNodeClass(this.highlightedNode.id, '--drag-hover');
|
|
211
|
+
this.highlightedNode = undefined;
|
|
212
|
+
}
|
|
171
213
|
}
|
|
172
214
|
drop(event) {
|
|
173
|
-
|
|
215
|
+
let nodeTarget = this.dropNodeTarget();
|
|
216
|
+
if (!nodeTarget || this.treeDragDropIsDisabled()) {
|
|
174
217
|
return;
|
|
175
218
|
}
|
|
176
|
-
const dropPosition = this.getPosition(event,
|
|
177
|
-
const validation = this.canDropNode(
|
|
219
|
+
const dropPosition = this.getPosition(event, nodeTarget);
|
|
220
|
+
const validation = this.canDropNode(nodeTarget, dropPosition);
|
|
178
221
|
if (!validation.canDrop) {
|
|
179
|
-
this.
|
|
222
|
+
this.droppedError.emit(validation);
|
|
180
223
|
return;
|
|
181
224
|
}
|
|
225
|
+
let targetNodeLevel = this.getNodeLevel(nodeTarget);
|
|
182
226
|
// Allow to drop a last child outside is group. We refer to it's ancestor for the target
|
|
183
227
|
if (dropPosition.type === 'below' &&
|
|
184
|
-
dropPosition.level !==
|
|
185
|
-
|
|
228
|
+
dropPosition.level !== targetNodeLevel) {
|
|
229
|
+
const ancestor = this.getNodeAncestors(nodeTarget.id, dropPosition.level);
|
|
230
|
+
this.dropNodeTarget.set(ancestor);
|
|
231
|
+
nodeTarget = ancestor;
|
|
232
|
+
targetNodeLevel = this.getNodeLevel(nodeTarget);
|
|
186
233
|
}
|
|
187
|
-
if (this.
|
|
234
|
+
if (this.isGroup(nodeTarget)) {
|
|
188
235
|
if (dropPosition.type === 'inside') {
|
|
189
|
-
const isExpanded = this.
|
|
236
|
+
const isExpanded = this.tree().isExpanded(nodeTarget);
|
|
190
237
|
if (isExpanded) {
|
|
191
|
-
const children = this.getDirectDescendants(
|
|
238
|
+
const children = this.getDirectDescendants(nodeTarget);
|
|
192
239
|
if (children[0]?.id === this.draggedNode.id) {
|
|
193
240
|
return;
|
|
194
241
|
}
|
|
195
242
|
}
|
|
196
|
-
this.
|
|
197
|
-
return this.
|
|
243
|
+
this.tree().expand(nodeTarget);
|
|
244
|
+
return this.dropped.emit({
|
|
198
245
|
node: this.draggedNode,
|
|
199
|
-
ref:
|
|
246
|
+
ref: nodeTarget,
|
|
200
247
|
position: dropPosition.type
|
|
201
248
|
});
|
|
202
249
|
}
|
|
203
250
|
}
|
|
204
251
|
if (dropPosition.type === 'below' &&
|
|
205
|
-
dropPosition.level !==
|
|
206
|
-
const ancestor = this.getNodeAncestors(
|
|
207
|
-
return this.
|
|
252
|
+
dropPosition.level !== targetNodeLevel) {
|
|
253
|
+
const ancestor = this.getNodeAncestors(nodeTarget.id);
|
|
254
|
+
return this.dropped.emit({
|
|
208
255
|
node: this.draggedNode,
|
|
209
256
|
ref: ancestor,
|
|
210
257
|
position: dropPosition.type
|
|
211
258
|
});
|
|
212
259
|
}
|
|
213
|
-
this.
|
|
260
|
+
this.dropped.emit({
|
|
214
261
|
node: this.draggedNode,
|
|
215
|
-
ref:
|
|
262
|
+
ref: nodeTarget,
|
|
216
263
|
position: dropPosition.type
|
|
217
264
|
});
|
|
218
265
|
}
|
|
219
266
|
addNodeClass(id, className) {
|
|
220
|
-
const node = this.
|
|
221
|
-
|
|
267
|
+
const node = this.findTreeNode(id);
|
|
268
|
+
if (node) {
|
|
269
|
+
this.renderer.addClass(node['_elementRef'].nativeElement, className);
|
|
270
|
+
}
|
|
222
271
|
}
|
|
223
272
|
removeNodeClass(id, className) {
|
|
224
|
-
const node = this.
|
|
225
|
-
|
|
273
|
+
const node = this.findTreeNode(id);
|
|
274
|
+
if (node) {
|
|
275
|
+
this.renderer.removeClass(node['_elementRef'].nativeElement, className);
|
|
276
|
+
}
|
|
226
277
|
}
|
|
227
278
|
addAllListener() {
|
|
228
279
|
if (this.treeDragDropIsDisabled()) {
|
|
@@ -256,52 +307,70 @@ class TreeDragDropDirective {
|
|
|
256
307
|
this.nodesListeners = null;
|
|
257
308
|
}
|
|
258
309
|
setHighlightedNode(node) {
|
|
259
|
-
const toHighlight =
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
310
|
+
const toHighlight = this.isGroup(node)
|
|
311
|
+
? node
|
|
312
|
+
: this.getNodeAncestors(node.id);
|
|
313
|
+
if (this.highlightedNode && this.highlightedNode.id !== toHighlight?.id) {
|
|
314
|
+
this.removeNodeClass(this.highlightedNode.id, '--drag-hover');
|
|
315
|
+
this.highlightedNode = undefined;
|
|
316
|
+
}
|
|
317
|
+
if (toHighlight) {
|
|
318
|
+
this.highlightedNode = toHighlight;
|
|
319
|
+
this.addNodeClass(toHighlight.id, '--drag-hover');
|
|
320
|
+
}
|
|
321
|
+
else if (this.highlightedNode) {
|
|
322
|
+
this.removeNodeClass(this.highlightedNode.id, '--drag-hover');
|
|
323
|
+
this.highlightedNode = undefined;
|
|
324
|
+
}
|
|
263
325
|
}
|
|
264
326
|
addDropTargetLine() {
|
|
265
327
|
const target = this.renderer.createElement('div');
|
|
266
328
|
target.classList.add('drop-target-line');
|
|
267
329
|
target.setAttribute('style', `position: absolute; top: 0; width: 100%; pointer-events: none; z-index: 4; height: 2px; background-color: black; transition: margin-left 150ms;`);
|
|
268
|
-
this.dropLineTarget
|
|
269
|
-
this.renderer.appendChild(this.elementRef.nativeElement.parentElement, this.dropLineTarget);
|
|
330
|
+
this.dropLineTarget.set(target);
|
|
270
331
|
}
|
|
271
332
|
removeDropTargetLine() {
|
|
272
|
-
|
|
273
|
-
|
|
333
|
+
const target = this.dropLineTarget();
|
|
334
|
+
if (target) {
|
|
335
|
+
this.previousDropLine.set(target);
|
|
336
|
+
this.dropLineTarget.set(null);
|
|
274
337
|
}
|
|
275
|
-
this.renderer.removeChild(this.elementRef.nativeElement.parentElement, this.dropLineTarget);
|
|
276
|
-
this.dropLineTarget = null;
|
|
277
338
|
}
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
339
|
+
hideDropTargetLine() {
|
|
340
|
+
const target = this.dropLineTarget();
|
|
341
|
+
this.renderer.setStyle(target, 'display', 'none');
|
|
342
|
+
}
|
|
343
|
+
showDropTargetLine() {
|
|
344
|
+
const target = this.dropLineTarget();
|
|
345
|
+
this.renderer.setStyle(target, 'display', 'block');
|
|
346
|
+
}
|
|
347
|
+
updateDropTargetLinePosition(position, dropLineTarget) {
|
|
282
348
|
if (position.type === 'inside') {
|
|
283
|
-
return this.
|
|
349
|
+
return this.hideDropTargetLine();
|
|
284
350
|
}
|
|
285
|
-
|
|
286
|
-
|
|
351
|
+
else {
|
|
352
|
+
this.showDropTargetLine();
|
|
353
|
+
}
|
|
354
|
+
this.renderer.setStyle(dropLineTarget, 'margin-left', position.level * 24 + 20 + 'px');
|
|
355
|
+
this.renderer.setStyle(dropLineTarget, 'transform', 'translate3d(0,' + position.y + 'px, 0)');
|
|
287
356
|
}
|
|
288
357
|
handleGroupExpansion(node, isInside) {
|
|
289
358
|
if (!isInside) {
|
|
290
359
|
return this.dragLeave();
|
|
291
360
|
}
|
|
292
|
-
const isOpen = this.
|
|
361
|
+
const isOpen = this.tree().isExpanded(node);
|
|
293
362
|
if (!isOpen && !this.expandTimeout) {
|
|
294
363
|
this.expandTimeout = window.setTimeout(() => {
|
|
295
|
-
this.
|
|
364
|
+
this.tree().expand(node);
|
|
296
365
|
}, 1200);
|
|
297
366
|
}
|
|
298
367
|
}
|
|
299
368
|
getNodeElement(node) {
|
|
300
|
-
const treeNode = this.
|
|
369
|
+
const treeNode = this.findTreeNode(node.id);
|
|
301
370
|
return treeNode?.['_elementRef'].nativeElement;
|
|
302
371
|
}
|
|
303
372
|
canDropNode(hoveredNode, position) {
|
|
304
|
-
if (this.draggedNode
|
|
373
|
+
if (this.isGroup(this.draggedNode)) {
|
|
305
374
|
return this.canDropGroup(hoveredNode, position);
|
|
306
375
|
}
|
|
307
376
|
const hasMaxLevelRestrictions = this.validateMaxHierarchyLevel(position);
|
|
@@ -318,14 +387,20 @@ class TreeDragDropDirective {
|
|
|
318
387
|
message: 'igo.common.dragDrop.cannot.dropInsideItself'
|
|
319
388
|
};
|
|
320
389
|
}
|
|
390
|
+
const isHoverDescendant = this.isHoverDescendant(hoveredNode.id, hoveredNode);
|
|
391
|
+
if (isHoverDescendant) {
|
|
392
|
+
return {
|
|
393
|
+
canDrop: !isHoverDescendant,
|
|
394
|
+
message: 'igo.common.dragDrop.cannot.dropInsideItself'
|
|
395
|
+
};
|
|
396
|
+
}
|
|
321
397
|
const hasMaxLevelRestrictions = this.validateMaxHierarchyLevel(position);
|
|
322
398
|
if (hasMaxLevelRestrictions) {
|
|
323
399
|
return hasMaxLevelRestrictions;
|
|
324
400
|
}
|
|
325
|
-
const isHoverDescendant = this.isHoverDescendant(hoveredNode.id);
|
|
326
401
|
return {
|
|
327
|
-
canDrop:
|
|
328
|
-
message:
|
|
402
|
+
canDrop: true,
|
|
403
|
+
message: undefined
|
|
329
404
|
};
|
|
330
405
|
}
|
|
331
406
|
validateMaxHierarchyLevel(position) {
|
|
@@ -334,9 +409,9 @@ class TreeDragDropDirective {
|
|
|
334
409
|
return;
|
|
335
410
|
}
|
|
336
411
|
let level = position.type === 'inside' ? position.level + 1 : position.level;
|
|
337
|
-
if (this.draggedNode
|
|
412
|
+
if (this.isGroup(this.draggedNode)) {
|
|
338
413
|
// We add an extra level +1 to avoid empty group in group
|
|
339
|
-
level = level + (this.draggedNode
|
|
414
|
+
level = level + +(this.getDescendantLevels(this.draggedNode) ?? 0) + 1;
|
|
340
415
|
}
|
|
341
416
|
if (level > maxLevel) {
|
|
342
417
|
return {
|
|
@@ -346,21 +421,27 @@ class TreeDragDropDirective {
|
|
|
346
421
|
};
|
|
347
422
|
}
|
|
348
423
|
}
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
424
|
+
getDescendants(node) {
|
|
425
|
+
const children = this.childrenAccessor()(node) ?? [];
|
|
426
|
+
const descendants = [...children];
|
|
427
|
+
children.forEach((child) => {
|
|
428
|
+
descendants.push(...this.getDescendants(child));
|
|
429
|
+
});
|
|
430
|
+
return descendants;
|
|
431
|
+
}
|
|
432
|
+
isHoverDescendant(id, _hoveredNode) {
|
|
433
|
+
return this.getDescendants(this.draggedNode).some((child) => child.id === id);
|
|
353
434
|
}
|
|
354
435
|
getPosition(event, hoveredNode) {
|
|
355
|
-
if (this.draggedNode
|
|
356
|
-
if (this.isHoverDescendant(hoveredNode.id)) {
|
|
436
|
+
if (this.isGroup(this.draggedNode)) {
|
|
437
|
+
if (this.isHoverDescendant(hoveredNode.id, hoveredNode)) {
|
|
357
438
|
hoveredNode = this.draggedNode;
|
|
358
439
|
}
|
|
359
440
|
}
|
|
360
441
|
let positionType = this.getPositionType(event, hoveredNode);
|
|
361
|
-
const bellowOpenedGroup =
|
|
442
|
+
const bellowOpenedGroup = this.isGroup(hoveredNode) &&
|
|
362
443
|
positionType === 'below' &&
|
|
363
|
-
this.
|
|
444
|
+
this.tree().isExpanded(hoveredNode);
|
|
364
445
|
if (bellowOpenedGroup) {
|
|
365
446
|
positionType = 'inside';
|
|
366
447
|
}
|
|
@@ -384,7 +465,7 @@ class TreeDragDropDirective {
|
|
|
384
465
|
const middle = rect.top + rect.height / 2;
|
|
385
466
|
const y = event.y;
|
|
386
467
|
const selfReferencing = this.draggedNode.id === hoveredNode.id;
|
|
387
|
-
if (
|
|
468
|
+
if (this.isGroup(hoveredNode) && !selfReferencing) {
|
|
388
469
|
const tolerence = 5;
|
|
389
470
|
if (y <= middle + tolerence && y >= middle - tolerence) {
|
|
390
471
|
return 'inside';
|
|
@@ -394,46 +475,79 @@ class TreeDragDropDirective {
|
|
|
394
475
|
return isBelow ? 'below' : 'above';
|
|
395
476
|
}
|
|
396
477
|
getPositionLevel(hoveredNode, type, x) {
|
|
397
|
-
|
|
478
|
+
const hoveredNodeLevel = this.getNodeLevel(hoveredNode);
|
|
479
|
+
if (hoveredNodeLevel === 0) {
|
|
398
480
|
return 0;
|
|
399
481
|
}
|
|
400
482
|
const ancestor = this.getNodeAncestors(hoveredNode.id);
|
|
483
|
+
if (!ancestor)
|
|
484
|
+
return hoveredNodeLevel;
|
|
401
485
|
const children = this.getDirectDescendants(ancestor);
|
|
402
486
|
const lastChild = [...children].pop();
|
|
403
|
-
if (type === 'below' && lastChild
|
|
487
|
+
if (type === 'below' && lastChild?.id === hoveredNode.id) {
|
|
404
488
|
const target = this.getNodeElement(hoveredNode);
|
|
405
489
|
const rect = target.getBoundingClientRect();
|
|
406
490
|
const indentation = 24;
|
|
407
491
|
const xMin = rect.x + indentation;
|
|
408
|
-
const xMax = xMin + indentation *
|
|
492
|
+
const xMax = xMin + indentation * hoveredNodeLevel;
|
|
409
493
|
const isInsideSameGroup = x > xMax;
|
|
410
494
|
if (!isInsideSameGroup) {
|
|
411
495
|
const levelSubstracted = Math.round((xMax - x) / indentation);
|
|
412
|
-
return Math.max(0,
|
|
496
|
+
return Math.max(0, hoveredNodeLevel - levelSubstracted);
|
|
413
497
|
}
|
|
414
498
|
}
|
|
415
|
-
return
|
|
499
|
+
return hoveredNodeLevel;
|
|
416
500
|
}
|
|
417
501
|
/**
|
|
418
502
|
* @param level if level is defined with go to the defined levle to find ancestor. Sinon on prend le current ancestor
|
|
419
503
|
*/
|
|
420
504
|
getNodeAncestors(id, level) {
|
|
421
|
-
const
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
505
|
+
const path = this.getAncestorsPath(id);
|
|
506
|
+
if (path.length === 0) {
|
|
507
|
+
return undefined;
|
|
508
|
+
}
|
|
509
|
+
if (level !== undefined) {
|
|
510
|
+
return path[level];
|
|
511
|
+
}
|
|
512
|
+
return path[path.length - 1];
|
|
513
|
+
}
|
|
514
|
+
getAncestorsPath(id) {
|
|
515
|
+
const nodes = this.nodes();
|
|
516
|
+
const roots = nodes.filter((n) => n.level === 0).map((n) => n.data);
|
|
517
|
+
for (const root of roots) {
|
|
518
|
+
const path = [];
|
|
519
|
+
if (this.findPath(root, id, path)) {
|
|
520
|
+
return path;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
return [];
|
|
524
|
+
}
|
|
525
|
+
findPath(currentNode, targetId, path) {
|
|
526
|
+
if (String(currentNode.id) === String(targetId)) {
|
|
527
|
+
return true;
|
|
528
|
+
}
|
|
529
|
+
const children = this.childrenAccessor()(currentNode) ?? [];
|
|
530
|
+
for (const child of children) {
|
|
531
|
+
path.push(currentNode);
|
|
532
|
+
if (this.findPath(child, targetId, path)) {
|
|
533
|
+
return true;
|
|
534
|
+
}
|
|
535
|
+
path.pop();
|
|
536
|
+
}
|
|
537
|
+
return false;
|
|
538
|
+
}
|
|
539
|
+
getNodeLevel(node) {
|
|
540
|
+
const treeNode = this.findTreeNode(node.id);
|
|
541
|
+
return treeNode ? treeNode.level : 0;
|
|
428
542
|
}
|
|
429
543
|
getDirectDescendants(node) {
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
544
|
+
return this.childrenAccessor()(node) ?? [];
|
|
545
|
+
}
|
|
546
|
+
findTreeNode(id) {
|
|
547
|
+
return this.nodes().find((n) => String(n.data.id) === String(id));
|
|
434
548
|
}
|
|
435
549
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: TreeDragDropDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
436
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.18", type: TreeDragDropDirective, isStandalone: true, selector: "[igoTreeDragDrop]", inputs: {
|
|
550
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.18", type: TreeDragDropDirective, isStandalone: true, selector: "[igoTreeDragDrop]", inputs: { tree: { classPropertyName: "tree", publicName: "tree", isSignal: true, isRequired: true, transformFunction: null }, childrenAccessor: { classPropertyName: "childrenAccessor", publicName: "childrenAccessor", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, maxLevel: { classPropertyName: "maxLevel", publicName: "maxLevel", isSignal: true, isRequired: false, transformFunction: null }, treeDragDropIsDisabled: { classPropertyName: "treeDragDropIsDisabled", publicName: "treeDragDropIsDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dragStart: "dragStart", dropped: "dropped", droppedError: "droppedError" }, host: { listeners: { "dragover": "hostDragOver($event)", "dragleave": "hostDragLeave($event)", "drop": "hostDrop($event)" }, properties: { "class.--dragging": "this.dragging" } }, queries: [{ propertyName: "nodes", predicate: MatTreeNode, descendants: true, isSignal: true }], ngImport: i0 });
|
|
437
551
|
}
|
|
438
552
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImport: i0, type: TreeDragDropDirective, decorators: [{
|
|
439
553
|
type: Directive,
|
|
@@ -441,9 +555,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.18", ngImpo
|
|
|
441
555
|
selector: '[igoTreeDragDrop]',
|
|
442
556
|
standalone: true
|
|
443
557
|
}]
|
|
444
|
-
}], ctorParameters: () => [], propDecorators: {
|
|
558
|
+
}], ctorParameters: () => [], propDecorators: { tree: [{ type: i0.Input, args: [{ isSignal: true, alias: "tree", required: true }] }], childrenAccessor: [{ type: i0.Input, args: [{ isSignal: true, alias: "childrenAccessor", required: true }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }], maxLevel: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxLevel", required: false }] }], treeDragDropIsDisabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "treeDragDropIsDisabled", required: false }] }], dragStart: [{ type: i0.Output, args: ["dragStart"] }], dropped: [{ type: i0.Output, args: ["dropped"] }], droppedError: [{ type: i0.Output, args: ["droppedError"] }], hostDragOver: [{
|
|
445
559
|
type: HostListener,
|
|
446
560
|
args: ['dragover', ['$event']]
|
|
561
|
+
}], hostDragLeave: [{
|
|
562
|
+
type: HostListener,
|
|
563
|
+
args: ['dragleave', ['$event']]
|
|
447
564
|
}], hostDrop: [{
|
|
448
565
|
type: HostListener,
|
|
449
566
|
args: ['drop', ['$event']]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"igo2-common-drag-drop.mjs","sources":["../../../packages/common/drag-drop/src/drag-drop.directive.ts","../../../packages/common/drag-drop/src/tree-drag-drop/tree-drag-drop.directive.ts","../../../packages/common/drag-drop/src/drag-drop.module.ts","../../../packages/common/drag-drop/src/igo2-common-drag-drop.ts"],"sourcesContent":["import {\n Directive,\n HostBinding,\n HostListener,\n input,\n output\n} from '@angular/core';\n\n@Directive({\n selector: '[igoDragAndDrop]',\n standalone: true\n})\nexport class DragAndDropDirective {\n readonly allowedExtensions = input<string[]>([]);\n\n protected readonly filesDropped = output<File[]>();\n\n protected readonly filesInvalid = output<File[]>();\n\n @HostBinding('style.background') private background = 'inherit';\n\n @HostListener('dragover', ['$event'])\n public onDragOver(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#999';\n }\n\n @HostListener('dragleave', ['$event'])\n public onDragLeave(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = 'inherit';\n }\n\n @HostListener('drop', ['$event'])\n public onDrop(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n if (evt.alreadyFired) {\n return;\n }\n evt.alreadyFired = true;\n\n this.background = 'inherit';\n const filesObj = this.validExtensions(evt);\n if (filesObj.valid.length) {\n this.filesDropped.emit(filesObj.valid);\n }\n if (filesObj.invalid.length) {\n this.filesInvalid.emit(filesObj.invalid);\n }\n }\n\n private validExtensions(evt) {\n const files = evt.dataTransfer.files;\n const filesObj = {\n valid: [],\n invalid: []\n };\n if (files.length > 0) {\n for (const file of files) {\n const ext = file.name.split('.')[file.name.split('.').length - 1];\n const allowedExtensions = this.allowedExtensions();\n if (\n allowedExtensions.length === 0 ||\n (allowedExtensions.lastIndexOf(ext) !== -1 && file.size !== 0)\n ) {\n filesObj.valid.push(file);\n } else {\n filesObj.invalid.push(file);\n }\n }\n }\n\n return filesObj;\n }\n}\n","import { SelectionModel } from '@angular/cdk/collections';\nimport { FlatTreeControl } from '@angular/cdk/tree';\nimport {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n OnDestroy,\n Renderer2,\n booleanAttribute,\n contentChildren,\n effect,\n inject,\n input,\n output\n} from '@angular/core';\nimport { MatTreeNode } from '@angular/material/tree';\n\nimport {\n DropPosition,\n DropPositionType,\n TreeFlatNode\n} from './tree-drag-drop.interface';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface TreeDropEvent<T = any> {\n node: TreeFlatNode<T>;\n ref: TreeFlatNode<T>;\n position: DropPositionType;\n}\n\ninterface DragNodeListeners {\n element: HTMLElement;\n listeners: [string, EventListenerOrEventListenerObject][];\n}\n\nexport interface DropPermission {\n canDrop: boolean;\n message?: string;\n params?: Record<string, unknown>;\n}\n\n/**\n * This directive should be use with a MatTree flatened\n * It should add all logic to drag the MatTreeNode and connect the (onDrop) output\n * Class added:\n * Tree: --dragging\n * Node: --drag-hover | --dragged\n */\n@Directive({\n selector: '[igoTreeDragDrop]',\n standalone: true\n})\nexport class TreeDragDropDirective implements OnDestroy {\n private elementRef = inject(ElementRef);\n private renderer = inject(Renderer2);\n\n draggedNode: TreeFlatNode;\n dropNodeTarget: TreeFlatNode;\n expandTimeout: number;\n nodesListeners: DragNodeListeners[] | undefined;\n private nodesEffect = effect(() => {\n this.nodes();\n this.addAllListener();\n });\n dropLineTarget: HTMLElement;\n highlightedNode = new SelectionModel<TreeFlatNode>();\n\n readonly treeControl = input.required<FlatTreeControl<TreeFlatNode>>();\n\n /** The default is 5 */\n readonly maxLevel = input(5);\n\n readonly treeDragDropIsDisabled = input(false, {\n transform: booleanAttribute\n });\n\n readonly dragStart = output<TreeFlatNode>();\n\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onDrop = output<TreeDropEvent>();\n\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n readonly onDropError = output<DropPermission>();\n\n @HostListener('dragover', ['$event']) hostDragOver(event: Event): void {\n event.preventDefault();\n }\n\n @HostListener('drop', ['$event']) hostDrop(event: DragEvent): void {\n this.drop(event);\n }\n\n @HostBinding('class.--dragging') dragging: boolean;\n\n readonly nodes = contentChildren(MatTreeNode, { descendants: true });\n\n constructor() {\n this.onDrop.subscribe(() => this.dragEnd());\n\n this.highlightedNode.changed.subscribe((change) => {\n if (change.removed.length) {\n this.removeNodeClass(change.removed[0].id, '--drag-hover');\n }\n\n if (change.added.length) {\n this.addNodeClass(change.added[0].id, '--drag-hover');\n }\n });\n\n effect(() => {\n const disabled = this.treeDragDropIsDisabled();\n disabled ? this.removeAllListener() : this.addAllListener();\n });\n }\n\n ngOnDestroy(): void {\n this.removeAllListener();\n if (this.nodesEffect) {\n // EffectRef provides destroy() to stop the effect\n this.nodesEffect.destroy();\n this.nodesEffect = undefined;\n }\n }\n\n onDragStart(node: TreeFlatNode): void {\n this.dragging = true;\n this.draggedNode = node;\n this.addNodeClass(node.id, '--dragged');\n\n this.dragStart.emit(node);\n }\n\n dragEnd(): void {\n this.dragging = false;\n if (this.draggedNode) {\n this.removeNodeClass(this.draggedNode.id, '--dragged');\n this.draggedNode = null;\n }\n\n this.dragLeave();\n this.removeDropTargetLine();\n }\n\n dragOver(node: TreeFlatNode, event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.dropNodeTarget = node;\n\n const position = this.getPosition(event, node);\n\n this.updateDropTargetLinePosition(position);\n\n this.setHighlightedNode(node);\n\n this.handleGroupExpansion(node, position.type === 'inside');\n }\n\n dragLeave(): void {\n clearTimeout(this.expandTimeout);\n this.expandTimeout = null;\n this.highlightedNode.clear();\n }\n\n drop(event: DragEvent): void {\n if (!this.dropNodeTarget || this.treeDragDropIsDisabled()) {\n return;\n }\n\n const dropPosition: DropPosition = this.getPosition(\n event,\n this.dropNodeTarget\n );\n\n const validation = this.canDropNode(this.dropNodeTarget, dropPosition);\n if (!validation.canDrop) {\n this.onDropError.emit(validation);\n return;\n }\n\n // Allow to drop a last child outside is group. We refer to it's ancestor for the target\n if (\n dropPosition.type === 'below' &&\n dropPosition.level !== this.dropNodeTarget.level\n ) {\n this.dropNodeTarget = this.getNodeAncestors(\n this.dropNodeTarget.id,\n dropPosition.level\n );\n }\n\n if (this.dropNodeTarget.isGroup) {\n if (dropPosition.type === 'inside') {\n const isExpanded = this.treeControl().isExpanded(this.dropNodeTarget);\n if (isExpanded) {\n const children = this.getDirectDescendants(this.dropNodeTarget);\n if (children[0]?.id === this.draggedNode.id) {\n return;\n }\n }\n\n this.treeControl().expand(this.dropNodeTarget);\n return this.onDrop.emit({\n node: this.draggedNode,\n ref: this.dropNodeTarget,\n position: dropPosition.type\n });\n }\n }\n\n if (\n dropPosition.type === 'below' &&\n dropPosition.level !== this.dropNodeTarget.level\n ) {\n const ancestor = this.getNodeAncestors(this.dropNodeTarget.id);\n return this.onDrop.emit({\n node: this.draggedNode,\n ref: ancestor,\n position: dropPosition.type\n });\n }\n\n this.onDrop.emit({\n node: this.draggedNode,\n ref: this.dropNodeTarget,\n position: dropPosition.type\n });\n }\n\n private addNodeClass(id: string, className: string): void {\n const node = this.nodes().find((node) => node.data.id === id);\n this.renderer.addClass(node['_elementRef'].nativeElement, className);\n }\n\n private removeNodeClass(id: string, className: string): void {\n const node = this.nodes().find((node) => node.data.id === id);\n this.renderer.removeClass(node['_elementRef'].nativeElement, className);\n }\n\n private addAllListener(): void {\n if (this.treeDragDropIsDisabled()) {\n return;\n }\n const nodes = this.nodes();\n if (this.nodesListeners) {\n this.removeAllListener();\n }\n\n this.nodesListeners = nodes?.map((node) => this.addListener(node));\n }\n\n private addListener(node: MatTreeNode<TreeFlatNode>): DragNodeListeners {\n const element = node['_elementRef'].nativeElement as HTMLElement;\n const listeners: [string, EventListenerOrEventListenerObject][] = [\n ['dragstart', () => this.onDragStart(node.data)],\n ['dragend', () => this.dragEnd()],\n ['dragover', (event: DragEvent) => this.dragOver(node.data, event)],\n ['dragleave', () => this.dragLeave()]\n ];\n element.setAttribute('draggable', 'true');\n listeners.forEach(([type, listener]) =>\n element.addEventListener(type, listener)\n );\n\n return { element, listeners };\n }\n\n private removeAllListener(): void {\n this.nodesListeners?.forEach(({ element, listeners }) => {\n listeners.forEach(([type, listener]) => {\n element.setAttribute('draggable', 'false');\n element.removeEventListener(type, listener);\n });\n });\n this.nodesListeners = null;\n }\n\n private setHighlightedNode(node: TreeFlatNode): void {\n const toHighlight = node.isGroup ? node : this.getNodeAncestors(node.id);\n toHighlight\n ? this.highlightedNode.select(toHighlight)\n : this.highlightedNode.clear();\n }\n\n private addDropTargetLine(): void {\n const target: HTMLElement = this.renderer.createElement('div');\n target.classList.add('drop-target-line');\n target.setAttribute(\n 'style',\n `position: absolute; top: 0; width: 100%; pointer-events: none; z-index: 4; height: 2px; background-color: black; transition: margin-left 150ms;`\n );\n this.dropLineTarget = target;\n this.renderer.appendChild(\n this.elementRef.nativeElement.parentElement,\n this.dropLineTarget\n );\n }\n\n private removeDropTargetLine(): void {\n if (!this.dropLineTarget) {\n return;\n }\n this.renderer.removeChild(\n this.elementRef.nativeElement.parentElement,\n this.dropLineTarget\n );\n this.dropLineTarget = null;\n }\n\n private updateDropTargetLinePosition(position: DropPosition): void {\n if (!this.dropLineTarget) {\n this.addDropTargetLine();\n }\n\n if (position.type === 'inside') {\n return this.removeDropTargetLine();\n }\n\n this.renderer.setStyle(\n this.dropLineTarget,\n 'margin-left',\n position.level * 24 + 20 + 'px'\n );\n this.renderer.setStyle(\n this.dropLineTarget,\n 'transform',\n 'translate3d(0,' + position.y + 'px, 0)'\n );\n }\n\n private handleGroupExpansion(node: TreeFlatNode, isInside: boolean): void {\n if (!isInside) {\n return this.dragLeave();\n }\n const isOpen = this.treeControl().isExpanded(node);\n if (!isOpen && !this.expandTimeout) {\n this.expandTimeout = window.setTimeout(() => {\n this.treeControl().expand(node);\n }, 1200);\n }\n }\n\n private getNodeElement(node: TreeFlatNode): HTMLElement | undefined {\n const treeNode = this.nodes().find((n) => n.data.id === node.id);\n return treeNode?.['_elementRef'].nativeElement;\n }\n\n private canDropNode(\n hoveredNode: TreeFlatNode,\n position: DropPosition\n ): DropPermission {\n if (this.draggedNode.isGroup) {\n return this.canDropGroup(hoveredNode, position);\n }\n\n const hasMaxLevelRestrictions = this.validateMaxHierarchyLevel(position);\n if (hasMaxLevelRestrictions) {\n return hasMaxLevelRestrictions;\n }\n\n return { canDrop: true };\n }\n\n private canDropGroup(\n hoveredNode: TreeFlatNode,\n position: DropPosition\n ): DropPermission {\n // On ne veut pas permettre le Drop pour un groupe qui s'auto référence\n if (hoveredNode.id === this.draggedNode.id) {\n return {\n canDrop: false,\n message: 'igo.common.dragDrop.cannot.dropInsideItself'\n };\n }\n\n const hasMaxLevelRestrictions = this.validateMaxHierarchyLevel(position);\n if (hasMaxLevelRestrictions) {\n return hasMaxLevelRestrictions;\n }\n\n const isHoverDescendant = this.isHoverDescendant(hoveredNode.id);\n return {\n canDrop: !isHoverDescendant,\n message:\n isHoverDescendant && 'igo.common.dragDrop.cannot.dropInsideItself'\n };\n }\n\n private validateMaxHierarchyLevel(position: DropPosition): DropPermission {\n const maxLevel = this.maxLevel();\n if (!maxLevel) {\n return;\n }\n\n let level =\n position.type === 'inside' ? position.level + 1 : position.level;\n\n if (this.draggedNode.isGroup) {\n // We add an extra level +1 to avoid empty group in group\n level = level + (this.draggedNode.descendantLevels ?? 0) + 1;\n }\n\n if (level > maxLevel) {\n return {\n canDrop: false,\n message: 'igo.common.dragDrop.cannot.maxLevel',\n params: { value: maxLevel }\n };\n }\n }\n\n private isHoverDescendant(id: string): boolean {\n return this.treeControl()\n .getDescendants(this.draggedNode)\n .some((child) => child.id === id);\n }\n\n private getPosition(\n event: DragEvent,\n hoveredNode: TreeFlatNode\n ): DropPosition {\n if (this.draggedNode.isGroup) {\n if (this.isHoverDescendant(hoveredNode.id)) {\n hoveredNode = this.draggedNode;\n }\n }\n\n let positionType = this.getPositionType(event, hoveredNode);\n\n const bellowOpenedGroup =\n hoveredNode.isGroup &&\n positionType === 'below' &&\n this.treeControl().isExpanded(hoveredNode);\n if (bellowOpenedGroup) {\n positionType = 'inside';\n }\n\n return {\n x: event.x,\n y: this.getPositionY(hoveredNode, positionType),\n level: this.getPositionLevel(hoveredNode, positionType, event.x),\n type: positionType\n };\n }\n\n private getPositionY(node: TreeFlatNode, type: DropPositionType): number {\n const element = this.getNodeElement(node);\n const rect = element.getBoundingClientRect();\n\n return type === 'below'\n ? element.offsetTop + rect.height - 1\n : element.offsetTop + 1;\n }\n\n private getPositionType(\n event: DragEvent,\n hoveredNode: TreeFlatNode\n ): DropPositionType {\n const target = this.getNodeElement(hoveredNode);\n const rect = target.getBoundingClientRect();\n const middle = rect.top + rect.height / 2;\n const y = event.y;\n\n const selfReferencing = this.draggedNode.id === hoveredNode.id;\n if (hoveredNode.isGroup && !selfReferencing) {\n const tolerence = 5;\n if (y <= middle + tolerence && y >= middle - tolerence) {\n return 'inside';\n }\n }\n\n const isBelow = y > middle;\n return isBelow ? 'below' : 'above';\n }\n\n private getPositionLevel(\n hoveredNode: TreeFlatNode,\n type: DropPositionType,\n x: number\n ): number {\n if (hoveredNode.level === 0) {\n return 0;\n }\n\n const ancestor = this.getNodeAncestors(hoveredNode.id);\n const children = this.getDirectDescendants(ancestor);\n const lastChild = [...children].pop();\n\n if (type === 'below' && lastChild.id === hoveredNode.id) {\n const target = this.getNodeElement(hoveredNode);\n const rect = target.getBoundingClientRect();\n\n const indentation = 24;\n const xMin = rect.x + indentation;\n const xMax = xMin + indentation * hoveredNode.level;\n\n const isInsideSameGroup = x > xMax;\n if (!isInsideSameGroup) {\n const levelSubstracted = Math.round((xMax - x) / indentation);\n return Math.max(0, hoveredNode.level - levelSubstracted);\n }\n }\n\n return hoveredNode.level;\n }\n\n /**\n * @param level if level is defined with go to the defined levle to find ancestor. Sinon on prend le current ancestor\n */\n private getNodeAncestors(\n id: string,\n level?: number\n ): TreeFlatNode | undefined {\n const nodes = this.treeControl().dataNodes;\n const index = nodes.findIndex((node) => node.id === id);\n\n const targetLevel = level ?? Math.max(0, nodes[index].level - 1);\n return nodes\n .slice(0, index)\n .reverse()\n .find((node) => node.level === targetLevel);\n }\n\n private getDirectDescendants(node: TreeFlatNode): TreeFlatNode[] {\n const level = node.level + 1;\n return this.treeControl()\n .getDescendants(node)\n .filter((child) => child.level === level);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { DragAndDropDirective } from './drag-drop.directive';\nimport { TreeDragDropDirective } from './tree-drag-drop/tree-drag-drop.directive';\n\n/**\n * @deprecated import the DragAndDropDirective directly\n */\n@NgModule({\n imports: [DragAndDropDirective, TreeDragDropDirective],\n exports: [DragAndDropDirective, TreeDragDropDirective]\n})\nexport class IgoDrapDropModule {\n static forRoot(): ModuleWithProviders<IgoDrapDropModule> {\n return {\n ngModule: IgoDrapDropModule,\n providers: []\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"igo2-common-drag-drop.mjs","sources":["../../../packages/common/drag-drop/src/drag-drop.directive.ts","../../../packages/common/drag-drop/src/tree-drag-drop/tree-drag-drop.directive.ts","../../../packages/common/drag-drop/src/drag-drop.module.ts","../../../packages/common/drag-drop/src/igo2-common-drag-drop.ts"],"sourcesContent":["import {\n Directive,\n HostBinding,\n HostListener,\n input,\n output\n} from '@angular/core';\n\n@Directive({\n selector: '[igoDragAndDrop]',\n standalone: true\n})\nexport class DragAndDropDirective {\n readonly allowedExtensions = input<string[]>([]);\n\n protected readonly filesDropped = output<File[]>();\n\n protected readonly filesInvalid = output<File[]>();\n\n @HostBinding('style.background') private background = 'inherit';\n\n @HostListener('dragover', ['$event'])\n public onDragOver(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#999';\n }\n\n @HostListener('dragleave', ['$event'])\n public onDragLeave(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = 'inherit';\n }\n\n @HostListener('drop', ['$event'])\n public onDrop(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n if (evt.alreadyFired) {\n return;\n }\n evt.alreadyFired = true;\n\n this.background = 'inherit';\n const filesObj = this.validExtensions(evt);\n if (filesObj.valid.length) {\n this.filesDropped.emit(filesObj.valid);\n }\n if (filesObj.invalid.length) {\n this.filesInvalid.emit(filesObj.invalid);\n }\n }\n\n private validExtensions(evt) {\n const files = evt.dataTransfer.files;\n const filesObj = {\n valid: [],\n invalid: []\n };\n if (files.length > 0) {\n for (const file of files) {\n const ext = file.name.split('.')[file.name.split('.').length - 1];\n const allowedExtensions = this.allowedExtensions();\n if (\n allowedExtensions.length === 0 ||\n (allowedExtensions.lastIndexOf(ext) !== -1 && file.size !== 0)\n ) {\n filesObj.valid.push(file);\n } else {\n filesObj.invalid.push(file);\n }\n }\n }\n\n return filesObj;\n }\n}\n","import { CdkTree } from '@angular/cdk/tree';\nimport {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n OnDestroy,\n Renderer2,\n booleanAttribute,\n contentChildren,\n effect,\n inject,\n input,\n output,\n signal,\n untracked\n} from '@angular/core';\nimport { MatTreeNode } from '@angular/material/tree';\n\nimport {\n DropPermission,\n DropPosition,\n DropPositionType,\n TreeDropEvent\n} from './tree-drag-drop.interface';\n\ninterface DragNodeListeners {\n element: HTMLElement;\n listeners: [string, EventListenerOrEventListenerObject][];\n}\n\nexport interface ITreeConfig<T> {\n isGroup: (node: T) => boolean;\n descendantLevels: (node: T) => number | undefined;\n}\n\n/**\n * This directive should be use with a MatTree flatened\n * It should add all logic to drag the MatTreeNode and connect the (onDrop) output\n * Class added:\n * Tree: --dragging\n * Node: --drag-hover | --dragged\n */\n@Directive({\n selector: '[igoTreeDragDrop]',\n standalone: true\n})\nexport class TreeDragDropDirective<\n T extends { id: string | number } = { id: string | number },\n K = T\n> implements OnDestroy {\n private elementRef = inject(ElementRef);\n private renderer = inject(Renderer2);\n\n draggedNode: T;\n dropNodeTarget = signal<T | null>(null);\n expandTimeout: number;\n nodesListeners: DragNodeListeners[] | undefined;\n private nodesEffect = effect(() => {\n this.nodes();\n this.addAllListener();\n });\n dropLineTarget = signal<HTMLElement | null>(null);\n previousDropLine = signal<HTMLElement | null>(null);\n dropPosition = signal<DropPosition | null>(null);\n // Use a Set or just manage classes manually since SelectionModel was providing simple toggle\n // But we can stick to simple class logic\n highlightedNode: T | undefined;\n\n readonly tree = input.required<CdkTree<T, K>>();\n readonly childrenAccessor = input.required<(node: T) => T[]>();\n readonly config = input.required<ITreeConfig<T>>();\n\n /** The default is 5 */\n readonly maxLevel = input(5);\n\n readonly treeDragDropIsDisabled = input(false, {\n transform: booleanAttribute\n });\n\n readonly dragStart = output<T>();\n\n readonly dropped = output<TreeDropEvent<T>>();\n\n readonly droppedError = output<DropPermission>();\n\n @HostListener('dragover', ['$event']) hostDragOver(event: Event): void {\n event.preventDefault();\n }\n\n @HostListener('dragleave', ['$event']) hostDragLeave(event: DragEvent): void {\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n if (\n event.clientY < rect.top ||\n event.clientY >= rect.bottom ||\n event.clientX < rect.left ||\n event.clientX >= rect.right\n ) {\n this.dragLeave();\n }\n }\n\n @HostListener('drop', ['$event']) hostDrop(event: DragEvent): void {\n this.drop(event);\n }\n\n @HostBinding('class.--dragging') dragging = signal(false);\n\n readonly nodes = contentChildren(MatTreeNode, { descendants: true });\n\n constructor() {\n this.dropped.subscribe(() => this.dragEnd());\n\n effect(() => {\n const disabled = this.treeDragDropIsDisabled();\n disabled ? this.removeAllListener() : this.addAllListener();\n });\n\n effect(() => {\n const current = this.dropLineTarget();\n const parent = this.elementRef.nativeElement.parentElement;\n\n if (!current) {\n untracked(() => {\n const previous = this.previousDropLine();\n if (previous !== null) {\n this.renderer.removeChild(parent, previous);\n this.previousDropLine.set(null);\n }\n });\n } else {\n this.renderer.appendChild(parent, current);\n }\n });\n\n effect(() => {\n const targetNode = this.dropNodeTarget();\n const position = this.dropPosition();\n const dropLineTarget = this.dropLineTarget();\n\n if (targetNode) {\n this.setHighlightedNode(targetNode);\n\n if (position) {\n if (dropLineTarget) {\n this.updateDropTargetLinePosition(position, dropLineTarget);\n }\n this.handleGroupExpansion(targetNode, position.type === 'inside');\n }\n }\n });\n }\n\n get isGroup() {\n return this.config().isGroup;\n }\n\n get getDescendantLevels() {\n return this.config().descendantLevels;\n }\n\n ngOnDestroy(): void {\n this.removeAllListener();\n this.removeDropTargetLine();\n if (this.nodesEffect) {\n this.nodesEffect.destroy();\n this.nodesEffect = undefined;\n }\n }\n\n onDragStart(node: T): void {\n this.addDropTargetLine();\n\n this.dragging.set(true);\n this.draggedNode = node;\n this.addNodeClass(node.id, '--dragged');\n\n this.dragStart.emit(node);\n }\n\n dragEnd(): void {\n this.dragging.set(false);\n if (this.draggedNode) {\n this.removeNodeClass(this.draggedNode.id, '--dragged');\n this.draggedNode = null;\n }\n\n this.dragLeave();\n this.removeDropTargetLine();\n }\n\n dragOver(node: T, event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.dropNodeTarget.set(node);\n\n const position = this.getPosition(event, node);\n this.dropPosition.set(position);\n }\n\n dragLeave(): void {\n clearTimeout(this.expandTimeout);\n this.expandTimeout = null;\n if (this.highlightedNode) {\n this.removeNodeClass(this.highlightedNode.id, '--drag-hover');\n this.highlightedNode = undefined;\n }\n }\n\n drop(event: DragEvent): void {\n let nodeTarget = this.dropNodeTarget();\n if (!nodeTarget || this.treeDragDropIsDisabled()) {\n return;\n }\n\n const dropPosition: DropPosition = this.getPosition(event, nodeTarget);\n\n const validation = this.canDropNode(nodeTarget, dropPosition);\n if (!validation.canDrop) {\n this.droppedError.emit(validation);\n return;\n }\n\n let targetNodeLevel = this.getNodeLevel(nodeTarget);\n\n // Allow to drop a last child outside is group. We refer to it's ancestor for the target\n if (\n dropPosition.type === 'below' &&\n dropPosition.level !== targetNodeLevel\n ) {\n const ancestor = this.getNodeAncestors(nodeTarget.id, dropPosition.level);\n this.dropNodeTarget.set(ancestor);\n nodeTarget = ancestor;\n targetNodeLevel = this.getNodeLevel(nodeTarget);\n }\n\n if (this.isGroup(nodeTarget)) {\n if (dropPosition.type === 'inside') {\n const isExpanded = this.tree().isExpanded(nodeTarget);\n if (isExpanded) {\n const children = this.getDirectDescendants(nodeTarget);\n if (children[0]?.id === this.draggedNode.id) {\n return;\n }\n }\n\n this.tree().expand(nodeTarget);\n return this.dropped.emit({\n node: this.draggedNode,\n ref: nodeTarget,\n position: dropPosition.type\n });\n }\n }\n\n if (\n dropPosition.type === 'below' &&\n dropPosition.level !== targetNodeLevel\n ) {\n const ancestor = this.getNodeAncestors(nodeTarget.id);\n return this.dropped.emit({\n node: this.draggedNode,\n ref: ancestor,\n position: dropPosition.type\n });\n }\n\n this.dropped.emit({\n node: this.draggedNode,\n ref: nodeTarget,\n position: dropPosition.type\n });\n }\n\n private addNodeClass(id: string | number, className: string): void {\n const node = this.findTreeNode(id);\n if (node) {\n this.renderer.addClass(node['_elementRef'].nativeElement, className);\n }\n }\n\n private removeNodeClass(id: string | number, className: string): void {\n const node = this.findTreeNode(id);\n if (node) {\n this.renderer.removeClass(node['_elementRef'].nativeElement, className);\n }\n }\n\n private addAllListener(): void {\n if (this.treeDragDropIsDisabled()) {\n return;\n }\n const nodes = this.nodes();\n if (this.nodesListeners) {\n this.removeAllListener();\n }\n\n this.nodesListeners = nodes?.map((node) => this.addListener(node));\n }\n\n private addListener(node: MatTreeNode<T>): DragNodeListeners {\n const element = node['_elementRef'].nativeElement as HTMLElement;\n const listeners: [string, EventListenerOrEventListenerObject][] = [\n ['dragstart', () => this.onDragStart(node.data)],\n ['dragend', () => this.dragEnd()],\n ['dragover', (event: DragEvent) => this.dragOver(node.data, event)],\n ['dragleave', () => this.dragLeave()]\n ];\n element.setAttribute('draggable', 'true');\n listeners.forEach(([type, listener]) =>\n element.addEventListener(type, listener)\n );\n\n return { element, listeners };\n }\n\n private removeAllListener(): void {\n this.nodesListeners?.forEach(({ element, listeners }) => {\n listeners.forEach(([type, listener]) => {\n element.setAttribute('draggable', 'false');\n element.removeEventListener(type, listener);\n });\n });\n this.nodesListeners = null;\n }\n\n private setHighlightedNode(node: T): void {\n const toHighlight = this.isGroup(node)\n ? node\n : this.getNodeAncestors(node.id);\n\n if (this.highlightedNode && this.highlightedNode.id !== toHighlight?.id) {\n this.removeNodeClass(this.highlightedNode.id, '--drag-hover');\n this.highlightedNode = undefined;\n }\n\n if (toHighlight) {\n this.highlightedNode = toHighlight;\n this.addNodeClass(toHighlight.id, '--drag-hover');\n } else if (this.highlightedNode) {\n this.removeNodeClass(this.highlightedNode.id, '--drag-hover');\n this.highlightedNode = undefined;\n }\n }\n\n private addDropTargetLine(): void {\n const target: HTMLElement = this.renderer.createElement('div');\n target.classList.add('drop-target-line');\n target.setAttribute(\n 'style',\n `position: absolute; top: 0; width: 100%; pointer-events: none; z-index: 4; height: 2px; background-color: black; transition: margin-left 150ms;`\n );\n this.dropLineTarget.set(target);\n }\n\n private removeDropTargetLine(): void {\n const target = this.dropLineTarget();\n if (target) {\n this.previousDropLine.set(target);\n this.dropLineTarget.set(null);\n }\n }\n\n private hideDropTargetLine(): void {\n const target = this.dropLineTarget();\n this.renderer.setStyle(target, 'display', 'none');\n }\n\n private showDropTargetLine(): void {\n const target = this.dropLineTarget();\n this.renderer.setStyle(target, 'display', 'block');\n }\n\n private updateDropTargetLinePosition(\n position: DropPosition,\n dropLineTarget: HTMLElement\n ): void {\n if (position.type === 'inside') {\n return this.hideDropTargetLine();\n } else {\n this.showDropTargetLine();\n }\n\n this.renderer.setStyle(\n dropLineTarget,\n 'margin-left',\n position.level * 24 + 20 + 'px'\n );\n this.renderer.setStyle(\n dropLineTarget,\n 'transform',\n 'translate3d(0,' + position.y + 'px, 0)'\n );\n }\n\n private handleGroupExpansion(node: T, isInside: boolean): void {\n if (!isInside) {\n return this.dragLeave();\n }\n const isOpen = this.tree().isExpanded(node);\n if (!isOpen && !this.expandTimeout) {\n this.expandTimeout = window.setTimeout(() => {\n this.tree().expand(node);\n }, 1200);\n }\n }\n\n private getNodeElement(node: T): HTMLElement | undefined {\n const treeNode = this.findTreeNode(node.id);\n return treeNode?.['_elementRef'].nativeElement;\n }\n\n private canDropNode(hoveredNode: T, position: DropPosition): DropPermission {\n if (this.isGroup(this.draggedNode)) {\n return this.canDropGroup(hoveredNode, position);\n }\n\n const hasMaxLevelRestrictions = this.validateMaxHierarchyLevel(position);\n if (hasMaxLevelRestrictions) {\n return hasMaxLevelRestrictions;\n }\n\n return { canDrop: true };\n }\n\n private canDropGroup(\n hoveredNode: T,\n position: DropPosition\n ): {\n canDrop: boolean;\n message?: string;\n params?: { [key: string]: unknown };\n } {\n // On ne veut pas permettre le Drop pour un groupe qui s'auto référence\n if (hoveredNode.id === this.draggedNode.id) {\n return {\n canDrop: false,\n message: 'igo.common.dragDrop.cannot.dropInsideItself'\n };\n }\n const isHoverDescendant = this.isHoverDescendant(\n hoveredNode.id,\n hoveredNode\n );\n if (isHoverDescendant) {\n return {\n canDrop: !isHoverDescendant,\n message: 'igo.common.dragDrop.cannot.dropInsideItself'\n };\n }\n\n const hasMaxLevelRestrictions = this.validateMaxHierarchyLevel(position);\n if (hasMaxLevelRestrictions) {\n return hasMaxLevelRestrictions;\n }\n\n return {\n canDrop: true,\n message: undefined\n };\n }\n\n private validateMaxHierarchyLevel(position: DropPosition): DropPermission {\n const maxLevel = this.maxLevel();\n if (!maxLevel) {\n return;\n }\n\n let level =\n position.type === 'inside' ? position.level + 1 : position.level;\n\n if (this.isGroup(this.draggedNode)) {\n // We add an extra level +1 to avoid empty group in group\n level = level + +(this.getDescendantLevels(this.draggedNode) ?? 0) + 1;\n }\n\n if (level > maxLevel) {\n return {\n canDrop: false,\n message: 'igo.common.dragDrop.cannot.maxLevel',\n params: { value: maxLevel }\n };\n }\n }\n\n private getDescendants(node: T): T[] {\n const children = this.childrenAccessor()(node) ?? [];\n const descendants: T[] = [...children];\n children.forEach((child) => {\n descendants.push(...this.getDescendants(child));\n });\n return descendants;\n }\n\n private isHoverDescendant(id: string | number, _hoveredNode: T): boolean {\n return this.getDescendants(this.draggedNode).some(\n (child) => child.id === id\n );\n }\n\n private getPosition(event: DragEvent, hoveredNode: T): DropPosition {\n if (this.isGroup(this.draggedNode)) {\n if (this.isHoverDescendant(hoveredNode.id, hoveredNode)) {\n hoveredNode = this.draggedNode;\n }\n }\n\n let positionType = this.getPositionType(event, hoveredNode);\n\n const bellowOpenedGroup =\n this.isGroup(hoveredNode) &&\n positionType === 'below' &&\n this.tree().isExpanded(hoveredNode);\n if (bellowOpenedGroup) {\n positionType = 'inside';\n }\n\n return {\n x: event.x,\n y: this.getPositionY(hoveredNode, positionType),\n level: this.getPositionLevel(hoveredNode, positionType, event.x),\n type: positionType\n };\n }\n\n private getPositionY(node: T, type: DropPositionType): number {\n const element = this.getNodeElement(node);\n const rect = element.getBoundingClientRect();\n\n return type === 'below'\n ? element.offsetTop + rect.height - 1\n : element.offsetTop + 1;\n }\n\n private getPositionType(event: DragEvent, hoveredNode: T): DropPositionType {\n const target = this.getNodeElement(hoveredNode);\n const rect = target.getBoundingClientRect();\n const middle = rect.top + rect.height / 2;\n const y = event.y;\n\n const selfReferencing = this.draggedNode.id === hoveredNode.id;\n if (this.isGroup(hoveredNode) && !selfReferencing) {\n const tolerence = 5;\n if (y <= middle + tolerence && y >= middle - tolerence) {\n return 'inside';\n }\n }\n\n const isBelow = y > middle;\n return isBelow ? 'below' : 'above';\n }\n\n private getPositionLevel(\n hoveredNode: T,\n type: DropPositionType,\n x: number\n ): number {\n const hoveredNodeLevel = this.getNodeLevel(hoveredNode);\n if (hoveredNodeLevel === 0) {\n return 0;\n }\n\n const ancestor = this.getNodeAncestors(hoveredNode.id);\n if (!ancestor) return hoveredNodeLevel;\n\n const children = this.getDirectDescendants(ancestor);\n const lastChild = [...children].pop();\n\n if (type === 'below' && lastChild?.id === hoveredNode.id) {\n const target = this.getNodeElement(hoveredNode);\n const rect = target.getBoundingClientRect();\n\n const indentation = 24;\n const xMin = rect.x + indentation;\n const xMax = xMin + indentation * hoveredNodeLevel;\n\n const isInsideSameGroup = x > xMax;\n if (!isInsideSameGroup) {\n const levelSubstracted = Math.round((xMax - x) / indentation);\n return Math.max(0, hoveredNodeLevel - levelSubstracted);\n }\n }\n return hoveredNodeLevel;\n }\n\n /**\n * @param level if level is defined with go to the defined levle to find ancestor. Sinon on prend le current ancestor\n */\n private getNodeAncestors(id: string | number, level?: number): T | undefined {\n const path = this.getAncestorsPath(id);\n if (path.length === 0) {\n return undefined;\n }\n\n if (level !== undefined) {\n return path[level];\n }\n return path[path.length - 1];\n }\n\n private getAncestorsPath(id: string | number): T[] {\n const nodes = this.nodes();\n const roots = nodes.filter((n) => n.level === 0).map((n) => n.data);\n\n for (const root of roots) {\n const path: T[] = [];\n if (this.findPath(root, id, path)) {\n return path;\n }\n }\n\n return [];\n }\n\n private findPath(\n currentNode: T,\n targetId: string | number,\n path: T[]\n ): boolean {\n if (String(currentNode.id) === String(targetId)) {\n return true;\n }\n\n const children = this.childrenAccessor()(currentNode) ?? [];\n for (const child of children) {\n path.push(currentNode);\n if (this.findPath(child, targetId, path)) {\n return true;\n }\n path.pop();\n }\n return false;\n }\n\n private getNodeLevel(node: T): number {\n const treeNode = this.findTreeNode(node.id);\n return treeNode ? treeNode.level : 0;\n }\n\n private getDirectDescendants(node: T): T[] {\n return this.childrenAccessor()(node) ?? [];\n }\n\n private findTreeNode(id: string | number): MatTreeNode<T> | undefined {\n return this.nodes().find((n) => String(n.data.id) === String(id));\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { DragAndDropDirective } from './drag-drop.directive';\nimport { TreeDragDropDirective } from './tree-drag-drop/tree-drag-drop.directive';\n\n/**\n * @deprecated import the DragAndDropDirective directly\n */\n@NgModule({\n imports: [DragAndDropDirective, TreeDragDropDirective],\n exports: [DragAndDropDirective, TreeDragDropDirective]\n})\nexport class IgoDrapDropModule {\n static forRoot(): ModuleWithProviders<IgoDrapDropModule> {\n return {\n ngModule: IgoDrapDropModule,\n providers: []\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@igo2/common",
|
|
3
|
-
"version": "20.1.0-next.
|
|
3
|
+
"version": "20.1.0-next.16",
|
|
4
4
|
"description": "IGO Library",
|
|
5
5
|
"author": "IGO Community",
|
|
6
6
|
"keywords": [
|
|
@@ -186,8 +186,8 @@
|
|
|
186
186
|
"@angular/material": "^20.0.0",
|
|
187
187
|
"@angular/platform-browser": "^20.0.0",
|
|
188
188
|
"@floating-ui/utils": "^0.2.0",
|
|
189
|
-
"@igo2/core": "^20.1.0-next.
|
|
190
|
-
"@igo2/utils": "^20.1.0-next.
|
|
189
|
+
"@igo2/core": "^20.1.0-next.16",
|
|
190
|
+
"@igo2/utils": "^20.1.0-next.16",
|
|
191
191
|
"angular-shepherd": "^20.0.0",
|
|
192
192
|
"ngx-color": "^10.0.0",
|
|
193
193
|
"scroll-into-view-if-needed": "^3.1.0",
|