Ordina la rosa e la squadra per cognome

Sposta dividiNome in crapp-data.ts per riordinare la rosa di fallback per
cognome; la query a giocatori_squadra ora ordina per cognome, nome invece
che per id.
This commit is contained in:
2026-09-02 10:59:28 +02:00
parent 64771fffc6
commit d3b117e470
4 changed files with 34 additions and 33 deletions
+29 -21
View File
@@ -82,27 +82,35 @@ function inizialiDa(nome: string) {
.toUpperCase();
}
export const giocatori: Giocatore[] = rosaCSI.map((r, i) => ({
id: `g${i + 1}`,
nome: r.nome,
numero: r.numero ?? 0,
ruolo: r.ruolo,
nascita: r.nascita,
iniziali: inizialiDa(r.nome),
presenze: 0,
totaliEventi: 0,
streak: 0,
serieAllenamenti: 0,
seriePartite: 0,
serieConferme: 0,
mvp: 0,
mediaVoto: 0,
infortuni: 0,
ritardi: 0,
palloni: 0,
cacche: 0,
cacchePartita: 0,
}));
export function dividiNome(completo: string): { nome: string; cognome: string } {
const spazio = completo.indexOf(" ");
if (spazio < 0) return { nome: completo, cognome: "" };
return { nome: completo.slice(0, spazio), cognome: completo.slice(spazio + 1) };
}
export const giocatori: Giocatore[] = rosaCSI
.map((r, i) => ({
id: `g${i + 1}`,
nome: r.nome,
numero: r.numero ?? 0,
ruolo: r.ruolo,
nascita: r.nascita,
iniziali: inizialiDa(r.nome),
presenze: 0,
totaliEventi: 0,
streak: 0,
serieAllenamenti: 0,
seriePartite: 0,
serieConferme: 0,
mvp: 0,
mediaVoto: 0,
infortuni: 0,
ritardi: 0,
palloni: 0,
cacche: 0,
cacchePartita: 0,
}))
.sort((a, b) => dividiNome(a.nome).cognome.localeCompare(dividiNome(b.nome).cognome, "it"));
export type RigaClassifica = {
pos: number;
+3 -9
View File
@@ -1,6 +1,6 @@
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { supabaseNuoveTabelle } from "@/integrations/supabase/client-nuove-tabelle";
import { giocatori } from "./crapp-data";
import { dividiNome, giocatori } from "./crapp-data";
/**
* Anagrafica operativa della squadra (`giocatori_squadra`, migration M1). È la source of
@@ -31,13 +31,6 @@ type RigaGiocatoreSquadra = {
export const SQUADRA_KEY = ["giocatori-squadra"] as const;
/** "Carlo Di Castelnuovo" -> nome "Carlo", cognome "Di Castelnuovo". */
export function dividiNome(completo: string): { nome: string; cognome: string } {
const spazio = completo.indexOf(" ");
if (spazio < 0) return { nome: completo, cognome: "" };
return { nome: completo.slice(0, spazio), cognome: completo.slice(spazio + 1) };
}
/** Rosa di riserva quando il database non risponde o non è ancora popolato. */
export function rosaFallback(): GiocatoreSquadra[] {
return giocatori.map((g) => ({
@@ -78,7 +71,8 @@ async function fetchSquadra(): Promise<GiocatoreSquadra[]> {
const { data, error } = await supabaseNuoveTabelle
.from("giocatori_squadra")
.select("id, nome, cognome, numero, ruolo, auth_user_id, attivo, email")
.order("id");
.order("cognome")
.order("nome");
if (error) throw error;
const righe = (data ?? []) as RigaGiocatoreSquadra[];
return righe.map((r) => ({
+1 -2
View File
@@ -1,7 +1,6 @@
/** Check dell'anagrafica squadra: `bun test/unit/giocatori-squadra.test.ts`. */
import assert from "node:assert/strict";
import {
dividiNome,
nomeCompleto,
numeroGiaUsato,
prossimoIdGiocatore,
@@ -11,7 +10,7 @@ import {
validaDatiSquadra,
type GiocatoreSquadra,
} from "@/lib/giocatori-squadra";
import { giocatori } from "@/lib/crapp-data";
import { dividiNome, giocatori } from "@/lib/crapp-data";
const riga = (parziale: Partial<GiocatoreSquadra> = {}): GiocatoreSquadra => ({
id: "g1",
+1 -1
View File
@@ -10,13 +10,13 @@ import {
type Profilo,
} from "@/lib/profili-core";
import {
dividiNome,
numeroGiaUsato,
rosaFallback,
slotDi,
validaDatiSquadra,
type GiocatoreSquadra,
} from "@/lib/giocatori-squadra";
import { dividiNome } from "@/lib/crapp-data";
const vuoto: Profilo = {
giocatoreId: "g1",