14
14
15
15
import { Component } from '@angular/core' ;
16
16
import { AsyncDirective } from '@classes/async-directive' ;
17
- import { CoreUtils } from '@services/utils/utils' ;
18
- import { CoreLogger } from './logger' ;
17
+ import { CoreDirectivesRegistry } from '@singletons/directives-registry' ;
19
18
20
19
/**
21
20
* Registry to keep track of component instances.
@@ -24,17 +23,14 @@ import { CoreLogger } from './logger';
24
23
*/
25
24
export class CoreComponentsRegistry {
26
25
27
- private static instances : WeakMap < Element , unknown > = new WeakMap ( ) ;
28
- protected static logger = CoreLogger . getInstance ( 'CoreComponentsRegistry' ) ;
29
-
30
26
/**
31
27
* Register a component instance.
32
28
*
33
29
* @param element Root element.
34
30
* @param instance Component instance.
35
31
*/
36
32
static register ( element : Element , instance : unknown ) : void {
37
- this . instances . set ( element , instance ) ;
33
+ CoreDirectivesRegistry . register ( element , instance ) ;
38
34
}
39
35
40
36
/**
@@ -45,11 +41,7 @@ export class CoreComponentsRegistry {
45
41
* @returns Component instance.
46
42
*/
47
43
static resolve < T > ( element ?: Element | null , componentClass ?: ComponentConstructor < T > ) : T | null {
48
- const instance = ( element && this . instances . get ( element ) as T ) ?? null ;
49
-
50
- return instance && ( ! componentClass || instance instanceof componentClass )
51
- ? instance
52
- : null ;
44
+ return CoreDirectivesRegistry . resolve ( element , componentClass ) ;
53
45
}
54
46
55
47
/**
@@ -60,13 +52,7 @@ export class CoreComponentsRegistry {
60
52
* @returns Component instance.
61
53
*/
62
54
static require < T > ( element : Element , componentClass ?: ComponentConstructor < T > ) : T {
63
- const instance = this . resolve ( element , componentClass ) ;
64
-
65
- if ( ! instance ) {
66
- throw new Error ( 'Couldn\'t resolve component instance' ) ;
67
- }
68
-
69
- return instance ;
55
+ return CoreDirectivesRegistry . require ( element , componentClass ) ;
70
56
}
71
57
72
58
/**
@@ -80,14 +66,7 @@ export class CoreComponentsRegistry {
80
66
element : Element | null ,
81
67
componentClass ?: ComponentConstructor < T > ,
82
68
) : Promise < void > {
83
- const instance = this . resolve ( element , componentClass ) ;
84
- if ( ! instance ) {
85
- this . logger . error ( 'No instance registered for element ' + componentClass , element ) ;
86
-
87
- return ;
88
- }
89
-
90
- await instance . ready ( ) ;
69
+ return CoreDirectivesRegistry . waitDirectiveReady ( element , componentClass ) ;
91
70
}
92
71
93
72
/**
@@ -103,23 +82,7 @@ export class CoreComponentsRegistry {
103
82
selector : string ,
104
83
componentClass ?: ComponentConstructor < T > ,
105
84
) : Promise < void > {
106
- let elements : Element [ ] = [ ] ;
107
-
108
- if ( element . matches ( selector ) ) {
109
- // Element to wait is myself.
110
- elements = [ element ] ;
111
- } else {
112
- elements = Array . from ( element . querySelectorAll ( selector ) ) ;
113
- }
114
-
115
- if ( ! elements . length ) {
116
- return ;
117
- }
118
-
119
- await Promise . all ( elements . map ( element => CoreComponentsRegistry . waitComponentReady < T > ( element , componentClass ) ) ) ;
120
-
121
- // Wait for next tick to ensure components are completely rendered.
122
- await CoreUtils . nextTick ( ) ;
85
+ return CoreDirectivesRegistry . waitDirectivesReady ( element , selector , componentClass ) ;
123
86
}
124
87
125
88
}
0 commit comments