index.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import _extends from "@babel/runtime/helpers/esm/extends";
  2. import Vue from 'vue';
  3. import VanDialog from './Dialog';
  4. import { isServer, isInDocument } from '../utils';
  5. var instance;
  6. function initInstance() {
  7. if (instance) {
  8. instance.$destroy();
  9. }
  10. instance = new (Vue.extend(VanDialog))({
  11. el: document.createElement('div'),
  12. // avoid missing animation when first rendered
  13. propsData: {
  14. lazyRender: false
  15. }
  16. });
  17. instance.$on('input', function (value) {
  18. instance.value = value;
  19. });
  20. }
  21. function Dialog(options) {
  22. /* istanbul ignore if */
  23. if (isServer) {
  24. return Promise.resolve();
  25. }
  26. return new Promise(function (resolve, reject) {
  27. if (!instance || !isInDocument(instance.$el)) {
  28. initInstance();
  29. }
  30. _extends(instance, Dialog.currentOptions, options, {
  31. resolve: resolve,
  32. reject: reject
  33. });
  34. });
  35. }
  36. Dialog.defaultOptions = {
  37. value: true,
  38. title: '',
  39. message: '',
  40. overlay: true,
  41. className: '',
  42. lockScroll: true,
  43. beforeClose: null,
  44. messageAlign: '',
  45. getContainer: 'body',
  46. cancelButtonText: '',
  47. cancelButtonColor: null,
  48. confirmButtonText: '',
  49. confirmButtonColor: null,
  50. showConfirmButton: true,
  51. showCancelButton: false,
  52. closeOnClickOverlay: false,
  53. callback: function callback(action) {
  54. instance[action === 'confirm' ? 'resolve' : 'reject'](action);
  55. }
  56. };
  57. Dialog.alert = Dialog;
  58. Dialog.confirm = function (options) {
  59. return Dialog(_extends({
  60. showCancelButton: true
  61. }, options));
  62. };
  63. Dialog.close = function () {
  64. if (instance) {
  65. instance.value = false;
  66. }
  67. };
  68. Dialog.setDefaultOptions = function (options) {
  69. _extends(Dialog.currentOptions, options);
  70. };
  71. Dialog.resetDefaultOptions = function () {
  72. Dialog.currentOptions = _extends({}, Dialog.defaultOptions);
  73. };
  74. Dialog.resetDefaultOptions();
  75. Dialog.install = function () {
  76. Vue.use(VanDialog);
  77. };
  78. Vue.prototype.$dialog = Dialog;
  79. export default Dialog;