+
-
+
{{ toast.title | abpLocalization: toast.options?.titleLocalizationParams }}
-
+
{{ toast.message | abpLocalization: toast.options?.messageLocalizationParams }}
diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss
index 7b5a2a24d1..64bf8a6068 100644
--- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss
+++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.scss
@@ -10,7 +10,9 @@
}
}
-.toast {
+$toastClass: abp-toast;
+
+.#{$toastClass} {
display: grid;
grid-template-columns: 50px 1fr;
gap: 10px;
@@ -23,19 +25,19 @@
z-index: 9999;
@include fillColor(#f0f0f0, #000);
opacity: 1;
- &.toast-success {
+ &.#{$toastClass}-success {
@include fillColor(#51a351, #fff);
}
- &.toast-info {
+ &.#{$toastClass}-info {
@include fillColor(#2f96b4, #fff);
}
- &.toast-warning {
+ &.#{$toastClass}-warning {
@include fillColor(#f89406, #fff);
}
- &.toast-error {
+ &.#{$toastClass}-error {
@include fillColor(#bd362f, #fff);
}
- .toast-icon {
+ .#{$toastClass}-icon {
display: flex;
align-items: center;
justify-content: center;
@@ -43,9 +45,9 @@
font-size: 36px;
}
}
- .toast-content {
+ .#{$toastClass}-content {
position: relative;
- .toast-close-button {
+ .#{$toastClass}-close-button {
position: absolute;
top: 0;
right: 0;
@@ -64,13 +66,13 @@
outline: none;
}
}
- .toast-title {
+ .#{$toastClass}-title {
margin: 0;
padding: 0;
font-size: 1rem;
font-weight: 600;
}
- .toast-message {
+ .#{$toastClass}-message {
margin: 0;
padding: 0;
max-width: 240px;
diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts
index b4465934b6..48298e74a0 100644
--- a/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts
+++ b/npm/ng-packs/packages/theme-shared/src/lib/components/toast/toast.component.ts
@@ -1,7 +1,6 @@
import { Component, Input, OnInit } from '@angular/core';
import { Toaster } from '../../models/toaster';
import { ToasterService } from '../../services/toaster.service';
-import { LocalizationService } from '@abp/ng.core';
import snq from 'snq';
@Component({
@@ -15,7 +14,7 @@ export class ToastComponent implements OnInit {
get severityClass(): string {
if (!this.toast || !this.toast.severity) return '';
- return `toast-${this.toast.severity}`;
+ return `abp-toast-${this.toast.severity}`;
}
get iconClass(): string {
@@ -33,10 +32,7 @@ export class ToastComponent implements OnInit {
}
}
- constructor(
- private toastService: ToasterService,
- private localizationService: LocalizationService,
- ) {}
+ constructor(private toasterService: ToasterService) {}
ngOnInit() {
if (snq(() => this.toast.options.sticky)) return;
@@ -47,10 +43,10 @@ export class ToastComponent implements OnInit {
}
close() {
- this.toastService.remove(this.toast.options.id);
+ this.toasterService.remove(this.toast.options.id);
}
tap() {
- if (this.toast.options && this.toast.options.tapToDismiss) this.close();
+ if (this.toast.options?.tapToDismiss) this.close();
}
}
diff --git a/npm/ng-packs/packages/theme-shared/src/lib/models/toaster.ts b/npm/ng-packs/packages/theme-shared/src/lib/models/toaster.ts
index e7f456fee4..7addf08162 100644
--- a/npm/ng-packs/packages/theme-shared/src/lib/models/toaster.ts
+++ b/npm/ng-packs/packages/theme-shared/src/lib/models/toaster.ts
@@ -20,4 +20,36 @@ export namespace Toaster {
}
export type Severity = 'neutral' | 'success' | 'info' | 'warning' | 'error';
+ export type ToasterId = string | number;
+
+ export interface Service {
+ show: (
+ message: Config.LocalizationParam,
+ title: Config.LocalizationParam,
+ severity: Toaster.Severity,
+ options: Partial
,
+ ) => ToasterId;
+ remove: (id: number) => void;
+ clear: (key?: string) => void;
+ info: (
+ message: Config.LocalizationParam,
+ title?: Config.LocalizationParam,
+ options?: Partial,
+ ) => ToasterId;
+ success: (
+ message: Config.LocalizationParam,
+ title?: Config.LocalizationParam,
+ options?: Partial,
+ ) => ToasterId;
+ warn: (
+ message: Config.LocalizationParam,
+ title?: Config.LocalizationParam,
+ options?: Partial,
+ ) => ToasterId;
+ error: (
+ message: Config.LocalizationParam,
+ title?: Config.LocalizationParam,
+ options?: Partial,
+ ) => ToasterId;
+ }
}
diff --git a/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts b/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts
index 295647309d..83f6655371 100644
--- a/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts
+++ b/npm/ng-packs/packages/theme-shared/src/lib/services/toaster.service.ts
@@ -1,14 +1,14 @@
-import { Injectable, ComponentRef } from '@angular/core';
+import { ComponentRef, Injectable } from '@angular/core';
import { Toaster } from '../models';
import { ReplaySubject } from 'rxjs';
-import { Config, PROJECTION_STRATEGY, ContentProjectionService } from '@abp/ng.core';
+import { Config, ContentProjectionService, PROJECTION_STRATEGY } from '@abp/ng.core';
import snq from 'snq';
import { ToastContainerComponent } from '../components/toast-container/toast-container.component';
@Injectable({
providedIn: 'root',
})
-export class ToasterService {
+export class ToasterService implements Toaster.Service {
toasts$ = new ReplaySubject(1);
private lastId = -1;
diff --git a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts
index e45ac8d1e3..2ba44dfa7a 100644
--- a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts
+++ b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts
@@ -22,54 +22,41 @@ import { LoadingDirective } from './directives/loading.directive';
import { NgxDatatableDefaultDirective } from './directives/ngx-datatable-default.directive';
import { NgxDatatableListDirective } from './directives/ngx-datatable-list.directive';
import { TableSortDirective } from './directives/table-sort.directive';
-import { ErrorHandler } from './handlers/error.handler';
import { initLazyStyleHandler } from './handlers/lazy-style.handler';
import { RootParams } from './models/common';
import { THEME_SHARED_ROUTE_PROVIDERS } from './providers/route.provider';
import { THEME_SHARED_APPEND_CONTENT } from './tokens/append-content.token';
-import { httpErrorConfigFactory, HTTP_ERROR_CONFIG } from './tokens/http-error.token';
+import { HTTP_ERROR_CONFIG, httpErrorConfigFactory } from './tokens/http-error.token';
import { DateParserFormatter } from './utils/date-parser-formatter';
+const declarationsWithExports = [
+ BreadcrumbComponent,
+ ButtonComponent,
+ ChartComponent,
+ ConfirmationComponent,
+ LoaderBarComponent,
+ LoadingComponent,
+ ModalComponent,
+ TableComponent,
+ TableEmptyMessageComponent,
+ ToastComponent,
+ ToastContainerComponent,
+ SortOrderIconComponent,
+ NgxDatatableDefaultDirective,
+ NgxDatatableListDirective,
+ LoadingDirective,
+ TableSortDirective,
+];
@NgModule({
imports: [CoreModule, NgxDatatableModule, NgxValidateCoreModule, NgbPaginationModule],
declarations: [
- BreadcrumbComponent,
- ButtonComponent,
- ChartComponent,
- ConfirmationComponent,
+ ...declarationsWithExports,
HttpErrorWrapperComponent,
- LoaderBarComponent,
- LoadingComponent,
- ModalComponent,
ModalContainerComponent,
- TableComponent,
- TableEmptyMessageComponent,
- ToastComponent,
- ToastContainerComponent,
- SortOrderIconComponent,
- NgxDatatableDefaultDirective,
- NgxDatatableListDirective,
- LoadingDirective,
- TableSortDirective,
],
exports: [
NgxDatatableModule,
- BreadcrumbComponent,
- ButtonComponent,
- ChartComponent,
- ConfirmationComponent,
- LoaderBarComponent,
- LoadingComponent,
- ModalComponent,
- TableComponent,
- TableEmptyMessageComponent,
- ToastComponent,
- ToastContainerComponent,
- SortOrderIconComponent,
- NgxDatatableDefaultDirective,
- NgxDatatableListDirective,
- LoadingDirective,
- TableSortDirective,
+ ...declarationsWithExports,
],
providers: [DatePipe],
entryComponents: [
@@ -81,8 +68,6 @@ import { DateParserFormatter } from './utils/date-parser-formatter';
],
})
export class ThemeSharedModule {
- constructor(private errorHandler: ErrorHandler) {}
-
static forRoot(options = {} as RootParams): ModuleWithProviders {
return {
ngModule: ThemeSharedModule,