[ADF-4227] Material Dialog - change direction option based on textOrientation (#4716)

* change matDialog direction based on textOrientation

* move dialog providers to material.module

* extend initial options

* move UserPreferencesService from factory

* update module

* update test

* material dialog correct reference

* extend default global options

* tests
This commit is contained in:
Cilibiu Bogdan
2019-05-14 14:52:03 +03:00
committed by Denys Vuika
parent de0f906163
commit 164d398abc
6 changed files with 164 additions and 2 deletions

View File

@@ -53,6 +53,8 @@ import { SortingPickerModule } from './sorting-picker/sorting-picker.module';
import { IconModule } from './icon/icon.module';
import { TranslateLoaderService } from './services/translate-loader.service';
import { ExtensionsModule } from '@alfresco/adf-extensions';
import { dialogConfigFactory } from './services/dialog-config-factory';
import { DialogConfigService } from './services/dialog-config.service';
@NgModule({
imports: [
@@ -135,6 +137,12 @@ export class CoreModule {
AlfrescoApiService
],
multi: true
},
{
provide: APP_INITIALIZER,
useFactory: dialogConfigFactory,
deps: [ DialogConfigService],
multi: true
}
]
};

View File

@@ -24,7 +24,7 @@ import {
MatInputModule, MatListModule, MatNativeDateModule, MatOptionModule, MatProgressSpinnerModule, MatRadioModule,
MatRippleModule, MatSelectModule, MatSlideToggleModule, MatTableModule, MatTabsModule,
MatMenuModule, MatProgressBarModule, MatSidenavModule, MatSnackBarModule, MatToolbarModule,
MatTooltipModule, MatExpansionModule
MatTooltipModule, MatExpansionModule, MAT_DIALOG_DEFAULT_OPTIONS, MatDialogConfig
} from '@angular/material';
export function modules() {
@@ -40,6 +40,13 @@ export function modules() {
@NgModule({
imports: modules(),
providers: [
MatDialogConfig,
{
provide: MAT_DIALOG_DEFAULT_OPTIONS,
useValue: MAT_DIALOG_DEFAULT_OPTIONS
}
],
exports: modules()
})
export class MaterialModule {}

View File

@@ -0,0 +1,23 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { DialogConfigService } from '../services/dialog-config.service';
export function dialogConfigFactory(
dialogConfigService: DialogConfigService
): Function {
return () => dialogConfigService.loadDefaults();
}

View File

@@ -0,0 +1,69 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { TestBed } from '@angular/core/testing';
import { DialogConfigService } from './dialog-config.service';
import { CoreTestingModule } from '../testing/core.testing.module';
import { setupTestBed } from '../testing/setupTestBed';
import { MAT_DIALOG_DEFAULT_OPTIONS, MatDialogConfig } from '@angular/material/dialog';
import { UserPreferencesService } from './user-preferences.service';
import { Direction } from '@angular/cdk/bidi';
describe('DialogConfigService', () => {
let matDialogConfig: MatDialogConfig;
let userPreferencesService: UserPreferencesService;
let matDialogGlobalOptions: MatDialogConfig;
setupTestBed({
imports: [CoreTestingModule],
providers: [
DialogConfigService,
UserPreferencesService,
{
provide: MAT_DIALOG_DEFAULT_OPTIONS,
useValue: MAT_DIALOG_DEFAULT_OPTIONS
}
]
});
beforeEach(() => {
userPreferencesService = TestBed.get(UserPreferencesService);
matDialogConfig = TestBed.get(MatDialogConfig);
matDialogGlobalOptions = TestBed.get(MAT_DIALOG_DEFAULT_OPTIONS);
});
it('should load custom defaults', () => {
expect(matDialogConfig).toEqual(jasmine.objectContaining({
autoFocus: true,
closeOnNavigation: true
}));
});
it('should set dialog direction option on textOrientation event', () => {
userPreferencesService.set('textOrientation', 'rtl');
expect(matDialogGlobalOptions).toEqual(jasmine.objectContaining({
direction: <Direction> 'rtl'
}));
userPreferencesService.set('textOrientation', 'ltr');
expect(matDialogGlobalOptions).toEqual(jasmine.objectContaining({
direction: <Direction> 'ltr'
}));
});
});

View File

@@ -0,0 +1,52 @@
/*!
* @license
* Copyright 2019 Alfresco Software, Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* spellchecker: disable */
import { Injectable, Inject } from '@angular/core';
import { MAT_DIALOG_DEFAULT_OPTIONS, MatDialogConfig } from '@angular/material/dialog';
import { Direction } from '@angular/cdk/bidi';
import { UserPreferencesService } from '../services/user-preferences.service';
@Injectable({
providedIn: 'root'
})
export class DialogConfigService {
constructor(
@Inject(MAT_DIALOG_DEFAULT_OPTIONS) private defaultOptions: MatDialogConfig,
private matDialogConfig: MatDialogConfig,
private userPreferencesService: UserPreferencesService
) {
this.userPreferencesService
.select('textOrientation')
.subscribe((direction: Direction) => {
this.changeDirection(direction);
});
}
loadDefaults() {
Object.assign(this.defaultOptions, this.matDialogConfig, <MatDialogConfig> {
autoFocus: true,
closeOnNavigation: true
});
}
private changeDirection(direction: Direction) {
Object.assign(this.defaultOptions, this.matDialogConfig, <MatDialogConfig> {
direction
});
}
}

View File

@@ -28,6 +28,7 @@ import { TranslationMock } from '../mock/translation.service.mock';
import { DatePipe } from '@angular/common';
import { CookieService } from '../services/cookie.service';
import { CookieServiceMock } from '../mock/cookie.service.mock';
import { DialogConfigService } from 'core/services/dialog-config.service';
@NgModule({
imports: [NoopAnimationsModule, RouterTestingModule, CoreModule.forRoot()],
@@ -36,7 +37,9 @@ import { CookieServiceMock } from '../mock/cookie.service.mock';
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
{ provide: AppConfigService, useClass: AppConfigServiceMock },
{ provide: TranslationService, useClass: TranslationMock },
{ provide: CookieService, useClass: CookieServiceMock }
{ provide: CookieService, useClass: CookieServiceMock },
{ provide: DialogConfigService, useValue: { loadDefaults: () => {} } }
],
exports: [
NoopAnimationsModule