166 lines
3.7 KiB
Vue
166 lines
3.7 KiB
Vue
<!--
|
|
- @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
|
|
-
|
|
- @author Julius Härtl <jus@bitgrid.net>
|
|
-
|
|
- @license GNU AGPL version 3 or any later version
|
|
-
|
|
- This program is free software: you can redistribute it and/or modify
|
|
- it under the terms of the GNU Affero General Public License as
|
|
- published by the Free Software Foundation, either version 3 of the
|
|
- License, or (at your option) any later version.
|
|
-
|
|
- This program is distributed in the hope that it will be useful,
|
|
- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
- GNU Affero General Public License for more details.
|
|
-
|
|
- You should have received a copy of the GNU Affero General Public License
|
|
- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
-
|
|
-->
|
|
|
|
<template>
|
|
<div>
|
|
<Controls :board="board" />
|
|
<div v-if="board" class="board">
|
|
<Container lock-axix="y" orientation="horizontal" @drop="onDropStack">
|
|
<Draggable v-for="stack in stacksByBoard" :key="stack.id" class="stack">
|
|
<Stack :stack="stack" />
|
|
</Draggable>
|
|
</Container>
|
|
</div>
|
|
<div v-else class="emptycontent">
|
|
<div class="icon icon-deck" />
|
|
<h2>{{ t('deck', 'Board not found') }}</h2>
|
|
<p />
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
|
|
import { Container, Draggable } from 'vue-smooth-dnd'
|
|
import { mapState } from 'vuex'
|
|
import Controls from '../Controls'
|
|
import Stack from './Stack'
|
|
|
|
export default {
|
|
name: 'Board',
|
|
components: {
|
|
Controls,
|
|
Container,
|
|
Draggable,
|
|
Stack,
|
|
},
|
|
inject: [
|
|
'boardApi',
|
|
],
|
|
props: {
|
|
id: {
|
|
type: Number,
|
|
default: null,
|
|
},
|
|
},
|
|
data: function() {
|
|
return {
|
|
loading: true,
|
|
}
|
|
},
|
|
computed: {
|
|
...mapState({
|
|
board: state => state.currentBoard,
|
|
showArchived: state => state.showArchived,
|
|
}),
|
|
stacksByBoard() {
|
|
return this.$store.getters.stacksByBoard(this.board.id)
|
|
},
|
|
/* cardsByStack() {
|
|
return (id) => this.$store.getters.cardsByStack(id)
|
|
} */
|
|
},
|
|
watch: {
|
|
id: 'fetchData',
|
|
showArchived() {
|
|
this.fetchData()
|
|
},
|
|
},
|
|
created() {
|
|
this.fetchData()
|
|
},
|
|
methods: {
|
|
fetchData() {
|
|
|
|
this.$store.dispatch('loadBoardById', this.id).then(response => {
|
|
this.$store.dispatch('loadStacks', this.id).then(response => {
|
|
this.loading = false
|
|
})
|
|
})
|
|
|
|
/* this.boardApi.loadById(this.id)
|
|
.then((board) => {
|
|
this.$store.dispatch('setCurrentBoard', board)
|
|
this.$store.dispatch('loadStacks', board)
|
|
this.$store.dispatch('setAssignableUsers', board.users)
|
|
this.loading = false
|
|
this.$store.state.labels = board.labels
|
|
}) */
|
|
},
|
|
onDropStack({ removedIndex, addedIndex }) {
|
|
this.$store.dispatch('orderStack', { stack: this.stacksByBoard[removedIndex], removedIndex, addedIndex })
|
|
},
|
|
/* onDropCard({ removedIndex, addedIndex }) {
|
|
|
|
}, */
|
|
/* payloadForCard(stackId) {
|
|
return index => {
|
|
return this.cardsByStack(stackId)[index]
|
|
}
|
|
}, */
|
|
createStack() {
|
|
const newStack = {
|
|
title: 'FooBar',
|
|
boardId: this.id,
|
|
order: this.stacksByBoard().length,
|
|
}
|
|
this.$store.dispatch('createStack', newStack)
|
|
},
|
|
/* deleteStack(stack) {
|
|
this.$store.dispatch('deleteStack', stack)
|
|
} */
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
$board-spacing: 15px;
|
|
$stack-spacing: 10px;
|
|
$stack-width: 300px;
|
|
|
|
.board {
|
|
margin-left: $board-spacing;
|
|
}
|
|
|
|
.stack {
|
|
width: $stack-width;
|
|
padding: $stack-spacing;
|
|
padding-top: 0;
|
|
}
|
|
|
|
/*
|
|
.smooth-dnd-container.vertical {
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.smooth-dnd-container.vertical > .smooth-dnd-draggable-wrapper {
|
|
overflow: initial;
|
|
}
|
|
|
|
.smooth-dnd-container.vertical .smooth-dnd-draggable-wrapper {
|
|
height: auto;
|
|
} */
|
|
|
|
</style>
|