chore: Clean up

This commit is contained in:
iamsivin
2024-11-12 22:02:26 +05:30
parent 42a9e8dc82
commit 909755c340
7 changed files with 54 additions and 17 deletions
@@ -20,6 +20,10 @@ const attributes = useMapGetter('attributes/getAttributesByModelType');
const contactAttributes = computed(() => attributes.value('contact_attribute'));
const hasContactAttributes = computed(
() => contactAttributes.value?.length > 0
);
// Convert attribute key value from snake_case to camelCase
const toCamelCase = str =>
str.toLowerCase().replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
@@ -79,11 +83,12 @@ const filteredUnusedAttributes = computed(() => {
const unusedAttributesCount = computed(() => unusedAttributes.value?.length);
const hasNoUnusedAttributes = computed(() => unusedAttributesCount.value === 0);
const hasNoUsedAttributes = computed(() => usedAttributes.value.length === 0);
</script>
<template>
<div class="flex flex-col gap-6 px-6 py-6">
<div class="flex flex-col gap-2">
<div v-if="hasContactAttributes" class="flex flex-col gap-6 px-6 py-6">
<div v-if="!hasNoUsedAttributes" class="flex flex-col gap-2">
<ContactCustomAttributeItem
v-for="attribute in usedAttributes"
:key="attribute.id"
@@ -129,4 +134,7 @@ const hasNoUnusedAttributes = computed(() => unusedAttributesCount.value === 0);
</div>
</div>
</div>
<p v-else class="px-6 py-10 text-sm leading-6 text-center text-n-slate-11">
{{ t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.EMPTY_STATE') }}
</p>
</template>
@@ -2,10 +2,12 @@
import { computed } from 'vue';
import { useMapGetter } from 'dashboard/composables/store';
import { useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n';
import Spinner from 'dashboard/components-next/spinner/Spinner.vue';
import ConversationCard from 'dashboard/components-next/Conversation/ConversationCard/ConversationCard.vue';
const { t } = useI18n();
const route = useRoute();
const conversations = useMapGetter(
@@ -32,7 +34,7 @@ const contactConversations = computed(() =>
>
<Spinner />
</div>
<div v-else class="flex flex-col py-6">
<div v-else-if="contactConversations.length > 0" class="flex flex-col py-6">
<div
v-for="conversation in contactConversations"
:key="conversation.id"
@@ -48,4 +50,7 @@ const contactConversations = computed(() =>
/>
</div>
</div>
<p v-else class="px-6 py-10 text-sm leading-6 text-center text-n-slate-11">
{{ t('CONTACTS_LAYOUT.SIDEBAR.HISTORY.EMPTY_STATE') }}
</p>
</template>
@@ -87,7 +87,7 @@ useKeyboardEvents(keyboardEvents);
>
<Spinner />
</div>
<div v-else>
<div v-else-if="notes.length > 0">
<div
v-for="note in notes"
:key="note.id"
@@ -128,5 +128,8 @@ useKeyboardEvents(keyboardEvents);
/>
</div>
</div>
<p v-else class="px-6 py-6 text-sm leading-6 text-center text-n-slate-11">
{{ t('CONTACTS_LAYOUT.SIDEBAR.NOTES.EMPTY_STATE') }}
</p>
</div>
</template>
@@ -77,7 +77,7 @@ const handleInputUpdate = async () => {
<template>
<div
class="flex items-center w-full gap-2"
class="flex items-center w-full min-w-0 gap-2"
:class="{
'justify-start': isEditingView,
'justify-end': !isEditingView,
@@ -85,11 +85,11 @@ const handleInputUpdate = async () => {
>
<span
v-if="!isEditingValue"
class="text-sm"
class="min-w-0 text-sm"
:class="{
'cursor-pointer text-n-slate-11 hover:text-n-slate-12 py-2 select-none font-medium':
!isEditingView,
'text-n-slate-12': isEditingView,
'text-n-slate-12 truncate flex-1': isEditingView,
}"
@click="toggleEditValue(!isEditingView)"
>
@@ -42,7 +42,7 @@ const handleAttributeAction = async action => {
<template>
<div
class="flex items-center w-full gap-2"
class="flex items-center w-full min-w-0 gap-2"
:class="{
'justify-start': isEditingView,
'justify-end': !isEditingView,
@@ -53,11 +53,11 @@ const handleAttributeAction = async action => {
class="relative flex items-center"
>
<span
class="text-sm"
class="min-w-0 text-sm"
:class="{
'cursor-pointer text-n-slate-11 hover:text-n-slate-12 py-2 select-none font-medium':
!isEditingView,
'text-n-slate-12': isEditingView,
'text-n-slate-12 truncate flex-1': isEditingView,
}"
@click="toggleAttributeListDropdown(!props.isEditingView)"
>
@@ -115,7 +115,7 @@ const handleInputUpdate = async () => {
<template>
<div
class="flex items-center w-full gap-2"
class="flex items-center w-full min-w-0 gap-2"
:class="{
'justify-start': isEditingView,
'justify-end': !isEditingView,
@@ -123,17 +123,33 @@ const handleInputUpdate = async () => {
>
<span
v-if="!isEditingValue"
class="text-sm"
class="min-w-0 text-sm"
:class="{
'cursor-pointer text-n-slate-11 hover:text-n-slate-12 py-2 select-none font-medium':
!isEditingView,
'text-n-slate-12': isEditingView,
'text-n-slate-12 truncate flex-1':
isEditingView && !isAttributeTypeLink,
'truncate flex-1 hover:text-n-brand text-n-blue-text':
isEditingView && isAttributeTypeLink,
}"
@click="toggleEditValue(!isEditingView)"
>
{{
attribute.value || t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.TRIGGER.INPUT')
}}
<a
v-if="isAttributeTypeLink && attribute.value"
:href="attribute.value"
target="_blank"
rel="noopener noreferrer"
class="hover:underline"
@click.stop
>
{{ attribute.value }}
</a>
<template v-else>
{{
attribute.value ||
t('CONTACTS_LAYOUT.SIDEBAR.ATTRIBUTES.TRIGGER.INPUT')
}}
</template>
</span>
<div
@@ -536,7 +536,11 @@
"PLACEHOLDER": "Add a note",
"WROTE": "wrote",
"YOU": "You",
"SAVE": "Save note"
"SAVE": "Save note",
"EMPTY_STATE": "There are no notes associated to this contact. You can add a note by typing in the box above."
},
"HISTORY": {
"EMPTY_STATE": "There are no previous conversations associated to this contact"
},
"MERGE": {
"TITLE": "Merge contact",
@@ -561,6 +565,7 @@
"ATTRIBUTES": {
"SEARCH_PLACEHOLDER": "Search for attributes",
"UNUSED_ATTRIBUTES": "{count} Used attribute | {count} Unused attributes",
"EMPTY_STATE": "There are no contact custom attributes available in this account. You can create a custom attribute in settings.",
"YES": "Yes",
"NO": "No",
"TRIGGER": {