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 { IconModule } from './icon/icon.module';
|
||||||
import { TranslateLoaderService } from './services/translate-loader.service';
|
import { TranslateLoaderService } from './services/translate-loader.service';
|
||||||
import { ExtensionsModule } from '@alfresco/adf-extensions';
|
import { ExtensionsModule } from '@alfresco/adf-extensions';
|
||||||
|
import { dialogConfigFactory } from './services/dialog-config-factory';
|
||||||
|
import { DialogConfigService } from './services/dialog-config.service';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
@@ -135,6 +137,12 @@ export class CoreModule {
|
|||||||
AlfrescoApiService
|
AlfrescoApiService
|
||||||
],
|
],
|
||||||
multi: true
|
multi: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
provide: APP_INITIALIZER,
|
||||||
|
useFactory: dialogConfigFactory,
|
||||||
|
deps: [ DialogConfigService],
|
||||||
|
multi: true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
@@ -24,7 +24,7 @@ import {
|
|||||||
MatInputModule, MatListModule, MatNativeDateModule, MatOptionModule, MatProgressSpinnerModule, MatRadioModule,
|
MatInputModule, MatListModule, MatNativeDateModule, MatOptionModule, MatProgressSpinnerModule, MatRadioModule,
|
||||||
MatRippleModule, MatSelectModule, MatSlideToggleModule, MatTableModule, MatTabsModule,
|
MatRippleModule, MatSelectModule, MatSlideToggleModule, MatTableModule, MatTabsModule,
|
||||||
MatMenuModule, MatProgressBarModule, MatSidenavModule, MatSnackBarModule, MatToolbarModule,
|
MatMenuModule, MatProgressBarModule, MatSidenavModule, MatSnackBarModule, MatToolbarModule,
|
||||||
MatTooltipModule, MatExpansionModule
|
MatTooltipModule, MatExpansionModule, MAT_DIALOG_DEFAULT_OPTIONS, MatDialogConfig
|
||||||
} from '@angular/material';
|
} from '@angular/material';
|
||||||
|
|
||||||
export function modules() {
|
export function modules() {
|
||||||
@@ -40,6 +40,13 @@ export function modules() {
|
|||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: modules(),
|
imports: modules(),
|
||||||
|
providers: [
|
||||||
|
MatDialogConfig,
|
||||||
|
{
|
||||||
|
provide: MAT_DIALOG_DEFAULT_OPTIONS,
|
||||||
|
useValue: MAT_DIALOG_DEFAULT_OPTIONS
|
||||||
|
}
|
||||||
|
],
|
||||||
exports: modules()
|
exports: modules()
|
||||||
})
|
})
|
||||||
export class MaterialModule {}
|
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 { DatePipe } from '@angular/common';
|
||||||
import { CookieService } from '../services/cookie.service';
|
import { CookieService } from '../services/cookie.service';
|
||||||
import { CookieServiceMock } from '../mock/cookie.service.mock';
|
import { CookieServiceMock } from '../mock/cookie.service.mock';
|
||||||
|
import { DialogConfigService } from 'core/services/dialog-config.service';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [NoopAnimationsModule, RouterTestingModule, CoreModule.forRoot()],
|
imports: [NoopAnimationsModule, RouterTestingModule, CoreModule.forRoot()],
|
||||||
@@ -36,7 +37,9 @@ import { CookieServiceMock } from '../mock/cookie.service.mock';
|
|||||||
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
|
{ provide: AlfrescoApiService, useClass: AlfrescoApiServiceMock },
|
||||||
{ provide: AppConfigService, useClass: AppConfigServiceMock },
|
{ provide: AppConfigService, useClass: AppConfigServiceMock },
|
||||||
{ provide: TranslationService, useClass: TranslationMock },
|
{ provide: TranslationService, useClass: TranslationMock },
|
||||||
{ provide: CookieService, useClass: CookieServiceMock }
|
{ provide: CookieService, useClass: CookieServiceMock },
|
||||||
|
{ provide: DialogConfigService, useValue: { loadDefaults: () => {} } }
|
||||||
|
|
||||||
],
|
],
|
||||||
exports: [
|
exports: [
|
||||||
NoopAnimationsModule
|
NoopAnimationsModule
|
||||||
|
Reference in New Issue
Block a user