MOBILE-2314 core: Delegate registry functionality
This commit is contained in:
		
							parent
							
								
									3ca1094979
								
							
						
					
					
						commit
						e1c431b06a
					
				| @ -14,8 +14,7 @@ | ||||
| 
 | ||||
| import { Component } from '@angular/core'; | ||||
| import { AsyncDirective } from '@classes/async-directive'; | ||||
| import { CoreUtils } from '@services/utils/utils'; | ||||
| import { CoreLogger } from './logger'; | ||||
| import { CoreDirectivesRegistry } from '@singletons/directives-registry'; | ||||
| 
 | ||||
| /** | ||||
|  * Registry to keep track of component instances. | ||||
| @ -24,9 +23,6 @@ import { CoreLogger } from './logger'; | ||||
|  */ | ||||
| export class CoreComponentsRegistry { | ||||
| 
 | ||||
|     private static instances: WeakMap<Element, unknown> = new WeakMap(); | ||||
|     protected static logger = CoreLogger.getInstance('CoreComponentsRegistry'); | ||||
| 
 | ||||
|     /** | ||||
|      * Register a component instance. | ||||
|      * | ||||
| @ -34,7 +30,7 @@ export class CoreComponentsRegistry { | ||||
|      * @param instance Component instance. | ||||
|      */ | ||||
|     static register(element: Element, instance: unknown): void { | ||||
|         this.instances.set(element, instance); | ||||
|         CoreDirectivesRegistry.register(element, instance); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
| @ -45,11 +41,7 @@ export class CoreComponentsRegistry { | ||||
|      * @returns Component instance. | ||||
|      */ | ||||
|     static resolve<T>(element?: Element | null, componentClass?: ComponentConstructor<T>): T | null { | ||||
|         const instance = (element && this.instances.get(element) as T) ?? null; | ||||
| 
 | ||||
|         return instance && (!componentClass || instance instanceof componentClass) | ||||
|             ? instance | ||||
|             : null; | ||||
|         return CoreDirectivesRegistry.resolve(element, componentClass); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
| @ -60,13 +52,7 @@ export class CoreComponentsRegistry { | ||||
|      * @returns Component instance. | ||||
|      */ | ||||
|     static require<T>(element: Element, componentClass?: ComponentConstructor<T>): T { | ||||
|         const instance = this.resolve(element, componentClass); | ||||
| 
 | ||||
|         if (!instance) { | ||||
|             throw new Error('Couldn\'t resolve component instance'); | ||||
|         } | ||||
| 
 | ||||
|         return instance; | ||||
|         return CoreDirectivesRegistry.require(element, componentClass); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
| @ -80,14 +66,7 @@ export class CoreComponentsRegistry { | ||||
|         element: Element | null, | ||||
|         componentClass?: ComponentConstructor<T>, | ||||
|     ): Promise<void> { | ||||
|         const instance = this.resolve(element, componentClass); | ||||
|         if (!instance) { | ||||
|             this.logger.error('No instance registered for element ' + componentClass, element); | ||||
| 
 | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         await instance.ready(); | ||||
|         return CoreDirectivesRegistry.waitDirectiveReady(element, componentClass); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
| @ -103,23 +82,7 @@ export class CoreComponentsRegistry { | ||||
|         selector: string, | ||||
|         componentClass?: ComponentConstructor<T>, | ||||
|     ): Promise<void> { | ||||
|         let elements: Element[] = []; | ||||
| 
 | ||||
|         if (element.matches(selector)) { | ||||
|             // Element to wait is myself.
 | ||||
|             elements = [element]; | ||||
|         } else { | ||||
|             elements = Array.from(element.querySelectorAll(selector)); | ||||
|         } | ||||
| 
 | ||||
|         if (!elements.length) { | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         await Promise.all(elements.map(element => CoreComponentsRegistry.waitComponentReady<T>(element, componentClass))); | ||||
| 
 | ||||
|         // Wait for next tick to ensure components are completely rendered.
 | ||||
|         await CoreUtils.nextTick(); | ||||
|         return CoreDirectivesRegistry.waitDirectivesReady(element, selector, componentClass); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user