diff --git a/app/javascript/dashboard/components-next/Contacts/ContactsForm/ComposeConversation.vue b/app/javascript/dashboard/components-next/Contacts/ContactsForm/ComposeConversation.vue
deleted file mode 100644
index 412e296a6..000000000
--- a/app/javascript/dashboard/components-next/Contacts/ContactsForm/ComposeConversation.vue
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/app/javascript/dashboard/components-next/Contacts/ContactsLayout.vue b/app/javascript/dashboard/components-next/Contacts/ContactsLayout.vue
index f6f548933..1ffbf6e25 100644
--- a/app/javascript/dashboard/components-next/Contacts/ContactsLayout.vue
+++ b/app/javascript/dashboard/components-next/Contacts/ContactsLayout.vue
@@ -9,7 +9,7 @@ import Icon from 'dashboard/components-next/icon/Icon.vue';
import PaginationFooter from 'dashboard/components-next/pagination/PaginationFooter.vue';
import Breadcrumb from 'dashboard/components-next/breadcrumb/Breadcrumb.vue';
import ContactActions from 'dashboard/components-next/Contacts/ContactHeader/ContactActions.vue';
-import ComposeConversation from 'dashboard/components-next/Contacts/ContactsForm/ComposeConversation.vue';
+import ComposeConversation from 'dashboard/components-next/NewConversation/ComposeConversation.vue';
const props = defineProps({
searchValue: {
diff --git a/app/javascript/dashboard/components-next/NewConversation/ComposeConversation.vue b/app/javascript/dashboard/components-next/NewConversation/ComposeConversation.vue
new file mode 100644
index 000000000..bb30a782b
--- /dev/null
+++ b/app/javascript/dashboard/components-next/NewConversation/ComposeConversation.vue
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/NewConversation/ComposeNewConversation.vue b/app/javascript/dashboard/components-next/NewConversation/components/ComposeNewConversationForm.vue
similarity index 73%
rename from app/javascript/dashboard/components-next/NewConversation/ComposeNewConversation.vue
rename to app/javascript/dashboard/components-next/NewConversation/components/ComposeNewConversationForm.vue
index 552553f74..4f260fe2a 100644
--- a/app/javascript/dashboard/components-next/NewConversation/ComposeNewConversation.vue
+++ b/app/javascript/dashboard/components-next/NewConversation/components/ComposeNewConversationForm.vue
@@ -1,5 +1,5 @@
diff --git a/app/javascript/dashboard/components-next/NewConversation/components/ContactSelector.vue b/app/javascript/dashboard/components-next/NewConversation/components/ContactSelector.vue
index e09741900..7d6bc9764 100644
--- a/app/javascript/dashboard/components-next/NewConversation/components/ContactSelector.vue
+++ b/app/javascript/dashboard/components-next/NewConversation/components/ContactSelector.vue
@@ -112,6 +112,7 @@ const selectedContactLabel = computed(() => {
:show-dropdown="showContactsDropdown"
:is-loading="isLoading"
:disabled="contactableInboxesList?.length > 0 && showInboxesDropdown"
+ allow-create
type="email"
class="flex-1 min-h-7"
:class="
diff --git a/app/javascript/dashboard/components-next/taginput/TagInput.vue b/app/javascript/dashboard/components-next/taginput/TagInput.vue
index 388b44541..b48823d94 100644
--- a/app/javascript/dashboard/components-next/taginput/TagInput.vue
+++ b/app/javascript/dashboard/components-next/taginput/TagInput.vue
@@ -26,6 +26,7 @@ const props = defineProps({
validator: value => ['single', 'multiple'].includes(value),
},
focusOnMount: { type: Boolean, default: false },
+ allowCreate: { type: Boolean, default: false },
});
const emit = defineEmits([
@@ -99,6 +100,16 @@ const filteredMenuItems = computed(() => {
return availableMenuItems;
});
+const emitDataOnAdd = emailValue => {
+ const matchingMenuItem = props.menuItems.find(
+ item => item.email === emailValue
+ );
+
+ return matchingMenuItem
+ ? emit('add', { email: emailValue, ...matchingMenuItem })
+ : emit('add', { value: emailValue, action: 'create' });
+};
+
const addTag = async () => {
const trimmedTag = newTag.value.trim();
if (!trimmedTag) return;
@@ -108,7 +119,10 @@ const addTag = async () => {
return;
}
- if (props.type === 'email' && !(await v$.value.$validate())) return;
+ if (props.type === 'email' && props.allowCreate) {
+ if (!(await v$.value.$validate())) return;
+ emitDataOnAdd(trimmedTag);
+ }
tags.value.push(trimmedTag);
newTag.value = '';
@@ -123,23 +137,18 @@ const removeTag = index => {
};
const handleDropdownAction = async ({ email: emailAddress, ...rest }) => {
- if (!emailAddress) {
- emit('add', { email: emailAddress, ...rest });
- return;
- }
-
if (props.mode === MODE.SINGLE && tags.value.length >= 1) return;
- if (props.type === 'email') {
+ if (props.type === 'email' && props.showDropdown) {
newTag.value = emailAddress;
if (!(await v$.value.$validate())) return;
+ emit('add', { email: emailAddress, ...rest });
}
tags.value.push(emailAddress);
newTag.value = '';
emit('update:modelValue', tags.value);
tagInputRef.value?.focus();
- emit('add', { email: emailAddress, ...rest });
};
const handleFocus = () => {