Enhancing User Experience with Angular Snackbar Notifications
Explore how to implement Angular Material Snackbar for displaying brief notifications to enhance user interaction.
0 likes
46 views
Rule Content
--- name: Enhancing User Experience with Angular Snackbar Notifications version: "1.0" category: Angular Cursor Rules description: Implement Angular Material Snackbar for displaying brief notifications to enhance user interaction. --- rule_definition: - description: "Ensure Angular Material is installed and imported in the project." implementation: | ```bash ng add @angular/material ``` - description: "Create a shared Snackbar service to manage notifications across the application." implementation: | ```typescript // snackbar.service.ts import { Injectable } from '@angular/core'; import { MatSnackBar } from '@angular/material/snack-bar'; @Injectable({ providedIn: 'root', }) export class SnackbarService { constructor(private snackBar: MatSnackBar) {} showMessage(message: string, action: string = 'Close', duration: number = 3000): void { this.snackBar.open(message, action, { duration, panelClass: ['default-snackbar'], }); } } ``` - description: "Define CSS classes for different notification types to enhance visual feedback." implementation: | ```css /* styles.css */ .default-snackbar { background-color: #323232; color: #ffffff; } .success-snackbar { background-color: #4caf50; color: #ffffff; } .error-snackbar { background-color: #f44336; color: #ffffff; } .warning-snackbar { background-color: #ff9800; color: #ffffff; } ``` - description: "Extend the Snackbar service to include methods for success, error, and warning messages." implementation: | ```typescript // snackbar.service.ts import { Injectable } from '@angular/core'; import { MatSnackBar } from '@angular/material/snack-bar'; @Injectable({ providedIn: 'root', }) export class SnackbarService { constructor(private snackBar: MatSnackBar) {} showMessage(message: string, action: string = 'Close', duration: number = 3000, panelClass: string = 'default-snackbar'): void { this.snackBar.open(message, action, { duration, panelClass: [panelClass], }); } showSuccess(message: string, action: string = 'Close', duration: number = 3000): void { this.showMessage(message, action, duration, 'success-snackbar'); } showError(message: string, action: string = 'Close', duration: number = 3000): void { this.showMessage(message, action, duration, 'error-snackbar'); } showWarning(message: string, action: string = 'Close', duration: number = 3000): void { this.showMessage(message, action, duration, 'warning-snackbar'); } } ``` - description: "Inject the Snackbar service into components to display notifications." implementation: | ```typescript // example.component.ts import { Component } from '@angular/core'; import { SnackbarService } from './snackbar.service'; @Component({ selector: 'app-example', templateUrl: './example.component.html', }) export class ExampleComponent { constructor(private snackbarService: SnackbarService) {} onActionSuccess(): void { this.snackbarService.showSuccess('Action completed successfully.'); } onActionError(): void { this.snackbarService.showError('An error occurred during the action.'); } onActionWarning(): void { this.snackbarService.showWarning('Warning: Check your input.'); } } ``` - description: "Ensure that the Snackbar service is provided in the root module to be available application-wide." implementation: | ```typescript // app.module.ts import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { MatSnackBarModule } from '@angular/material/snack-bar'; import { AppComponent } from './app.component'; import { SnackbarService } from './snackbar.service'; @NgModule({ declarations: [AppComponent], imports: [ BrowserModule, BrowserAnimationsModule, MatSnackBarModule, ], providers: [SnackbarService], bootstrap: [AppComponent], }) export class AppModule {} ```