Implementation of vuedl dialog helper with Vuetify.js framework
This module will help you to work with modal dialogs in your project
Install the package from npm
npm install vuetify-dialog
import VuetifyDialog from 'vuetify-dialog'
Vue.use(VuetifyDialog)or use with extra configuration
import VuetifyDialog from 'vuetify-dialog'
Vue.use(VuetifyDialog, {
context,
property,
confirm: {
actions: {
false: 'No',
true: {
text: 'Yes',
color: 'primary'
}
},
icon: false, // to disable icon just put false
width: 500
},
warning: {},
error: {},
prompt: {}
})context- the context of your application, such as store, axios, router etc.property- the property, which will integrate to Vue. Default is$dialogconfirm- confirm dialog paramswarning- warning dialog paramserror- error dialog paramsprompt- prompt dialog params Where:actions- dialog buttons configicon- dialog icon in String, example 'warning'. Note, if you want to hide icon, just set parameter to falsewidth- dialog max width
Add vuetify-dialog/nuxt to modules section of nuxt.config.js
Module automatically add to dialog nuxt context data, such as router, route, i18n, $axios, etc
{
modules: [
// Simple usage
'vuetify-dialog/nuxt'
// Optionally passing options in module configuration
['vuetify-dialog/nuxt', { property: '$dialog' }]
],
// Optionally passing options in module top level configuration
vuetifyDialog: {
property: '$dialog'
confirm: {}
// ...
}
}const res = await this.$dialog.confirm({
text: 'Do you really want to exit?',
title: 'Warning'
})const res = await this.$dialog.warning({
text: 'Do you really want to exit?',
title: 'Warning'
})this.$dialog.error({
text: 'Cannot delete this item',
title: 'Error'
})let res = await this.$dialog.prompt({
text: 'Your name',
title: 'Please input your name'
})If property waitForResult set to false, then functions will return dialog instance
Actually waitForResult = true make two steps
- dialogInstance = $dialog.show(component) // Show dialog
- return dialogInstance.wait() // Return promise
Therefore to perfom programmatically close dialog you have to set waitForResult to false and work with dialogInstance directly
const dialogInstance = await this.$dialog.warning({
title: this.title,
text: this.text,
waitForResult: false
});
setTimeout(() => {
dialogInstance.close()
} , 3000)
// then you can wait for user reaction
const userChoice = await dialogInstance.wait()
// after idle 3000 sec - userChoice will be undefigned
this.$dialog.notify.info(userChoice)The notification component is used to convey important information to the user. Notification support positioning, removal delay and callbacks. It comes in 4 variations, success, info, warning and error. These have default icons assigned which can be changed and represent different actions
Notification uses v-alert component
Props:
- text - the text fo your message
- type: String
- options:
- type: Object
- properties:
- position: one of top-left, top-right, bottom-left, bootom-right
- timeoot: timer to hide message. Default 5000. If set to 0 - message will not closes automatically
- actions
this.$dialog.notify.info('Test notification', {
position: 'top-right',
timeout: 5000
})The toast component is used to display a quick message to a user. Toasts support positioning, removal delay and callbacks. It comes in 4 variations, success, info, warning and error. These have default icons assigned which can be changed and represent different actions
Toast uses v-snackbar component
Props:
- text - the text fo your message
- type: String
- options:
- type: Object
- properties:
- position: one of top-left, top-right, bottom-left, bootom-right
- timeoot: timer to hide message. Default 5000. If set to 0 - message will not closes automatically
- actions: - see below
this.$dialog.message.info('Test', {
position: 'top-left'
})To all dialogs you can put your own buttons Props:
- key - the text fo your message
- type: String
- options:
- type: Object
- properties:
- position: one of top-left, top-right, bottom-left, bootom-right
- timeoot: timer to hide message. Default 5000. If set to 0 - message will not closes automatically
- actions: - see below
{
...
actions: {
'false': 'No',
'true': 'Yes'
}
}
// result will be true, false, or undefigned
{
...
actions: ['No', 'Yes']
}
// result will be 'No', 'Yes', or undefignedYou can also send full button options
{
actions: [{
text: 'Yes', color: 'blue', key: true
}]
}