@@ -95,6 +95,7 @@ export default {
|
|||||||
.then((board) => {
|
.then((board) => {
|
||||||
this.$store.dispatch('setCurrentBoard', board)
|
this.$store.dispatch('setCurrentBoard', board)
|
||||||
this.$store.dispatch('loadStacks', board)
|
this.$store.dispatch('loadStacks', board)
|
||||||
|
this.$store.dispatch('setAssignableUsers', board.users)
|
||||||
this.loading = false
|
this.loading = false
|
||||||
this.$store.state.labels = board.labels
|
this.$store.state.labels = board.labels
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
</AppSidebarTab>
|
</AppSidebarTab>
|
||||||
|
|
||||||
<AppSidebarTab name="Deleted items" icon="icon-delete">
|
<AppSidebarTab name="Deleted items" icon="icon-delete">
|
||||||
<DeletedTabSidebard :board="board" />
|
<DeletedTabSidebar :board="board" />
|
||||||
</AppSidebarTab>
|
</AppSidebarTab>
|
||||||
|
|
||||||
<AppSidebarTab name="Timeline" icon="icon-activity">
|
<AppSidebarTab name="Timeline" icon="icon-activity">
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
import { mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
import SharingTabSidebard from './SharingTabSidebard'
|
import SharingTabSidebard from './SharingTabSidebard'
|
||||||
import TagsTabSidebard from './TagsTabSidebard'
|
import TagsTabSidebard from './TagsTabSidebard'
|
||||||
import DeletedTabSidebard from './DeletedTabSidebard'
|
import DeletedTabSidebar from './DeletedTabSidebar'
|
||||||
import TimelineTabSidebard from './TimelineTabSidebard'
|
import TimelineTabSidebard from './TimelineTabSidebard'
|
||||||
import { AppSidebar, AppSidebarTab } from 'nextcloud-vue'
|
import { AppSidebar, AppSidebarTab } from 'nextcloud-vue'
|
||||||
|
|
||||||
@@ -60,7 +60,7 @@ export default {
|
|||||||
AppSidebarTab,
|
AppSidebarTab,
|
||||||
SharingTabSidebard,
|
SharingTabSidebard,
|
||||||
TagsTabSidebard,
|
TagsTabSidebard,
|
||||||
DeletedTabSidebard,
|
DeletedTabSidebar,
|
||||||
TimelineTabSidebard
|
TimelineTabSidebard
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
|||||||
@@ -2,11 +2,12 @@
|
|||||||
<div>
|
<div>
|
||||||
|
|
||||||
<h3>{{ t('deck', 'Deleted stacks') }}</h3>
|
<h3>{{ t('deck', 'Deleted stacks') }}</h3>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li v-for="deletedStack in deletedStacks" :key="deletedStack.id">
|
<li v-for="deletedStack in deletedStacks" :key="deletedStack.id">
|
||||||
|
|
||||||
<span class="icon icon-deck" />
|
<span class="icon icon-deck" />
|
||||||
<span class="title">{{ deletedStack.title }}</span>
|
<span class="title">{{ deletedStack.title }}</span>
|
||||||
<span class="live-relative-timestamp" />
|
|
||||||
<button
|
<button
|
||||||
:title="t('settings', 'Undo')"
|
:title="t('settings', 'Undo')"
|
||||||
class="app-navigation-entry-deleted-button icon-history"
|
class="app-navigation-entry-deleted-button icon-history"
|
||||||
@@ -43,7 +44,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import { mapState } from 'vuex'
|
import { mapState } from 'vuex'
|
||||||
export default {
|
export default {
|
||||||
name: 'DeletedTabSidebard',
|
name: 'DeletedTabSidebar',
|
||||||
components: {
|
components: {
|
||||||
|
|
||||||
},
|
},
|
||||||
@@ -63,8 +64,7 @@ export default {
|
|||||||
computed: {
|
computed: {
|
||||||
...mapState({
|
...mapState({
|
||||||
deletedStacks: state => state.stack.deletedStacks,
|
deletedStacks: state => state.stack.deletedStacks,
|
||||||
deletedCards: state => state.stack.deletedCards,
|
deletedCards: state => state.stack.deletedCards
|
||||||
currentBoard: state => state.currentBoard
|
|
||||||
})
|
})
|
||||||
|
|
||||||
},
|
},
|
||||||
@@ -74,7 +74,7 @@ export default {
|
|||||||
methods: {
|
methods: {
|
||||||
getData() {
|
getData() {
|
||||||
this.isLoading = true
|
this.isLoading = true
|
||||||
this.$store.dispatch('deletedItems', this.currentBoard.id).then(response => {
|
this.$store.dispatch('deletedItems', this.board.id).then(response => {
|
||||||
this.isLoading = false
|
this.isLoading = false
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
@@ -38,31 +38,32 @@
|
|||||||
</multiselect>
|
</multiselect>
|
||||||
|
|
||||||
<p>Assign to user</p>
|
<p>Assign to user</p>
|
||||||
{{ unallocatedSharees }}
|
assignd:
|
||||||
<hr>
|
{{ copiedCard.assignedUsers }}
|
||||||
{{ addAclToCard }}
|
<multiselect v-model="assignedUsers" :multiple="true" :options="assignableUsers"
|
||||||
<multiselect v-model="addAclToCard" :multiple="true" :options="unallocatedSharees"
|
label="displayname"
|
||||||
label="participant"
|
track-by="primaryKey"
|
||||||
track-by="shareWith"
|
@select="assignUserToCard" @remove="removeUserFromCard">
|
||||||
@select="assignUserToCard" @remove="removeUserFromCard" @search-change="asyncFind">
|
|
||||||
<template #option="scope">
|
<template #option="scope">
|
||||||
{{ scope.option.label }}
|
{{ scope.option.displayname }}
|
||||||
</template>
|
</template>
|
||||||
</multiselect>
|
</multiselect>
|
||||||
|
|
||||||
<p>Due to</p>
|
<p>Due to</p>
|
||||||
|
|
||||||
<DatetimePicker v-model="copiedCard.duedate" type="datetime" lang="en"
|
<DatetimePicker v-model="copiedCard.duedate" type="datetime" lang="en"
|
||||||
format="YYYY-MM-DD HH:mm" confirm @change="setDue()" />
|
format="YYYY-MM-DD HH:mm" confirm @change="setDue()" />
|
||||||
|
<button v-tooltip="t('deck', 'Delete')" v-if="copiedCard.duedate" class="icon-delete"
|
||||||
|
@click="removeDue()" />
|
||||||
<hr>
|
<hr>
|
||||||
<p>{{ subtitle }}</p>
|
<p>{{ subtitle }}</p>
|
||||||
|
|
||||||
</AppSidebarTab>
|
</AppSidebarTab>
|
||||||
<AppSidebarTab name="Description" icon="icon-description">
|
<AppSidebarTab name="Description" icon="icon-description">
|
||||||
<textarea v-model="copiedCard.description" type="text" autofocus />
|
<!-- <textarea v-model="copiedCard.description" type="text" autofocus />
|
||||||
<input type="button" class="icon-confirm" @click="saveDesc()">
|
<input type="button" class="icon-confirm" @click="saveDesc()"> -->
|
||||||
|
|
||||||
<markdown-editor ref="markdownEditor" v-model="desc" :configs="{autosave: {enabled: true, uniqueId: 'unique'}}" />
|
<markdown-editor ref="markdownEditor" v-model="desc" :configs="{autofocus: true, autosave: {enabled: true, uniqueId: 'unique'}, toolbar: false}" />
|
||||||
</AppSidebarTab>
|
</AppSidebarTab>
|
||||||
<AppSidebarTab name="Attachments" icon="icon-files-dark">
|
<AppSidebarTab name="Attachments" icon="icon-files-dark">
|
||||||
{{ currentCard.attachments }}
|
{{ currentCard.attachments }}
|
||||||
@@ -89,7 +90,7 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
addAclToCard: null,
|
assignedUsers: null,
|
||||||
addedLabelToCard: null,
|
addedLabelToCard: null,
|
||||||
isLoading: false,
|
isLoading: false,
|
||||||
copiedCard: null,
|
copiedCard: null,
|
||||||
@@ -101,7 +102,7 @@ export default {
|
|||||||
...mapState({
|
...mapState({
|
||||||
currentCard: state => state.currentCard,
|
currentCard: state => state.currentCard,
|
||||||
currentBoard: state => state.currentBoard,
|
currentBoard: state => state.currentBoard,
|
||||||
sharees: 'sharees'
|
assignableUsers: state => state.assignableUsers
|
||||||
}),
|
}),
|
||||||
subtitle() {
|
subtitle() {
|
||||||
let lastModified = this.currentCard.lastModified
|
let lastModified = this.currentCard.lastModified
|
||||||
@@ -109,16 +110,6 @@ export default {
|
|||||||
|
|
||||||
return t('deck', 'Modified') + ': ' + lastModified + ' ' + t('deck', 'Created') + ': ' + createdAt
|
return t('deck', 'Modified') + ': ' + lastModified + ' ' + t('deck', 'Created') + ': ' + createdAt
|
||||||
},
|
},
|
||||||
unallocatedSharees() {
|
|
||||||
|
|
||||||
return this.sharees
|
|
||||||
|
|
||||||
/* return this.sharees.filter((sharee) => {
|
|
||||||
return Object.values(this.board.acl).findIndex((acl) => {
|
|
||||||
return acl.participant.uid === sharee.value.shareWith
|
|
||||||
})
|
|
||||||
}) */
|
|
||||||
},
|
|
||||||
toolbarActions() {
|
toolbarActions() {
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
@@ -142,52 +133,38 @@ export default {
|
|||||||
currentCard() {
|
currentCard() {
|
||||||
this.copiedCard = JSON.parse(JSON.stringify(this.currentCard))
|
this.copiedCard = JSON.parse(JSON.stringify(this.currentCard))
|
||||||
this.allLabels = this.currentCard.labels
|
this.allLabels = this.currentCard.labels
|
||||||
this.addAclToCard = this.currentCard.assignedUsers
|
this.assignedUsers = this.currentCard.assignedUsers.map((item) => item.participant)
|
||||||
this.desc = this.currentCard.description
|
this.desc = this.currentCard.description
|
||||||
},
|
},
|
||||||
desc() {
|
desc() {
|
||||||
this.$store.dispatch('updateCardDesc', this.desc)
|
this.copiedCard.description = this.desc
|
||||||
|
this.saveDesc()
|
||||||
}
|
}
|
||||||
},
|
|
||||||
created() {
|
|
||||||
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
setDue() {
|
setDue() {
|
||||||
this.$store.dispatch('updateCardDue', this.copiedCard)
|
this.$store.dispatch('updateCardDue', this.copiedCard)
|
||||||
},
|
},
|
||||||
|
removeDue() {
|
||||||
|
this.copiedCard.duedate = null
|
||||||
|
this.$store.dispatch('updateCardDue', this.copiedCard)
|
||||||
|
},
|
||||||
saveDesc() {
|
saveDesc() {
|
||||||
this.$store.dispatch('updateCardDesc', this.copiedCard)
|
this.$store.dispatch('updateCardDesc', this.copiedCard)
|
||||||
},
|
},
|
||||||
|
|
||||||
asyncFind(query) {
|
|
||||||
this.isLoading = true
|
|
||||||
this.$store.dispatch('loadSharees').then(response => {
|
|
||||||
this.isLoading = false
|
|
||||||
})
|
|
||||||
},
|
|
||||||
|
|
||||||
closeSidebar() {
|
closeSidebar() {
|
||||||
this.$router.push({ name: 'board' })
|
this.$router.push({ name: 'board' })
|
||||||
},
|
},
|
||||||
|
|
||||||
assignUserToCard(user) {
|
assignUserToCard(user) {
|
||||||
// this.copiedCard.assignedUsers.push(user)
|
this.copiedCard.newUserUid = user.uid
|
||||||
this.copiedCard.newUserUid = user.value.shareWith
|
|
||||||
this.$store.dispatch('assignCardToUser', this.copiedCard)
|
this.$store.dispatch('assignCardToUser', this.copiedCard)
|
||||||
/* this.addAclForAPI = {
|
|
||||||
type: 0,
|
|
||||||
participant: this.addAcl.value.shareWith,
|
|
||||||
permissionEdit: false,
|
|
||||||
permissionShare: false,
|
|
||||||
permissionManage: false
|
|
||||||
}
|
|
||||||
this.$store.dispatch('addAclToCurrentBoard', this.addAclForAPI) */
|
|
||||||
},
|
},
|
||||||
|
|
||||||
removeUserFromCard(user) {
|
removeUserFromCard(user) {
|
||||||
|
this.copiedCard.removeUserUid = user.uid
|
||||||
|
this.$store.dispatch('removeUserFromCard', this.copiedCard)
|
||||||
},
|
},
|
||||||
|
|
||||||
addLabelToCard(newLabel) {
|
addLabelToCard(newLabel) {
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
<div v-if="card.duedate" :class="dueIcon">
|
<div v-if="card.duedate" :class="dueIcon">
|
||||||
<span>{{ dueTimeDiff }}</span>
|
<span>{{ dueTimeDiff }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="true" class="card-tasks icon icon-checkmark">
|
<div v-if="card.description && card.description.match(/\[\s*\]/g)" class="card-tasks icon icon-checkmark">
|
||||||
<span>0/0</span>
|
<span>0/0</span>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="card.assignedUsers" class="card-assigned-users">
|
<div v-if="card.assignedUsers" class="card-assigned-users">
|
||||||
|
|||||||
@@ -75,8 +75,6 @@ export class CardApi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
assignUser(card) {
|
assignUser(card) {
|
||||||
console.log(card)
|
|
||||||
console.log(card.newUserUid)
|
|
||||||
return axios.post(this.url(`/cards/${card.id}/assign`), { userId: card.newUserUid })
|
return axios.post(this.url(`/cards/${card.id}/assign`), { userId: card.newUserUid })
|
||||||
.then(
|
.then(
|
||||||
(response) => {
|
(response) => {
|
||||||
@@ -91,6 +89,21 @@ export class CardApi {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
removeUser(card) {
|
||||||
|
return axios.delete(this.url(`/cards/${card.id}/assign/${card.removeUserUid}`))
|
||||||
|
.then(
|
||||||
|
(response) => {
|
||||||
|
return Promise.resolve(response.data)
|
||||||
|
},
|
||||||
|
(err) => {
|
||||||
|
return Promise.reject(err)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
.catch((err) => {
|
||||||
|
return Promise.reject(err)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
archiveCard(card) {
|
archiveCard(card) {
|
||||||
return axios.put(this.url(`/cards/${card.id}/archive`))
|
return axios.put(this.url(`/cards/${card.id}/archive`))
|
||||||
.then(
|
.then(
|
||||||
|
|||||||
@@ -62,11 +62,20 @@ export default {
|
|||||||
state.cards[existingIndex].title = card.title
|
state.cards[existingIndex].title = card.title
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
assignCardToUser(state, card) {
|
assignCardToUser(state, user) {
|
||||||
// let existingIndex = state.cards.findIndex(_card => _card.id === card.id)
|
let existingIndex = state.cards.findIndex(_card => _card.id === user.cardId)
|
||||||
/* if (existingIndex !== -1) {
|
if (existingIndex !== -1) {
|
||||||
|
state.cards[existingIndex].assignedUsers.push(user)
|
||||||
} */
|
}
|
||||||
|
},
|
||||||
|
removeUserFromCard(state, user) {
|
||||||
|
let existingIndex = state.cards.findIndex(_card => _card.id === user.cardId)
|
||||||
|
if (existingIndex !== -1) {
|
||||||
|
let foundIndex = state.cards[existingIndex].assignedUsers.findIndex(_user => _user.id === user.id)
|
||||||
|
if (foundIndex !== -1) {
|
||||||
|
state.cards[existingIndex].assignedUsers.splice(foundIndex, 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
updateCardDesc(state, card) {
|
updateCardDesc(state, card) {
|
||||||
let existingIndex = state.cards.findIndex(_card => _card.id === card.id)
|
let existingIndex = state.cards.findIndex(_card => _card.id === card.id)
|
||||||
@@ -120,8 +129,14 @@ export default {
|
|||||||
},
|
},
|
||||||
assignCardToUser({ commit }, card) {
|
assignCardToUser({ commit }, card) {
|
||||||
apiClient.assignUser(card)
|
apiClient.assignUser(card)
|
||||||
.then(() => {
|
.then((user) => {
|
||||||
commit('assignCardToUser')
|
commit('assignCardToUser', user)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
removeUserFromCard({ commit }, card) {
|
||||||
|
apiClient.removeUser(card)
|
||||||
|
.then((user) => {
|
||||||
|
commit('removeUserFromCard', user)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
addLabel({ commit }, data) {
|
addLabel({ commit }, data) {
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ export default new Vuex.Store({
|
|||||||
currentCard: null,
|
currentCard: null,
|
||||||
boards: [],
|
boards: [],
|
||||||
sharees: [],
|
sharees: [],
|
||||||
|
assignableUsers: [],
|
||||||
boardFilter: BOARD_FILTERS.ALL
|
boardFilter: BOARD_FILTERS.ALL
|
||||||
},
|
},
|
||||||
getters: {
|
getters: {
|
||||||
@@ -140,6 +141,9 @@ export default new Vuex.Store({
|
|||||||
state.sharees = shareesUsersAndGroups.users
|
state.sharees = shareesUsersAndGroups.users
|
||||||
state.sharees.push(...shareesUsersAndGroups.groups)
|
state.sharees.push(...shareesUsersAndGroups.groups)
|
||||||
},
|
},
|
||||||
|
setAssignableUsers(state, users) {
|
||||||
|
state.assignableUsers = users
|
||||||
|
},
|
||||||
setBoardFilter(state, filter) {
|
setBoardFilter(state, filter) {
|
||||||
state.boardFilter = filter
|
state.boardFilter = filter
|
||||||
},
|
},
|
||||||
@@ -265,6 +269,7 @@ export default new Vuex.Store({
|
|||||||
commit('setSharees', response.data.ocs.data)
|
commit('setSharees', response.data.ocs.data)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
setBoardFilter({ commmit }, filter) {
|
setBoardFilter({ commmit }, filter) {
|
||||||
commmit('setBoardFilter', filter)
|
commmit('setBoardFilter', filter)
|
||||||
},
|
},
|
||||||
@@ -280,6 +285,9 @@ export default new Vuex.Store({
|
|||||||
setCurrentBoard({ commit }, board) {
|
setCurrentBoard({ commit }, board) {
|
||||||
commit('setCurrentBoard', board)
|
commit('setCurrentBoard', board)
|
||||||
},
|
},
|
||||||
|
setAssignableUsers({ commit }, board) {
|
||||||
|
commit('setAssignableUsers', board)
|
||||||
|
},
|
||||||
setCurrentCard({ commit }, card) {
|
setCurrentCard({ commit }, card) {
|
||||||
commit('setCurrentCard', card)
|
commit('setCurrentCard', card)
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -68,9 +68,13 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
setDeletedStacks(state, delStacks) {
|
setDeletedStacks(state, delStacks) {
|
||||||
|
state.deletedStacks = []
|
||||||
|
if (delStacks.length > 0) {
|
||||||
state.deletedStacks.push(delStacks[0])
|
state.deletedStacks.push(delStacks[0])
|
||||||
|
}
|
||||||
},
|
},
|
||||||
setDeletedCards(state, delCards) {
|
setDeletedCards(state, delCards) {
|
||||||
|
state.deletedCards = []
|
||||||
state.deletedCards.push(delCards)
|
state.deletedCards.push(delCards)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user