diff --git a/lib/core/directives/version-compatibility.directive.ts b/lib/core/directives/version-compatibility.directive.ts index aa32b6349c..3b6e3d4039 100644 --- a/lib/core/directives/version-compatibility.directive.ts +++ b/lib/core/directives/version-compatibility.directive.ts @@ -37,10 +37,12 @@ export class VersionCompatibilityDirective { } private validateAcsVersion(requiredVersion: string) { - if (requiredVersion && this.versionCompatibilityService.isVersionSupported(requiredVersion)) { - this.viewContainer.createEmbeddedView(this.templateRef); - } else { - this.viewContainer.clear(); - } + this.versionCompatibilityService.acsVersionInitialized$.subscribe(() => { + if (requiredVersion && this.versionCompatibilityService.isVersionSupported(requiredVersion)) { + this.viewContainer.createEmbeddedView(this.templateRef); + } else { + this.viewContainer.clear(); + } + }); } } diff --git a/lib/core/services/version-compatibility.service.spec.ts b/lib/core/services/version-compatibility.service.spec.ts index 7ea2ca41c3..b2616b9082 100644 --- a/lib/core/services/version-compatibility.service.spec.ts +++ b/lib/core/services/version-compatibility.service.spec.ts @@ -73,4 +73,11 @@ describe('VersionCompatibilityService', () => { expect(versionCompatibilityService.isVersionSupported('7.0.0')).toBe(true); expect(versionCompatibilityService.isVersionSupported('6.0.0')).toBe(true); }); + + it('should emit versionCompatibilityInitialized after retrieving acs version', (done) => { + versionCompatibilityService.acsVersionInitialized$.subscribe(() => { + expect(versionCompatibilityService.getAcsVersion()).toEqual({ display: '7.0.1', major: '7', minor: '0', patch: '1' } as any); + done(); + }); + }); }); diff --git a/lib/core/services/version-compatibility.service.ts b/lib/core/services/version-compatibility.service.ts index d795be5649..542107091d 100644 --- a/lib/core/services/version-compatibility.service.ts +++ b/lib/core/services/version-compatibility.service.ts @@ -19,6 +19,7 @@ import { Injectable } from '@angular/core'; import { DiscoveryApiService } from './discovery-api.service'; import { VersionModel, EcmProductVersionModel } from '../models/product-version.model'; import { filter } from 'rxjs/operators'; +import { ReplaySubject } from 'rxjs'; @Injectable({ providedIn: 'root' @@ -26,10 +27,17 @@ import { filter } from 'rxjs/operators'; export class VersionCompatibilityService { private acsVersion: VersionModel; + acsVersionInitialized$ = new ReplaySubject(); + constructor(private discoveryApiService: DiscoveryApiService) { this.discoveryApiService.ecmProductInfo$ .pipe(filter(acsInfo => !!acsInfo)) - .subscribe((acsInfo: EcmProductVersionModel) => this.acsVersion = acsInfo.version); + .subscribe((acsInfo: EcmProductVersionModel) => this.initializeAcsVersion(acsInfo.version)); + } + + private initializeAcsVersion(acsVersion: VersionModel) { + this.acsVersion = acsVersion; + this.acsVersionInitialized$.next(); } getAcsVersion(): VersionModel {