fix: Use bus.$off to remove listeners on destroy (#3478)

This commit is contained in:
Pranav Raj S 2021-11-29 21:15:36 -08:00 committed by GitHub
parent 86dfdfb9ab
commit 0899f62912
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 44 additions and 24 deletions

View file

@ -74,9 +74,10 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
end
def update_last_seen
@conversation.agent_last_seen_at = DateTime.now.utc
@conversation.assignee_last_seen_at = DateTime.now.utc if assignee?
@conversation.save!
# rubocop:disable Rails/SkipsModelValidations
@conversation.update_column(:agent_last_seen_at, DateTime.now.utc)
@conversation.update_column(:assignee_last_seen_at, DateTime.now.utc) if assignee?
# rubocop:enable Rails/SkipsModelValidations
end
def custom_attributes

View file

@ -3,10 +3,12 @@
</template>
<script>
import { BUS_EVENTS } from 'shared/constants/busEvents';
export default {
methods: {
onMenuItemClick() {
bus.$emit('sidemenu_icon_click');
bus.$emit(BUS_EVENTS.TOGGLE_SIDEMENU);
},
},
};

View file

@ -29,12 +29,16 @@ export default {
},
mounted() {
bus.$on('newToastMessage', message => {
bus.$on('newToastMessage', this.onNewToastMessage);
},
beforeDestroy() {
bus.$off('newToastMessage', this.onNewToastMessage);
},
onNewToastMessage(message) {
this.snackMessages.push({ key: new Date().getTime(), message });
window.setTimeout(() => {
this.snackMessages.splice(0, 1);
}, this.duration);
});
},
};
</script>

View file

@ -243,25 +243,31 @@ export default {
},
created() {
bus.$on('scrollToMessage', () => {
this.$nextTick(() => this.scrollToBottom());
this.makeMessagesRead();
});
bus.$on(BUS_EVENTS.SET_TWEET_REPLY, selectedTweetId => {
this.selectedTweetId = selectedTweetId;
});
bus.$on(BUS_EVENTS.SCROLL_TO_MESSAGE, this.onScrollToMessage);
bus.$on(BUS_EVENTS.SET_TWEET_REPLY, this.setSelectedTweet);
},
mounted() {
this.addScrollListener();
},
unmounted() {
beforeDestroy() {
this.removeBusListeners();
this.removeScrollListener();
},
methods: {
removeBusListeners() {
bus.$off(BUS_EVENTS.SCROLL_TO_MESSAGE, this.onScrollToMessage);
bus.$off(BUS_EVENTS.SET_TWEET_REPLY, this.setSelectedTweet);
},
setSelectedTweet(tweetId) {
this.selectedTweetId = tweetId;
},
onScrollToMessage() {
this.$nextTick(() => this.scrollToBottom());
this.makeMessagesRead();
},
showPopoutReplyBox() {
this.isPopoutReplyBox = !this.isPopoutReplyBox;
},

View file

@ -93,6 +93,7 @@ import { REPLY_EDITOR_MODES } from 'dashboard/components/widgets/WootWriter/cons
import WootMessageEditor from 'dashboard/components/widgets/WootWriter/Editor';
import { checkFileSizeLimit } from 'shared/helpers/FileHelper';
import { MAXIMUM_FILE_UPLOAD_SIZE } from 'shared/constants/messages';
import { BUS_EVENTS } from 'shared/constants/busEvents';
import {
isEscape,
@ -368,7 +369,7 @@ export default {
this.clearMessage();
try {
await this.$store.dispatch('sendMessage', messagePayload);
this.$emit('scrollToMessage');
this.$emit(BUS_EVENTS.SCROLL_TO_MESSAGE);
} catch (error) {
const errorMessage =
error?.response?.data?.error ||

View file

@ -11,6 +11,7 @@
<script>
import Sidebar from '../../components/layout/Sidebar';
import CommandBar from './commands/commandbar.vue';
import { BUS_EVENTS } from 'shared/constants/busEvents';
export default {
components: {
@ -50,11 +51,10 @@ export default {
this.$store.dispatch('setCurrentAccountId', this.$route.params.accountId);
window.addEventListener('resize', this.handleResize);
this.handleResize();
bus.$on('sidemenu_icon_click', () => {
this.isSidebarOpen = !this.isSidebarOpen;
});
bus.$on(BUS_EVENTS.TOGGLE_SIDEMENU, this.toggleSidebar);
},
beforeDestroy() {
bus.$off(BUS_EVENTS.TOGGLE_SIDEMENU, this.toggleSidebar);
window.removeEventListener('resize', this.handleResize);
},
methods: {
@ -65,6 +65,9 @@ export default {
this.isOnDesktop = false;
}
},
toggleSidebar() {
this.isSidebarOpen = !this.isSidebarOpen;
},
},
};
</script>

View file

@ -23,6 +23,7 @@ import ChatList from '../../../components/ChatList';
import ConversationBox from '../../../components/widgets/conversation/ConversationBox';
import PopOverSearch from './search/PopOverSearch';
import uiSettingsMixin from 'dashboard/mixins/uiSettings';
import { BUS_EVENTS } from 'shared/constants/busEvents';
export default {
components: {
@ -108,7 +109,7 @@ export default {
return;
}
this.$store.dispatch('setActiveChat', chat).then(() => {
bus.$emit('scrollToMessage');
bus.$emit(BUS_EVENTS.SCROLL_TO_MESSAGE);
});
} else {
this.$store.dispatch('clearSelectedState');

View file

@ -3,4 +3,6 @@ export const BUS_EVENTS = {
SHOW_ALERT: 'SHOW_ALERT',
START_NEW_CONVERSATION: 'START_NEW_CONVERSATION',
FOCUS_CUSTOM_ATTRIBUTE: 'FOCUS_CUSTOM_ATTRIBUTE',
SCROLL_TO_MESSAGE: 'SCROLL_TO_MESSAGE',
TOGGLE_SIDEMENU: 'TOGGLE_SIDEMENU',
};