Merge pull request #4074 from shoetten/feature/stack-dragndrop

Improve stack drag and drop behavior
This commit is contained in:
Julius Härtl
2022-11-07 20:02:44 +01:00
committed by GitHub
2 changed files with 26 additions and 7 deletions

View File

@@ -53,9 +53,11 @@
<Container lock-axix="y" <Container lock-axix="y"
orientation="horizontal" orientation="horizontal"
:drag-handle-selector="dragHandleSelector" :drag-handle-selector="dragHandleSelector"
@drag-start="draggingStack = true"
@drag-end="draggingStack = false"
@drop="onDropStack"> @drop="onDropStack">
<Draggable v-for="stack in stacksByBoard" :key="stack.id"> <Draggable v-for="stack in stacksByBoard" :key="stack.id">
<Stack :stack="stack" /> <Stack :stack="stack" :dragging="draggingStack" />
</Draggable> </Draggable>
</Container> </Container>
</div> </div>
@@ -100,6 +102,7 @@ export default {
}, },
data() { data() {
return { return {
draggingStack: false,
loading: true, loading: true,
newStackTitle: '', newStackTitle: '',
} }
@@ -117,7 +120,7 @@ export default {
return this.$store.getters.stacksByBoard(this.board.id) return this.$store.getters.stacksByBoard(this.board.id)
}, },
dragHandleSelector() { dragHandleSelector() {
return this.canEdit ? null : '.no-drag' return this.canEdit ? '.stack__title' : '.no-drag'
}, },
isEmpty() { isEmpty() {
return this.stacksByBoard.length === 0 return this.stacksByBoard.length === 0

View File

@@ -41,7 +41,10 @@
@keydown.enter="startEditing(stack)"> @keydown.enter="startEditing(stack)">
{{ stack.title }} {{ stack.title }}
</h3> </h3>
<form v-else @submit.prevent="finishedEdit(stack)"> <form v-else-if="editing"
v-click-outside="cancelEdit"
@submit.prevent="finishedEdit(stack)"
@keyup.esc="cancelEdit">
<input v-model="copiedStack.title" <input v-model="copiedStack.title"
v-focus v-focus
type="text" type="text"
@@ -142,7 +145,7 @@
</template> </template>
<script> <script>
import ClickOutside from 'vue-click-outside'
import { mapGetters, mapState } from 'vuex' import { mapGetters, mapState } from 'vuex'
import { Container, Draggable } from 'vue-smooth-dnd' import { Container, Draggable } from 'vue-smooth-dnd'
@@ -164,8 +167,14 @@ export default {
NcModal, NcModal,
ArchiveIcon, ArchiveIcon,
}, },
directives: {
ClickOutside,
},
props: { props: {
dragging: {
type: Boolean,
default: false,
},
stack: { stack: {
type: Object, type: Object,
default: undefined, default: undefined,
@@ -265,6 +274,10 @@ export default {
this.modalArchivAllCardsShow = false this.modalArchivAllCardsShow = false
}, },
startEditing(stack) { startEditing(stack) {
if (this.dragging) {
return
}
this.copiedStack = Object.assign({}, stack) this.copiedStack = Object.assign({}, stack)
this.editing = true this.editing = true
}, },
@@ -274,6 +287,9 @@ export default {
} }
this.editing = false this.editing = false
}, },
cancelEdit() {
this.editing = false
},
async clickAddCard() { async clickAddCard() {
this.stateCardCreating = true this.stateCardCreating = true
try { try {
@@ -374,7 +390,7 @@ export default {
margin: 6px; margin: 6px;
padding: 4px 4px; padding: 4px 4px;
&:focus { &:focus-visible {
outline: 2px solid var(--color-border-dark); outline: 2px solid var(--color-border-dark);
border-radius: 3px; border-radius: 3px;
} }