117 lines
4.2 KiB
JavaScript
117 lines
4.2 KiB
JavaScript
import API from "@/services/imapAPI";
|
|
import { createStore } from "vuex";
|
|
import Room from "./models/Room";
|
|
|
|
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),
|
|
],
|
|
messages: [],
|
|
mailboxes: [],
|
|
activeMailbox: 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);
|
|
});
|
|
}
|
|
},
|
|
setActiveRoom(state, payload) {
|
|
state.activeRoom = payload;
|
|
// todo call actions
|
|
// fetch messages for this room if not already fetched
|
|
const room = state.rooms.find((room) => room.id == payload);
|
|
if (!room || room?.fetched == false) {
|
|
console.log("add messages");
|
|
API.getMessages(payload)
|
|
.then((res) => {
|
|
// todo add if not exist
|
|
room.fetched = true;
|
|
res.data.forEach((msg) => {
|
|
state.messages.push(msg);
|
|
});
|
|
})
|
|
.catch((err) => {
|
|
console.log(err);
|
|
});
|
|
}
|
|
},
|
|
addMailboxes(state, payload) {
|
|
console.log(payload)
|
|
payload.forEach((mailbox) => {
|
|
mailbox.fetched = false;
|
|
state.mailboxes.push(mailbox);
|
|
});
|
|
},
|
|
addMessages(state, payload) {
|
|
const room = state.rooms.find((room) => room.id == payload.roomId);
|
|
payload.messages.forEach((message) => {
|
|
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);
|
|
},
|
|
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) => {
|
|
API.getAccounts()
|
|
.then((res) => {
|
|
context.commit("addMailboxes", res.data);
|
|
})
|
|
.catch((err) => {
|
|
console.log(err);
|
|
});
|
|
},
|
|
fetchMessages: async (context, data) => {
|
|
API.getMessages(data.roomId)
|
|
.then((res) => {
|
|
console.log(res.data)
|
|
context.commit("addMessages", { messages: res.data, roomId: data.roomId });
|
|
})
|
|
.catch((err) => {
|
|
console.log(err);
|
|
});
|
|
},
|
|
},
|
|
});
|
|
|
|
export default store;
|