--- 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 { ShowMydDialogAction, SHOW_MY_DIALOG } from '../actions/app.actions'; @Injectable() export class AppEffects { @Effect({ dispatch: false }) showMyDialog$ = this.actions$.pipe( ofType(SHOW_MY_DIALOG), map(() => {}) ); } ``` See also: - [Comprehensive Introduction to @ngrx/store](https://gist.github.com/btroncone/a6e4347326749f938510) Update to raise a dialog ```ts 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) {} @Effect({ dispatch: false }) showMyDialog$ = this.actions$.pipe( ofType(SHOW_MY_DIALOG), map(() => { this.dialog.open(MyExtensionDialogComponent) }) ); } ``` ## 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.