mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
[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:
committed by
Denys Vuika
parent
de0f906163
commit
164d398abc
@@ -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
|
||||
}
|
||||
]
|
||||
};
|
||||
|
@@ -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 {}
|
||||
|
23
lib/core/services/dialog-config-factory.ts
Normal file
23
lib/core/services/dialog-config-factory.ts
Normal 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();
|
||||
}
|
69
lib/core/services/dialog-config.service.spec.ts
Normal file
69
lib/core/services/dialog-config.service.spec.ts
Normal 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'
|
||||
}));
|
||||
});
|
||||
});
|
52
lib/core/services/dialog-config.service.ts
Normal file
52
lib/core/services/dialog-config.service.ts
Normal 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
|
||||
});
|
||||
}
|
||||
}
|
@@ -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
|
||||
|
Reference in New Issue
Block a user