[ADF-2676] Demo shell pagination bug fix (#3174)

* Demo shell pagination bug fix

* tslint error fix

* user preferences service fix

* refactor

* refactor

* refactor

* unit tests added

* unit tests fix

* [ADF-2676] added documentation for app config onChange stream

* [ADF-2676] renamed onChange stream to onLoad stream

* [ADF-2676] fixed test
This commit is contained in:
Alex Bolboșenco
2018-04-14 04:47:06 +03:00
committed by Eugenio Romano
parent d0f5bad894
commit 66d8935624
4 changed files with 53 additions and 2 deletions

View File

@@ -98,3 +98,28 @@ The supported variables are:
| ------------- | ------------- | | ------------- | ------------- |
| hostname | `location.hostname` | | hostname | `location.hostname` |
| port | `location.port` | | port | `location.port` |
## App Config onLoad Stream
When the app config is loaded correctly an onChange event is sent with the whole set app config properties. This comes in handy when a component wants to react to some property change or interact with the app config when it's correctly loaded.
```ts
appConfig.onLoad.subscribe((appConfig) => {
console.log(appConfig); //this is the representation of the app-config
});
```
We have added also the `select` method where the user can give the property name which wants to be notified the when the app config is loaded and get the value.
```json
appconfig : {
logLevel : 'trace'
}
```
```ts
appConfig.select('logLevel').subscribe((logLevelValue) => {
console.log(logLevelValue); //this will be 'trace';
});
```

View File

@@ -16,7 +16,7 @@
*/ */
import { HttpClientModule } from '@angular/common/http'; import { HttpClientModule } from '@angular/common/http';
import { inject, TestBed } from '@angular/core/testing'; import { async, inject, TestBed } from '@angular/core/testing';
import { AppConfigService } from './app-config.service'; import { AppConfigService } from './app-config.service';
import { AppConfigModule } from './app-config.module'; import { AppConfigModule } from './app-config.module';
@@ -72,6 +72,20 @@ describe('AppConfigService', () => {
expect(appConfigService).toBeDefined(); expect(appConfigService).toBeDefined();
}); });
it('should stream only the selected attribute changes when using select', async(() => {
appConfigService.config.testProp = true;
appConfigService.select('testProp').subscribe((property) => {
expect(property).toBeTruthy();
});
}));
it('should stream the page size value when is set', async(() => {
appConfigService.config.testProp = true;
appConfigService.onLoad.subscribe((config) => {
expect(config.testProp).toBeTruthy();
});
}));
it('should skip the optional port number', () => { it('should skip the optional port number', () => {
appConfigService.config.testUrl = 'http://{hostname}{:port}'; appConfigService.config.testUrl = 'http://{hostname}{:port}';

View File

@@ -18,6 +18,8 @@
import { HttpClient } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { ObjectUtils } from '../utils/object-utils'; import { ObjectUtils } from '../utils/object-utils';
import { BehaviorSubject } from 'rxjs/BehaviorSubject';
import { Observable } from 'rxjs/Observable';
@Injectable() @Injectable()
export class AppConfigService { export class AppConfigService {
@@ -34,7 +36,16 @@ export class AppConfigService {
alfrescoRepositoryName: 'alfresco-1' alfrescoRepositoryName: 'alfresco-1'
}; };
private onLoadSubject: BehaviorSubject<any>;
onLoad: Observable<any>;
constructor(private http: HttpClient) { constructor(private http: HttpClient) {
this.onLoadSubject = new BehaviorSubject(this.config);
this.onLoad = this.onLoadSubject.asObservable();
}
select(property: string): Observable<any> {
return this.onLoadSubject.map((config) => config[property]).distinctUntilChanged();
} }
get<T>(key: string, defaultValue?: T): T { get<T>(key: string, defaultValue?: T): T {
@@ -65,6 +76,7 @@ export class AppConfigService {
this.http.get('app.config.json').subscribe( this.http.get('app.config.json').subscribe(
(data: any) => { (data: any) => {
this.config = Object.assign({}, this.config, data || {}); this.config = Object.assign({}, this.config, data || {});
this.onLoadSubject.next(this.config);
resolve(this.config); resolve(this.config);
}, },
() => { () => {

View File

@@ -61,7 +61,7 @@ export class UserPreferencesService {
private storage: StorageService, private storage: StorageService,
private apiService: AlfrescoApiService private apiService: AlfrescoApiService
) { ) {
this.initUserPreferenceStatus(); this.appConfig.onLoad.subscribe(this.initUserPreferenceStatus.bind(this));
this.localeSubject = new BehaviorSubject(this.defaults.locale); this.localeSubject = new BehaviorSubject(this.defaults.locale);
this.locale$ = this.localeSubject.asObservable(); this.locale$ = this.localeSubject.asObservable();
this.onChangeSubject = new BehaviorSubject(this.userPreferenceStatus); this.onChangeSubject = new BehaviorSubject(this.userPreferenceStatus);