Modal.vue 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <template>
  2. <div>
  3. <div @click="openModal" v-if="showButton">
  4. <slot name="submitBtn">
  5. <button :class="openBtnClass">{{openTitle}}</button>
  6. </slot>
  7. </div>
  8. <div class="modal"
  9. :class="{'is-active': isOpen}">
  10. <div class="modal-background"></div>
  11. <div class="modal-card">
  12. <header class="modal-card-head">
  13. <p class="modal-card-title">{{title}}</p>
  14. <button @click="isOpen=false" class="delete" aria-label="close"></button>
  15. </header>
  16. <section class="modal-card-body">
  17. <div class="content">
  18. <slot></slot>
  19. </div>
  20. </section>
  21. <footer class="modal-card-foot">
  22. <button
  23. :disabled="isDisabled"
  24. @click="emitAction"
  25. class="button is-success">
  26. {{actionTitle}}
  27. </button>
  28. <button @click="isOpen=false" class="button">Cancel</button>
  29. </footer>
  30. </div>
  31. </div>
  32. </div>
  33. </template>
  34. <script>
  35. export default {
  36. props: {
  37. openTitle: {
  38. type: String,
  39. default: 'Open'
  40. },
  41. title: {
  42. type: String,
  43. default: 'Hey There'
  44. },
  45. actionTitle: {
  46. type: String,
  47. default: 'Commit'
  48. },
  49. openBtnClass: {
  50. type: String,
  51. default: 'button'
  52. },
  53. showButton: {
  54. type: Boolean,
  55. default: true
  56. },
  57. isDisabled: {
  58. type: Boolean,
  59. default: false
  60. }
  61. },
  62. data() {
  63. return {
  64. isOpen: false
  65. }
  66. },
  67. methods: {
  68. emitAction() {
  69. this.$emit('submitted',
  70. { closeModal: this.closeCallback }
  71. )
  72. },
  73. closeCallback() {
  74. this.isOpen = false
  75. },
  76. openModal() {
  77. this.isOpen = true
  78. this.$emit('opened')
  79. }
  80. }
  81. }
  82. </script>
  83. <style scoped lang="scss">
  84. .modal-card-body {
  85. color: black;
  86. }
  87. .modal {
  88. z-index: 9999;
  89. }
  90. </style>