mirror of
				https://github.com/lingble/chatwoot.git
				synced 2025-11-03 20:48:07 +00:00 
			
		
		
		
	# Pull Request Template ### Changes includes * Update send message and add note button <img width="151" alt="image" src="https://github.com/user-attachments/assets/646d1d22-07be-4f2f-9090-6642556aa761" /> <img width="151" alt="image" src="https://github.com/user-attachments/assets/b5651420-c48b-4932-aff9-911788b9eabc" /> <img width="165" alt="image" src="https://github.com/user-attachments/assets/f1ace171-2115-4eba-9055-e568d1b73c5e" /> <img width="165" alt="image" src="https://github.com/user-attachments/assets/0c818461-ccdb-46ab-b7d3-3917e4ee4e74" /> <img width="165" alt="image" src="https://github.com/user-attachments/assets/eef1545b-1bed-47a1-8b83-ed5d5da3f24f" /> <img width="165" alt="image" src="https://github.com/user-attachments/assets/429de6e6-1263-4216-9222-4eaece95da81" /> <img width="165" alt="image" src="https://github.com/user-attachments/assets/59a69867-4da1-4695-b88c-329142a693a8" /> <img width="165" alt="image" src="https://github.com/user-attachments/assets/7114745c-836f-4c5a-b5d6-e200e1343a73" /> * Remove Unused component `AnnouncementPopup.vue` * Updated button for custom attributes in conversation sidebar. <img width="225" alt="image" src="https://github.com/user-attachments/assets/a71f6c31-aca9-4e1b-bf63-6b9d5ed183c8" /> <img width="310" alt="image" src="https://github.com/user-attachments/assets/8d847e1b-4a13-4108-a487-ce3d36257afa" /> * Update button in custom snooze modal buttons <img width="207" alt="image" src="https://github.com/user-attachments/assets/78315ce6-9734-467b-a4d3-e753d3eca384" /> * Update modal component close button <img width="80" alt="image" src="https://github.com/user-attachments/assets/643e9ef0-b781-47ce-a66b-a9ee4760c952" /> * Update AI assistant modal and AICTA modal <img width="319" alt="image" src="https://github.com/user-attachments/assets/8d0986ec-ec7a-4abb-9327-f73df8b4d942" /> <img width="565" alt="image" src="https://github.com/user-attachments/assets/1e02ddd1-7f51-4d8a-bb57-558b9a50c938" /> * Update remove attachment button <img width="301" alt="image" src="https://github.com/user-attachments/assets/90c93eee-0b4d-4839-9db5-edc4b023df4b" /> * Update the conversation header buttons <img width="256" alt="image" src="https://github.com/user-attachments/assets/abac5d7e-dd83-40ae-b548-76bbafaa2231" /> * Update the retry button in old message bubbles. --------- Co-authored-by: Pranav <pranav@chatwoot.com>
		
			
				
	
	
		
			119 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
<script>
 | 
						|
import { useMessageFormatter } from 'shared/composables/useMessageFormatter';
 | 
						|
import { useAI } from 'dashboard/composables/useAI';
 | 
						|
import AILoader from './AILoader.vue';
 | 
						|
import NextButton from 'dashboard/components-next/button/Button.vue';
 | 
						|
 | 
						|
