Added dangerous-button component, smarter modal

This commit is contained in:
Eliot Berriot 2018-03-20 23:39:23 +01:00
parent 16f631af1a
commit 32dc18ed6e
No known key found for this signature in database
GPG Key ID: DD6965E2476E5C27
3 changed files with 74 additions and 14 deletions

View File

@ -0,0 +1,44 @@
<template>
<div @click="showModal = true" class="ui red button">
<slot></slot>
<modal class="small" :show.sync="showModal">
<div class="header">
<slot name="modal-header">Do you want to confirm this action?</slot>
</div>
<div class="scrolling content">
<div class="description">
<slot name="modal-content"></slot>
</div>
</div>
<div class="actions">
<div class="ui cancel button">Cancel</div>
<div class="ui confirm red button" @click="confirm">
<slot name="modal-confirm">Confirm</slot>
</div>
</div>
</modal>
</div>
</template>
<script>
import Modal from '@/components/semantic/Modal'
export default {
props: ['action'],
components: {
Modal
},
data () {
return {
showModal: false
}
},
methods: {
confirm () {
this.showModal = false
this.action()
}
}
}
</script>

View File

@ -8,4 +8,8 @@ import Username from '@/components/common/Username'
Vue.component('username', Username)
import DangerousButton from '@/components/common/DangerousButton'
Vue.component('dangerous-button', DangerousButton)
export default {}

View File

@ -2,7 +2,7 @@
<div :class="['ui', {'active': show}, 'modal']">
<i class="close icon"></i>
<slot>
</slot>
</div>
</template>
@ -19,26 +19,38 @@ export default {
control: null
}
},
mounted () {
this.control = $(this.$el).modal({
onApprove: function () {
this.$emit('approved')
}.bind(this),
onDeny: function () {
this.$emit('deny')
}.bind(this),
onHidden: function () {
this.$emit('update:show', false)
}.bind(this)
})
beforeDestroy () {
if (this.control) {
this.control.remove()
}
},
methods: {
initModal () {
this.control = $(this.$el).modal({
duration: 100,
onApprove: function () {
this.$emit('approved')
}.bind(this),
onDeny: function () {
this.$emit('deny')
}.bind(this),
onHidden: function () {
this.$emit('update:show', false)
}.bind(this)
})
}
},
watch: {
show: {
handler (newValue) {
if (newValue) {
this.initModal()
this.control.modal('show')
} else {
this.control.modal('hide')
if (this.control) {
this.control.modal('hide')
this.control.remove()
}
}
}
}