diff --git a/app/javascript/dashboard/components-next/Contacts/ContactsSidebar/ContactHistory.vue b/app/javascript/dashboard/components-next/Contacts/ContactsSidebar/ContactHistory.vue
new file mode 100644
index 000000000..463df9ce8
--- /dev/null
+++ b/app/javascript/dashboard/components-next/Contacts/ContactsSidebar/ContactHistory.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
diff --git a/app/javascript/dashboard/components-next/avatar/Avatar.vue b/app/javascript/dashboard/components-next/avatar/Avatar.vue
index db77cff0c..39614f6b3 100644
--- a/app/javascript/dashboard/components-next/avatar/Avatar.vue
+++ b/app/javascript/dashboard/components-next/avatar/Avatar.vue
@@ -116,10 +116,15 @@ const avatarStyles = computed(() => ({
'--dark-text': getColorsByNameLength.value.darkText,
}));
-const badgeStyles = computed(() => ({
- top: `${props.size - 10}px`,
- left: `${props.size - 10}px`,
-}));
+const badgeStyles = computed(() => {
+ const badgeSize = Math.max(props.size * 0.35, 8); // 35% of avatar size, minimum 8px
+ return {
+ width: `${badgeSize}px`,
+ height: `${badgeSize}px`,
+ top: `${props.size - badgeSize / 1.1}px`,
+ left: `${props.size - badgeSize / 1.1}px`,
+ };
+});
const iconStyles = computed(() => ({
fontSize: `${props.size / 1.6}px`,
@@ -147,7 +152,7 @@ watch(
diff --git a/app/javascript/dashboard/routes/dashboard/contact/pages/ContactsPageRouteView.vue b/app/javascript/dashboard/routes/dashboard/contact/pages/ContactsPageRouteView.vue
index 1af5b5e4c..42942e0c4 100644
--- a/app/javascript/dashboard/routes/dashboard/contact/pages/ContactsPageRouteView.vue
+++ b/app/javascript/dashboard/routes/dashboard/contact/pages/ContactsPageRouteView.vue
@@ -18,7 +18,10 @@ const currentPage = computed(() => Number(meta.value?.currentPage));
const totalItems = computed(() => meta.value?.count);
const fetchContacts = page => {
- store.dispatch('contacts/get', { page });
+ store.dispatch('contacts/get', {
+ page,
+ sortAttr: '-last_activity_at',
+ });
};
onMounted(() => {
diff --git a/app/javascript/dashboard/routes/dashboard/contact/pages/EditContactsPageRouteView.vue b/app/javascript/dashboard/routes/dashboard/contact/pages/EditContactsPageRouteView.vue
index 81ad9df1f..f65e29a15 100644
--- a/app/javascript/dashboard/routes/dashboard/contact/pages/EditContactsPageRouteView.vue
+++ b/app/javascript/dashboard/routes/dashboard/contact/pages/EditContactsPageRouteView.vue
@@ -9,6 +9,8 @@ import Spinner from 'dashboard/components-next/spinner/Spinner.vue';
import ContactDetails from 'dashboard/components-next/Contacts/Pages/ContactDetails.vue';
import TabBar from 'dashboard/components-next/tabbar/TabBar.vue';
import ContactNotes from 'dashboard/components-next/Contacts/ContactsSidebar/ContactNotes.vue';
+// import ContactHistory from 'dashboard/components-next/Contacts/ContactsSidebar/ContactHistory.vue';
+
const store = useStore();
const route = useRoute();
const router = useRouter();
@@ -63,9 +65,15 @@ const fetchContactNotes = () => {
if (contactId) store.dispatch('contactNotes/get', { contactId });
};
+const fetchContactConversations = () => {
+ const { contactId } = route.params;
+ if (contactId) store.dispatch('contactConversations/get', contactId);
+};
+
onMounted(() => {
fetchActiveContact();
fetchContactNotes();
+ fetchContactConversations();
});
@@ -101,6 +109,7 @@ onMounted(() => {
/>
+
diff --git a/app/javascript/dashboard/store/modules/contactConversations.js b/app/javascript/dashboard/store/modules/contactConversations.js
index 795578e63..8b3c84b5d 100644
--- a/app/javascript/dashboard/store/modules/contactConversations.js
+++ b/app/javascript/dashboard/store/modules/contactConversations.js
@@ -1,6 +1,7 @@
import * as types from '../mutation-types';
import ContactAPI from '../../api/contacts';
import ConversationApi from '../../api/conversations';
+import camelcaseKeys from 'camelcase-keys';
export const createMessagePayload = (payload, message) => {
const { content, cc_emails, bcc_emails } = message;
@@ -74,6 +75,10 @@ export const getters = {
getContactConversation: $state => id => {
return $state.records[Number(id)] || [];
},
+ getAllConversationsByContactId: $state => id => {
+ const records = $state.records[Number(id)] || [];
+ return camelcaseKeys(records);
+ },
};
export const actions = {