Browse Source

UI: Fixed clear cache in SystemJs load resources

pull/8562/head
Vladyslav_Prykhodko 3 years ago
parent
commit
01065ec0c5
  1. 59
      ui-ngx/src/app/core/services/resources.service.ts

59
ui-ngx/src/app/core/services/resources.service.ts

@ -33,6 +33,7 @@ import { AuthService } from '@core/auth/auth.service';
import { select, Store } from '@ngrx/store';
import { selectIsAuthenticated } from '@core/auth/auth.selectors';
import { AppState } from '@core/core.state';
import { tap } from 'rxjs/operators';
declare const System;
@ -57,7 +58,7 @@ export class ResourcesService {
private compiler: Compiler,
private http: HttpClient,
private injector: Injector) {
this.store.pipe(select(selectIsAuthenticated)).subscribe(() => this.clearCache());
this.store.pipe(select(selectIsAuthenticated)).subscribe(() => this.clearModulesCache());
}
public loadResource(url: string): Observable<any> {
@ -71,9 +72,9 @@ export class ResourcesService {
fileType = match[1];
}
if (!fileType) {
return throwError(new Error(`Unable to detect file type from url: ${url}`));
return throwError(() => new Error(`Unable to detect file type from url: ${url}`));
} else if (fileType !== 'css' && fileType !== 'js') {
return throwError(new Error(`Unsupported file type: ${fileType}`));
return throwError(() => new Error(`Unsupported file type: ${fileType}`));
}
return this.loadResourceByType(fileType, url);
}
@ -97,7 +98,8 @@ export class ResourcesService {
for (const m of modules) {
tasks.push(this.compiler.compileModuleAndAllComponentsAsync(m));
}
forkJoin(tasks).subscribe((compiled) => {
forkJoin(tasks).subscribe({
next: (compiled) => {
try {
const componentFactories: ComponentFactory<any>[] = [];
for (const c of compiled) {
@ -112,26 +114,32 @@ export class ResourcesService {
this.loadedModulesAndFactories[url].complete();
} catch (e) {
this.loadedModulesAndFactories[url].error(new Error(`Unable to init module from url: ${url}`));
delete this.loadedModulesAndFactories[url];
}
},
(e) => {
error: (e) => {
this.loadedModulesAndFactories[url].error(new Error(`Unable to compile module from url: ${url}`));
delete this.loadedModulesAndFactories[url];
});
}
});
} else {
this.loadedModulesAndFactories[url].error(new Error(`Module '${url}' doesn't have default export!`));
delete this.loadedModulesAndFactories[url];
}
},
(e) => {
this.loadedModulesAndFactories[url].error(new Error(`Unable to load module from url: ${url}`));
delete this.loadedModulesAndFactories[url];
}
);
}
);
return subject.asObservable();
return subject.asObservable().pipe(
tap({
next: () => System.delete(url),
error: () => {
delete this.loadedModulesAndFactories[url];
System.delete(url);
},
complete: () => System.delete(url)
})
);
}
public loadModules(resourceId: string | TbResourceId, modulesMap: IModulesMap): Observable<Type<any>[]> {
@ -168,31 +176,35 @@ export class ResourcesService {
this.loadedModules[url].complete();
} catch (e) {
this.loadedModules[url].error(new Error(`Unable to init module from url: ${url}`));
delete this.loadedModules[url];
}
},
(e) => {
this.loadedModules[url].error(new Error(`Unable to compile module from url: ${url}`));
delete this.loadedModules[url];
});
} else {
this.loadedModules[url].error(new Error(`Module '${url}' doesn't have default export or not NgModule!`));
delete this.loadedModules[url];
}
} catch (e) {
this.loadedModules[url].error(new Error(`Unable to load module from url: ${url}`));
delete this.loadedModules[url];
}
},
(e) => {
this.loadedModules[url].error(new Error(`Unable to load module from url: ${url}`));
delete this.loadedModules[url];
console.error(`Unable to load module from url: ${url}`, e);
}
);
}
);
return subject.asObservable();
return subject.asObservable().pipe(
tap({
next: () => System.delete(url),
error: () => {
delete this.loadedModulesAndFactories[url];
System.delete(url);
},
complete: () => System.delete(url)
})
);
}
private extractNgModules(module: any, modules: Type<any>[] = []): Type<any>[] {
@ -277,19 +289,8 @@ export class ResourcesService {
}
}
private deleteFromSystemJS(keys: string[]) {
keys.forEach(item => {
if (System.has(item)) {
System.delete(item);
}
});
}
private clearCache() {
this.deleteFromSystemJS(Object.keys(this.loadedModules));
private clearModulesCache() {
this.loadedModules = {};
this.deleteFromSystemJS(Object.keys(this.loadedModulesAndFactories));
this.loadedModulesAndFactories = {};
}
}

Loading…
Cancel
Save