mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-10-31 02:57:57 +00:00 
			
		
		
		
	fix: Right click Snooze is not working (#9498)
This commit is contained in:
		| @@ -7,79 +7,17 @@ | ||||
|     ]" | ||||
|   > | ||||
|     <slot /> | ||||
|     <div | ||||
|       class="flex items-center justify-between px-4 py-0" | ||||
|       :class="{ | ||||
|         'pb-3 border-b border-slate-75 dark:border-slate-700': | ||||
|           hasAppliedFiltersOrActiveFolders, | ||||
|       }" | ||||
|     > | ||||
|       <div class="flex max-w-[85%] justify-center items-center"> | ||||
|         <h1 | ||||
|           class="text-xl font-medium break-words truncate text-black-900 dark:text-slate-100" | ||||
|           :title="pageTitle" | ||||
|         > | ||||
|           {{ pageTitle }} | ||||
|         </h1> | ||||
|         <span | ||||
|           v-if="!hasAppliedFiltersOrActiveFolders" | ||||
|           class="p-1 my-0.5 mx-1 rounded-md capitalize bg-slate-50 dark:bg-slate-800 text-xxs text-slate-600 dark:text-slate-300" | ||||
|         > | ||||
|           {{ $t(`CHAT_LIST.CHAT_STATUS_FILTER_ITEMS.${activeStatus}.TEXT`) }} | ||||
|         </span> | ||||
|       </div> | ||||
|       <div class="flex items-center gap-1"> | ||||
|         <div v-if="hasAppliedFilters && !hasActiveFolders"> | ||||
|           <woot-button | ||||
|             v-tooltip.top-end="$t('FILTER.CUSTOM_VIEWS.ADD.SAVE_BUTTON')" | ||||
|             size="tiny" | ||||
|             variant="smooth" | ||||
|             color-scheme="secondary" | ||||
|             icon="save" | ||||
|             @click="onClickOpenAddFoldersModal" | ||||
|           /> | ||||
|           <woot-button | ||||
|             v-tooltip.top-end="$t('FILTER.CLEAR_BUTTON_LABEL')" | ||||
|             size="tiny" | ||||
|             variant="smooth" | ||||
|             color-scheme="alert" | ||||
|             icon="dismiss-circle" | ||||
|             @click="resetAndFetchData" | ||||
|           /> | ||||
|         </div> | ||||
|         <div v-if="hasActiveFolders"> | ||||
|           <woot-button | ||||
|             v-tooltip.top-end="$t('FILTER.CUSTOM_VIEWS.EDIT.EDIT_BUTTON')" | ||||
|             size="tiny" | ||||
|             variant="smooth" | ||||
|             color-scheme="secondary" | ||||
|             icon="edit" | ||||
|             @click="onToggleAdvanceFiltersModal" | ||||
|           /> | ||||
|           <woot-button | ||||
|             v-tooltip.top-end="$t('FILTER.CUSTOM_VIEWS.DELETE.DELETE_BUTTON')" | ||||
|             size="tiny" | ||||
|             variant="smooth" | ||||
|             color-scheme="alert" | ||||
|             icon="delete" | ||||
|             @click="onClickOpenDeleteFoldersModal" | ||||
|           /> | ||||
|         </div> | ||||
|         <woot-button | ||||
|           v-else | ||||
|           v-tooltip.right="$t('FILTER.TOOLTIP_LABEL')" | ||||
|           variant="smooth" | ||||
|           color-scheme="secondary" | ||||
|           icon="filter" | ||||
|           size="tiny" | ||||
|           @click="onToggleAdvanceFiltersModal" | ||||
|         /> | ||||
|         <conversation-basic-filter | ||||
|           v-if="!hasAppliedFiltersOrActiveFolders" | ||||
|           @changeFilter="onBasicFilterChange" | ||||
|         /> | ||||
|       </div> | ||||
|     </div> | ||||
|     <chat-list-header | ||||
|       :page-title="pageTitle" | ||||
|       :has-applied-filters="hasAppliedFilters" | ||||
|       :has-active-folders="hasActiveFolders" | ||||
|       :active-status="activeStatus" | ||||
|       @add-folders="onClickOpenAddFoldersModal" | ||||
|       @delete-folders="onClickOpenDeleteFoldersModal" | ||||
|       @filters-modal="onToggleAdvanceFiltersModal" | ||||
|       @reset-filters="resetAndFetchData" | ||||
|       @basic-filter-change="onBasicFilterChange" | ||||
|     /> | ||||
|  | ||||
|     <add-custom-views | ||||
|       v-if="showAddFoldersModal" | ||||
| @@ -173,6 +111,15 @@ | ||||
|         @updateFolder="onUpdateSavedFilter" | ||||
|       /> | ||||
|     </woot-modal> | ||||
|     <woot-modal | ||||
|       :show.sync="showCustomSnoozeModal" | ||||
|       :on-close="hideCustomSnoozeModal" | ||||
|     > | ||||
|       <custom-snooze-modal | ||||
|         @close="hideCustomSnoozeModal" | ||||
|         @choose-time="chooseSnoozeTime" | ||||
|       /> | ||||
|     </woot-modal> | ||||
|   </div> | ||||
| </template> | ||||
|  | ||||
| @@ -180,8 +127,8 @@ | ||||
| import { mapGetters } from 'vuex'; | ||||
| import VirtualList from 'vue-virtual-scroll-list'; | ||||
|  | ||||
| import ChatListHeader from './ChatListHeader.vue'; | ||||
| import ConversationAdvancedFilter from './widgets/conversation/ConversationAdvancedFilter.vue'; | ||||
| import ConversationBasicFilter from './widgets/conversation/ConversationBasicFilter.vue'; | ||||
| import ChatTypeTabs from './widgets/ChatTypeTabs.vue'; | ||||
| import ConversationItem from './ConversationItem.vue'; | ||||
| import timeMixin from '../mixins/time'; | ||||
| @@ -205,10 +152,15 @@ import { | ||||
|   isOnUnattendedView, | ||||
| } from '../store/modules/conversations/helpers/actionHelpers'; | ||||
| import { CONVERSATION_EVENTS } from '../helper/AnalyticsHelper/events'; | ||||
| import { CMD_SNOOZE_CONVERSATION } from 'dashboard/routes/dashboard/commands/commandBarBusEvents'; | ||||
| import { findSnoozeTime } from 'dashboard/helper/snoozeHelpers'; | ||||
| import { getUnixTime } from 'date-fns'; | ||||
| import CustomSnoozeModal from 'dashboard/components/CustomSnoozeModal.vue'; | ||||
| import IntersectionObserver from './IntersectionObserver.vue'; | ||||
|  | ||||
| export default { | ||||
|   components: { | ||||
|     ChatListHeader, | ||||
|     AddCustomViews, | ||||
|     ChatTypeTabs, | ||||
|     // eslint-disable-next-line vue/no-unused-components | ||||
| @@ -216,9 +168,9 @@ export default { | ||||
|     ConversationAdvancedFilter, | ||||
|     DeleteCustomViews, | ||||
|     ConversationBulkActions, | ||||
|     ConversationBasicFilter, | ||||
|     IntersectionObserver, | ||||
|     VirtualList, | ||||
|     CustomSnoozeModal, | ||||
|   }, | ||||
|   mixins: [ | ||||
|     timeMixin, | ||||
| @@ -295,6 +247,7 @@ export default { | ||||
|         root: this.$refs.conversationList, | ||||
|         rootMargin: '100px 0px 100px 0px', | ||||
|       }, | ||||
|       showCustomSnoozeModal: false, | ||||
|  | ||||
|       itemComponent: ConversationItem, | ||||
|       // virtualListExtraProps is to pass the props to the conversationItem component. | ||||
| @@ -329,12 +282,13 @@ export default { | ||||
|       campaigns: 'campaigns/getAllCampaigns', | ||||
|       labels: 'labels/getLabels', | ||||
|       selectedConversations: 'bulkActions/getSelectedConversationIds', | ||||
|       contextMenuChatId: 'getContextMenuChatId', | ||||
|     }), | ||||
|     hasAppliedFilters() { | ||||
|       return this.appliedFilters.length !== 0; | ||||
|     }, | ||||
|     hasActiveFolders() { | ||||
|       return this.activeFolder && this.foldersId !== 0; | ||||
|       return Boolean(this.activeFolder && this.foldersId !== 0); | ||||
|     }, | ||||
|     hasAppliedFiltersOrActiveFolders() { | ||||
|       return this.hasAppliedFilters || this.hasActiveFolders; | ||||
| @@ -558,6 +512,11 @@ export default { | ||||
|     bus.$on('fetch_conversation_stats', () => { | ||||
|       this.$store.dispatch('conversationStats/get', this.conversationFilters); | ||||
|     }); | ||||
|  | ||||
|     bus.$on(CMD_SNOOZE_CONVERSATION, this.onCmdSnoozeConversation); | ||||
|   }, | ||||
|   beforeDestroy() { | ||||
|     bus.$off(CMD_SNOOZE_CONVERSATION, this.onCmdSnoozeConversation); | ||||
|   }, | ||||
|   methods: { | ||||
|     updateVirtualListProps(key, value) { | ||||
| @@ -1034,6 +993,43 @@ export default { | ||||
|     onContextMenuToggle(state) { | ||||
|       this.isContextMenuOpen = state; | ||||
|     }, | ||||
|     onCmdSnoozeConversation(snoozeType) { | ||||
|       if (snoozeType === wootConstants.SNOOZE_OPTIONS.UNTIL_CUSTOM_TIME) { | ||||
|         this.showCustomSnoozeModal = true; | ||||
|       } else { | ||||
|         this.toggleStatus( | ||||
|           wootConstants.STATUS_TYPE.SNOOZED, | ||||
|           findSnoozeTime(snoozeType) || null | ||||
|         ); | ||||
|       } | ||||
|     }, | ||||
|     chooseSnoozeTime(customSnoozeTime) { | ||||
|       this.showCustomSnoozeModal = false; | ||||
|       if (customSnoozeTime) { | ||||
|         this.toggleStatus( | ||||
|           wootConstants.STATUS_TYPE.SNOOZED, | ||||
|           getUnixTime(customSnoozeTime) | ||||
|         ); | ||||
|       } | ||||
|     }, | ||||
|     toggleStatus(status, snoozedUntil) { | ||||
|       this.$store | ||||
|         .dispatch('toggleStatus', { | ||||
|           conversationId: this.currentChat?.id || this.contextMenuChatId, | ||||
|           status, | ||||
|           snoozedUntil, | ||||
|         }) | ||||
|         .then(() => { | ||||
|           this.$store.dispatch('setContextMenuChatId', null); | ||||
|           this.showAlert(this.$t('CONVERSATION.CHANGE_STATUS')); | ||||
|         }); | ||||
|     }, | ||||
|     hideCustomSnoozeModal() { | ||||
|       // if we select custom snooze and then the custom snooze modal is open | ||||
|       // Then if the custom snooze modal is closed and set the context menu chat id to null | ||||
|       this.$store.dispatch('setContextMenuChatId', null); | ||||
|       this.showCustomSnoozeModal = false; | ||||
|     }, | ||||
|   }, | ||||
| }; | ||||
| </script> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Sivin Varghese
					Sivin Varghese