diff --git a/api/v1/gateway/index.js b/api/v1/gateway/index.js
index 350e983..b2ea919 100644
--- a/api/v1/gateway/index.js
+++ b/api/v1/gateway/index.js
@@ -55,6 +55,7 @@ GatewayServer.prototype.eventSetup = function() {
if (permissionLevel < config.roleMap.USER) return this.authDisconnect(socket, callback);
socket.username = data.username;
+ socket.userId = user._id;
console.log(`[*] [gateway] [handshake] User ${data.username} has successfully authenticated`);
return callback();
});
@@ -69,14 +70,18 @@ GatewayServer.prototype.eventSetup = function() {
socket.on('message', ({ categoryId, content }) => {
// TODO: URGENT: Check if the category exists and if the user has access to it (access coming soon)
- socket.to(categoryId).emit('message', {
+ const msgConfig = {
username: socket.username,
+ creatorId: socket.userId,
categoryId: categoryId,
content: content
- });
+ };
+
+ socket.to(categoryId).emit('message', msgConfig);
+ socket.emit('message', msgConfig);
});
- socket.on('subscribe', (categories) => {
+ socket.on('subscribe', async (categories) => {
for (let v of categories) {
// TODO: URGENT: Check if the category exists and if the user has access to it (access coming soon)
socket.join(v);
diff --git a/app/app.html b/app/app.html
index 9f05b32..fb1fde9 100755
--- a/app/app.html
+++ b/app/app.html
@@ -92,12 +92,12 @@
Browsing category: {{ selection.category.title }}
Browsing {{ selection.category.title }}
- Back
- Refresh
+ Back
+ Refresh
-
+
by {{ post.creator.username }}
@@ -109,6 +109,16 @@
{{ button.text }}
+
diff --git a/app/resources/js/app.js b/app/resources/js/app.js
index a3af9fb..fcf2a37 100755
--- a/app/resources/js/app.js
+++ b/app/resources/js/app.js
@@ -125,7 +125,8 @@ const app = new Vue({
title: '',
browsing: false,
_id: undefined,
- isCategory: false
+ isCategory: false,
+ isChatContext: false
},
posts: []
},
@@ -152,10 +153,6 @@ const app = new Vue({
role: ''
},
gateway: new GatewayConnection(),
- viewingChat: {
- show: false,
- categoryId: 'X'
- },
messages: {
'X': [ { username: 'NONEXISTENT_TEST_ACCOUNT', content: 'TEST MSG' } ]
}
@@ -226,18 +223,18 @@ const app = new Vue({
this.notification('ERROR: You have been disconnected from the gateway. Realtime features such as chat will not work and unexpected errors may occur.');
};
this.gateway.onConnect = () => {
- this.gateway.socket.on('message', ({ username, categoryId, content }) => {
- this.showMessageNotification(categoryId, username, content);
+ this.gateway.socket.on('message', ({ username, categoryId, content, creatorId }) => {
+ this.showMessageNotification(categoryId, username, creatorId, content);
})
};
this.gateway.connect(this.loggedInUser.token);
},
- showMessageNotification: async function(categoryId, username, content) {
+ showMessageNotification: async function(categoryId, username, creatorId, content) {
+ if (!this.messages[categoryId]) this.messages[categoryId] = []
+ this.messages[categoryId].push({ username, content, creatorId });
+
this.resetSnackbarButton();
this.notification(`${username}: ${content}`);
-
- if (!this.messages[categoryId]) this.messages[categoryId] = []
- this.messages[categoryId].push({ username, content });
},
button: function(text, click) {
this.cardButtons.push({ text, click });
@@ -394,6 +391,7 @@ const app = new Vue({
this.selection.category._id = _id;
this.selection.category.browsing = true;
this.selection.category.isCategory = true;
+ this.selection.category.isChatContext = false;
this.selection.posts = [];
this.cardButtons = [];
@@ -408,7 +406,12 @@ const app = new Vue({
}
},
openChatForCategory: async function(categoryId) {
-
+ this.gateway.subscribeToCategoryChat(categoryId);
+
+ this.selection.category.isChatContext = true;
+ this.selection.category.browsing = true;
+ this.selection.category.title = 'Chat';
+ this.selection.category._id = categoryId;
},
browseCategories: async function() {
const res = await fetch(`${window.location.origin}/api/v1/content/category/list?count=50`, {
@@ -425,13 +428,14 @@ const app = new Vue({
this.selection.category.title = 'categories';
this.selection.category.browsing = true;
this.selection.category.isCategory = false;
+ this.selection.category.isChatContext = false;
this.selection.posts = [];
this.cardButtons = [];
this.button('Chat', (post) => {
if (post._id) {
- this.gateway.subscribeToCategoryChat(post._id);
+ this.openChatForCategory(post._id);
this.gateway.sendMessage(post._id, 'yoooo');
}
});