import { Component , ViewEncapsulation , OnInit } from '@angular/core' ; import { AppConfigService , StorageService , OauthConfigModel } from '@alfresco/adf-core' ; import { Validators , FormGroup , FormBuilder } from '@angular/forms' ; import { Observable } from 'rxjs' ; import { Store } from '@ngrx/store' ; import { AppStore , getHeaderColor , getAppName , getUserProfile , SetSettingsParameterAction } from '@alfresco/aca-shared/store' ; import { ProfileState } from '@alfresco/adf-extensions' ; import { AppExtensionService , SettingsGroupRef , SettingsParameterRef } from '@alfresco/aca-shared' ; interface RepositoryConfig { ecmHost : string ; authType : string ; aisHost : string ; } @ Component ( { selector : 'aca-settings' , templateUrl : './settings.component.html' , styleUrls : [ './settings.component.scss' ] , encapsulation : ViewEncapsulation . None , host : { class : 'aca-settings' } } ) export class SettingsComponent implements OnInit { private defaultPath = '/assets/images/alfresco-logo-white.svg' ; form : FormGroup ; profile$ : Observable < ProfileState > ; appName$ : Observable < string > ; headerColor$ : Observable < string > ; get settingGroups ( ) : SettingsGroupRef [ ] { return this . appExtensions . getSettingsGroups ( ) ; } constructor ( private appExtensions , private store , private appConfig , private storage , private fb ) { this . profile$ = store . select ( getUserProfile ) ; this . appName$ = store . select ( getAppName ) ; this . headerColor$ = store . select ( getHeaderColor ) ; } get logo ( ) : string { return this . appConfig . get ( 'application.logo' , this . defaultPath ) ; } ngOnInit ( ) { this . form = this . fb . group ( { ecmHost : [ '' , [ Validators . required , Validators . pattern ( '^(http|https)://.*[^/]$' ) ] ] , aisHost : [ '' , [ Validators . required , Validators . pattern ( '^(http|https)://.*[^/]$' ) ] ] , authType : [ '' ] } ) ; this . reset ( ) ; } apply ( model , isValid ) { if ( isValid ) { this . storage . setItem ( 'ecmHost' , model . ecmHost ) ; this . storage . setItem ( 'authType' , model . authType ) ; const config = this . appConfig . get < OauthConfigModel > ( 'oauth2' , null ) ; config . host = model . aisHost ; this . storage . setItem ( 'oauth2' , JSON . stringify ( config ) ) ; } } reset ( ) { const config = this . appConfig . get < OauthConfigModel > ( 'oauth2' , null ) ; this . form . reset ( { ecmHost : this . storage . getItem ( 'ecmHost' ) || this . appConfig . get < string > ( 'ecmHost' ) , aisHost : config . host , authType : this . appConfig . get < string > ( 'authType' ) } ) ; } getStringParamValue ( param ) { return this . storage . getItem ( param . key ) || param . value ; } setParamValue ( param , value ) { const currentValue = this . getStringParamValue ( param ) ; if ( currentValue !== value . toString ( ) ) { param . value = value ; this . saveToStorage ( param ) ; } } onParamValueChanged ( event , param ) { const target = event . target as HTMLInputElement ; this . setParamValue ( param , target . value ) ; } getBooleanParamValue ( param ) { const result = this . storage . getItem ( param . key ) ; if ( result ) { return result === 'true' ; } else { return ! ! param . value ; } } private saveToStorage ( param ) { this . storage . setItem ( param . key , param . value ? param . value . toString ( ) : param . value ) ; this . store . dispatch ( new SetSettingsParameterAction ( { name : param . key , value : param . value } ) ) ; } }