{{ t('CONTACTS_LAYOUT.CARD.SOCIAL_MEDIA.TITLE') }}
diff --git a/app/javascript/dashboard/components-next/Contacts/ContactsLayout.vue b/app/javascript/dashboard/components-next/Contacts/ContactsLayout.vue
index e17799acb..db9da2155 100644
--- a/app/javascript/dashboard/components-next/Contacts/ContactsLayout.vue
+++ b/app/javascript/dashboard/components-next/Contacts/ContactsLayout.vue
@@ -1,10 +1,14 @@
+
+
+
+
+
+
+
+ {{ selectedContact.name }}
+
+
+ {{ createdAt }} • {{ lastActivityAt }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/breadcrumb/Breadcrumb.vue b/app/javascript/dashboard/components-next/breadcrumb/Breadcrumb.vue
index e87728d1e..bb848c62b 100644
--- a/app/javascript/dashboard/components-next/breadcrumb/Breadcrumb.vue
+++ b/app/javascript/dashboard/components-next/breadcrumb/Breadcrumb.vue
@@ -8,14 +8,6 @@ defineProps({
items: {
type: Array,
required: true,
- validator: value => {
- return value.every(
- item =>
- typeof item.label === 'string' &&
- (item.link === undefined || typeof item.link === 'string') &&
- (item.count === undefined || typeof item.count === 'number')
- );
- },
},
});
diff --git a/app/javascript/dashboard/i18n/locale/en/contact.json b/app/javascript/dashboard/i18n/locale/en/contact.json
index 243f9622e..2ccaef9b4 100644
--- a/app/javascript/dashboard/i18n/locale/en/contact.json
+++ b/app/javascript/dashboard/i18n/locale/en/contact.json
@@ -391,7 +391,10 @@
"HEADER": {
"TITLE": "Contacts",
"SEARCH_PLACEHOLDER": "Search...",
- "MESSAGE_BUTTON": "Message"
+ "MESSAGE_BUTTON": "Message",
+ "BREADCRUMB": {
+ "CONTACTS": "Contacts"
+ }
},
"CARD": {
"OF": "of",
@@ -445,6 +448,20 @@
}
}
}
+ },
+ "DETAILS": {
+ "TAG_BUTTON": "tag",
+ "MERGE_CONTACT": "Merge contact",
+ "DELETE_CONTACT": "Delete contact",
+ "DELETE_DIALOG": {
+ "TITLE": "Confirm Deletion",
+ "DESCRIPTION": "Are you sure you want to delete this {contactName} contact?",
+ "CONFIRM": "Yes, Delete",
+ "API": {
+ "SUCCESS_MESSAGE": "Contact deleted successfully",
+ "ERROR_MESSAGE": "Could not delete contact. Please try again later."
+ }
+ }
}
}
}
diff --git a/app/javascript/dashboard/routes/dashboard/contact/contact.routes.js b/app/javascript/dashboard/routes/dashboard/contact/contact.routes.js
index 71f6a008b..42f689092 100644
--- a/app/javascript/dashboard/routes/dashboard/contact/contact.routes.js
+++ b/app/javascript/dashboard/routes/dashboard/contact/contact.routes.js
@@ -1,21 +1,25 @@
import { frontendURL } from 'dashboard/helper/URLHelper.js';
import ContactsPageRouteView from './pages/ContactsPageRouteView.vue';
+import EditContactsPageRouteView from './pages/EditContactsPageRouteView.vue';
const contactsRoutes = {
routes: [
{
path: frontendURL('accounts/:accountId/contacts-new'),
component: ContactsPageRouteView,
- children: [
- {
- path: 'ongoing',
- name: 'contacts_dashboard_index',
- meta: {
- permissions: ['administrator', 'agent', 'contact_manage'],
- },
- },
- ],
+ name: 'contacts_dashboard_index',
+ meta: {
+ permissions: ['administrator', 'agent', 'contact_manage'],
+ },
+ },
+ {
+ path: frontendURL('accounts/:accountId/contacts-new/:contactId'),
+ component: EditContactsPageRouteView,
+ name: 'contacts_dashboard_edit_index',
+ meta: {
+ permissions: ['administrator', 'agent', 'contact_manage'],
+ },
},
],
};
diff --git a/app/javascript/dashboard/routes/dashboard/contact/pages/ContactsPageRouteView.vue b/app/javascript/dashboard/routes/dashboard/contact/pages/ContactsPageRouteView.vue
index 635542a48..1af5b5e4c 100644
--- a/app/javascript/dashboard/routes/dashboard/contact/pages/ContactsPageRouteView.vue
+++ b/app/javascript/dashboard/routes/dashboard/contact/pages/ContactsPageRouteView.vue
@@ -4,6 +4,7 @@ import { useStore, useMapGetter } from 'dashboard/composables/store';
import ContactsLayout from 'dashboard/components-next/Contacts/ContactsLayout.vue';
import ContactsList from 'dashboard/components-next/Contacts/Pages/ContactsList.vue';
+import Spinner from 'dashboard/components-next/spinner/Spinner.vue';
const store = useStore();
@@ -11,6 +12,8 @@ const contacts = useMapGetter('contacts/getContacts');
const uiFlags = useMapGetter('contacts/getUIFlags');
const meta = useMapGetter('contacts/getMeta');
+const isFetchingList = computed(() => uiFlags.value.isFetching);
+
const currentPage = computed(() => Number(meta.value?.currentPage));
const totalItems = computed(() => meta.value?.count);
@@ -38,7 +41,13 @@ const updateCurrentPage = page => {
:total-items="totalItems"
@update:current-page="updateCurrentPage"
>
-
+
+
+
+
diff --git a/app/javascript/dashboard/routes/dashboard/contact/pages/EditContactsPageRouteView.vue b/app/javascript/dashboard/routes/dashboard/contact/pages/EditContactsPageRouteView.vue
new file mode 100644
index 000000000..559c088a9
--- /dev/null
+++ b/app/javascript/dashboard/routes/dashboard/contact/pages/EditContactsPageRouteView.vue
@@ -0,0 +1,62 @@
+
+
+