accept string and date in toLocalDate() util
This commit is contained in:
@@ -18,6 +18,7 @@ import Fuse from 'fuse.js';
|
||||
import { getInitials } from '@/composables/useInitials';
|
||||
import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from '@/components/ui/card'
|
||||
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'
|
||||
import { TooltipArrow } from 'reka-ui'
|
||||
import CustomerDialog from '@/components/CustomerDialog.vue'
|
||||
import { toast } from 'vue-sonner'
|
||||
import { SocialIcon } from '@/components/ui/social-icon'
|
||||
@@ -39,7 +40,7 @@ const detailDialogOpen = ref(false)
|
||||
onMounted(async () => {
|
||||
try {
|
||||
const response = await api.get('/customers');
|
||||
customersData.value = (response.data as Customer[]).toSorted((a, b) => a.companyName.localeCompare(b.companyName));;
|
||||
customersData.value = (response.data as Customer[]).toSorted((a, b) => (a.companyName ?? '').localeCompare(b.companyName ?? ''));
|
||||
searchField.value = document.getElementById('search')
|
||||
searchField.value.focus()
|
||||
|
||||
@@ -169,8 +170,8 @@ const call = (number: string, event: Event) => {
|
||||
<div class="columns-xs gap-6">
|
||||
|
||||
<Card v-for="customer in filteredCustomers" :key="customer.id"
|
||||
class="relative mb-6 break-inside-avoid hover:bg-accent active:shadow-none overflow-clip"
|
||||
@click="showDetail(customer)">
|
||||
class="relative mb-6 break-inside-avoid hover:border-slate-300 dark:hover:border-neutral-600 overflow-clip"
|
||||
@click="" @dblclick="showDetail(customer)">
|
||||
|
||||
<CardHeader v-if="customer.logo" class="z-0">
|
||||
<img :src="'storage/uploads/' + customer.logo" alt="Logo {{ customer.companyName }}"
|
||||
@@ -234,7 +235,7 @@ const call = (number: string, event: Event) => {
|
||||
|
||||
<Tooltip v-for="contact in customer.contacts">
|
||||
<TooltipTrigger>
|
||||
<Avatar class="-mr-2 size-14 shadow">
|
||||
<Avatar class="size-14 shadow -mr-2">
|
||||
<AvatarImage v-if="contact.avatar" :src="'/storage/uploads/' + contact.avatar"
|
||||
loading="lazy" />
|
||||
<AvatarFallback
|
||||
@@ -243,7 +244,7 @@ const call = (number: string, event: Event) => {
|
||||
</AvatarFallback>
|
||||
</Avatar>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent class="p-4">
|
||||
<TooltipContent class="p-4 -mr-2" :side-offset="-1">
|
||||
<p class="font-bold">
|
||||
<span v-if="contact.academicTitle">{{ contact.academicTitle }}</span>
|
||||
<span>{{ contact.firstName + ' ' + contact.lastName }}</span>
|
||||
@@ -272,6 +273,8 @@ const call = (number: string, event: Event) => {
|
||||
<SocialIcon :variant="account.platform" />
|
||||
</Button>
|
||||
</ButtonGroup>
|
||||
<TooltipArrow :height="8" :width="16"
|
||||
class="fill-popover drop-shadow-(--shadow-arrow) stroke-[0.5px] stroke-border -mt-[1px]" />
|
||||
</TooltipContent>
|
||||
</Tooltip>
|
||||
|
||||
@@ -305,4 +308,10 @@ const call = (number: string, event: Event) => {
|
||||
[data-slot=dialog-overlay] {
|
||||
backdrop-filter: blur(var(--blur-sm));
|
||||
}
|
||||
|
||||
/* hover:not(:has(*:hover)) */
|
||||
[data-slot="card"]:hover:has(a:hover),
|
||||
[data-slot="card"]:hover:has(button:hover) {
|
||||
background-color: var(--card);
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user