From 5447557f9116ef884c4792a59a87e5bc08d2decc Mon Sep 17 00:00:00 2001 From: grimhilt Date: Sun, 26 Mar 2023 14:55:13 +0200 Subject: [PATCH] apply difference between mailbox and account --- back/db/api.js | 4 +- front/src/store/models/Account.js | 7 ++ front/src/store/store.js | 76 +++++++++---------- ...ddMailboxModal.vue => AddAccountModal.vue} | 6 +- front/src/views/room/Message.vue | 2 - front/src/views/room/RoomView.vue | 3 - front/src/views/sidebar/Sidebar.vue | 6 +- .../Mailbox.vue => accounts/Account.vue} | 8 +- .../Mailboxes.vue => accounts/Accounts.vue} | 20 +++-- .../sidebar/{mailboxes => accounts}/All.vue | 0 .../Account.vue => accounts/MainAccount.vue} | 0 11 files changed, 64 insertions(+), 68 deletions(-) create mode 100644 front/src/store/models/Account.js rename front/src/views/modals/{AddMailboxModal.vue => AddAccountModal.vue} (97%) rename front/src/views/sidebar/{mailboxes/Mailbox.vue => accounts/Account.vue} (74%) rename front/src/views/sidebar/{mailboxes/Mailboxes.vue => accounts/Accounts.vue} (62%) rename front/src/views/sidebar/{mailboxes => accounts}/All.vue (100%) rename front/src/views/sidebar/{mailboxes/Account.vue => accounts/MainAccount.vue} (100%) diff --git a/back/db/api.js b/back/db/api.js index 13b1db5..7741109 100644 --- a/back/db/api.js +++ b/back/db/api.js @@ -88,8 +88,10 @@ async function getMessages(roomId) { ) content ON msg.message_id = content.message_id INNER JOIN message ON message.message_id = msg.message_id + WHERE msg.room_id = ? - GROUP BY msg.message_id; + GROUP BY msg.message_id + ORDER BY message.idate; `; const values = [roomId]; return await execQueryAsync(query, values); diff --git a/front/src/store/models/Account.js b/front/src/store/models/Account.js new file mode 100644 index 0000000..7043208 --- /dev/null +++ b/front/src/store/models/Account.js @@ -0,0 +1,7 @@ +export default class Account { + constructor(_id, _mail) { + this.id = _id; + this.email = _mail; + this.fetched = false; + } +} \ No newline at end of file diff --git a/front/src/store/store.js b/front/src/store/store.js index ee15c2c..a074af1 100644 --- a/front/src/store/store.js +++ b/front/src/store/store.js @@ -1,44 +1,23 @@ import API from "@/services/imapAPI"; import { createStore } from "vuex"; import Room from "./models/Room"; +import Account from "./models/Account"; const store = createStore({ state() { return { - rooms: [ - new Room(1, "clemence", 0, "Est ex adipisicing non ipsum voluptate duis enim adipisicing labore.", 1), - new Room(2, "laurance", 0, "Est ex adipisicing non ipsum voluptate duis enim adipisicing labore.", 2), - new Room(3, "mathilde", 0, "Est ex adipisicing non ipsum voluptate duis enim adipisicing labore.", 1), - ], + rooms: [], messages: [], - mailboxes: [], - activeMailbox: 0, + accounts: [new Account(0, "ALL")], + activeAccount: 0, activeRoom: 0, }; }, mutations: { - setActiveMailbox(state, payload) { - state.activeMailbox = payload; - - // todo call actions - // fetch rooms for this mailboxes if not already fetched - const mailbox = state.mailboxes.find((mailbox) => mailbox.id == payload); - // todo fetched mailbox all - if (mailbox?.fetched == false) { - console.log(payload) - API.getRooms(payload) - .then((res) => { - // todo add if not exist - console.log(res.data) - mailbox.fetched = true; - res.data.forEach((room) => { - state.rooms.push(new Room(room.id, room.user, room.userId, room.roomName, room.mailboxId)); - }); - }) - .catch((err) => { - console.log(err); - }); - } + setactiveAccount(state, payload) { + state.activeAccount = payload; + const account = state.accounts.find((account) => account.id == payload); + store.dispatch("fetchRooms", { accountId: payload, account: account }); }, setActiveRoom(state, payload) { state.activeRoom = payload; @@ -60,11 +39,15 @@ const store = createStore({ }); } }, - addMailboxes(state, payload) { - console.log(payload) - payload.forEach((mailbox) => { - mailbox.fetched = false; - state.mailboxes.push(mailbox); + addAccounts(state, payload) { + payload.forEach((account) => { + state.accounts.push(new Account(account.id, account.email)); + }); + }, + addRooms(state, payload) { + // todo add if not exist + payload.rooms.forEach((room) => { + state.rooms.push(new Room(room.id, room.user, room.userId, room.roomName, room.mailboxId)); }); }, addMessages(state, payload) { @@ -73,37 +56,48 @@ const store = createStore({ room.messages.push(message); }); room.messagesFetched = true; - console.log(room.messages) }, }, getters: { rooms: (state) => () => { - if (state.activeMailbox === 0) return state.rooms; - return state.rooms.filter((room) => room.mailboxId == state.activeMailbox); + if (state.activeAccount === 0) return state.rooms; + return state.rooms.filter((room) => room.mailboxId == state.activeAccount); }, messages: (state) => (roomId) => { const room = state.rooms.find((room) => room.id == roomId); if (!room.messagesFetched) { - console.log("fetched Messages") store.dispatch("fetchMessages", { roomId: room.id }); } return room.messages; }, }, actions: { - fetchMailboxes: async (context) => { + fetchAccounts: async (context) => { API.getAccounts() .then((res) => { - context.commit("addMailboxes", res.data); + context.commit("addAccounts", res.data); }) .catch((err) => { console.log(err); }); }, + fetchRooms: async (context, data) => { + if (data.account?.fetched == false) { + API.getRooms(data.accountId) + .then((res) => { + data.account.fetched = true; + context.commit("addRooms", { rooms: res.data }); + }) + .catch((err) => { + console.log(err); + }); + } + }, fetchMessages: async (context, data) => { + console.log(data) API.getMessages(data.roomId) .then((res) => { - console.log(res.data) + console.log(res.data); context.commit("addMessages", { messages: res.data, roomId: data.roomId }); }) .catch((err) => { diff --git a/front/src/views/modals/AddMailboxModal.vue b/front/src/views/modals/AddAccountModal.vue similarity index 97% rename from front/src/views/modals/AddMailboxModal.vue rename to front/src/views/modals/AddAccountModal.vue index da4af93..be47e87 100644 --- a/front/src/views/modals/AddMailboxModal.vue +++ b/front/src/views/modals/AddAccountModal.vue @@ -64,7 +64,7 @@ function checkError() { } } -function addMailboxRequest() { +function addAccountRequest() { checkError(); const data = { @@ -113,7 +113,7 @@ function mailChange() { diff --git a/front/src/views/room/Message.vue b/front/src/views/room/Message.vue index 37cd0e1..5b0b403 100644 --- a/front/src/views/room/Message.vue +++ b/front/src/views/room/Message.vue @@ -2,9 +2,7 @@ import { defineProps } from "vue"; const props = defineProps({ data: Object }); -console.log(props.data.date); const date = new Date(props.data.date); -console.log(date); diff --git a/front/src/views/room/RoomView.vue b/front/src/views/room/RoomView.vue index be62c8a..80cef5e 100644 --- a/front/src/views/room/RoomView.vue +++ b/front/src/views/room/RoomView.vue @@ -8,7 +8,6 @@ import Message from "./Message.vue"; const store = useStore(); const route = useRoute(); let { id } = route.params; -let messages = []; onBeforeMount(async () => { // get data console.log(store.state.rooms.find((room) => room.id === id)?.fetched); @@ -34,8 +33,6 @@ onBeforeRouteUpdate(async (to, from) => {
- {{ id }} - {{ messages.length }}
COMPOSER
diff --git a/front/src/views/sidebar/Sidebar.vue b/front/src/views/sidebar/Sidebar.vue index 9256593..38e205b 100644 --- a/front/src/views/sidebar/Sidebar.vue +++ b/front/src/views/sidebar/Sidebar.vue @@ -1,18 +1,18 @@ diff --git a/front/src/views/sidebar/mailboxes/Mailboxes.vue b/front/src/views/sidebar/accounts/Accounts.vue similarity index 62% rename from front/src/views/sidebar/mailboxes/Mailboxes.vue rename to front/src/views/sidebar/accounts/Accounts.vue index 6763d78..ee798c5 100644 --- a/front/src/views/sidebar/mailboxes/Mailboxes.vue +++ b/front/src/views/sidebar/accounts/Accounts.vue @@ -4,33 +4,31 @@ - - + - +