diff --git a/src/components/MoveModal.vue b/src/components/MoveModal.vue index ca1871482644dd51b1a1ed075e9bd8ec80d1d230..94f9c8beeea63625e9944726c3e4fc445628c461 100644 --- a/src/components/MoveModal.vue +++ b/src/components/MoveModal.vue @@ -50,7 +50,6 @@ export default { .map((envelope) => envelope.databaseId) if (envelopeIds.length === 0) { - this.$emit('close') return } @@ -64,6 +63,7 @@ export default { })) await this.$store.dispatch('syncEnvelopes', { mailboxId: this.destMailboxId }) + this.$emit('move') } catch (error) { logger.error('could not move messages', { error, diff --git a/src/components/Thread.vue b/src/components/Thread.vue index f1ecb4f0eb1c1148528f3d2434f5d18643224245..0b6833153eeb5ff17a3395bbd3b3edfc1bcb9337 100644 --- a/src/components/Thread.vue +++ b/src/components/Thread.vue @@ -20,6 +20,7 @@ :envelope="env" :mailbox-id="$route.params.mailboxId" :expanded="expandedThreads.includes(env.databaseId)" + @move="onMove(env.databaseId)" @toggleExpand="toggleExpand(env.databaseId)" /> </template> </AppContentDetails> @@ -54,8 +55,11 @@ export default { } }, computed: { + threadId() { + return parseInt(this.$route.params.threadId, 10) + }, thread() { - return this.$store.getters.getEnvelopeThread(this.$route.params.threadId) + return this.$store.getters.getEnvelopeThread(this.threadId) }, threadParticipants() { const recipients = this.thread.flatMap(envelope => { @@ -84,11 +88,11 @@ export default { return } logger.debug('navigated to another thread', { to, from }) - this.fetchThread() + this.resetThread() }, }, created() { - this.fetchThread() + this.resetThread() }, methods: { toggleExpand(threadId) { @@ -100,12 +104,28 @@ export default { this.expandedThreads = this.expandedThreads.filter(t => t !== threadId) } }, + onMove(threadId) { + if (threadId === this.threadId) { + this.$router.replace({ + name: 'mailbox', + params: { + mailboxId: this.$route.params.mailboxId, + }, + }) + } else { + this.expandedThreads = this.expandedThreads.filter((id) => id !== threadId) + this.fetchThread() + } + }, + async resetThread() { + this.expandedThreads = [this.threadId] + await this.fetchThread() + }, async fetchThread() { this.loading = true this.errorMessage = '' this.error = undefined - const threadId = parseInt(this.$route.params.threadId, 10) - this.expandedThreads = [threadId] + const threadId = this.threadId try { const thread = await this.$store.dispatch('fetchThread', threadId) diff --git a/src/components/ThreadEnvelope.vue b/src/components/ThreadEnvelope.vue index aca573447786fbe6462108d1bb1c94045c8e7854..294044edaac22907b09677d7a888df18fabdb4c7 100644 --- a/src/components/ThreadEnvelope.vue +++ b/src/components/ThreadEnvelope.vue @@ -136,6 +136,7 @@ v-if="showMoveModal" :account="account" :envelopes="[envelope]" + @move="onMove" @close="onCloseMoveModal" /> </div> </div> @@ -363,12 +364,9 @@ export default { }, onCloseMoveModal() { this.showMoveModal = false - this.$router.replace({ - name: 'mailbox', - params: { - mailboxId: this.$route.params.mailboxId, - }, - }) + }, + onMove() { + this.$emit('move') }, }, }