From 6d758b49ab65a1fc40598f9e67255e1f8543a833 Mon Sep 17 00:00:00 2001 From: Christoph Wurst <christoph@winzerhof-wurst.at> Date: Wed, 19 Sep 2018 19:35:25 +0200 Subject: [PATCH] Add store getters for message envelopes Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at> --- js/components/FolderContent.vue | 6 +++- js/components/MessageList.vue | 15 +++++---- js/service/MessageService.js | 16 +++++++++ js/store.js | 57 ++++++++++++++++++++++++++++----- 4 files changed, 79 insertions(+), 15 deletions(-) create mode 100644 js/service/MessageService.js diff --git a/js/components/FolderContent.vue b/js/components/FolderContent.vue index b51827012..1bde39a89 100644 --- a/js/components/FolderContent.vue +++ b/js/components/FolderContent.vue @@ -33,7 +33,11 @@ } }, created () { - this.$store.dispatch('fetchAccounts').then(() => { + this.$store.dispatch( + 'fetchMessages', { + accountId: this.$route.params.accountId, + folderId: this.$route.params.folderId + }).then(() => { this.loading = false; }); } diff --git a/js/components/MessageList.vue b/js/components/MessageList.vue index 889ea3ffb..88d3d584b 100644 --- a/js/components/MessageList.vue +++ b/js/components/MessageList.vue @@ -1,9 +1,9 @@ <template> <div class="app-content-list"> - <MessageListItem v-for="message in messages" - :key="message.id" - :from="message.from" - :subject="message.subject"/> + <MessageListItem v-for="env in envelopes" + :key="env.id" + :from="env.from" + :subject="env.subject"/> </div> </template> @@ -13,8 +13,11 @@ export default { name: "MessageList", computed: { - messages () { - return this.$store.getters.currentFolder.messages + envelopes() { + return this.$store.getters.getEnvelopes( + this.$route.params.accountId, + this.$route.params.folderId + ) } }, components: {MessageListItem} diff --git a/js/service/MessageService.js b/js/service/MessageService.js new file mode 100644 index 000000000..6a22a43da --- /dev/null +++ b/js/service/MessageService.js @@ -0,0 +1,16 @@ +export function fetchEnvelopes () { + return new Promise((res, rej) => { + setTimeout(() => { + res([ + { + id: 1, + subject: 'Message 1', + }, + { + id: 2, + subject: 'Message 2', + } + ]) + }) + }) +} diff --git a/js/store.js b/js/store.js index d8739f64a..1b0ce1855 100644 --- a/js/store.js +++ b/js/store.js @@ -5,12 +5,16 @@ import { fetch as fetchAccount, fetchAll as fetchAllAccounts } from './service/AccountService' +import {fetchEnvelopes} from './service/MessageService' Vue.use(Vuex) export const mutations = { addAccount (state, account) { Vue.set(state.accounts, account.id, account) + }, + addMessage (state, {accountId, folderId, message}) { + Vue.set(state.messages, accountId + '-' + folderId + '-' + message.id, message) } } @@ -20,6 +24,25 @@ export const actions = { }, fetchAccount ({commit}, id) { return fetchAccount(id).then(account => commit('addAccount', account)) + }, + fetchMessages ({commit}, {accountId, folderId}) { + return fetchEnvelopes(accountId, folderId).then(msgs => msgs.map(message => commit('addMessage', { + accountId, + folderId, + message + }))) + } +} + +export const getters = { + getAccount: (state) => (id) => { + return state.accounts[id] + }, + getFolder: (state) => (accountId, folderId) => { + return state.folders[accountId + '-' + folderId] + }, + getEnvelopes: (state, getters) => (accountId, folderId) => { + return getters.getFolder(accountId, folderId).envelopes.map(msgId => state.envelopes[msgId]) } } @@ -28,11 +51,12 @@ export default new Vuex.Store({ state: { accounts: {}, folders: { - 1: { + '1-SU5CT1g=': { id: 'folder1', name: 'Inbox', specialUse: 'inbox', - unread: 2 + unread: 2, + envelopes: ['1-SU5CT1g=-1', '1-SU5CT1g=-2'] }, 2: { id: 'folder2', @@ -56,13 +80,30 @@ export default new Vuex.Store({ id: 'folder5', name: 'Show all', } - } - }, - getters: { - currentFolder (state) { - return [] - } + }, + envelopes: { + '1-SU5CT1g=-1': { + id: '1', + from: 'Sender 1', + subject: 'Message 1', + envelopes: ['1-SU5CT1g=-1', '1-SU5CT1g=-2'] + }, + '1-SU5CT1g=-2': { + id: '2', + from: 'Sender 2', + subject: 'Message 2', + envelopes: ['1-SU5CT1g=-1', '1-SU5CT1g=-2'] + }, + '1-SU5CT1g=-3': { + id: '3', + from: 'Sender 3', + subject: 'Message 3', + envelopes: ['1-SU5CT1g=-1', '1-SU5CT1g=-2'] + } + }, + messages: [], }, + getters, mutations, actions }) -- GitLab