mirror of
https://github.com/danbulant/Nertivia-Client
synced 2026-06-20 06:41:46 +00:00
144 lines
3.7 KiB
JavaScript
144 lines
3.7 KiB
JavaScript
import { bus } from "../../main";
|
|
import { router } from "../../router";
|
|
import Vue from "vue";
|
|
import channelService from "@/services/channelService";
|
|
import messagesService from "@/services/messagesService";
|
|
|
|
const state = {
|
|
messages: {}
|
|
};
|
|
|
|
const getters = {
|
|
messages(state) {
|
|
return state.messages;
|
|
}
|
|
};
|
|
|
|
const actions = {
|
|
async openChat(context, { uniqueID, channelID, channelName }) {
|
|
|
|
if (channelName) context.commit("setChannelName", channelName);
|
|
|
|
const channels = context.rootState.channelModule.channels;
|
|
channelID = Object.keys(channels).find(_channelID => {
|
|
return channels[_channelID].recipients[0].uniqueID === uniqueID
|
|
})
|
|
const messages = context.state.messages[channelID];
|
|
const channel = channels[channelID];
|
|
|
|
if (channelID) {
|
|
context.commit("selectedChannelID", channelID);
|
|
} else {
|
|
context.commit("selectedChannelID", "Loading");
|
|
}
|
|
|
|
if (messages) return;
|
|
if (channel && !messages) return getMessages(channelID);
|
|
|
|
|
|
const { ok, error, result } = await channelService.post(uniqueID);
|
|
if (ok) {
|
|
context.commit("channel", result.data.channel);
|
|
getMessages(result.data.channel.channelID);
|
|
} else {
|
|
// TODO handle this
|
|
console.log(error);
|
|
}
|
|
|
|
async function getMessages(channelID) {
|
|
const { ok, error, result } = await messagesService.get(channelID);
|
|
if (ok) {
|
|
context.commit("selectedChannelID", channelID);
|
|
context.commit("messages", {
|
|
channelID: result.data.channelID,
|
|
messages: result.data.messages.reverse()
|
|
});
|
|
} else {
|
|
// TODO handle this
|
|
console.log(error.response);
|
|
}
|
|
}
|
|
},
|
|
|
|
// OLD STUFF
|
|
async openddChat(context, { channelID, channelName }) {
|
|
context.commit("selectedChannelID", channelID);
|
|
if (channelName) context.commit("setChannelName", channelName);
|
|
|
|
const messages = context.state.messages[channelID];
|
|
const channel = context.rootState.channelModule.channels[channelID];
|
|
if (messages) return;
|
|
if (channel && !messages) return getMessages();
|
|
|
|
const { ok, error, result } = await channelService.post(channelID);
|
|
if (ok) {
|
|
context.commit("channel", result.data.channel);
|
|
getMessages();
|
|
} else {
|
|
// TODO handle this
|
|
console.log(error);
|
|
}
|
|
|
|
async function getMessages() {
|
|
const { ok, error, result } = await messagesService.get(channelID);
|
|
if (ok) {
|
|
context.commit("messages", {
|
|
channelID: result.data.channelID,
|
|
messages: result.data.messages.reverse()
|
|
});
|
|
} else {
|
|
// TODO handle this
|
|
console.log(error.response);
|
|
}
|
|
}
|
|
},
|
|
messages(context, data) {
|
|
context.commit("messages", data);
|
|
},
|
|
addMessage(context, data) {
|
|
// if the message is sent by this client, add additional information.
|
|
if (data.sender) {
|
|
data.message.creator = context.getters.user;
|
|
data.message.status = 0;
|
|
}
|
|
|
|
// send notification if message is not ours
|
|
context.commit("addMessage", data);
|
|
},
|
|
replaceMessage(context, data) {
|
|
context.commit("replaceMessage", data);
|
|
}
|
|
};
|
|
|
|
const mutations = {
|
|
messages(state, data) {
|
|
Vue.set(state.messages, data.channelID, data.messages);
|
|
},
|
|
addMessage(state, data) {
|
|
bus.$emit("newMessage", data);
|
|
Vue.set(
|
|
state.messages[data.channelID],
|
|
state.messages[data.channelID].length,
|
|
data.message
|
|
);
|
|
},
|
|
|
|
replaceMessage(state, data) {
|
|
const { tempID, message } = data;
|
|
|
|
state.messages[message.channelID].find((o, i) => {
|
|
if (o.tempID === tempID) {
|
|
Vue.set(state.messages[message.channelID], i, message);
|
|
return true;
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
export default {
|
|
namespace: true,
|
|
state,
|
|
actions,
|
|
mutations,
|
|
getters
|
|
};
|