forked from platypush/platypush
[ActionTile] Support for drag and drop.
This commit is contained in:
parent
837007132d
commit
07a144aadc
1 changed files with 39 additions and 7 deletions
|
@ -1,5 +1,10 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="action-tile" @click="$refs.actionEditor.show">
|
<div class="action-tile"
|
||||||
|
:class="{drag: draggable && dragging}"
|
||||||
|
:draggable="draggable"
|
||||||
|
@dragstart="onDragStart"
|
||||||
|
@dragend="onDragEnd"
|
||||||
|
@click="$refs.actionEditor.show">
|
||||||
<div class="action-delete" title="Remove" v-if="withDelete" @click.stop="$emit('delete')">
|
<div class="action-delete" title="Remove" v-if="withDelete" @click.stop="$emit('delete')">
|
||||||
<i class="icon fas fa-xmark" />
|
<i class="icon fas fa-xmark" />
|
||||||
</div>
|
</div>
|
||||||
|
@ -9,7 +14,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="new-action" v-else>
|
<div class="new-action" v-else>
|
||||||
<i class="icon fas fa-plus" /> New Action
|
<i class="icon fas fa-plus" /> Add Action
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="action-args" v-if="Object.keys(value.args || {})?.length">
|
<div class="action-args" v-if="Object.keys(value.args || {})?.length">
|
||||||
|
@ -38,7 +43,7 @@ import ActionEditor from "@/components/Action/ActionEditor"
|
||||||
import Modal from "@/components/Modal";
|
import Modal from "@/components/Modal";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
emits: ['input', 'delete'],
|
emits: ['input', 'delete', 'drag', 'drop'],
|
||||||
components: {
|
components: {
|
||||||
ActionEditor,
|
ActionEditor,
|
||||||
Modal,
|
Modal,
|
||||||
|
@ -59,6 +64,17 @@ export default {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: false,
|
default: false,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
draggable: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
dragging: false,
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
|
@ -68,6 +84,19 @@ export default {
|
||||||
},
|
},
|
||||||
|
|
||||||
methods: {
|
methods: {
|
||||||
|
onDragStart(event) {
|
||||||
|
this.dragging = true
|
||||||
|
event.dataTransfer.dropEffect = 'move'
|
||||||
|
event.dataTransfer.effectAllowed = 'move'
|
||||||
|
event.dataTransfer.setData('application/json', JSON.stringify(this.value))
|
||||||
|
this.$emit('drag')
|
||||||
|
},
|
||||||
|
|
||||||
|
onDragEnd() {
|
||||||
|
this.dragging = false
|
||||||
|
this.$emit('drop')
|
||||||
|
},
|
||||||
|
|
||||||
onInput(value) {
|
onInput(value) {
|
||||||
this.$emit('input', {
|
this.$emit('input', {
|
||||||
...this.value,
|
...this.value,
|
||||||
|
@ -88,9 +117,8 @@ export default {
|
||||||
|
|
||||||
.action-tile {
|
.action-tile {
|
||||||
min-width: 20em;
|
min-width: 20em;
|
||||||
max-height: 7.5em;
|
background: $tile-bg;
|
||||||
background: $action-tile-bg;
|
color: $tile-fg;
|
||||||
color: $action-tile-fg;
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
padding: 0.5em 1em;
|
padding: 0.5em 1em;
|
||||||
|
@ -102,7 +130,11 @@ export default {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background: $action-tile-hover-bg;
|
background: $tile-hover-bg;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.drag {
|
||||||
|
opacity: 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
.action-delete {
|
.action-delete {
|
||||||
|
|
Loading…
Reference in a new issue