diff --git a/src/components/board/Board.vue b/src/components/board/Board.vue index f3c118433..3f25d99dd 100644 --- a/src/components/board/Board.vue +++ b/src/components/board/Board.vue @@ -179,6 +179,16 @@ export default { await this.$store.dispatch('loadBoardById', this.id) await this.$store.dispatch('loadStacks', this.id) + const routeCardId = parseInt(this.$route.params.cardId) + // If an archived card is requested, and we cannot find it in the current we load the archived stacks instead + if (routeCardId && !this.$store.getters.cardById(routeCardId)) { + await this.$store.dispatch('loadArchivedStacks', this.id) + + if (this.$store.getters.cardById(routeCardId)) { + this.$store.commit('toggleShowArchived', true) + } + } + this.session?.close() this.session = createSession(this.id) } catch (e) { diff --git a/src/store/main.js b/src/store/main.js index 540223651..09da8a12b 100644 --- a/src/store/main.js +++ b/src/store/main.js @@ -172,8 +172,8 @@ export default new Vuex.Store({ } }) }, - toggleShowArchived(state) { - state.showArchived = !state.showArchived + toggleShowArchived(state, newState = undefined) { + state.showArchived = newState !== undefined ? newState : !state.showArchived }, /* * Adds or replaces a board in the store. diff --git a/src/store/stack.js b/src/store/stack.js index ac5d4420c..fc7074b07 100644 --- a/src/store/stack.js +++ b/src/store/stack.js @@ -78,6 +78,21 @@ export default { } commit('setCards', cards) }, + async loadArchivedStacks({ commit, getters }, boardId) { + const archivedStacks = await apiClient.loadArchivedStacks(boardId) + const cards = [] + for (const i in archivedStacks) { + const stack = archivedStacks[i] + for (const j in stack.cards) { + cards.push(stack.cards[j]) + } + delete stack.cards + if (!getters.stackById(stack.id)) { + commit('addStack', stack) + } + } + commit('setCards', cards) + }, createStack({ commit }, stack) { stack.boardId = this.state.currentBoard.id apiClient.createStack(stack)