mirror of
https://github.com/lingble/chatwoot.git
synced 2025-10-29 10:12:34 +00:00
Merge branch 'develop' into feat/summary-report-aggregate
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
|
import { useAccount } from 'dashboard/composables/useAccount';
|
||||||
import EmptyStateLayout from 'dashboard/components-next/EmptyStateLayout.vue';
|
import EmptyStateLayout from 'dashboard/components-next/EmptyStateLayout.vue';
|
||||||
import Button from 'dashboard/components-next/button/Button.vue';
|
import Button from 'dashboard/components-next/button/Button.vue';
|
||||||
import AssistantCard from 'dashboard/components-next/captain/assistant/AssistantCard.vue';
|
import AssistantCard from 'dashboard/components-next/captain/assistant/AssistantCard.vue';
|
||||||
@@ -6,6 +7,7 @@ import FeatureSpotlight from 'dashboard/components-next/feature-spotlight/Featur
|
|||||||
import { assistantsList } from 'dashboard/components-next/captain/pageComponents/emptyStates/captainEmptyStateContent.js';
|
import { assistantsList } from 'dashboard/components-next/captain/pageComponents/emptyStates/captainEmptyStateContent.js';
|
||||||
|
|
||||||
const emit = defineEmits(['click']);
|
const emit = defineEmits(['click']);
|
||||||
|
const { isOnChatwootCloud } = useAccount();
|
||||||
|
|
||||||
const onClick = () => {
|
const onClick = () => {
|
||||||
emit('click');
|
emit('click');
|
||||||
@@ -20,6 +22,7 @@ const onClick = () => {
|
|||||||
fallback-thumbnail-dark="/assets/images/dashboard/captain/assistant-dark.svg"
|
fallback-thumbnail-dark="/assets/images/dashboard/captain/assistant-dark.svg"
|
||||||
learn-more-url="https://chwt.app/captain-assistant"
|
learn-more-url="https://chwt.app/captain-assistant"
|
||||||
class="mb-8"
|
class="mb-8"
|
||||||
|
:hide-actions="!isOnChatwootCloud"
|
||||||
/>
|
/>
|
||||||
<EmptyStateLayout
|
<EmptyStateLayout
|
||||||
:title="$t('CAPTAIN.ASSISTANTS.EMPTY_STATE.TITLE')"
|
:title="$t('CAPTAIN.ASSISTANTS.EMPTY_STATE.TITLE')"
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
|
import { useAccount } from 'dashboard/composables/useAccount';
|
||||||
import EmptyStateLayout from 'dashboard/components-next/EmptyStateLayout.vue';
|
import EmptyStateLayout from 'dashboard/components-next/EmptyStateLayout.vue';
|
||||||
import Button from 'dashboard/components-next/button/Button.vue';
|
import Button from 'dashboard/components-next/button/Button.vue';
|
||||||
import DocumentCard from 'dashboard/components-next/captain/assistant/DocumentCard.vue';
|
import DocumentCard from 'dashboard/components-next/captain/assistant/DocumentCard.vue';
|
||||||
@@ -6,6 +7,7 @@ import FeatureSpotlight from 'dashboard/components-next/feature-spotlight/Featur
|
|||||||
import { documentsList } from 'dashboard/components-next/captain/pageComponents/emptyStates/captainEmptyStateContent.js';
|
import { documentsList } from 'dashboard/components-next/captain/pageComponents/emptyStates/captainEmptyStateContent.js';
|
||||||
|
|
||||||
const emit = defineEmits(['click']);
|
const emit = defineEmits(['click']);
|
||||||
|
const { isOnChatwootCloud } = useAccount();
|
||||||
|
|
||||||
const onClick = () => {
|
const onClick = () => {
|
||||||
emit('click');
|
emit('click');
|
||||||
@@ -19,6 +21,7 @@ const onClick = () => {
|
|||||||
fallback-thumbnail="/assets/images/dashboard/captain/document-light.svg"
|
fallback-thumbnail="/assets/images/dashboard/captain/document-light.svg"
|
||||||
fallback-thumbnail-dark="/assets/images/dashboard/captain/document-dark.svg"
|
fallback-thumbnail-dark="/assets/images/dashboard/captain/document-dark.svg"
|
||||||
learn-more-url="https://chwt.app/captain-document"
|
learn-more-url="https://chwt.app/captain-document"
|
||||||
|
:hide-actions="!isOnChatwootCloud"
|
||||||
class="mb-8"
|
class="mb-8"
|
||||||
/>
|
/>
|
||||||
<EmptyStateLayout
|
<EmptyStateLayout
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
|
import { useAccount } from 'dashboard/composables/useAccount';
|
||||||
import EmptyStateLayout from 'dashboard/components-next/EmptyStateLayout.vue';
|
import EmptyStateLayout from 'dashboard/components-next/EmptyStateLayout.vue';
|
||||||
import Button from 'dashboard/components-next/button/Button.vue';
|
import Button from 'dashboard/components-next/button/Button.vue';
|
||||||
import ResponseCard from 'dashboard/components-next/captain/assistant/ResponseCard.vue';
|
import ResponseCard from 'dashboard/components-next/captain/assistant/ResponseCard.vue';
|
||||||
@@ -6,6 +7,7 @@ import FeatureSpotlight from 'dashboard/components-next/feature-spotlight/Featur
|
|||||||
import { responsesList } from 'dashboard/components-next/captain/pageComponents/emptyStates/captainEmptyStateContent.js';
|
import { responsesList } from 'dashboard/components-next/captain/pageComponents/emptyStates/captainEmptyStateContent.js';
|
||||||
|
|
||||||
const emit = defineEmits(['click']);
|
const emit = defineEmits(['click']);
|
||||||
|
const { isOnChatwootCloud } = useAccount();
|
||||||
|
|
||||||
const onClick = () => {
|
const onClick = () => {
|
||||||
emit('click');
|
emit('click');
|
||||||
@@ -19,6 +21,7 @@ const onClick = () => {
|
|||||||
fallback-thumbnail="/assets/images/dashboard/captain/faqs-light.svg"
|
fallback-thumbnail="/assets/images/dashboard/captain/faqs-light.svg"
|
||||||
fallback-thumbnail-dark="/assets/images/dashboard/captain/faqs-dark.svg"
|
fallback-thumbnail-dark="/assets/images/dashboard/captain/faqs-dark.svg"
|
||||||
learn-more-url="https://chwt.app/captain-faq"
|
learn-more-url="https://chwt.app/captain-faq"
|
||||||
|
:hide-actions="!isOnChatwootCloud"
|
||||||
class="mb-8"
|
class="mb-8"
|
||||||
/>
|
/>
|
||||||
<EmptyStateLayout
|
<EmptyStateLayout
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ defineProps({
|
|||||||
fallbackThumbnail: { type: String, default: '' },
|
fallbackThumbnail: { type: String, default: '' },
|
||||||
fallbackThumbnailDark: { type: String, default: '' },
|
fallbackThumbnailDark: { type: String, default: '' },
|
||||||
learnMoreUrl: { type: String, default: '' },
|
learnMoreUrl: { type: String, default: '' },
|
||||||
|
hideActions: { type: Boolean, default: false },
|
||||||
});
|
});
|
||||||
|
|
||||||
const imageError = ref(false);
|
const imageError = ref(false);
|
||||||
@@ -65,7 +66,7 @@ const openLink = link => {
|
|||||||
<div class="flex flex-col flex-1 gap-3 ltr:pr-8 rtl:pl-8">
|
<div class="flex flex-col flex-1 gap-3 ltr:pr-8 rtl:pl-8">
|
||||||
<p v-if="note" class="text-n-slate-12 text-sm mb-0">{{ note }}</p>
|
<p v-if="note" class="text-n-slate-12 text-sm mb-0">{{ note }}</p>
|
||||||
|
|
||||||
<div class="flex gap-3">
|
<div v-if="!hideActions" class="flex gap-3">
|
||||||
<slot name="actions">
|
<slot name="actions">
|
||||||
<Button
|
<Button
|
||||||
v-if="videoUrl"
|
v-if="videoUrl"
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ defineProps({
|
|||||||
fallbackThumbnail: { type: String, default: '' },
|
fallbackThumbnail: { type: String, default: '' },
|
||||||
fallbackThumbnailDark: { type: String, default: '' },
|
fallbackThumbnailDark: { type: String, default: '' },
|
||||||
learnMoreUrl: { type: String, default: '' },
|
learnMoreUrl: { type: String, default: '' },
|
||||||
|
hideActions: { type: Boolean, default: false },
|
||||||
});
|
});
|
||||||
|
|
||||||
const imageError = ref(false);
|
const imageError = ref(false);
|
||||||
@@ -92,7 +93,7 @@ const openLink = link => {
|
|||||||
{{ note }}
|
{{ note }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="flex gap-3 justify-between w-full">
|
<div v-if="!hideActions" class="flex gap-3 justify-between w-full">
|
||||||
<slot name="actions">
|
<slot name="actions">
|
||||||
<Button
|
<Button
|
||||||
v-if="videoUrl"
|
v-if="videoUrl"
|
||||||
|
|||||||
@@ -2,6 +2,8 @@
|
|||||||
import { computed, onMounted, ref, nextTick } from 'vue';
|
import { computed, onMounted, ref, nextTick } from 'vue';
|
||||||
import { useMapGetter, useStore } from 'dashboard/composables/store';
|
import { useMapGetter, useStore } from 'dashboard/composables/store';
|
||||||
import { FEATURE_FLAGS } from 'dashboard/featureFlags';
|
import { FEATURE_FLAGS } from 'dashboard/featureFlags';
|
||||||
|
import { useRouter } from 'vue-router';
|
||||||
|
import { useAccount } from 'dashboard/composables/useAccount';
|
||||||
|
|
||||||
import AssistantCard from 'dashboard/components-next/captain/assistant/AssistantCard.vue';
|
import AssistantCard from 'dashboard/components-next/captain/assistant/AssistantCard.vue';
|
||||||
import DeleteDialog from 'dashboard/components-next/captain/pageComponents/DeleteDialog.vue';
|
import DeleteDialog from 'dashboard/components-next/captain/pageComponents/DeleteDialog.vue';
|
||||||
@@ -11,7 +13,8 @@ import CreateAssistantDialog from 'dashboard/components-next/captain/pageCompone
|
|||||||
import AssistantPageEmptyState from 'dashboard/components-next/captain/pageComponents/emptyStates/AssistantPageEmptyState.vue';
|
import AssistantPageEmptyState from 'dashboard/components-next/captain/pageComponents/emptyStates/AssistantPageEmptyState.vue';
|
||||||
import FeatureSpotlightPopover from 'dashboard/components-next/feature-spotlight/FeatureSpotlightPopover.vue';
|
import FeatureSpotlightPopover from 'dashboard/components-next/feature-spotlight/FeatureSpotlightPopover.vue';
|
||||||
import LimitBanner from 'dashboard/components-next/captain/pageComponents/response/LimitBanner.vue';
|
import LimitBanner from 'dashboard/components-next/captain/pageComponents/response/LimitBanner.vue';
|
||||||
import { useRouter } from 'vue-router';
|
|
||||||
|
const { isOnChatwootCloud } = useAccount();
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
@@ -90,6 +93,7 @@ onMounted(() => store.dispatch('captainAssistants/get'));
|
|||||||
:button-label="$t('CAPTAIN.HEADER_KNOW_MORE')"
|
:button-label="$t('CAPTAIN.HEADER_KNOW_MORE')"
|
||||||
:title="$t('CAPTAIN.ASSISTANTS.EMPTY_STATE.FEATURE_SPOTLIGHT.TITLE')"
|
:title="$t('CAPTAIN.ASSISTANTS.EMPTY_STATE.FEATURE_SPOTLIGHT.TITLE')"
|
||||||
:note="$t('CAPTAIN.ASSISTANTS.EMPTY_STATE.FEATURE_SPOTLIGHT.NOTE')"
|
:note="$t('CAPTAIN.ASSISTANTS.EMPTY_STATE.FEATURE_SPOTLIGHT.NOTE')"
|
||||||
|
:hide-actions="!isOnChatwootCloud"
|
||||||
fallback-thumbnail="/assets/images/dashboard/captain/assistant-popover-light.svg"
|
fallback-thumbnail="/assets/images/dashboard/captain/assistant-popover-light.svg"
|
||||||
fallback-thumbnail-dark="/assets/images/dashboard/captain/assistant-popover-dark.svg"
|
fallback-thumbnail-dark="/assets/images/dashboard/captain/assistant-popover-dark.svg"
|
||||||
learn-more-url="https://chwt.app/captain-assistant"
|
learn-more-url="https://chwt.app/captain-assistant"
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import { computed, onMounted, ref, nextTick } from 'vue';
|
import { computed, onMounted, ref, nextTick } from 'vue';
|
||||||
import { useMapGetter, useStore } from 'dashboard/composables/store';
|
import { useMapGetter, useStore } from 'dashboard/composables/store';
|
||||||
import { FEATURE_FLAGS } from 'dashboard/featureFlags';
|
import { FEATURE_FLAGS } from 'dashboard/featureFlags';
|
||||||
|
import { useAccount } from 'dashboard/composables/useAccount';
|
||||||
|
|
||||||
import DeleteDialog from 'dashboard/components-next/captain/pageComponents/DeleteDialog.vue';
|
import DeleteDialog from 'dashboard/components-next/captain/pageComponents/DeleteDialog.vue';
|
||||||
import DocumentCard from 'dashboard/components-next/captain/assistant/DocumentCard.vue';
|
import DocumentCard from 'dashboard/components-next/captain/assistant/DocumentCard.vue';
|
||||||
@@ -16,6 +17,7 @@ import LimitBanner from 'dashboard/components-next/captain/pageComponents/docume
|
|||||||
|
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
|
|
||||||
|
const { isOnChatwootCloud } = useAccount();
|
||||||
const uiFlags = useMapGetter('captainDocuments/getUIFlags');
|
const uiFlags = useMapGetter('captainDocuments/getUIFlags');
|
||||||
const documents = useMapGetter('captainDocuments/getRecords');
|
const documents = useMapGetter('captainDocuments/getRecords');
|
||||||
const assistants = useMapGetter('captainAssistants/getRecords');
|
const assistants = useMapGetter('captainAssistants/getRecords');
|
||||||
@@ -121,6 +123,7 @@ onMounted(() => {
|
|||||||
:button-label="$t('CAPTAIN.HEADER_KNOW_MORE')"
|
:button-label="$t('CAPTAIN.HEADER_KNOW_MORE')"
|
||||||
:title="$t('CAPTAIN.DOCUMENTS.EMPTY_STATE.FEATURE_SPOTLIGHT.TITLE')"
|
:title="$t('CAPTAIN.DOCUMENTS.EMPTY_STATE.FEATURE_SPOTLIGHT.TITLE')"
|
||||||
:note="$t('CAPTAIN.DOCUMENTS.EMPTY_STATE.FEATURE_SPOTLIGHT.NOTE')"
|
:note="$t('CAPTAIN.DOCUMENTS.EMPTY_STATE.FEATURE_SPOTLIGHT.NOTE')"
|
||||||
|
:hide-actions="!isOnChatwootCloud"
|
||||||
fallback-thumbnail="/assets/images/dashboard/captain/document-popover-light.svg"
|
fallback-thumbnail="/assets/images/dashboard/captain/document-popover-light.svg"
|
||||||
fallback-thumbnail-dark="/assets/images/dashboard/captain/document-popover-dark.svg"
|
fallback-thumbnail-dark="/assets/images/dashboard/captain/document-popover-dark.svg"
|
||||||
learn-more-url="https://chwt.app/captain-document"
|
learn-more-url="https://chwt.app/captain-document"
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import { OnClickOutside } from '@vueuse/components';
|
|||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
import { FEATURE_FLAGS } from 'dashboard/featureFlags';
|
import { FEATURE_FLAGS } from 'dashboard/featureFlags';
|
||||||
import { debounce } from '@chatwoot/utils';
|
import { debounce } from '@chatwoot/utils';
|
||||||
|
import { useAccount } from 'dashboard/composables/useAccount';
|
||||||
|
|
||||||
import Button from 'dashboard/components-next/button/Button.vue';
|
import Button from 'dashboard/components-next/button/Button.vue';
|
||||||
import Checkbox from 'dashboard/components-next/checkbox/Checkbox.vue';
|
import Checkbox from 'dashboard/components-next/checkbox/Checkbox.vue';
|
||||||
@@ -25,6 +26,7 @@ import LimitBanner from 'dashboard/components-next/captain/pageComponents/respon
|
|||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
|
const { isOnChatwootCloud } = useAccount();
|
||||||
const uiFlags = useMapGetter('captainResponses/getUIFlags');
|
const uiFlags = useMapGetter('captainResponses/getUIFlags');
|
||||||
const assistants = useMapGetter('captainAssistants/getRecords');
|
const assistants = useMapGetter('captainAssistants/getRecords');
|
||||||
const responseMeta = useMapGetter('captainResponses/getMeta');
|
const responseMeta = useMapGetter('captainResponses/getMeta');
|
||||||
@@ -285,6 +287,7 @@ onMounted(() => {
|
|||||||
:button-label="$t('CAPTAIN.HEADER_KNOW_MORE')"
|
:button-label="$t('CAPTAIN.HEADER_KNOW_MORE')"
|
||||||
:title="$t('CAPTAIN.RESPONSES.EMPTY_STATE.FEATURE_SPOTLIGHT.TITLE')"
|
:title="$t('CAPTAIN.RESPONSES.EMPTY_STATE.FEATURE_SPOTLIGHT.TITLE')"
|
||||||
:note="$t('CAPTAIN.RESPONSES.EMPTY_STATE.FEATURE_SPOTLIGHT.NOTE')"
|
:note="$t('CAPTAIN.RESPONSES.EMPTY_STATE.FEATURE_SPOTLIGHT.NOTE')"
|
||||||
|
:hide-actions="!isOnChatwootCloud"
|
||||||
fallback-thumbnail="/assets/images/dashboard/captain/faqs-popover-light.svg"
|
fallback-thumbnail="/assets/images/dashboard/captain/faqs-popover-light.svg"
|
||||||
fallback-thumbnail-dark="/assets/images/dashboard/captain/faqs-popover-dark.svg"
|
fallback-thumbnail-dark="/assets/images/dashboard/captain/faqs-popover-dark.svg"
|
||||||
learn-more-url="https://chwt.app/captain-faq"
|
learn-more-url="https://chwt.app/captain-faq"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
shared: &shared
|
shared: &shared
|
||||||
version: '4.6.0'
|
version: '4.7.0'
|
||||||
|
|
||||||
development:
|
development:
|
||||||
<<: *shared
|
<<: *shared
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@chatwoot/chatwoot",
|
"name": "@chatwoot/chatwoot",
|
||||||
"version": "4.6.0",
|
"version": "4.7.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"eslint": "eslint app/**/*.{js,vue}",
|
"eslint": "eslint app/**/*.{js,vue}",
|
||||||
|
|||||||
Reference in New Issue
Block a user