Popconfirm
Angular Bootstrap 5 Popconfirm component
Responsive popconfirm built with Bootstrap 5, Angular and Material Design. Popconfirm is a compact dialog alert. Use it to confirm/cancel a decision or display extra content like an explanation.
Popconfirm basically is a simple alert with confirmation buttons.
Note: Read the API tab to find all available options and advanced customization
Basic example
Basic example of popconfirm usage
You can create popconfirm dynamically from any component using a built-in service. To achieve this, follow these steps:
1. Create a new component with Angular CLI and add some HTML code to the template.
ng generate component popconfirm
<div class="popconfirm-popover shadow-4">
<div class="popconfirm">
<p class="popconfirm-message">
<span class="popconfirm-message-text">This is example</span>
</p>
<div class="popconfirm-buttons-container">
<button (click)="popconfirmRef.close()" type="button" aria-label="Cancel" class="btn btn-secondary btn-sm">
Cancel
</button>
<button (click)="popconfirmRef.confirm()" type="button" aria-label="Confirm" class="btn btn-primary btn-sm">
OK
</button>
</div>
</div>
</div>
import { Component } from '@angular/core';
import { MdbPopconfirmRef } from 'mdb-angular-ui-kit/popconfirm';
@Component({
selector: 'app-popconfirm',
templateUrl: './popconfirm.component.html',
})
export class PopconfirmComponent {
constructor(public popconfirmRef: MdbPopconfirmRef<PopconfirmComponent>) {}
}
2. Inject MdbPopconfirmService
to the component from which you want to open the
popconfirm and use the open
method.
<button class="btn btn-primary" (click)="openPopconfirm($event)">Open popconfirm</button>
import { Component } from '@angular/core';
import { PopconfirmComponent } from 'your-path-to-popconfirm-component';
import { MdbPopconfirmRef, MdbPopconfirmService } from 'mdb-angular-ui-kit/popconfirm';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
})
export class AppComponent {
popconfirmRef: MdbPopconfirmRef<PopconfirmComponent> | null = null;
constructor(private popconfirmService: MdbPopconfirmService) {}
openPopconfirm(event: Event) {
const target = event.target as HTMLElement;
this.popconfirmRef = this.popconfirmService.open(PopconfirmComponent, target)
}
}
Inject and receive data
You can inject data to the modal by passing it to the data
parameter in the popconfirm
options.
<button class="btn btn-primary" (click)="openPopconfirm($event)">Open popconfirm</button>
import { Component } from '@angular/core';
import { PopconfirmComponent } from 'your-path-to-popconfirm-component';
import { MdbPopconfirmRef, MdbPopconfirmService } from 'mdb-angular-ui-kit/popconfirm';
@Component(
{ selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
})
export class AppComponent {
popconfirmRef: MdbPopconfirmRef<PopconfirmComponent> | null = null;
constructor(private popconfirmService: MdbPopconfirmService) {}
openPopconfirm(event: Event) {
const target = event.target as HTMLElement;
this.popconfirmRef = this.popconfirmService.open(
PopconfirmComponent,
target,
{ data: { text: 'Custom text' } }
);
}
}
Here is an example showing how to use injected data in the popconfirm component:
<div class="popconfirm-popover shadow-4">
<div class="popconfirm">
<p class="popconfirm-message">
<span class="popconfirm-message-text">{{ text }}</span>
</p>
<div class="popconfirm-buttons-container">
<button (click)="popconfirmRef.close()" type="button" aria-label="Cancel" class="btn btn-secondary btn-sm">
Cancel
</button>
<button (click)="popconfirmRef.confirm()" type="button" aria-label="Confirm" class="btn btn-primary btn-sm">
OK
</button>
</div>
</div>
</div>
import { Component } from '@angular/core';
import { MdbPopconfirmRef } from 'mdb-angular-ui-kit/popconfirm';
@Component({
selector: 'app-popconfirm',
templateUrl: './popconfirm.component.html',
})
export class PopconfirmComponent {
text: string | null = null;
constructor(public popconfirmRef: MdbPopconfirmRef<PopconfirmComponent>) {}
}
Receive data from the popconfrim
You can receive data from the popconfirm to use it in other components:
<div class="popconfirm-popover shadow-4">
<div class="popconfirm">
<p class="popconfirm-message">
<span class="popconfirm-message-text">This is example</span>
</p>
<div class="popconfirm-buttons-container">
<button (click)="close()" type="button" aria-label="Cancel" class="btn btn-secondary btn-sm">
Cancel
</button>
<button (click)="popconfirmRef.confirm()" type="button" aria-label="Confirm" class="btn btn-primary btn-sm">
OK
</button>
</div>
</div>
</div>
import { Component } from '@angular/core';
import { MdbPopconfirmRef } from 'mdb-angular-ui-kit/popconfirm';
@Component(
{ selector: 'app-popconfirm',
templateUrl: './popconfirm.component.html',
})
export class PopconfirmComponent {
constructor(public popconfirmRef: MdbPopconfirmRef<PopconfirmComponent>) {}
close(): void {
const closeMessage = 'Popconfirm closed';
this.popconfirmRef.close(closeMessage)
}
}
Here is an example showing how to use data received from popconfirmRef in other components
<button type="button" (click)="openPopconfirm($event)" class="btn btn-primary me-1">
import { Component } from '@angular/core';
import { PopconfirmComponent } from 'your-path-to-popconfirm-component';
import { MdbPopconfirmRef, MdbPopconfirmService } from 'mdb-angular-ui-kit/popconfirm';
@Component({
selector: 'create-dynamic-popconfirm',
templateUrl: './create-dynamic-popconfirm.component.html',
})
export class AppComponent {
popconfirmRef: MdbPopconfirmRef<PopconfirmComponent> | null = null;
constructor(private popconfirmService: MdbPopconfirmService) {}
openPopconfirm(event: Event) {
const target = event.target as HTMLElement;
this.popconfirmRef = this.popconfirmService.open(PopconfirmComponent, target);
this.popconfirmRef.onClose.subscribe((message: any) => {
console.log(message);
});
}
}
Display mode
You can choose between modal
and inline
to modify display mode.
Modal mode is rendered at the center of the screen and is static, you can't change its position but all other attributes can be applied
<button
type="button"
(click)="openPopconfirm($event)"
class="btn btn-primary popconfirm-toggle me-1"
>
Modal
</button>
import { Component } from '@angular/core';
import { PopconfirmComponent } from 'your-path-to-popconfirm-component';
import { MdbPopconfirmRef, MdbPopconfirmService } from 'mdb-angular-ui-kit/popconfirm';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
})
export class AppComponent {
popconfirmRef: MdbPopconfirmRef<PopconfirmComponent> | null = null;
constructor(private popconfirmService: MdbPopconfirmService) {}
openPopconfirm(event: Event) {
const target = event.target as HTMLElement;
this.popconfirmRef = this.popconfirmService.open(PopconfirmComponent, target, { popconfirmMode: 'modal' });
}
}
Icon example
You can add an icon to the message in the popconfirm by customizing the template
<button type="button" (click)="openPopconfirm($event, templateWithIcon)" class="btn btn-primary me-1">
Icon
</button>
<ng-template #templateWithIcon>
<div class="popconfirm-popover shadow-4">
<div class="popconfirm">
<p class="popconfirm-message">
<span class="popconfirm-icon-container"><i class="fa fa-comment pe-1"></i></span>
<span class="popconfirm-message-text">Icon example</span>
</p>
<div class="popconfirm-buttons-container">
<button (click)="close()" type="button" aria-label="Cancel" class="btn btn-secondary btn-sm">
Cancel
</button>
<button (click)="confirm()" type="button" aria-label="Confirm" class="btn btn-primary btn-sm">
OK
</button>
</div>
</div>
</div>
</ng-template>
import { Component } from '@angular/core';
import { PopconfirmComponent } from 'your-path-to-popconfirm-component';
import { MdbPopconfirmRef, MdbPopconfirmService } from 'mdb-angular-ui-kit/popconfirm';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
})
export class AppComponent {
popconfirmRef: MdbPopconfirmRef<PopconfirmComponent> | null = null;
constructor(private popconfirmService: MdbPopconfirmService) {}
openPopconfirm(event: Event, templateRef: any) {
const target = event.target as HTMLElement;
this.popconfirmRef = this.popconfirmService.open(templateRef, target, { position: 'bottom' });
}
}
Inline positions
You can choose between different positions
Available positions:
top left; top; top right; right top; right; right bottom; bottom right; bottom; bottom
left; left bottom; left; left top;
<button
type="button"
(click)="openPopconfirm($event)"
class="btn btn-primary popconfirm-toggle me-1"
>
Left top
</button>
import { Component } from '@angular/core';
import { PopconfirmComponent } from 'your-path-to-popconfirm-component';
import { MdbPopconfirmRef, MdbPopconfirmService } from 'mdb-angular-ui-kit/popconfirm';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
})
export class AppComponent {
popconfirmRef: MdbPopconfirmRef<PopconfirmComponent> | null = null;
constructor(private popconfirmService: MdbPopconfirmService) {}
openPopconfirm(event: Event) {
const target = event.target as HTMLElement;
this.popconfirmRef = this.popconfirmService.open(PopconfirmComponent, target, { position: 'left-top' });
}
}
Popconfirm - API
Import
import { MdbPopconfirmModule } from 'mdb-angular-ui-kit/popconfirm';
…
@NgModule ({
...
imports: [MdbPopconfirmModule],
...
})
Options
Name | Type | Default | Description |
---|---|---|---|
popconfirmMode |
String | 'inline' |
Mode of display -> 'inline' or 'modal' |
position
|
String | '' |
Specify position to display popover |
<button type="button" (click)="openPopoconfirm($event.target)" class="btn btn-primary me-1">
import { Component } from '@angular/core';
import { PopoconfirmComponent } from 'your-path-to-popconfirm-component';
import { MdbPopoconfirmRef, MdbPopoconfirmService } from 'mdb-angular-ui-kit/popconfirm';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
})
export class AppComponent {
popconfirmRef: MdbPopconfirmRef<PopconfirmComponent> | null = null;
constructor(private popconfirmService: MdbPopconfirmService) {}
openPopconfirm(event: Event) {
const target = event.target as HTMLElement;
this.popconfirmRef = this.popconfirmService.open(PopconfirmComponent, target, { popconfirmMode: 'modal' });
}
}
Methods
MdbPopconfirmService
Method | Description |
---|---|
open(componentType, target, config?: MdbPopconfirmConfig<D>)
|
Open Popconfirm. |
<button class="btn btn-primary" (click)="openPopoconfirm($event.target)">Open popconfirm</button>
import { Component } from '@angular/core';
import { PopoconfirmComponent } from 'your-path-to-popconfirm-component';
import { MdbPopoconfirmRef, MdbPopoconfirmService } from 'mdb-angular-ui-kit/popconfirm';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
})
export class AppComponent {
popconfirmRef: MdbPopconfirmRef<PopconfirmComponent> | null = null;
constructor(private popconfirmService: MdbPopconfirmService) {}
openPopconfirm(event: Event) {
const target = event.target as HTMLElement;
this.popconfirmRef = this.popconfirmService.open(PopconfirmComponent, target);
}
}
MdbPopconfirmRef
Method | Description |
---|---|
onClose: Observable<any> |
Returns observable on popconfirm close. |
onConfirm: Observable<any> |
Returns observable on popconfirm confirm. |
<button class="btn btn-primary" (click)="openModal()">Open modal</button>
import { Component } from '@angular/core';
import { PopoconfirmComponent } from 'your-path-to-popconfirm-component';
import { MdbPopoconfirmRef, MdbPopoconfirmService } from 'mdb-angular-ui-kit/popconfirm';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
})
export class AppComponent {
popconfirmRef: MdbPopconfirmRef<PopconfirmComponent> | null = null;
constructor(private popconfirmService: MdbPopconfirmService) {}
openPopconfirm(event: Event) {
const target = event.target as HTMLElement;
this.popconfirmRef = this.popconfirmService.open(PopconfirmComponent, target);
this.popconfirmRef.onClose.subscribe((message: any) => {
console.log(message);
});
}
}
CSS variables
As part of MDB’s evolving CSS variables approach, popconfirm now use local CSS variables on .popconfirm
for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
Popconfirm's CSS variables are in different classes which belong to this component. To make it easier to use them, you can find below all of the used CSS variables.
// :root
--#{$prefix}popconfirm-zindex: #{$popconfirm-zindex};
--#{$prefix}popconfirm-border-radius: #{$popconfirm-border-radius};
// .popconfirm
--#{$prefix}popconfirm-padding: #{$popconfirm-padding};
--#{$prefix}popconfirm-background-color: #{$popconfirm-background-color};
// .popconfirm-popover
--#{$prefix}popconfirm-popover-width: #{$popconfirm-popover-width};
--#{$prefix}popconfirm-border: #{$popconfirm-border};
// .popconfirm-modal
--#{$prefix}popconfirm-modal-width: #{$popconfirm-modal-width};
// .popconfirm-buttons-container
--#{$prefix}popconfirm-buttons-container-btn-ml: #{$popconfirm-buttons-container-btn-ml};
// .popconfirm-backdrop
--#{$prefix}popconfirm-backdrop-zindex: #{$popconfirm-backdrop-zindex};
--#{$prefix}popconfirm-backdrop-background-color: #{$popconfirm-backdrop-background-color};
SCSS variables
$popconfirm-zindex: 1080;
$popconfirm-backdrop-zindex: 1070;
$popconfirm-padding: 1rem;
$popconfirm-background-color: $white;
$popconfirm-border-radius: 0.5rem;
$popconfirm-popover-width: 300px;
$popconfirm-popover-margin: 5px;
$popconfirm-modal-width: $popconfirm-popover-width;
$popconfirm-buttons-container-btn-ml: 0.5rem;
$popconfirm-backdrop-background-color: rgba(0, 0, 0, 0.4);
$popconfirm-border: 1px solid #f5f5f5;