--- Title: Dialog actions --- ## Dialog actions In this tutorial, we are going to create an action that invokes a custom material dialog. Please read more details on Dialog components here: [Dialog Overview](https://material.angular.io/components/dialog/overview) ### Create a dialog ```sh ng g component dialogs/my-extension-dialog --module=app ``` Update `my-extension-dialog.component.ts`: ```ts import { Component } from '@angular/core'; import { MatDialogRef } from '@angular/material/dialog'; @Component({ selector: 'aca-my-extension-dialog', templateUrl: './my-extension-dialog.component.html', styleUrls: ['./my-extension-dialog.component.scss'] }) export class MyExtensionDialogComponent { constructor(public dialogRef: MatDialogRef) {} } ``` Update `my-extension-dialog.component.html`: ```html

Delete all

Are you sure? ``` ### Create an action Append the following code to the `src/app/store/actions/app.actions.ts`: ```ts export const SHOW_MY_DIALOG = 'SHOW_MY_DIALOG'; export class ShowMydDialogAction implements Action { readonly type = SHOW_MY_DIALOG; } ``` See also: - [Comprehensive Introduction to @ngrx/store](https://gist.github.com/btroncone/a6e4347326749f938510) ### Create an effect Update `src/app/store/effects/app.effects.ts`: ```ts import { createEffect } from '@ngrx/effects'; import { ShowMydDialogAction, SHOW_MY_DIALOG } from '../actions/app.actions'; @Injectable() export class AppEffects { showMyDialog$ = createEffect( () => this.actions$.pipe( ofType(SHOW_MY_DIALOG), map(() => {}) ), { dispatch: false } ); } ``` See also: - [Comprehensive Introduction to @ngrx/store](https://gist.github.com/btroncone/a6e4347326749f938510) Update to raise a dialog ```ts import { createEffect } from '@ngrx/effects'; import { MatDialog } from '@angular/material/dialog'; import { MyExtensionDialogComponent } from '../../dialogs/my-extension-dialog/my-extension-dialog.component'; @Injectable() export class AppEffects { constructor(private dialog: MatDialog) {} showMyDialog$ = createEffect( () => this.actions$.pipe( ofType(SHOW_MY_DIALOG), map(() => { this.dialog.open(MyExtensionDialogComponent) }) ), { dispatch: false } ); } ``` ### Register a toolbar action Update the `src/assets/app.extensions.json` file, and insert a new entry to the `features.toolbar` section: ```json { "features": { "toolbar": [ { "id": "my.custom.toolbar.button", "order": 10, "title": "Custom action", "icon": "extension", "actions": { "click": "SHOW_MY_DIALOG" } } ] } } ``` Now, once you run the application, you should see an extra button that invokes your dialog on every click.