From 7c98c1eb0c180b65e2a2e6ba15125abb02f9e736 Mon Sep 17 00:00:00 2001 From: grimhilt Date: Thu, 6 Apr 2023 20:24:11 +0200 Subject: [PATCH] restructure members storage in rooms store --- front/src/store/models/model.ts | 6 +++- front/src/store/store.ts | 33 +++++++++---------- front/src/views/room/Header.vue | 33 ++++++++----------- front/src/views/room/MemberList.vue | 15 +++++++++ front/src/views/room/Message.vue | 16 ++++++--- front/src/views/room/RoomView.vue | 29 +++++++--------- front/src/views/sidebar/accounts/Account.vue | 4 +-- front/src/views/sidebar/rooms/Room.vue | 4 +-- .../views/sidebar/rooms/threads/Thread.vue | 1 - .../sidebar/rooms/threads/ThreadList.vue | 2 +- 10 files changed, 76 insertions(+), 67 deletions(-) create mode 100644 front/src/views/room/MemberList.vue diff --git a/front/src/store/models/model.ts b/front/src/store/models/model.ts index b49cef6..b05a1ae 100644 --- a/front/src/store/models/model.ts +++ b/front/src/store/models/model.ts @@ -7,7 +7,10 @@ export enum RoomType { } export interface Message { - todo: true; + fromA: string; + subject: string; + content: string; + date: string; } export enum LoadingState { @@ -23,6 +26,7 @@ export interface Room { mailboxId: number; user: string; userId: number; + members: Address[]; notSeen: number; messages: Message[]; messageLoading: LoadingState; diff --git a/front/src/store/store.ts b/front/src/store/store.ts index 3b0bd1c..8223272 100644 --- a/front/src/store/store.ts +++ b/front/src/store/store.ts @@ -30,6 +30,7 @@ function createRoom(options: RoomFromBack): Room { roomType: options.roomType, mailboxId: options.mailboxId, userId: options.userId, + members: [], user: options.user, notSeen: options.notSeen, messages: [], @@ -41,7 +42,6 @@ function createRoom(options: RoomFromBack): Room { export interface State { rooms: Room[]; accounts: Account[]; - addresses: Address[]; activeAccount: number; activeRoom: number; } @@ -53,31 +53,26 @@ const store = createStore({ state: { rooms: [], //createRoom({ id: 12, userId: 1, user: "user", roomName: "room name", mailboxId: 2, roomType: 1 }) accounts: [{ id: 0, email: "All", fetched: false }], - addresses: [], activeAccount: 0, activeRoom: 0, }, mutations: { - setactiveAccount(state, payload) { + 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; + console.log("set active") // todo load room on load page // let room; - // // const room = state.rooms.find((room) => room.id == payload); - // console.log(state.rooms.length); - // for (let i = 0; i < state.rooms.length; i++) { - // console.log(state.rooms[i].id, payload.value); - // if (state.rooms[i].id == payload.value) { - // room = state.rooms[i]; - // break; - // } - // } - // console.log(room); - // store.dispatch("fetchMessages", { roomId: payload, room: room }); + console.log(payload) + console.log(state.rooms) + const room = state.rooms.find((room) => room.id == payload); + console.log(room) + if (!room) return; + store.dispatch("fetchMessages", { roomId: payload, room: room }); }, addAccounts(state, payload) { payload.forEach((account: AccountFromBack) => { @@ -97,7 +92,6 @@ const store = createStore({ const parentRoom = state.rooms.find((room) => room.id == thread.parent_id); // todo debug parent_id to root_id if (parentRoom) { parentRoom.threadIds.push(thread.id); - console.log(parentRoom); } else { console.log("yep..."); } @@ -113,8 +107,10 @@ const store = createStore({ }, addAddress(state, payload) { // todo add if not exist + const room = state.rooms.find((room) => room.id == payload.roomId); + if (!room) return; payload.addresses.forEach((address: Address) => { - state.addresses.push(address); + room.members.push(address); }); }, }, @@ -133,8 +129,9 @@ const store = createStore({ }, address: (state) => - (addressId: number): Address | undefined => { - const address = state.addresses.find((address) => address.id == addressId); + (roomId: number, addressId: number): Address | undefined => { + const room = state.rooms.find((room) => room.id == roomId); + const address = room?.members.find((address) => address.id == addressId); return address; }, messages: diff --git a/front/src/views/room/Header.vue b/front/src/views/room/Header.vue index 6a9e58c..60f88a1 100644 --- a/front/src/views/room/Header.vue +++ b/front/src/views/room/Header.vue @@ -1,47 +1,40 @@ diff --git a/front/src/views/room/Message.vue b/front/src/views/room/Message.vue index 96f3aa3..6c08d97 100644 --- a/front/src/views/room/Message.vue +++ b/front/src/views/room/Message.vue @@ -5,7 +5,15 @@ import { removeDuplicates } from "../../utils/array"; import DOMPurify from "dompurify"; import store from "@/store/store"; -const props = defineProps({ data: Object }); +const props = defineProps({ + data: { + fromA: String, + subject: String, + content: String, + date: String, + }, + members: Array +}); const iframe = ref(null); // todo dompurify @@ -47,11 +55,10 @@ onMounted(() => { }); const displayAddresses = (addressesId) => { - // todo store members in rooms ? addressesId = removeDuplicates(addressesId); let res = ""; addressesId.forEach((addressId) => { - const address = store.getters.address(addressId); + const address = props.members.find((member) => member.id == addressId); if (address) res += address.email; }); return res; @@ -109,8 +116,7 @@ iframe { max-height: 300px; width: 100%; border: none; - padding: 2px 10px; - max-width: 750px; /* template width being 600px to 640px up to 750px (experiment and test) */ + max-width: 600px; /* template width being 600px to 640px up to 750px (experiment and test) */ background-color: rgb(234, 234, 234); } diff --git a/front/src/views/room/RoomView.vue b/front/src/views/room/RoomView.vue index 50b5e85..fc89551 100644 --- a/front/src/views/room/RoomView.vue +++ b/front/src/views/room/RoomView.vue @@ -9,30 +9,21 @@ import { RoomType } from "@/store/models/model"; const store = useStore(); const route = useRoute(); const id = ref(parseInt(route.params?.id)); -// let room; +let room; onBeforeMount(async () => { - // get data - // room = store.getters.room(id); - // if (!room || room?.fetched === false) { - // // todo - // // await store.dispatch("fetchMessages", ); - // } - store.commit("setActiveRoom", id); + store.commit("setActiveRoom", id.value); + room = store.getters.room(id.value); }); onBeforeRouteUpdate(async (to, from) => { if (to.params.id !== from.params.id) { id.value = parseInt(to.params.id); - console.log(id); - // room = store.getters.room(id); - // console.log(room); - store.commit("setActiveRoom", id); + store.commit("setActiveRoom", id.value); + room = await store.getters.room(id.value); } }); const shouldDisplayComposer = () => { - if (!id.value) return false; - const room = store.getters.room(id.value); if (!room) return false; return room.roomType == RoomType.THREAD || room.roomType == RoomType.GROUP; }; @@ -40,12 +31,16 @@ const shouldDisplayComposer = () => {