diff --git a/app/javascript/dashboard/components/widgets/conversation/ContentTemplates/ContentTemplatesModal.vue b/app/javascript/dashboard/components/widgets/conversation/ContentTemplates/ContentTemplatesModal.vue
new file mode 100644
index 000000000..7ae95fe59
--- /dev/null
+++ b/app/javascript/dashboard/components/widgets/conversation/ContentTemplates/ContentTemplatesModal.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components/widgets/conversation/ContentTemplates/ContentTemplatesPicker.vue b/app/javascript/dashboard/components/widgets/conversation/ContentTemplates/ContentTemplatesPicker.vue
new file mode 100644
index 000000000..89d82fe0c
--- /dev/null
+++ b/app/javascript/dashboard/components/widgets/conversation/ContentTemplates/ContentTemplatesPicker.vue
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('CONTENT_TEMPLATES.PICKER.NO_TEMPLATES_FOUND') }}
+ {{ query }}
+
+
+
+
+ {{ t('CONTENT_TEMPLATES.PICKER.NO_TEMPLATES_AVAILABLE') }}
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components/widgets/conversation/ConversationCard.vue b/app/javascript/dashboard/components/widgets/conversation/ConversationCard.vue
index cfac915bf..5cc59f8c8 100644
--- a/app/javascript/dashboard/components/widgets/conversation/ConversationCard.vue
+++ b/app/javascript/dashboard/components/widgets/conversation/ConversationCard.vue
@@ -3,6 +3,7 @@ import { computed, ref } from 'vue';
import { useRouter } from 'vue-router';
import { useStore, useMapGetter } from 'dashboard/composables/store';
import { getLastMessage } from 'dashboard/helper/conversationHelper';
+import { useVoiceCallStatus } from 'dashboard/composables/useVoiceCallStatus';
import { frontendURL, conversationUrl } from 'dashboard/helper/URLHelper';
import Avatar from 'next/avatar/Avatar.vue';
import MessagePreview from './MessagePreview.vue';
@@ -82,6 +83,16 @@ const isInboxNameVisible = computed(() => !activeInbox.value);
const lastMessageInChat = computed(() => getLastMessage(props.chat));
+const callStatus = computed(
+ () => props.chat.additional_attributes?.call_status
+);
+const callDirection = computed(
+ () => props.chat.additional_attributes?.call_direction
+);
+
+const { labelKey: voiceLabelKey, listIconColor: voiceIconColor } =
+ useVoiceCallStatus(callStatus, callDirection);
+
const inboxId = computed(() => props.chat.inbox_id);
const inbox = computed(() => {
@@ -250,7 +261,6 @@ const deleteConversation = () => {
:src="currentContact.thumbnail"
:size="32"
:status="currentContact.availability_status"
- :inbox="inbox"
:class="!showInboxName ? 'mt-4' : 'mt-8'"
hide-offline-status
rounded-full
@@ -307,14 +317,30 @@ const deleteConversation = () => {
>
{{ currentContact.name }}
+
+
+
+ {{ $t(voiceLabelKey) }}
+
+
diff --git a/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue b/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue
index 1f850cd74..3cb46c05f 100644
--- a/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue
+++ b/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue
@@ -4,6 +4,7 @@ import { ref, provide } from 'vue';
import { useConfig } from 'dashboard/composables/useConfig';
import { useKeyboardEvents } from 'dashboard/composables/useKeyboardEvents';
import { useAI } from 'dashboard/composables/useAI';
+import { useSnakeCase } from 'dashboard/composables/useTransformKeys';
// components
import ReplyBox from './ReplyBox.vue';
@@ -437,6 +438,11 @@ export default {
makeMessagesRead() {
this.$store.dispatch('markMessagesRead', { id: this.currentChat.id });
},
+ async handleMessageRetry(message) {
+ if (!message) return;
+ const payload = useSnakeCase(message);
+ await this.$store.dispatch('sendMessageWithData', payload);
+ },
},
};
@@ -465,6 +471,7 @@ export default {
:is-an-email-channel="isAnEmailChannel"
:inbox-supports-reply-to="inboxSupportsReplyTo"
:messages="getMessages"
+ @retry="handleMessageRetry"
>
diff --git a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue
index e5243ac04..4e3124a3c 100644
--- a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue
+++ b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue
@@ -15,7 +15,7 @@ import ReplyEmailHead from './ReplyEmailHead.vue';
import ReplyBottomPanel from 'dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue';
import ArticleSearchPopover from 'dashboard/routes/dashboard/helpcenter/components/ArticleSearch/SearchPopover.vue';
import MessageSignatureMissingAlert from './MessageSignatureMissingAlert.vue';
-import Banner from 'dashboard/components/ui/Banner.vue';
+import ReplyBoxBanner from './ReplyBoxBanner.vue';
import { REPLY_EDITOR_MODES } from 'dashboard/components/widgets/WootWriter/constants';
import WootMessageEditor from 'dashboard/components/widgets/WootWriter/Editor.vue';
import AudioRecorder from 'dashboard/components/widgets/WootWriter/AudioRecorder.vue';
@@ -27,6 +27,7 @@ import {
replaceVariablesInMessage,
} from '@chatwoot/utils';
import WhatsappTemplates from './WhatsappTemplates/Modal.vue';
+import ContentTemplates from './ContentTemplates/ContentTemplatesModal.vue';
import { MESSAGE_MAX_LENGTH } from 'shared/helpers/MessageTypeHelper';
import inboxMixin, { INBOX_FEATURES } from 'shared/mixins/inboxMixin';
import { trimContent, debounce, getRecipients } from '@chatwoot/utils';
@@ -52,8 +53,8 @@ export default {
ArticleSearchPopover,
AttachmentPreview,
AudioRecorder,
- Banner,
CannedResponse,
+ ReplyBoxBanner,
EmojiInput,
MessageSignatureMissingAlert,
ReplyBottomPanel,
@@ -61,6 +62,7 @@ export default {
ReplyToMessage,
ReplyTopPanel,
ResizableTextArea,
+ ContentTemplates,
WhatsappTemplates,
WootMessageEditor,
},
@@ -109,6 +111,7 @@ export default {
toEmails: '',
doAutoSaveDraft: () => {},
showWhatsAppTemplatesModal: false,
+ showContentTemplatesModal: false,
updateEditorSelectionWith: '',
undefinedVariableMessage: '',
showMentions: false,
@@ -155,44 +158,21 @@ export default {
return false;
},
- assignedAgent: {
- get() {
- return this.currentChat.meta.assignee;
- },
- set(agent) {
- const agentId = agent ? agent.id : 0;
- this.$store.dispatch('setCurrentChatAssignee', agent);
- this.$store
- .dispatch('assignAgent', {
- conversationId: this.currentChat.id,
- agentId,
- })
- .then(() => {
- useAlert(this.$t('CONVERSATION.CHANGE_AGENT'));
- });
- },
- },
- showSelfAssignBanner() {
- if (this.message !== '' && !this.isOnPrivateNote) {
- if (!this.assignedAgent) {
- return true;
- }
- if (this.assignedAgent.id !== this.currentUser.id) {
- return true;
- }
- }
-
- return false;
- },
showWhatsappTemplates() {
return this.isAWhatsAppCloudChannel && !this.isPrivate;
},
+ showContentTemplates() {
+ return this.isATwilioWhatsAppChannel && !this.isPrivate;
+ },
isPrivate() {
if (this.currentChat.can_reply || this.isAWhatsAppChannel) {
return this.isOnPrivateNote;
}
return true;
},
+ isReplyRestricted() {
+ return !this.currentChat?.can_reply && !this.isAWhatsAppChannel;
+ },
inboxId() {
return this.currentChat.inbox_id;
},
@@ -659,28 +639,11 @@ export default {
hideWhatsappTemplatesModal() {
this.showWhatsAppTemplatesModal = false;
},
- onClickSelfAssign() {
- const {
- account_id,
- availability_status,
- available_name,
- email,
- id,
- name,
- role,
- avatar_url,
- } = this.currentUser;
- const selfAssign = {
- account_id,
- availability_status,
- available_name,
- email,
- id,
- name,
- role,
- thumbnail: avatar_url,
- };
- this.assignedAgent = selfAssign;
+ openContentTemplateModal() {
+ this.showContentTemplatesModal = true;
+ },
+ hideContentTemplatesModal() {
+ this.showContentTemplatesModal = false;
},
confirmOnSendReply() {
if (this.isReplyButtonDisabled) {
@@ -774,6 +737,13 @@ export default {
});
this.hideWhatsappTemplatesModal();
},
+ async onSendContentTemplateReply(messagePayload) {
+ this.sendMessage({
+ conversationId: this.currentChat.id,
+ ...messagePayload,
+ });
+ this.hideContentTemplatesModal();
+ },
replaceText(message) {
if (this.sendWithSignature && !this.private) {
// if signature is enabled, append it to the message
@@ -793,6 +763,10 @@ export default {
}, 100);
},
setReplyMode(mode = REPLY_EDITOR_MODES.REPLY) {
+ // Clear attachments when switching between private note and reply modes
+ // This is to prevent from breaking the upload rules
+ if (this.attachedFiles.length > 0) this.attachedFiles = [];
+
const { can_reply: canReply } = this.currentChat;
this.$store.dispatch('draftMessages/setReplyEditorMode', {
mode,
@@ -1095,19 +1069,11 @@ export default {
-
+
+
+
+import { computed } from 'vue';
+import { useStore } from 'vuex';
+import { useMapGetter } from 'dashboard/composables/store';
+import { useAlert } from 'dashboard/composables';
+import { useI18n } from 'vue-i18n';
+import wootConstants from 'dashboard/constants/globals';
+
+import Banner from 'dashboard/components/ui/Banner.vue';
+
+const props = defineProps({
+ message: {
+ type: String,
+ default: '',
+ },
+ isOnPrivateNote: {
+ type: Boolean,
+ default: false,
+ },
+});
+
+const store = useStore();
+const { t } = useI18n();
+
+const currentChat = useMapGetter('getSelectedChat');
+const currentUser = useMapGetter('getCurrentUser');
+
+const assignedAgent = computed({
+ get() {
+ return currentChat.value?.meta?.assignee;
+ },
+ set(agent) {
+ const agentId = agent ? agent.id : 0;
+ store.dispatch('setCurrentChatAssignee', agent);
+ store.dispatch('assignAgent', {
+ conversationId: currentChat.value?.id,
+ agentId,
+ });
+ },
+});
+
+const isUserTyping = computed(
+ () => props.message !== '' && !props.isOnPrivateNote
+);
+const isUnassigned = computed(() => !assignedAgent.value);
+const isAssignedToOtherAgent = computed(
+ () => assignedAgent.value?.id !== currentUser.value?.id
+);
+
+const showSelfAssignBanner = computed(() => {
+ return (
+ isUserTyping.value && (isUnassigned.value || isAssignedToOtherAgent.value)
+ );
+});
+
+const showBotHandoffBanner = computed(
+ () =>
+ isUserTyping.value &&
+ currentChat.value?.status === wootConstants.STATUS_TYPE.PENDING
+);
+
+const botHandoffActionLabel = computed(() => {
+ return assignedAgent.value?.id === currentUser.value?.id
+ ? t('CONVERSATION.BOT_HANDOFF_REOPEN_ACTION')
+ : t('CONVERSATION.BOT_HANDOFF_ACTION');
+});
+
+const selfAssignConversation = async () => {
+ const { avatar_url, ...rest } = currentUser.value || {};
+ assignedAgent.value = { ...rest, thumbnail: avatar_url };
+};
+
+const needsAssignmentToCurrentUser = computed(() => {
+ return isUnassigned.value || isAssignedToOtherAgent.value;
+});
+
+const onClickSelfAssign = async () => {
+ try {
+ await selfAssignConversation();
+ useAlert(t('CONVERSATION.CHANGE_AGENT'));
+ } catch (error) {
+ useAlert(t('CONVERSATION.CHANGE_AGENT_FAILED'));
+ }
+};
+
+const reopenConversation = async () => {
+ await store.dispatch('toggleStatus', {
+ conversationId: currentChat.value?.id,
+ status: wootConstants.STATUS_TYPE.OPEN,
+ });
+};
+
+const onClickBotHandoff = async () => {
+ try {
+ await reopenConversation();
+
+ if (needsAssignmentToCurrentUser.value) {
+ await selfAssignConversation();
+ }
+
+ useAlert(t('CONVERSATION.BOT_HANDOFF_SUCCESS'));
+ } catch (error) {
+ useAlert(t('CONVERSATION.BOT_HANDOFF_ERROR'));
+ }
+};
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components/widgets/conversation/WhatsappTemplates/Modal.vue b/app/javascript/dashboard/components/widgets/conversation/WhatsappTemplates/Modal.vue
index bddd8884e..ad3464854 100644
--- a/app/javascript/dashboard/components/widgets/conversation/WhatsappTemplates/Modal.vue
+++ b/app/javascript/dashboard/components/widgets/conversation/WhatsappTemplates/Modal.vue
@@ -1,10 +1,10 @@
diff --git a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/Index.vue b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/Index.vue
new file mode 100644
index 000000000..ab9fcf17e
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/Index.vue
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/assignmentPolicy.routes.js b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/assignmentPolicy.routes.js
new file mode 100644
index 000000000..d09871674
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/assignmentPolicy.routes.js
@@ -0,0 +1,90 @@
+import { FEATURE_FLAGS } from '../../../../featureFlags';
+import { frontendURL } from '../../../../helper/URLHelper';
+import SettingsWrapper from '../SettingsWrapper.vue';
+import AssignmentPolicyIndex from './Index.vue';
+import AgentAssignmentIndex from './pages/AgentAssignmentIndexPage.vue';
+import AgentAssignmentCreate from './pages/AgentAssignmentCreatePage.vue';
+import AgentAssignmentEdit from './pages/AgentAssignmentEditPage.vue';
+import AgentCapacityIndex from './pages/AgentCapacityIndexPage.vue';
+import AgentCapacityCreate from './pages/AgentCapacityCreatePage.vue';
+import AgentCapacityEdit from './pages/AgentCapacityEditPage.vue';
+
+export default {
+ routes: [
+ {
+ path: frontendURL('accounts/:accountId/settings/assignment-policy'),
+ component: SettingsWrapper,
+ children: [
+ {
+ path: '',
+ redirect: to => {
+ return { name: 'assignment_policy_index', params: to.params };
+ },
+ },
+ {
+ path: 'index',
+ name: 'assignment_policy_index',
+ component: AssignmentPolicyIndex,
+ meta: {
+ featureFlag: FEATURE_FLAGS.ASSIGNMENT_V2,
+ permissions: ['administrator'],
+ },
+ },
+ {
+ path: 'assignment',
+ name: 'agent_assignment_policy_index',
+ component: AgentAssignmentIndex,
+ meta: {
+ featureFlag: FEATURE_FLAGS.ASSIGNMENT_V2,
+ permissions: ['administrator'],
+ },
+ },
+ {
+ path: 'assignment/create',
+ name: 'agent_assignment_policy_create',
+ component: AgentAssignmentCreate,
+ meta: {
+ featureFlag: FEATURE_FLAGS.ASSIGNMENT_V2,
+ permissions: ['administrator'],
+ },
+ },
+ {
+ path: 'assignment/edit/:id',
+ name: 'agent_assignment_policy_edit',
+ component: AgentAssignmentEdit,
+ meta: {
+ featureFlag: FEATURE_FLAGS.ASSIGNMENT_V2,
+ permissions: ['administrator'],
+ },
+ },
+ {
+ path: 'capacity',
+ name: 'agent_capacity_policy_index',
+ component: AgentCapacityIndex,
+ meta: {
+ featureFlag: FEATURE_FLAGS.ASSIGNMENT_V2,
+ permissions: ['administrator'],
+ },
+ },
+ {
+ path: 'capacity/create',
+ name: 'agent_capacity_policy_create',
+ component: AgentCapacityCreate,
+ meta: {
+ featureFlag: FEATURE_FLAGS.ASSIGNMENT_V2,
+ permissions: ['administrator'],
+ },
+ },
+ {
+ path: 'capacity/edit/:id',
+ name: 'agent_capacity_policy_edit',
+ component: AgentCapacityEdit,
+ meta: {
+ featureFlag: FEATURE_FLAGS.ASSIGNMENT_V2,
+ permissions: ['administrator'],
+ },
+ },
+ ],
+ },
+ ],
+};
diff --git a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/constants.js b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/constants.js
new file mode 100644
index 000000000..350faa60c
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/constants.js
@@ -0,0 +1,17 @@
+// Assignment order types
+export const ROUND_ROBIN = 'round_robin';
+export const BALANCED = 'balanced';
+
+// Assignment priority types
+export const EARLIEST_CREATED = 'earliest_created';
+export const LONGEST_WAITING = 'longest_waiting';
+
+// Default values for fair distribution
+export const DEFAULT_FAIR_DISTRIBUTION_LIMIT = 100;
+export const DEFAULT_FAIR_DISTRIBUTION_WINDOW = 3600;
+
+// Options groupings
+export const OPTIONS = {
+ ORDER: [ROUND_ROBIN, BALANCED],
+ PRIORITY: [EARLIEST_CREATED, LONGEST_WAITING],
+};
diff --git a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentAssignmentCreatePage.vue b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentAssignmentCreatePage.vue
new file mode 100644
index 000000000..3c68d9585
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentAssignmentCreatePage.vue
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentAssignmentEditPage.vue b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentAssignmentEditPage.vue
new file mode 100644
index 000000000..c54f912d4
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentAssignmentEditPage.vue
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentAssignmentIndexPage.vue b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentAssignmentIndexPage.vue
new file mode 100644
index 000000000..be5297a16
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentAssignmentIndexPage.vue
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentCapacityCreatePage.vue b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentCapacityCreatePage.vue
new file mode 100644
index 000000000..db184b4ee
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentCapacityCreatePage.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentCapacityEditPage.vue b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentCapacityEditPage.vue
new file mode 100644
index 000000000..41e277c2d
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentCapacityEditPage.vue
@@ -0,0 +1,192 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentCapacityIndexPage.vue b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentCapacityIndexPage.vue
new file mode 100644
index 000000000..fb94e5fb4
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/AgentCapacityIndexPage.vue
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/components/AgentAssignmentPolicyForm.vue b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/components/AgentAssignmentPolicyForm.vue
new file mode 100644
index 000000000..84a19f749
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/components/AgentAssignmentPolicyForm.vue
@@ -0,0 +1,257 @@
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/components/AgentCapacityPolicyForm.vue b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/components/AgentCapacityPolicyForm.vue
new file mode 100644
index 000000000..24c4f0a38
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/components/AgentCapacityPolicyForm.vue
@@ -0,0 +1,214 @@
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/components/ConfirmDeletePolicyDialog.vue b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/components/ConfirmDeletePolicyDialog.vue
new file mode 100644
index 000000000..2dd57f713
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/components/ConfirmDeletePolicyDialog.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/components/ConfirmInboxDialog.vue b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/components/ConfirmInboxDialog.vue
new file mode 100644
index 000000000..af49a29af
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/settings/assignmentPolicy/pages/components/ConfirmInboxDialog.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/settings/automation/constants.js b/app/javascript/dashboard/routes/dashboard/settings/automation/constants.js
index 0a6905039..bc767040b 100644
--- a/app/javascript/dashboard/routes/dashboard/settings/automation/constants.js
+++ b/app/javascript/dashboard/routes/dashboard/settings/automation/constants.js
@@ -68,6 +68,12 @@ export const AUTOMATIONS = {
inputType: 'plain_text',
filterOperators: OPERATOR_TYPES_6,
},
+ {
+ key: 'labels',
+ name: 'LABELS',
+ inputType: 'multi_select',
+ filterOperators: OPERATOR_TYPES_3,
+ },
],
actions: [
{
@@ -186,6 +192,12 @@ export const AUTOMATIONS = {
inputType: 'multi_select',
filterOperators: OPERATOR_TYPES_1,
},
+ {
+ key: 'labels',
+ name: 'LABELS',
+ inputType: 'multi_select',
+ filterOperators: OPERATOR_TYPES_3,
+ },
],
actions: [
{
@@ -308,6 +320,12 @@ export const AUTOMATIONS = {
inputType: 'multi_select',
filterOperators: OPERATOR_TYPES_1,
},
+ {
+ key: 'labels',
+ name: 'LABELS',
+ inputType: 'multi_select',
+ filterOperators: OPERATOR_TYPES_3,
+ },
],
actions: [
{
@@ -424,6 +442,12 @@ export const AUTOMATIONS = {
inputType: 'multi_select',
filterOperators: OPERATOR_TYPES_1,
},
+ {
+ key: 'labels',
+ name: 'LABELS',
+ inputType: 'multi_select',
+ filterOperators: OPERATOR_TYPES_3,
+ },
],
actions: [
{
diff --git a/app/javascript/dashboard/routes/dashboard/settings/inbox/AddAgents.vue b/app/javascript/dashboard/routes/dashboard/settings/inbox/AddAgents.vue
index 17752dfd2..c05c6724b 100644
--- a/app/javascript/dashboard/routes/dashboard/settings/inbox/AddAgents.vue
+++ b/app/javascript/dashboard/routes/dashboard/settings/inbox/AddAgents.vue
@@ -63,9 +63,7 @@ export default {
-