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