feat: translate clients/players page to English

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Ivan
2026-03-01 21:22:57 +00:00
parent 3e65974727
commit 13bd84a0b5

View File

@@ -66,9 +66,9 @@ interface MembershipPlan {
} }
const membershipFilters = [ const membershipFilters = [
{ value: "", label: "Todos" }, { value: "", label: "All" },
{ value: "with", label: "Con membresia" }, { value: "with", label: "With membership" },
{ value: "without", label: "Sin membresia" }, { value: "without", label: "Without membership" },
]; ];
const ITEMS_PER_PAGE = 10; const ITEMS_PER_PAGE = 10;
@@ -112,7 +112,7 @@ export default function ClientsPage() {
params.append("offset", ((currentPage - 1) * ITEMS_PER_PAGE).toString()); params.append("offset", ((currentPage - 1) * ITEMS_PER_PAGE).toString());
const response = await fetch(`/api/clients?${params.toString()}`); const response = await fetch(`/api/clients?${params.toString()}`);
if (!response.ok) throw new Error("Error al cargar clientes"); if (!response.ok) throw new Error("Error loading players");
const data: ClientsResponse = await response.json(); const data: ClientsResponse = await response.json();
@@ -138,7 +138,7 @@ export default function ClientsPage() {
setTotalClients(data.pagination.total); setTotalClients(data.pagination.total);
} catch (err) { } catch (err) {
console.error("Error fetching clients:", err); console.error("Error fetching clients:", err);
setError(err instanceof Error ? err.message : "Error desconocido"); setError(err instanceof Error ? err.message : "Unknown error");
} finally { } finally {
setLoadingClients(false); setLoadingClients(false);
} }
@@ -150,7 +150,7 @@ export default function ClientsPage() {
try { try {
// Fetch all clients to calculate stats // Fetch all clients to calculate stats
const response = await fetch("/api/clients?limit=1000"); const response = await fetch("/api/clients?limit=1000");
if (!response.ok) throw new Error("Error al cargar estadisticas"); if (!response.ok) throw new Error("Error loading statistics");
const data: ClientsResponse = await response.json(); const data: ClientsResponse = await response.json();
const allClients = data.data; const allClients = data.data;
@@ -186,7 +186,7 @@ export default function ClientsPage() {
const fetchMembershipPlans = useCallback(async () => { const fetchMembershipPlans = useCallback(async () => {
try { try {
const response = await fetch("/api/membership-plans"); const response = await fetch("/api/membership-plans");
if (!response.ok) throw new Error("Error al cargar planes"); if (!response.ok) throw new Error("Error loading plans");
const data = await response.json(); const data = await response.json();
setMembershipPlans(data.filter((p: MembershipPlan & { isActive?: boolean }) => p.isActive !== false)); setMembershipPlans(data.filter((p: MembershipPlan & { isActive?: boolean }) => p.isActive !== false));
} catch (err) { } catch (err) {
@@ -198,12 +198,12 @@ export default function ClientsPage() {
const fetchClientDetails = async (clientId: string) => { const fetchClientDetails = async (clientId: string) => {
try { try {
const response = await fetch(`/api/clients/${clientId}`); const response = await fetch(`/api/clients/${clientId}`);
if (!response.ok) throw new Error("Error al cargar detalles del cliente"); if (!response.ok) throw new Error("Error loading player details");
const data = await response.json(); const data = await response.json();
setSelectedClient(data); setSelectedClient(data);
} catch (err) { } catch (err) {
console.error("Error fetching client details:", err); console.error("Error fetching client details:", err);
setError(err instanceof Error ? err.message : "Error desconocido"); setError(err instanceof Error ? err.message : "Unknown error");
} }
}; };
@@ -244,7 +244,7 @@ export default function ClientsPage() {
if (!response.ok) { if (!response.ok) {
const errorData = await response.json(); const errorData = await response.json();
throw new Error(errorData.error || "Error al crear cliente"); throw new Error(errorData.error || "Error creating player");
} }
setShowCreateForm(false); setShowCreateForm(false);
@@ -276,7 +276,7 @@ export default function ClientsPage() {
if (!response.ok) { if (!response.ok) {
const errorData = await response.json(); const errorData = await response.json();
throw new Error(errorData.error || "Error al actualizar cliente"); throw new Error(errorData.error || "Error updating player");
} }
setEditingClient(null); setEditingClient(null);
@@ -297,7 +297,7 @@ export default function ClientsPage() {
const handleDeleteClient = async (client: Client) => { const handleDeleteClient = async (client: Client) => {
if ( if (
!confirm( !confirm(
`¿Estas seguro de desactivar a ${client.firstName} ${client.lastName}?` `Are you sure you want to deactivate ${client.firstName} ${client.lastName}?`
) )
) { ) {
return; return;
@@ -310,13 +310,13 @@ export default function ClientsPage() {
if (!response.ok) { if (!response.ok) {
const errorData = await response.json(); const errorData = await response.json();
throw new Error(errorData.error || "Error al desactivar cliente"); throw new Error(errorData.error || "Error deactivating player");
} }
await Promise.all([fetchClients(), fetchStats()]); await Promise.all([fetchClients(), fetchStats()]);
} catch (err) { } catch (err) {
console.error("Error deleting client:", err); console.error("Error deleting client:", err);
setError(err instanceof Error ? err.message : "Error desconocido"); setError(err instanceof Error ? err.message : "Unknown error");
} }
}; };
@@ -337,7 +337,7 @@ export default function ClientsPage() {
if (!response.ok) { if (!response.ok) {
const errorData = await response.json(); const errorData = await response.json();
throw new Error(errorData.error || "Error al asignar membresia"); throw new Error(errorData.error || "Error assigning membership");
} }
setShowAssignMembership(false); setShowAssignMembership(false);
@@ -367,9 +367,9 @@ export default function ClientsPage() {
{/* Header */} {/* Header */}
<div className="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4"> <div className="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4">
<div> <div>
<h1 className="text-2xl font-bold text-primary-800">Clientes</h1> <h1 className="text-2xl font-bold text-primary-800">Players</h1>
<p className="mt-1 text-primary-600"> <p className="mt-1 text-primary-600">
Gestiona los clientes de tu centro Manage your club's players
</p> </p>
</div> </div>
<Button onClick={() => setShowCreateForm(true)}> <Button onClick={() => setShowCreateForm(true)}>
@@ -386,7 +386,7 @@ export default function ClientsPage() {
d="M18 9v3m0 0v3m0-3h3m-3 0h-3m-2-5a4 4 0 11-8 0 4 4 0 018 0zM3 20a6 6 0 0112 0v1H3v-1z" d="M18 9v3m0 0v3m0-3h3m-3 0h-3m-2-5a4 4 0 11-8 0 4 4 0 018 0zM3 20a6 6 0 0112 0v1H3v-1z"
/> />
</svg> </svg>
Nuevo Cliente New Player
</Button> </Button>
</div> </div>
@@ -433,7 +433,7 @@ export default function ClientsPage() {
) : ( ) : (
<> <>
<StatCard <StatCard
title="Total Clientes" title="Total Players"
value={stats.totalClients} value={stats.totalClients}
color="primary" color="primary"
icon={ icon={
@@ -453,7 +453,7 @@ export default function ClientsPage() {
} }
/> />
<StatCard <StatCard
title="Con Membresia" title="With Membership"
value={stats.withMembership} value={stats.withMembership}
color="accent" color="accent"
icon={ icon={
@@ -473,7 +473,7 @@ export default function ClientsPage() {
} }
/> />
<StatCard <StatCard
title="Nuevos Este Mes" title="New This Month"
value={stats.newThisMonth} value={stats.newThisMonth}
color="green" color="green"
icon={ icon={
@@ -504,7 +504,7 @@ export default function ClientsPage() {
<div className="flex-1"> <div className="flex-1">
<Input <Input
type="text" type="text"
placeholder="Buscar por nombre, email o telefono..." placeholder="Search by name, email or phone..."
value={searchQuery} value={searchQuery}
onChange={(e) => setSearchQuery(e.target.value)} onChange={(e) => setSearchQuery(e.target.value)}
className="w-full" className="w-full"