Using Sweet alerts with Livewire is possible by triggering events from Livewire / AlpineJs and having javascript listen for the event and act when it's triggered.
On a link or button using wire:click we can trigger sending an event using $emit it takes 2 params
1) the event name
2) the value to pass
<button wire:click="$emit('triggerDelete',{{ $contact->id }})" type="button">Delete</button>
Then in a view when the event is triggered a closure will file. From there a normal Sweet Alert is executed. When a confirmation runs the if result.value runs then triggers a method on the Livewire controller called delete and pass in the value.
@push('scripts')
<script type="text/javascript">
document.addEventListener('DOMContentLoaded', function () {
@this.on('triggerDelete', id => {
Swal.fire({
title: 'Are You Sure?',
html: "You won't be able to revert this!",
icon: 'warning',
showCancelButton: true,
}).then((result) => {
if (result.value) {
@this.call('delete',id)
}
});
});
})
</script>
@endpush
This approach is dead simple and allows Livewire and Sweet Alerts to work together.
You could trigger the event from a Livewire controller if you prefer.
Thanks to BezhanSalleh for posting the solution on Laracasts
Top comments (0)