diff --git a/lib/core/notifications/services/notification.service.spec.ts b/lib/core/notifications/services/notification.service.spec.ts deleted file mode 100644 index 5e5c883231..0000000000 --- a/lib/core/notifications/services/notification.service.spec.ts +++ /dev/null @@ -1,200 +0,0 @@ -/*! - * @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 { LiveAnnouncer } from '@angular/cdk/a11y'; -import { OverlayModule } from '@angular/cdk/overlay'; -import { Component } from '@angular/core'; -import { ComponentFixture, TestBed } from '@angular/core/testing'; - -import { MatSnackBar, MatSnackBarModule, MatSnackBarConfig } from '@angular/material/snack-bar'; -import { NotificationService } from './notification.service'; -import { TranslationService } from '../../services/translation.service'; -import { setupTestBed } from '../../testing/setup-test-bed'; -import { CoreTestingModule } from '../../testing/core.testing.module'; -import { TranslateModule } from '@ngx-translate/core'; - -@Component({ - template: '', - providers: [NotificationService] -}) -class ProvidesNotificationServiceComponent { - constructor(public notificationService: NotificationService) { - - } - - sendMessageWithoutConfig() { - return this.notificationService.openSnackMessage('Test notification', 1000); - } - - sendMessage() { - return this.notificationService.openSnackMessage('Test notification', 1000); - } - - sendMessageWithArgs() { - return this.notificationService.openSnackMessage('Test notification {{ arg }}', 1000, {arg: 'arg'}); - } - - sendCustomMessage() { - const matSnackBarConfig = new MatSnackBarConfig(); - matSnackBarConfig.duration = 1000; - - return this.notificationService.openSnackMessage('Test notification', matSnackBarConfig); - } - - sendMessageActionWithoutConfig() { - return this.notificationService.openSnackMessageAction('Test notification', 'TestWarn', 1000); - } - - sendMessageAction() { - return this.notificationService.openSnackMessageAction('Test notification', 'TestWarn', 1000); - } - - sendCustomMessageAction() { - const matSnackBarConfig = new MatSnackBarConfig(); - matSnackBarConfig.duration = 1000; - - return this.notificationService.openSnackMessageAction('Test notification', 'TestWarn', matSnackBarConfig); - } - -} - -describe('NotificationService', () => { - let fixture: ComponentFixture; - let translationService: TranslationService; - - setupTestBed({ - imports: [ - TranslateModule.forRoot(), - CoreTestingModule, - OverlayModule, - MatSnackBarModule - ], - declarations: [ProvidesNotificationServiceComponent], - providers: [ - MatSnackBar, - LiveAnnouncer - ] - }); - - beforeEach(() => { - translationService = TestBed.inject(TranslationService); - fixture = TestBed.createComponent(ProvidesNotificationServiceComponent); - fixture.detectChanges(); - }); - - it('should translate messages', (done) => { - spyOn(translationService, 'instant').and.callThrough(); - - const promise = fixture.componentInstance.sendMessage(); - promise.afterDismissed().subscribe(() => { - expect(translationService.instant).toHaveBeenCalled(); - done(); - }); - - fixture.detectChanges(); - }); - - it('should translate messages with args', (done) => { - spyOn(translationService, 'instant').and.callThrough(); - - const promise = fixture.componentInstance.sendMessageWithArgs(); - promise.afterDismissed().subscribe(() => { - expect(translationService.instant).toHaveBeenCalledWith('Test notification {{ arg }}', {arg: 'arg'}); - done(); - }); - - fixture.detectChanges(); - }); - - it('should translate the action', (done) => { - spyOn(translationService, 'instant').and.callThrough(); - - const promise = fixture.componentInstance.sendMessageAction(); - promise.afterDismissed().subscribe(() => { - expect(translationService.instant).toHaveBeenCalledTimes(2); - done(); - }); - - fixture.detectChanges(); - }); - - it('should open a message notification bar', (done) => { - const promise = fixture.componentInstance.sendMessage(); - promise.afterDismissed().subscribe(() => { - done(); - }); - - fixture.detectChanges(); - - expect(document.querySelector('snack-bar-container')).not.toBeNull(); - }); - - it('should open a message notification bar without custom configuration', (done) => { - const promise = fixture.componentInstance.sendMessageWithoutConfig(); - promise.afterDismissed().subscribe(() => { - done(); - }); - - fixture.detectChanges(); - - expect(document.querySelector('snack-bar-container')).not.toBeNull(); - }); - - it('should open a message notification bar with custom configuration', (done) => { - const promise = fixture.componentInstance.sendCustomMessage(); - promise.afterDismissed().subscribe(() => { - done(); - }); - - fixture.detectChanges(); - - expect(document.querySelector('snack-bar-container')).not.toBeNull(); - }); - - it('should open a message notification bar with action', (done) => { - const promise = fixture.componentInstance.sendMessageAction(); - promise.afterDismissed().subscribe(() => { - done(); - }); - - fixture.detectChanges(); - - expect(document.querySelector('snack-bar-container')).not.toBeNull(); - }); - - it('should open a message notification bar with action and custom configuration', (done) => { - const promise = fixture.componentInstance.sendCustomMessageAction(); - promise.afterDismissed().subscribe(() => { - done(); - }); - - fixture.detectChanges(); - - expect(document.querySelector('snack-bar-container')).not.toBeNull(); - }); - - it('should open a message notification bar with action and no custom configuration', (done) => { - const promise = fixture.componentInstance.sendMessageActionWithoutConfig(); - promise.afterDismissed().subscribe(() => { - done(); - }); - - fixture.detectChanges(); - - expect(document.querySelector('snack-bar-container')).not.toBeNull(); - }); -}); diff --git a/lib/core/notifications/services/notification.service.ts b/lib/core/notifications/services/notification.service.ts deleted file mode 100644 index 70dbb40a6f..0000000000 --- a/lib/core/notifications/services/notification.service.ts +++ /dev/null @@ -1,147 +0,0 @@ -/*! - * @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 { Injectable } from '@angular/core'; -import { MatSnackBar, MatSnackBarRef, MatSnackBarConfig } from '@angular/material/snack-bar'; -import { TranslationService } from '../../services/translation.service'; -import { AppConfigService, AppConfigValues } from '../../app-config/app-config.service'; -import { Subject } from 'rxjs'; -import { NotificationModel } from '../models/notification.model'; -import { info, warning, error } from '../helpers/notification.factory'; - -const INFO_SNACK_CLASS = 'adf-info-snackbar'; -const WARN_SNACK_CLASS = 'adf-warning-snackbar'; -const ERROR_SNACK_CLASS = 'adf-error-snackbar'; - -@Injectable({ - providedIn: 'root' -}) -export class NotificationService { - - DEFAULT_DURATION_MESSAGE: number = 5000; - - notifications$: Subject = new Subject(); - - constructor(private snackBar: MatSnackBar, - private translationService: TranslationService, - private appConfigService: AppConfigService) { - this.DEFAULT_DURATION_MESSAGE = this.appConfigService.get(AppConfigValues.NOTIFY_DURATION) || this.DEFAULT_DURATION_MESSAGE; - } - - /** - * Opens a SnackBar notification to show a message. - * - * @param message The message (or resource key) to show. - * @param config Time before notification disappears after being shown or MatSnackBarConfig object - * @param interpolateArgs The interpolation parameters to add for the translation - * @returns Information/control object for the SnackBar - */ - openSnackMessage(message: string, config?: number | MatSnackBarConfig, interpolateArgs?: any): MatSnackBarRef { - return this.dispatchNotification(message, null, config, interpolateArgs); - } - - /** - * Opens a SnackBar notification with a message and a response button. - * - * @param message The message (or resource key) to show. - * @param action Caption for the response button - * @param config Time before notification disappears after being shown or MatSnackBarConfig object - * @param interpolateArgs The interpolation parameters to add for the translation - * @returns Information/control object for the SnackBar - */ - openSnackMessageAction(message: string, action: string, config?: number | MatSnackBarConfig, interpolateArgs?: any): MatSnackBarRef { - return this.dispatchNotification(message, action, config, interpolateArgs); - } - - /** - * Rase error message - * - * @param message Text message or translation key for the message. - * @param action Action name - * @param interpolateArgs The interpolation parameters to add for the translation - */ - showError(message: string, action?: string, interpolateArgs?: any): MatSnackBarRef { - return this.dispatchNotification(message, action, { panelClass: ERROR_SNACK_CLASS }, interpolateArgs); - } - - /** - * Rase info message - * - * @param message Text message or translation key for the message. - * @param action Action name - * @param interpolateArgs The interpolation parameters to add for the translation - */ - showInfo(message: string, action?: string, interpolateArgs?: any): MatSnackBarRef { - return this.dispatchNotification(message, action, { panelClass: INFO_SNACK_CLASS }, interpolateArgs); - } - - /** - * Rase warning message - * - * @param message Text message or translation key for the message. - * @param action Action name - * @param interpolateArgs The interpolation parameters to add for the translation - */ - showWarning(message: string, action?: string, interpolateArgs?: any): MatSnackBarRef { - return this.dispatchNotification(message, action, { panelClass: WARN_SNACK_CLASS }, interpolateArgs); - } - - /** - * dismiss the notification snackbar - */ - dismissSnackMessageAction() { - return this.snackBar.dismiss(); - } - - /** - * Push new notification to Notification History - * - * @param notification - Notification model to be pushed. - */ - pushToNotificationHistory(notification: NotificationModel) { - this.notifications$.next(notification); - } - - private dispatchNotification(message: string, action?: string, config?: number | MatSnackBarConfig, interpolateArgs?: any): MatSnackBarRef { - const translatedMessage: string = this.translationService.instant(message, interpolateArgs); - const translatedAction: string = this.translationService.instant(action, interpolateArgs); - const createNotification = this.getNotificationCreator(config); - this.notifications$.next(createNotification(translatedMessage)); - - return this.snackBar.open(translatedMessage, translatedAction, { - duration: (typeof config === 'number') ? config : this.DEFAULT_DURATION_MESSAGE, - panelClass: INFO_SNACK_CLASS, - ...( (typeof config === 'object') ? config : {} ) - }); - } - - private getNotificationCreator(config?: number | MatSnackBarConfig) { - let panelClass: string = null; - if (typeof config === 'object') { - panelClass = Array.isArray(config.panelClass) ? config.panelClass[0] : config.panelClass; - } - - switch (panelClass) { - case ERROR_SNACK_CLASS: - return error; - case WARN_SNACK_CLASS: - return warning; - default: - return info; - } - } -}