diff --git a/apps/web/components/common/spinner.tsx b/apps/web/components/common/spinner.tsx
new file mode 100644
index 0000000..2d31776
--- /dev/null
+++ b/apps/web/components/common/spinner.tsx
@@ -0,0 +1,9 @@
+import { Loader2 } from 'lucide-react';
+
+export function LoadingSpinner() {
+ return (
+
+
+
+ );
+}
diff --git a/apps/web/components/contacts/contacts-list.tsx b/apps/web/components/contacts/contacts-list.tsx
index c483125..f118684 100644
--- a/apps/web/components/contacts/contacts-list.tsx
+++ b/apps/web/components/contacts/contacts-list.tsx
@@ -1,4 +1,5 @@
'use client';
+import { LoadingSpinner } from '../common/spinner';
import { useCustomerContacts } from '@/hooks/contacts';
import * as GQL from '@repo/graphql/types';
import { Avatar, AvatarFallback, AvatarImage } from '@repo/ui/components/ui/avatar';
@@ -31,6 +32,8 @@ const ContactRow = memo(function ({ contact }: ContactRowProps) {
export function ContactsList() {
const { contacts } = useCustomerContacts();
+ if (!contacts.length) return ;
+
return (
{contacts.map((contact) => (
diff --git a/apps/web/hooks/contacts/use-customer-contacts.ts b/apps/web/hooks/contacts/use-customer-contacts.ts
index af59c1d..026ec01 100644
--- a/apps/web/hooks/contacts/use-customer-contacts.ts
+++ b/apps/web/hooks/contacts/use-customer-contacts.ts
@@ -8,7 +8,7 @@ import { use, useEffect, useMemo } from 'react';
export function useCustomerContacts() {
const { filter } = use(ContactsFilterContext);
- const { clients = [], masters = [], setClients, setMasters } = useBoundStore();
+ const { clients, masters, setClients, setMasters } = useBoundStore();
useEffect(() => {
if ((filter === 'masters' || filter === 'all') && !masters)