Added dangerous-button component, smarter modal
This commit is contained in:
parent
16f631af1a
commit
32dc18ed6e
|
@ -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>
|
|
@ -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 {}
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue