MOBILE-4081 core: Improve fa-icon dev performance
This commit is contained in:
		
							parent
							
								
									3f138b8ee8
								
							
						
					
					
						commit
						dba43ddaf4
					
				
							
								
								
									
										14
									
								
								.eslintrc.js
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								.eslintrc.js
									
									
									
									
									
								
							@ -103,12 +103,22 @@ const appConfig = {
 | 
				
			|||||||
            'error',
 | 
					            'error',
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                selector: 'property',
 | 
					                selector: 'property',
 | 
				
			||||||
                modifiers: ['readonly'],
 | 
					                format: ['camelCase'],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                selector: 'property',
 | 
				
			||||||
 | 
					                modifiers: ['public', 'readonly'],
 | 
				
			||||||
                format: ['UPPER_CASE'],
 | 
					                format: ['UPPER_CASE'],
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                selector: 'property',
 | 
					                selector: 'property',
 | 
				
			||||||
                format: ['camelCase'],
 | 
					                modifiers: ['protected', 'readonly'],
 | 
				
			||||||
 | 
					                format: ['UPPER_CASE'],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                selector: 'property',
 | 
				
			||||||
 | 
					                modifiers: ['private', 'readonly'],
 | 
				
			||||||
 | 
					                format: ['UPPER_CASE'],
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                selector: 'property',
 | 
					                selector: 'property',
 | 
				
			||||||
 | 
				
			|||||||
@ -30,6 +30,11 @@ import { CoreConstants } from '@/core/constants';
 | 
				
			|||||||
})
 | 
					})
 | 
				
			||||||
export class CoreFaIconDirective implements AfterViewInit, OnChanges {
 | 
					export class CoreFaIconDirective implements AfterViewInit, OnChanges {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Object used to store whether icons exist or not during development.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private static readonly DEV_ICONS_STATUS: Record<string, Promise<boolean>> = {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Input() name = '';
 | 
					    @Input() name = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected element: HTMLElement;
 | 
					    protected element: HTMLElement;
 | 
				
			||||||
@ -89,14 +94,7 @@ export class CoreFaIconDirective implements AfterViewInit, OnChanges {
 | 
				
			|||||||
        const src = `assets/fonts/${font}/${library}/${iconName}.svg`;
 | 
					        const src = `assets/fonts/${font}/${library}/${iconName}.svg`;
 | 
				
			||||||
        this.element.setAttribute('src', src);
 | 
					        this.element.setAttribute('src', src);
 | 
				
			||||||
        this.element.classList.add('faicon');
 | 
					        this.element.classList.add('faicon');
 | 
				
			||||||
 | 
					        this.validateIcon(this.name, src);
 | 
				
			||||||
        if (CoreConstants.BUILD.isDevelopment || CoreConstants.BUILD.isTesting) {
 | 
					 | 
				
			||||||
            try {
 | 
					 | 
				
			||||||
                await Http.get(src, { responseType: 'text' }).toPromise();
 | 
					 | 
				
			||||||
            } catch (error) {
 | 
					 | 
				
			||||||
                this.logger.error(`Icon ${this.name} not found`);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -123,4 +121,32 @@ export class CoreFaIconDirective implements AfterViewInit, OnChanges {
 | 
				
			|||||||
        this.setIcon();
 | 
					        this.setIcon();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Validate that an icon exists, or show warning otherwise (only in development and testing environments).
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param name Icon name.
 | 
				
			||||||
 | 
					     * @param src Icon source url.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private validateIcon(name: string, src: string): void {
 | 
				
			||||||
 | 
					        if (!CoreConstants.BUILD.isDevelopment && !CoreConstants.BUILD.isTesting) {
 | 
				
			||||||
 | 
					            return;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!(src in CoreFaIconDirective.DEV_ICONS_STATUS)) {
 | 
				
			||||||
 | 
					            CoreFaIconDirective.DEV_ICONS_STATUS[src] = Http.get(src, { responseType: 'text' })
 | 
				
			||||||
 | 
					                .toPromise()
 | 
				
			||||||
 | 
					                .then(() => true)
 | 
				
			||||||
 | 
					                .catch(() => false);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // eslint-disable-next-line promise/catch-or-return
 | 
				
			||||||
 | 
					        CoreFaIconDirective.DEV_ICONS_STATUS[src].then(exists => {
 | 
				
			||||||
 | 
					            if (exists) {
 | 
				
			||||||
 | 
					                return;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return this.logger.error(`Icon ${name} not found`);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user