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 = {