Files
pn-new-crm/src/components/berths/berth-status-suggestion-dialog.tsx
Matt 4c20bcffcd
Some checks failed
Build & Push Docker Images / lint (push) Failing after 1m10s
Build & Push Docker Images / build-and-push (push) Has been skipped
Build & Push Docker Images / deploy (push) Has been skipped
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>
2026-03-26 12:06:18 +01:00

91 lines
2.5 KiB
TypeScript

'use client';
import { useMutation } from '@tanstack/react-query';
import { ArrowRight, Loader2 } from 'lucide-react';
import {
Dialog,
DialogContent,
DialogDescription,
DialogFooter,
DialogHeader,
DialogTitle,
} from '@/components/ui/dialog';
import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge';
import { apiFetch } from '@/lib/api/client';
interface BerthStatusSuggestionDialogProps {
open: boolean;
onOpenChange: (open: boolean) => void;
berthId: string;
currentStatus: string;
suggestedStatus: string;
reason: string;
onApplied: () => void;
}
export function BerthStatusSuggestionDialog({
open,
onOpenChange,
berthId,
currentStatus,
suggestedStatus,
reason,
onApplied,
}: BerthStatusSuggestionDialogProps) {
const applyMutation = useMutation({
mutationFn: () =>
apiFetch(`/api/v1/berths/${berthId}/status`, {
method: 'PATCH',
body: JSON.stringify({ status: suggestedStatus, reason }),
}),
onSuccess: () => {
onApplied();
onOpenChange(false);
},
});
return (
<Dialog open={open} onOpenChange={onOpenChange}>
<DialogContent className="sm:max-w-md">
<DialogHeader>
<DialogTitle>Suggested Status Change</DialogTitle>
<DialogDescription>
Based on recent activity, a berth status update is recommended.
</DialogDescription>
</DialogHeader>
<div className="flex items-center justify-center gap-4 py-4">
<Badge variant="outline" className="text-base px-4 py-1.5">
{currentStatus.replace(/_/g, ' ')}
</Badge>
<ArrowRight className="h-5 w-5 text-muted-foreground" />
<Badge variant="default" className="text-base px-4 py-1.5">
{suggestedStatus.replace(/_/g, ' ')}
</Badge>
</div>
{reason && (
<p className="text-sm text-muted-foreground text-center px-4">{reason}</p>
)}
<DialogFooter className="gap-2">
<Button variant="outline" onClick={() => onOpenChange(false)}>
Dismiss
</Button>
<Button
onClick={() => applyMutation.mutate()}
disabled={applyMutation.isPending}
>
{applyMutation.isPending && (
<Loader2 className="mr-1.5 h-4 w-4 animate-spin" />
)}
Apply Change
</Button>
</DialogFooter>
</DialogContent>
</Dialog>
);
}