Skip to content

Commit 081a79c

Browse files
NoelDeMartindpalou
authored andcommitted
MOBILE-2314 core: Delegate registry functionality
1 parent 28ada9b commit 081a79c

File tree

1 file changed

+6
-43
lines changed

1 file changed

+6
-43
lines changed

Diff for: src/core/singletons/components-registry.ts

+6-43
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414

1515
import { Component } from '@angular/core';
1616
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';
1918

2019
/**
2120
* Registry to keep track of component instances.
@@ -24,17 +23,14 @@ import { CoreLogger } from './logger';
2423
*/
2524
export class CoreComponentsRegistry {
2625

27-
private static instances: WeakMap<Element, unknown> = new WeakMap();
28-
protected static logger = CoreLogger.getInstance('CoreComponentsRegistry');
29-
3026
/**
3127
* Register a component instance.
3228
*
3329
* @param element Root element.
3430
* @param instance Component instance.
3531
*/
3632
static register(element: Element, instance: unknown): void {
37-
this.instances.set(element, instance);
33+
CoreDirectivesRegistry.register(element, instance);
3834
}
3935

4036
/**
@@ -45,11 +41,7 @@ export class CoreComponentsRegistry {
4541
* @returns Component instance.
4642
*/
4743
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);
5345
}
5446

5547
/**
@@ -60,13 +52,7 @@ export class CoreComponentsRegistry {
6052
* @returns Component instance.
6153
*/
6254
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);
7056
}
7157

7258
/**
@@ -80,14 +66,7 @@ export class CoreComponentsRegistry {
8066
element: Element | null,
8167
componentClass?: ComponentConstructor<T>,
8268
): 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);
9170
}
9271

9372
/**
@@ -103,23 +82,7 @@ export class CoreComponentsRegistry {
10382
selector: string,
10483
componentClass?: ComponentConstructor<T>,
10584
): 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);
12386
}
12487

12588
}

0 commit comments

Comments
 (0)