export default {
 | 
						|
  components: {
 | 
						|
    AILoader,
 | 
						|
    NextButton,
 | 
						|
  },
 | 
						|
  props: {
 | 
						|
    aiOption: {
 | 
						|
      type: String,
 | 
						|
      required: true,
 | 
						|
    },
 | 
						|
  },
 | 
						|
  emits: ['close', 'applyText'],
 | 
						|
  setup() {
 | 
						|
    const { formatMessage } = useMessageFormatter();
 | 
						|
    const { draftMessage, processEvent, recordAnalytics } = useAI();
 | 
						|
    return { draftMessage, processEvent, recordAnalytics, formatMessage };
 | 
						|
  },
 | 
						|
  data() {
 | 
						|
    return {
 | 
						|
      generatedContent: '',
 | 
						|
      isGenerating: true,
 | 
						|
    };
 | 
						|
  },
 | 
						|
  computed: {
 | 
						|
    headerTitle() {
 | 
						|
      const translationKey = this.aiOption?.toUpperCase();
 | 
						|
      return translationKey
 | 
						|
        ? this.$t(`INTEGRATION_SETTINGS.OPEN_AI.WITH_AI`, {
 | 
						|
            option: this.$t(
 | 
						|
              `INTEGRATION_SETTINGS.OPEN_AI.OPTIONS.${translationKey}`
 | 
						|
            ),
 | 
						|
          })
 | 
						|
        : '';
 | 
						|
    },
 | 
						|
  },
 | 
						|
  mounted() {
 | 
						|
    this.generateAIContent(this.aiOption);
 | 
						|
  },
 | 
						|
 | 
						|
  methods: {
 | 
						|
    onClose() {
 | 
						|
      this.$emit('close');
 | 
						|
    },
 | 
						|
 | 
						|
    async generateAIContent(type = 'rephrase') {
 | 
						|
      this.isGenerating = true;
 | 
						|
      this.generatedContent = await this.processEvent(type);
 | 
						|
      this.isGenerating = false;
 | 
						|
    },
 | 
						|
    applyText() {
 | 
						|
      this.recordAnalytics(this.aiOption);
 | 
						|
      this.$emit('applyText', this.generatedContent);
 | 
						|
      this.onClose();
 | 
						|
    },
 | 
						|
  },
 | 
						|
};
 | 
						|
</script>
 | 
						|
 | 
						|
<template>
 | 
						|
  <div class="flex flex-col">
 | 
						|
    <woot-modal-header :header-title="headerTitle" />
 | 
						|
    <form
 | 
						|
      class="flex flex-col w-full modal-content"
 | 
						|
      @submit.prevent="applyText"
 | 
						|
    >
 | 
						|
      <div v-if="draftMessage" class="w-full">
 | 
						|
        <h4 class="mt-1 text-base text-slate-700 dark:text-slate-100">
 | 
						|
          {{ $t('INTEGRATION_SETTINGS.OPEN_AI.ASSISTANCE_MODAL.DRAFT_TITLE') }}
 | 
						|
        </h4>
 | 
						|
        <p v-dompurify-html="formatMessage(draftMessage, false)" />
 | 
						|
        <h4 class="mt-1 text-base text-slate-700 dark:text-slate-100">
 | 
						|
          {{
 | 
						|
            $t('INTEGRATION_SETTINGS.OPEN_AI.ASSISTANCE_MODAL.GENERATED_TITLE')
 | 
						|
          }}
 | 
						|
        </h4>
 | 
						|
      </div>
 | 
						|
      <div>
 | 
						|
        <AILoader v-if="isGenerating" />
 | 
						|
        <p v-else v-dompurify-html="formatMessage(generatedContent, false)" />
 | 
						|
      </div>
 | 
						|
 | 
						|
      <div class="flex flex-row justify-end w-full gap-2 px-0 py-2">
 | 
						|
        <NextButton
 | 
						|
          faded
 | 
						|
          slate
 | 
						|
          type="reset"
 | 
						|
          :label="
 | 
						|
            $t('INTEGRATION_SETTINGS.OPEN_AI.ASSISTANCE_MODAL.BUTTONS.CANCEL')
 | 
						|
          "
 | 
						|
          @click.prevent="onClose"
 | 
						|
        />
 | 
						|
        <NextButton
 | 
						|
          type="submit"
 | 
						|
          :disabled="!generatedContent"
 | 
						|
          :label="
 | 
						|
            $t('INTEGRATION_SETTINGS.OPEN_AI.ASSISTANCE_MODAL.BUTTONS.APPLY')
 | 
						|
          "
 | 
						|
        />
 | 
						|
      </div>
 | 
						|
    </form>
 | 
						|
  </div>
 | 
						|
</template>
 | 
						|
 | 
						|
<style lang="scss" scoped>
 | 
						|
.modal-content {
 | 
						|
  @apply pt-2 px-8 pb-8;
 | 
						|
}
 | 
						|
 | 
						|
.container {
 | 
						|
  width: 100%;
 | 
						|
}
 | 
						|
</style>
 |