UNPKG

balm-ui

Version:

A modular and customizable UI library based on Material Design and Vue 3

80 lines (65 loc) 1.84 kB
import createVueApp from '../config/ssr'; import MdcDialog from '../components/dialog/mdc-dialog.vue'; import { alertDialogId, useDialog } from '../mixins/dialog'; import { getOptions, createModal } from '../utils/modal'; // Define alert dialog constants const UI_ALERT_DIALOG = { id: alertDialogId }; const DEFAULT_OPTIONS = { className: '', title: '', state: '', // 'success' | 'info' | 'warning' | 'error' | 'help' stateOutlined: false, message: '', raw: false, buttonText: 'OK', callback: false }; let globalOptions = DEFAULT_OPTIONS; let alertApp; const template = `<mdc-dialog class="mdc-alert-dialog" :open="open" :options="options"> <button type="button" class="mdc-button mdc-button--raised mdc-alert-dialog__button" data-mdc-dialog-button-default @click="handleClick"> <span class="mdc-button__label" v-text="options.buttonText"></span> </button> </mdc-dialog>`; function createAlertDialog(options, done) { const el = createModal(UI_ALERT_DIALOG.id); alertApp = createVueApp({ name: 'AlertDialog', components: { MdcDialog }, setup() { return useDialog({ app: alertApp, el, constants: UI_ALERT_DIALOG, options, done }); }, template }); return alertApp; } function alertDialog(customOptions = {}) { const options = getOptions(globalOptions, customOptions); return new Promise((resolve) => { createAlertDialog(options, resolve).mount(`#${UI_ALERT_DIALOG.id}`); }); } function install(app, options = {}) { globalOptions = Object.assign({}, DEFAULT_OPTIONS, options); app.config.globalProperties.$alert = alertDialog; app.provide('alert', alertDialog); } const $alert = { install }; const useAlert = () => alertDialog; export default $alert; export { install, useAlert };