apply difference between mailbox and account

This commit is contained in:
grimhilt 2023-03-26 14:55:13 +02:00
parent 62dd43c3d5
commit 5447557f91
11 changed files with 64 additions and 68 deletions

View File

@ -88,8 +88,10 @@ async function getMessages(roomId) {
) content ON msg.message_id = content.message_id ) content ON msg.message_id = content.message_id
INNER JOIN message ON message.message_id = msg.message_id INNER JOIN message ON message.message_id = msg.message_id
WHERE msg.room_id = ? WHERE msg.room_id = ?
GROUP BY msg.message_id; GROUP BY msg.message_id
ORDER BY message.idate;
`; `;
const values = [roomId]; const values = [roomId];
return await execQueryAsync(query, values); return await execQueryAsync(query, values);

View File

@ -0,0 +1,7 @@
export default class Account {
constructor(_id, _mail) {
this.id = _id;
this.email = _mail;
this.fetched = false;
}
}

View File

@ -1,44 +1,23 @@
import API from "@/services/imapAPI"; import API from "@/services/imapAPI";
import { createStore } from "vuex"; import { createStore } from "vuex";
import Room from "./models/Room"; import Room from "./models/Room";
import Account from "./models/Account";
const store = createStore({ const store = createStore({
state() { state() {
return { return {
rooms: [ 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),
],
messages: [], messages: [],
mailboxes: [], accounts: [new Account(0, "ALL")],
activeMailbox: 0, activeAccount: 0,
activeRoom: 0, activeRoom: 0,
}; };
}, },
mutations: { mutations: {
setActiveMailbox(state, payload) { setactiveAccount(state, payload) {
state.activeMailbox = payload; state.activeAccount = payload;
const account = state.accounts.find((account) => account.id == payload);
// todo call actions store.dispatch("fetchRooms", { accountId: payload, account: account });
// 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);
});
}
}, },
setActiveRoom(state, payload) { setActiveRoom(state, payload) {
state.activeRoom = payload; state.activeRoom = payload;
@ -60,11 +39,15 @@ const store = createStore({
}); });
} }
}, },
addMailboxes(state, payload) { addAccounts(state, payload) {
console.log(payload) payload.forEach((account) => {
payload.forEach((mailbox) => { state.accounts.push(new Account(account.id, account.email));
mailbox.fetched = false; });
state.mailboxes.push(mailbox); },
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) { addMessages(state, payload) {
@ -73,37 +56,48 @@ const store = createStore({
room.messages.push(message); room.messages.push(message);
}); });
room.messagesFetched = true; room.messagesFetched = true;
console.log(room.messages)
}, },
}, },
getters: { getters: {
rooms: (state) => () => { rooms: (state) => () => {
if (state.activeMailbox === 0) return state.rooms; if (state.activeAccount === 0) return state.rooms;
return state.rooms.filter((room) => room.mailboxId == state.activeMailbox); return state.rooms.filter((room) => room.mailboxId == state.activeAccount);
}, },
messages: (state) => (roomId) => { messages: (state) => (roomId) => {
const room = state.rooms.find((room) => room.id == roomId); const room = state.rooms.find((room) => room.id == roomId);
if (!room.messagesFetched) { if (!room.messagesFetched) {
console.log("fetched Messages")
store.dispatch("fetchMessages", { roomId: room.id }); store.dispatch("fetchMessages", { roomId: room.id });
} }
return room.messages; return room.messages;
}, },
}, },
actions: { actions: {
fetchMailboxes: async (context) => { fetchAccounts: async (context) => {
API.getAccounts() API.getAccounts()
.then((res) => { .then((res) => {
context.commit("addMailboxes", res.data); context.commit("addAccounts", res.data);
}) })
.catch((err) => { .catch((err) => {
console.log(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) => { fetchMessages: async (context, data) => {
console.log(data)
API.getMessages(data.roomId) API.getMessages(data.roomId)
.then((res) => { .then((res) => {
console.log(res.data) console.log(res.data);
context.commit("addMessages", { messages: res.data, roomId: data.roomId }); context.commit("addMessages", { messages: res.data, roomId: data.roomId });
}) })
.catch((err) => { .catch((err) => {

View File

@ -64,7 +64,7 @@ function checkError() {
} }
} }
function addMailboxRequest() { function addAccountRequest() {
checkError(); checkError();
const data = { const data = {
@ -113,7 +113,7 @@ function mailChange() {
</button> </button>
<Modal <Modal
v-if="modal" v-if="modal"
title="Add mailbox" title="Add new account"
@close-modal="modal = false" @close-modal="modal = false"
> >
<template v-slot:body> <template v-slot:body>
@ -145,7 +145,7 @@ function mailChange() {
</div> </div>
<!-- tls --> <!-- tls -->
<div> <div>
<button :disabled="error != ''" @click="addMailboxRequest">Add</button> <button :disabled="error != ''" @click="addAccountRequest">Add</button>
{{ error }} {{ error }}
</div> </div>
</template> </template>

View File

@ -2,9 +2,7 @@
import { defineProps } from "vue"; import { defineProps } from "vue";
const props = defineProps({ data: Object }); const props = defineProps({ data: Object });
console.log(props.data.date);
const date = new Date(props.data.date); const date = new Date(props.data.date);
console.log(date);
</script> </script>
<!-- to if to is more than me <!-- to if to is more than me
cc --> cc -->

View File

@ -8,7 +8,6 @@ import Message from "./Message.vue";
const store = useStore(); const store = useStore();
const route = useRoute(); const route = useRoute();
let { id } = route.params; let { id } = route.params;
let messages = [];
onBeforeMount(async () => { onBeforeMount(async () => {
// get data // get data
console.log(store.state.rooms.find((room) => room.id === id)?.fetched); console.log(store.state.rooms.find((room) => room.id === id)?.fetched);
@ -34,8 +33,6 @@ onBeforeRouteUpdate(async (to, from) => {
<div id="RoomViewBody"> <div id="RoomViewBody">
<div class="content"> <div class="content">
<Message v-for="(message, index) in store.getters.messages(id)" :key="index" :data="message" /> <Message v-for="(message, index) in store.getters.messages(id)" :key="index" :data="message" />
<b>{{ id }}</b>
{{ messages.length }}
</div> </div>
<div id="composer">COMPOSER</div> <div id="composer">COMPOSER</div>
</div> </div>

View File

@ -1,18 +1,18 @@
<template> <template>
<div> <div>
<Mailboxes /> <Accounts />
<Rooms id="rooms"/> <Rooms id="rooms"/>
</div> </div>
</template> </template>
<script> <script>
import Mailboxes from './mailboxes/Mailboxes' import Accounts from './accounts/Accounts'
import Rooms from './rooms/Rooms.vue' import Rooms from './rooms/Rooms.vue'
export default { export default {
name: 'Sidebar', name: 'Sidebar',
components: { components: {
Mailboxes, Accounts,
Rooms, Rooms,
} }
} }

View File

@ -1,5 +1,5 @@
<template> <template>
<div class="container" @click="setActiveMailbox(data.id)" :class="activeMailbox == data.id && 'active'"> <div class="container" @click="setactiveAccount(data.id)" :class="activeAccount == data.id && 'active'">
{{ data.email }} {{ data.email }}
</div> </div>
</template> </template>
@ -8,17 +8,17 @@
import { mapMutations, mapState } from 'vuex' import { mapMutations, mapState } from 'vuex'
export default { export default {
name: 'Mailbox', name: 'Account',
components: { components: {
}, },
props: { props: {
data: {mail: String, id: Number} data: {mail: String, id: Number}
}, },
computed: { computed: {
...mapState(['activeMailbox']) ...mapState(['activeAccount'])
}, },
methods: { methods: {
...mapMutations(['setActiveMailbox']) ...mapMutations(['setactiveAccount'])
} }
} }
</script> </script>

View File

@ -4,33 +4,31 @@
<!-- deconnect --> <!-- deconnect -->
</div> </div>
<span class="divider"></span> <span class="divider"></span>
<Mailbox :data="{'id': 0, 'email': 'all'}"/> <Account v-for="(account, index) in accounts" :key="index" :data="account"/>
<Mailbox v-for="(mailbox, index) in mailboxes" :key="index" :data="mailbox"/>
<span class="divider"></span> <span class="divider"></span>
<AddMailboxModal /> <AddAccountModal />
</div> </div>
</template> </template>
<script> <script>
import { mapState } from 'vuex' import { mapState } from 'vuex'
import Mailbox from './Mailbox' import Account from './Account'
import AddMailboxModal from '../../modals/AddMailboxModal' import AddAccountModal from '../../modals/AddAccountModal'
import store from '@/store/store' import store from '@/store/store'
export default { export default {
name: 'Mailboxes', name: 'Accounts',
components: { components: {
Mailbox, Account,
AddMailboxModal AddAccountModal
}, },
computed: { computed: {
...mapState(['mailboxes']) ...mapState(['accounts'])
}, },
created() { created() {
console.log("call api get mailboxes"); store.dispatch('fetchAccounts');
store.dispatch('fetchMailboxes');
} }
} }