Browse Source

feat(Activities): hiding activities now emits to all socket listeners

Signed-off-by: Jonathan <theflametrooper@gmail.com>
Jonathan 4 years ago
parent
commit
9cf3ed25c2

+ 26 - 1
backend/logic/actions/activities.js

@@ -5,8 +5,24 @@ import { isLoginRequired } from "./hooks";
 import moduleManager from "../../index";
 
 const DBModule = moduleManager.modules.db;
+const CacheModule = moduleManager.modules.cache;
+const IOModule = moduleManager.modules.io;
 const UtilsModule = moduleManager.modules.utils;
 
+CacheModule.runJob("SUB", {
+	channel: "activity.hide",
+	cb: res => {
+		IOModule.runJob("SOCKETS_FROM_USER", { userId: res.userId }, this).then(response =>
+			response.sockets.forEach(socket => socket.emit("event:activity.hide", res.activityId))
+		);
+
+		IOModule.runJob("EMIT_TO_ROOM", {
+			room: `profile-${res.userId}-activities`,
+			args: ["event:activity.hide", res.activityId]
+		});
+	}
+});
+
 export default {
 	/**
 	 * Gets a set of activities
@@ -85,8 +101,17 @@ export default {
 					return cb({ status: "failure", message: err });
 				}
 
+				CacheModule.runJob("PUB", {
+					channel: "activity.hide",
+					value: {
+						userId: session.userId,
+						activityId
+					}
+				});
+
 				this.log("SUCCESS", "ACTIVITIES_HIDE_ACTIVITY", `Successfully hid activity ${activityId}.`);
-				return cb({ status: "success" });
+
+				return cb({ status: "success", message: "Successfully hid activity." });
 			}
 		);
 	})

+ 11 - 4
frontend/src/pages/Profile/tabs/RecentActivity.vue

@@ -18,7 +18,11 @@
 				:activity="activity"
 			>
 				<div slot="actions">
-					<a href="#" @click.prevent="hideActivity(activity._id)">
+					<a
+						v-if="userId === myUserId"
+						href="#"
+						@click.prevent="hideActivity(activity._id)"
+					>
 						<i class="material-icons hide-icon">visibility_off</i>
 					</a>
 				</div>
@@ -94,14 +98,17 @@ export default {
 					this.activities.unshift(activity);
 				});
 			});
+
+			this.socket.on("event:activity.hide", activityId => {
+				this.removeActivity(activityId);
+			});
 		});
 	},
 	methods: {
 		hideActivity(activityId) {
 			this.socket.emit("activities.hideActivity", activityId, res => {
-				if (res.status === "success")
-					return this.removeActivity(activityId);
-				return new Toast({ content: res.message, timeout: 3000 });
+				if (res.status !== "success")
+					new Toast({ content: res.message, timeout: 3000 });
 			});
 		},
 		formatActivity(res, cb) {