diff --git a/app/javascript/dashboard/components-next/Contacts/ContactsCard/AddContactNote.vue b/app/javascript/dashboard/components-next/Contacts/ContactsCard/AddContactNote.vue
new file mode 100644
index 000000000..fd2f056a0
--- /dev/null
+++ b/app/javascript/dashboard/components-next/Contacts/ContactsCard/AddContactNote.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+ {{ t('CONTACTS_LAYOUT.CARD.ADD_NOTE.TITLE') }}
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/Contacts/ContactsCard/ContactCardForm.vue b/app/javascript/dashboard/components-next/Contacts/ContactsCard/ContactCardForm.vue
new file mode 100644
index 000000000..1aff304e8
--- /dev/null
+++ b/app/javascript/dashboard/components-next/Contacts/ContactsCard/ContactCardForm.vue
@@ -0,0 +1,319 @@
+
+
+
+
+
+
+
+
+
+ {{ t('CONTACTS_LAYOUT.CARD.EDIT_DETAILS_FORM.TITLE') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('CONTACTS_LAYOUT.CARD.SOCIAL_MEDIA.TITLE') }}
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/Contacts/ContactsCard/ContactDeleteSection.vue b/app/javascript/dashboard/components-next/Contacts/ContactsCard/ContactDeleteSection.vue
deleted file mode 100644
index 041f06410..000000000
--- a/app/javascript/dashboard/components-next/Contacts/ContactsCard/ContactDeleteSection.vue
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-
-
-
-
-
-
-
-
- {{ t('CONTACTS_LAYOUT.CARD.DELETE_CONTACT.MESSAGE') }}
-
-
-
-
-
-
-
-
diff --git a/app/javascript/dashboard/components-next/Contacts/ContactsCard/ContactsCard.vue b/app/javascript/dashboard/components-next/Contacts/ContactsCard/ContactsCard.vue
index 12bed151d..db906a459 100644
--- a/app/javascript/dashboard/components-next/Contacts/ContactsCard/ContactsCard.vue
+++ b/app/javascript/dashboard/components-next/Contacts/ContactsCard/ContactsCard.vue
@@ -2,19 +2,21 @@
import { ref, computed } from 'vue';
import { useI18n } from 'vue-i18n';
-import CardLayout from 'dashboard/components-next/CardLayout.vue';
-import ContactsForm from 'dashboard/components-next/Contacts/ContactsForm/ContactsForm.vue';
+import ContactCardForm from 'dashboard/components-next/Contacts/ContactsCard/ContactCardForm.vue';
import Button from 'dashboard/components-next/button/Button.vue';
import Avatar from 'dashboard/components-next/avatar/Avatar.vue';
import Flag from 'dashboard/components-next/flag/Flag.vue';
-import ContactDeleteSection from 'dashboard/components-next/Contacts/ContactsCard/ContactDeleteSection.vue';
+import Icon from 'dashboard/components-next/icon/Icon.vue';
+import ContactLabels from 'dashboard/components-next/Conversation/ConversationCard/CardLabels.vue';
import Checkbox from 'dashboard/components-next/checkbox/Checkbox.vue';
+import Policy from 'dashboard/components/policy.vue';
import countries from 'shared/constants/countries';
const props = defineProps({
id: { type: Number, required: true },
name: { type: String, default: '' },
email: { type: String, default: '' },
+ labels: { type: Array, default: () => [] },
additionalAttributes: { type: Object, default: () => ({}) },
phoneNumber: { type: String, default: '' },
thumbnail: { type: String, default: '' },
@@ -31,11 +33,13 @@ const emit = defineEmits([
'showContact',
'select',
'avatarHover',
+ 'sendMessage',
+ 'deleteContact',
]);
const { t } = useI18n();
-const contactsFormRef = ref(null);
+const contactCardFormRef = ref(null);
const getInitialContactData = () => ({
id: props.id,
@@ -47,7 +51,7 @@ const getInitialContactData = () => ({
const contactData = ref(getInitialContactData());
-const isFormInvalid = computed(() => contactsFormRef.value?.isFormInvalid);
+const isFormInvalid = computed(() => contactCardFormRef.value?.isFormInvalid);
const countriesMap = computed(() => {
return countries.reduce((acc, country) => {
@@ -75,6 +79,11 @@ const countryDetails = computed(() => {
};
});
+const companyName = computed(() => {
+ const attributes = props.additionalAttributes || {};
+ return attributes.companyName || '';
+});
+
const formattedLocation = computed(() => {
if (!countryDetails.value) return '';
@@ -85,10 +94,11 @@ const formattedLocation = computed(() => {
const handleFormUpdate = updatedData => {
Object.assign(contactData.value, updatedData);
+ emit('updateContact', contactData.value);
};
const handleUpdateContact = () => {
- emit('updateContact', contactData.value);
+ contactCardFormRef.value?.handleUpdate();
};
const onClickExpand = () => {
@@ -98,6 +108,12 @@ const onClickExpand = () => {
const onClickViewDetails = () => emit('showContact', props.id);
+const onClickOpenSendMessage = () => emit('sendMessage', props.id);
+
+const onClickDeleteContact = () => {
+ emit('deleteContact', props.id);
+};
+
const toggleSelect = checked => {
emit('select', checked);
};
@@ -109,30 +125,44 @@ const handleAvatarHover = isHovered => {
-
-
+
+
+
+
+
-
-
-
- {{ name }}
-
-
-
-
- {{ additionalAttributes.companyName }}
-
-
-
+
+
+ {{ name }}
+
+
+
+
+
+
+
-
-
- {{ email }}
-
-
-
-
- {{ phoneNumber }}
-
-
-
-
- {{ formattedLocation }}
-
-
+
+
+
+
+
+
+ {{ companyName }}
+
+
+
+
+
+
+ {{ formattedLocation }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ email }}
+
+
+
+
+
+
+
+
+ {{ phoneNumber }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/Contacts/ContactsHeader/ContactHeader.vue b/app/javascript/dashboard/components-next/Contacts/ContactsHeader/ContactHeader.vue
index b3590b51e..563e19d54 100644
--- a/app/javascript/dashboard/components-next/Contacts/ContactsHeader/ContactHeader.vue
+++ b/app/javascript/dashboard/components-next/Contacts/ContactsHeader/ContactHeader.vue
@@ -34,7 +34,7 @@ const emit = defineEmits([
{{ headerTitle }}
diff --git a/app/javascript/dashboard/components-next/Contacts/ContactsHeader/ContactListHeaderWrapper.vue b/app/javascript/dashboard/components-next/Contacts/ContactsHeader/ContactListHeaderWrapper.vue
index 0b4880264..7dedd9316 100644
--- a/app/javascript/dashboard/components-next/Contacts/ContactsHeader/ContactListHeaderWrapper.vue
+++ b/app/javascript/dashboard/components-next/Contacts/ContactsHeader/ContactListHeaderWrapper.vue
@@ -294,7 +294,7 @@ defineExpose({
>
{
diff --git a/app/javascript/dashboard/components-next/Contacts/ContactsHeader/components/ContactsActiveFiltersPreview.vue b/app/javascript/dashboard/components-next/Contacts/ContactsHeader/components/ContactsActiveFiltersPreview.vue
index 88ee94604..962f65df0 100644
--- a/app/javascript/dashboard/components-next/Contacts/ContactsHeader/components/ContactsActiveFiltersPreview.vue
+++ b/app/javascript/dashboard/components-next/Contacts/ContactsHeader/components/ContactsActiveFiltersPreview.vue
@@ -62,7 +62,7 @@ const activeFilterQueryData = computed(() => {
t('CONTACTS_LAYOUT.FILTER.ACTIVE_FILTERS.CLEAR_FILTERS')
"
:show-clear-button="!hasActiveSegments"
- class="max-w-[60rem] px-6"
+ class="max-w-[105rem] px-6 relative z-20"
@open-filter="emit('openFilter')"
@clear-filters="emit('clearFilters')"
/>
diff --git a/app/javascript/dashboard/components-next/Contacts/ContactsListLayout.vue b/app/javascript/dashboard/components-next/Contacts/ContactsListLayout.vue
index 3985773f7..33ba3024c 100644
--- a/app/javascript/dashboard/components-next/Contacts/ContactsListLayout.vue
+++ b/app/javascript/dashboard/components-next/Contacts/ContactsListLayout.vue
@@ -86,7 +86,7 @@ const openFilter = () => {
@clear-filters="emit('clearFilters')"
/>
-
+
{
-