mirror of
https://github.com/lingble/chatwoot.git
synced 2025-11-03 12:37:56 +00:00
84 lines
2.2 KiB
Vue
84 lines
2.2 KiB
Vue
<template>
|
|
<div v-if="isAIIntegrationEnabled" class="position-relative">
|
|
<woot-button
|
|
v-tooltip.top-end="$t('INTEGRATION_SETTINGS.OPEN_AI.AI_ASSIST')"
|
|
icon="wand"
|
|
color-scheme="secondary"
|
|
variant="smooth"
|
|
size="small"
|
|
@click="openAIAssist"
|
|
/>
|
|
<woot-modal
|
|
:show.sync="showAIAssistanceModal"
|
|
:on-close="hideAIAssistanceModal"
|
|
>
|
|
<AIAssistanceModal
|
|
:ai-option="aiOption"
|
|
@apply-text="insertText"
|
|
@close="hideAIAssistanceModal"
|
|
/>
|
|
</woot-modal>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
import { mapGetters } from 'vuex';
|
|
|
|
import AIAssistanceModal from './AIAssistanceModal.vue';
|
|
import aiMixin from 'dashboard/mixins/aiMixin';
|
|
import { CMD_AI_ASSIST } from 'dashboard/routes/dashboard/commands/commandBarBusEvents';
|
|
import eventListenerMixins from 'shared/mixins/eventListenerMixins';
|
|
import { buildHotKeys } from 'shared/helpers/KeyboardHelpers';
|
|
|
|
export default {
|
|
components: {
|
|
AIAssistanceModal,
|
|
},
|
|
mixins: [aiMixin, eventListenerMixins],
|
|
data: () => ({
|
|
showAIAssistanceModal: false,
|
|
aiOption: '',
|
|
initialMessage: '',
|
|
}),
|
|
computed: {
|
|
...mapGetters({
|
|
currentChat: 'getSelectedChat',
|
|
}),
|
|
},
|
|
|
|
mounted() {
|
|
bus.$on(CMD_AI_ASSIST, this.onAIAssist);
|
|
this.initialMessage = this.draftMessage;
|
|
},
|
|
|
|
methods: {
|
|
onKeyDownHandler(event) {
|
|
const keyPattern = buildHotKeys(event);
|
|
const shouldRevertTheContent =
|
|
['meta+z', 'ctrl+z'].includes(keyPattern) && !!this.initialMessage;
|
|
if (shouldRevertTheContent) {
|
|
this.$emit('replace-text', this.initialMessage);
|
|
this.initialMessage = '';
|
|
}
|
|
},
|
|
hideAIAssistanceModal() {
|
|
this.recordAnalytics('DISMISS_AI_SUGGESTION', {
|
|
aiOption: this.aiOption,
|
|
});
|
|
this.showAIAssistanceModal = false;
|
|
},
|
|
openAIAssist() {
|
|
this.initialMessage = this.draftMessage;
|
|
const ninja = document.querySelector('ninja-keys');
|
|
ninja.open({ parent: 'ai_assist' });
|
|
},
|
|
onAIAssist(option) {
|
|
this.aiOption = option;
|
|
this.showAIAssistanceModal = true;
|
|
},
|
|
insertText(message) {
|
|
this.$emit('replace-text', message);
|
|
},
|
|
},
|
|
};
|
|
</script>
|