useDialog
A composable to facilitate the use of Dialog;
Import
import useDialog from '@leaflink/stash/useDialog';
Usage
Async/await
Call the composable in your component and call the open
function. It returns a promise that will resolve when the dialog is confirmed/canceled.
<script setup>
import useDialog from '@leaflink/stash/useDialog';
const dialog = useDialog();
async function displayDialog() {
const result = await dialog.open({
dangerZone: true,
header: 'Test dialog',
description: 'Bacon ipsum dolor amet tri-tip deserunt nostrud, nisi consequat corned beef dolore short loin fugiat turkey',
cancelText: 'cancel',
confirmText: 'confirm test',
});
}
</script>
Callback
Instead of awaiting for the promise to resolve you can pass both onConfirm
and onCancel
methods. They will be invoked when the user clicks the confirm button or the cancel button.
<script setup>
import useDialog from '@leaflink/stash/useDialog';
const dialog = useDialog();
function onConfirm() {
console.log('Confirmed!');
}
function onCancel() {
console.log('Canceled!');
}
function displayDialogWithCallback() {
dialog.open({
dangerZone: true,
header: 'Test dialog',
description: 'Bacon ipsum dolor amet tri-tip deserunt nostrud, nisi consequat corned beef dolore short loin fugiat turkey',
cancelText: 'cancel',
confirmText: 'confirm test',
onConfirm: () => onConfirm(),
onCancel: () => onCancel(),
});
}
</script>
async onConfirm
You can provide a custom async onConfirm
function. It will be called and awaited with the dialog still open. A good use case for this is a removal dialog where you want the user to confirm removal. When the user clicks the confirm button, the method will be invoked and the dialog will be kept open until the promise resolves or fails.
<script setup>
import useDialog from '@leaflink/stash/useDialog';
const dialog = useDialog();
function onConfirm() {
console.log('Confirmed!');
}
function onCancel() {
console.log('Canceled!');
}
function displayDialogWithAsyncOnConfirm() {
dialog.open({
dangerZone: true,
header: 'Test dialog',
cancelText: 'cancel',
confirmText: 'confirm test',
onConfirm: () => {
return new Promise((resolve, reject) => {
setTimeout(resolve, 2000);
});
},
onCancel: () => onCancel(),
description: 'Bacon ipsum dolor amet tri-tip deserunt nostrud, nisi consequat corned beef dolore short loin fugiat turkey',
});
}
</script>
Slots
You can use the default
slot to provide rich markup.
<script setup>
import useDialog from '@leaflink/stash/useDialog';
const dialog = useDialog();
function onConfirm() {
console.log('Confirmed!');
}
function onCancel() {
console.log('Canceled!');
}
function displayDialogWithSlot() {
dialog.open({
dangerZone: true,
header: 'Test dialog',
cancelText: 'cancel',
confirmText: 'confirm test',
onConfirm: () => onConfirm(),
onCancel: () => onCancel(),
slots: {
default: () => h(
'span',
{
class: "tw-text-green",
},
'Bacon ipsum dolor amet tri-tip deserunt nostrud, nisi consequat corned beef dolore short loin fugiat turkey'
),
},
});
}
</script>