Fix all ESLint errors: remove unused imports, replace any types
- Remove ~60 unused imports and variables across 88 files - Replace ~80 `any` type annotations with proper types (unknown, Record<string, unknown>, or specific types) - Prefix unused callback args with underscore - Fix unescaped JSX entities - Lint now passes cleanly (0 errors, 2 intentional img warnings) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -33,6 +33,25 @@ interface ClientDetailHeaderProps {
|
||||
};
|
||||
}
|
||||
|
||||
type ClientFormClient = {
|
||||
id: string;
|
||||
fullName: string;
|
||||
companyName?: string | null;
|
||||
nationality?: string | null;
|
||||
isProxy?: boolean;
|
||||
proxyType?: string | null;
|
||||
actualOwnerName?: string | null;
|
||||
yachtName?: string | null;
|
||||
berthSizeDesired?: string | null;
|
||||
preferredContactMethod?: string | null;
|
||||
preferredLanguage?: string | null;
|
||||
timezone?: string | null;
|
||||
source?: string | null;
|
||||
sourceDetails?: string | null;
|
||||
contacts?: Array<{ channel: string; value: string; label?: string | null; isPrimary?: boolean }>;
|
||||
tags?: Array<{ id: string }>;
|
||||
};
|
||||
|
||||
const SOURCE_LABELS: Record<string, string> = {
|
||||
website: 'Website',
|
||||
manual: 'Manual',
|
||||
@@ -67,7 +86,6 @@ export function ClientDetailHeader({ client }: ClientDetailHeaderProps) {
|
||||
},
|
||||
});
|
||||
|
||||
const primaryContact = client.contacts?.find((c) => c.isPrimary);
|
||||
const primaryEmail = client.contacts?.find((c) => c.channel === 'email' && c.isPrimary)
|
||||
?? client.contacts?.find((c) => c.channel === 'email');
|
||||
const primaryPhone = client.contacts?.find((c) => c.channel === 'phone' && c.isPrimary)
|
||||
@@ -162,7 +180,7 @@ export function ClientDetailHeader({ client }: ClientDetailHeaderProps) {
|
||||
<ClientForm
|
||||
open={editOpen}
|
||||
onOpenChange={setEditOpen}
|
||||
client={client as any}
|
||||
client={client as unknown as ClientFormClient}
|
||||
/>
|
||||
|
||||
<ArchiveConfirmDialog
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
'use client';
|
||||
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
import { useParams } from 'next/navigation';
|
||||
|
||||
import { DetailLayout } from '@/components/shared/detail-layout';
|
||||
import { ClientDetailHeader } from '@/components/clients/client-detail-header';
|
||||
|
||||
@@ -96,15 +96,15 @@ export function ClientForm({ open, onOpenChange, client }: ClientFormProps) {
|
||||
actualOwnerName: client.actualOwnerName ?? undefined,
|
||||
yachtName: client.yachtName ?? undefined,
|
||||
berthSizeDesired: client.berthSizeDesired ?? undefined,
|
||||
preferredContactMethod: (client.preferredContactMethod as any) ?? undefined,
|
||||
preferredContactMethod: (client.preferredContactMethod as string) ?? undefined,
|
||||
preferredLanguage: client.preferredLanguage ?? undefined,
|
||||
timezone: client.timezone ?? undefined,
|
||||
source: (client.source as any) ?? undefined,
|
||||
source: (client.source as string) ?? undefined,
|
||||
sourceDetails: client.sourceDetails ?? undefined,
|
||||
contacts:
|
||||
client.contacts && client.contacts.length > 0
|
||||
? client.contacts.map((c) => ({
|
||||
channel: c.channel as any,
|
||||
channel: c.channel as 'email' | 'phone' | 'whatsapp' | 'other',
|
||||
value: c.value,
|
||||
label: c.label ?? undefined,
|
||||
isPrimary: c.isPrimary ?? false,
|
||||
@@ -125,6 +125,7 @@ export function ClientForm({ open, onOpenChange, client }: ClientFormProps) {
|
||||
const mutation = useMutation({
|
||||
mutationFn: async (data: CreateClientInput) => {
|
||||
if (isEdit) {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const { contacts, tagIds: tIds, ...rest } = data;
|
||||
await apiFetch(`/api/v1/clients/${client!.id}`, { method: 'PATCH', body: rest });
|
||||
if (tIds) {
|
||||
@@ -217,7 +218,7 @@ export function ClientForm({ open, onOpenChange, client }: ClientFormProps) {
|
||||
<Select
|
||||
value={watch(`contacts.${index}.channel`)}
|
||||
onValueChange={(v) =>
|
||||
setValue(`contacts.${index}.channel`, v as any)
|
||||
setValue(`contacts.${index}.channel`, v as 'email' | 'phone' | 'whatsapp' | 'other')
|
||||
}
|
||||
>
|
||||
<SelectTrigger className="h-8">
|
||||
@@ -356,7 +357,7 @@ export function ClientForm({ open, onOpenChange, client }: ClientFormProps) {
|
||||
<Label>Source</Label>
|
||||
<Select
|
||||
value={watch('source') ?? ''}
|
||||
onValueChange={(v) => setValue('source', v as any)}
|
||||
onValueChange={(v) => setValue('source', v as 'website' | 'manual' | 'referral' | 'broker')}
|
||||
>
|
||||
<SelectTrigger>
|
||||
<SelectValue placeholder="Select source" />
|
||||
@@ -373,7 +374,7 @@ export function ClientForm({ open, onOpenChange, client }: ClientFormProps) {
|
||||
<Label>Preferred Contact Method</Label>
|
||||
<Select
|
||||
value={watch('preferredContactMethod') ?? ''}
|
||||
onValueChange={(v) => setValue('preferredContactMethod', v as any)}
|
||||
onValueChange={(v) => setValue('preferredContactMethod', v as 'email' | 'phone' | 'whatsapp')}
|
||||
>
|
||||
<SelectTrigger>
|
||||
<SelectValue placeholder="Select method" />
|
||||
|
||||
@@ -96,7 +96,7 @@ export function ClientList() {
|
||||
entityType="clients"
|
||||
currentFilters={filters}
|
||||
currentSort={sort}
|
||||
onApplyView={(savedFilters, savedSort) => {
|
||||
onApplyView={(savedFilters, _savedSort) => {
|
||||
clearFilters();
|
||||
Object.entries(savedFilters).forEach(([key, val]) => setFilter(key, val));
|
||||
}}
|
||||
@@ -137,7 +137,7 @@ export function ClientList() {
|
||||
<ClientForm
|
||||
open={!!editClient}
|
||||
onOpenChange={(open) => !open && setEditClient(null)}
|
||||
client={editClient as any}
|
||||
client={editClient as unknown as NonNullable<Parameters<typeof ClientForm>[0]['client']>}
|
||||
/>
|
||||
)}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user