mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-02 03:57:52 +00:00
# Pull Request Template ## Description This PR includes the following enhancements to the conversation card context menu: 1. **Added "Open in New Tab" and "Copy Conversation Link" options.** * "Open in New Tab" allows users to quickly open a conversation in a separate browser tab. * "Copy Conversation Link" copies the conversation URL to the clipboard for easy sharing. 2. **Enabled the context menu in Previous Conversations card** with support for these two options. Fixes https://linear.app/chatwoot/issue/CW-4722/cannot-open-previous-conversations-in-a-new-tab ## Type of change - [x] Bug fix (non-breaking change which fixes an issue) ## How Has This Been Tested? ### Loom video https://www.loom.com/share/37b45d23c6804db292568d093b645ac0?sid=c3105971-f938-41bd-9f52-0f00d419d1b3 ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [x] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules --------- Co-authored-by: Pranav <pranav@chatwoot.com>
87 lines
2.0 KiB
Vue
87 lines
2.0 KiB
Vue
<script>
|
|
import ConversationCard from 'dashboard/components/widgets/conversation/ConversationCard.vue';
|
|
import { mapGetters } from 'vuex';
|
|
import Spinner from 'dashboard/components-next/spinner/Spinner.vue';
|
|
|
|
export default {
|
|
components: {
|
|
ConversationCard,
|
|
Spinner,
|
|
},
|
|
props: {
|
|
contactId: {
|
|
type: [String, Number],
|
|
required: true,
|
|
},
|
|
conversationId: {
|
|
type: [String, Number],
|
|
required: true,
|
|
},
|
|
},
|
|
computed: {
|
|
conversations() {
|
|
return this.$store.getters['contactConversations/getContactConversation'](
|
|
this.contactId
|
|
);
|
|
},
|
|
previousConversations() {
|
|
return this.conversations.filter(
|
|
conversation => conversation.id !== Number(this.conversationId)
|
|
);
|
|
},
|
|
...mapGetters({
|
|
uiFlags: 'contactConversations/getUIFlags',
|
|
}),
|
|
},
|
|
watch: {
|
|
contactId(newContactId, prevContactId) {
|
|
if (newContactId && newContactId !== prevContactId) {
|
|
this.$store.dispatch('contactConversations/get', newContactId);
|
|
}
|
|
},
|
|
},
|
|
mounted() {
|
|
this.$store.dispatch('contactConversations/get', this.contactId);
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<template>
|
|
<div v-if="!uiFlags.isFetching" class="">
|
|
<div v-if="!previousConversations.length" class="no-label-message px-4 p-3">
|
|
<span>
|
|
{{ $t('CONTACT_PANEL.CONVERSATIONS.NO_RECORDS_FOUND') }}
|
|
</span>
|
|
</div>
|
|
<div v-else class="contact-conversation--list">
|
|
<ConversationCard
|
|
v-for="conversation in previousConversations"
|
|
:key="conversation.id"
|
|
:chat="conversation"
|
|
:hide-inbox-name="false"
|
|
hide-thumbnail
|
|
enable-context-menu
|
|
:allowed-context-menu-options="['open-new-tab', 'copy-link']"
|
|
class="compact"
|
|
/>
|
|
</div>
|
|
</div>
|
|
<div v-else class="flex items-center justify-center py-5">
|
|
<Spinner />
|
|
</div>
|
|
</template>
|
|
|
|
<style lang="scss" scoped>
|
|
.no-label-message {
|
|
@apply text-n-slate-11 mb-4;
|
|
}
|
|
|
|
::v-deep .conversation {
|
|
@apply pr-0;
|
|
|
|
.conversation--details {
|
|
@apply pl-2;
|
|
}
|
|
}
|
|
</style>
|