diff --git a/frontend/src/components/AppSidebar.vue b/frontend/src/components/AppSidebar.vue index 682a4447..b72d311a 100644 --- a/frontend/src/components/AppSidebar.vue +++ b/frontend/src/components/AppSidebar.vue @@ -181,7 +181,16 @@ import UserDropdown from '@/components/UserDropdown.vue' import CollapseSidebar from '@/components/Icons/CollapseSidebar.vue' import SidebarLink from '@/components/SidebarLink.vue' -import { ref, onMounted, inject, watch, reactive, markRaw, h } from 'vue' +import { + ref, + onMounted, + inject, + watch, + reactive, + markRaw, + h, + onUnmounted, +} from 'vue' import { getSidebarLinks } from '../utils' import { usersStore } from '@/stores/user' import { sessionStore } from '@/stores/session' @@ -626,4 +635,8 @@ watch(userResource, () => { const redirectToWebsite = () => { window.open('https://frappe.io/learning', '_blank') } + +onUnmounted(() => { + socket.off('publish_lms_notifications') +}) diff --git a/frontend/src/components/DiscussionReplies.vue b/frontend/src/components/DiscussionReplies.vue index 9e328587..10ae9a08 100644 --- a/frontend/src/components/DiscussionReplies.vue +++ b/frontend/src/components/DiscussionReplies.vue @@ -97,7 +97,7 @@ import { createResource, TextEditor, Button, Dropdown, toast } from 'frappe-ui' import { timeAgo } from '../utils' import UserAvatar from '@/components/UserAvatar.vue' import { ChevronLeft, MoreHorizontal } from 'lucide-vue-next' -import { ref, inject, onMounted } from 'vue' +import { ref, inject, onMounted, onUnmounted } from 'vue' const showTopics = defineModel('showTopics') const newReply = ref('') @@ -251,4 +251,10 @@ const deleteReply = (reply) => { } ) } + +onUnmounted(() => { + socket.off('publish_message') + socket.off('update_message') + socket.off('delete_message') +}) diff --git a/frontend/src/components/Discussions.vue b/frontend/src/components/Discussions.vue index 95e47efd..04747bba 100644 --- a/frontend/src/components/Discussions.vue +++ b/frontend/src/components/Discussions.vue @@ -70,7 +70,7 @@ import { createResource, Button } from 'frappe-ui' import UserAvatar from '@/components/UserAvatar.vue' import { singularize, timeAgo } from '../utils' -import { ref, onMounted, inject } from 'vue' +import { ref, onMounted, inject, onUnmounted } from 'vue' import DiscussionReplies from '@/components/DiscussionReplies.vue' import DiscussionModal from '@/components/Modals/DiscussionModal.vue' import { MessageSquareText } from 'lucide-vue-next' @@ -153,4 +153,8 @@ const showReplies = (topic) => { const openTopicModal = () => { showTopicModal.value = true } + +onUnmounted(() => { + socket.off('new_discussion_topic') +}) diff --git a/frontend/src/components/Modals/QuizInVideo.vue b/frontend/src/components/Modals/QuizInVideo.vue index 3d12ea15..18575fa3 100644 --- a/frontend/src/components/Modals/QuizInVideo.vue +++ b/frontend/src/components/Modals/QuizInVideo.vue @@ -10,10 +10,10 @@