Calendario: si vedono tutti gli orari validi, e il PDF ne fa una pagina ciascuno
Il popup mostrava solo l'orario del momento: chi guarda ad agosto vuole sapere com'e' settembre per intero, e una griglia sola gli fa credere che valga per sempre. Ora ci sono tutti quelli non ancora scaduti, ognuno con la sua etichetta - In vigore, oppure la data da cui parte - e quelli passati spariscono da soli. Il bottone scarica /calendario/tutti.pdf: un orario per pagina, con le giornate fuori griglia ripetute su ognuna, perche' un foglio stampato da solo deve bastare a se stesso. Gli id singoli restano validi per mandarne uno solo. calendarioDaMostrare (uno) diventa calendariDaMostrare (tutti): una funzione sola, non due che dicono cose simili - e' lo stesso difetto dei due link della pagina servizi, che erano due espressioni per lo stesso indirizzo e sono divergute. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+22
-16
@@ -149,20 +149,26 @@ export function avvisiAttivi(now: Date, list: AvvisoCalendario[] = avvisi): Avvi
|
||||
/** Servizi dalla cui pagina si apre il calendario della sala. */
|
||||
export const SERVIZI_CON_CALENDARIO = ['performance-class', 'holistic-class'];
|
||||
|
||||
/**
|
||||
* Il calendario da mostrare: quello in vigore adesso, oppure — se nessuno lo è ancora — il
|
||||
* primo che entrerà in vigore, segnalato come futuro. `null` solo se non ce n'è nessuno da
|
||||
* mostrare, e in quel caso la voce non compare in pagina.
|
||||
*
|
||||
* Serve il ripiego sul futuro perché il link esiste **prima** che il primo orario cominci: un
|
||||
* "nessun calendario disponibile" ad agosto non direbbe niente a chi vuole sapere gli orari
|
||||
* di settembre.
|
||||
*/
|
||||
export function calendarioDaMostrare(now: Date, list: Calendario[] = calendari):
|
||||
{ cal: Calendario; futuro: boolean } | null {
|
||||
const t = now.getTime();
|
||||
const attivo = list.find((c) => t >= Date.parse(c.from) && (c.to === null || t <= Date.parse(c.to)));
|
||||
if (attivo) return { cal: attivo, futuro: false };
|
||||
const prossimi = list.filter((c) => Date.parse(c.from) > t).sort((a, b) => Date.parse(a.from) - Date.parse(b.from));
|
||||
return prossimi.length ? { cal: prossimi[0], futuro: true } : null;
|
||||
export interface CalendarioMostrato {
|
||||
cal: Calendario;
|
||||
stato: 'in-corso' | 'futuro';
|
||||
}
|
||||
|
||||
/**
|
||||
* I calendari da mostrare: quello in vigore e quelli che verranno, in ordine di partenza.
|
||||
*
|
||||
* Si vedono **tutti insieme**, non solo quello del momento: chi guarda a fine agosto vuole
|
||||
* sapere com'è settembre per intero, e vedere una griglia sola gli farebbe credere che sia
|
||||
* quella per sempre. Ognuna porta il proprio stato, così l'orario in vigore adesso non si
|
||||
* confonde con quello che comincerà dopo.
|
||||
*
|
||||
* Gli orari **scaduti spariscono da soli**: dal 21 settembre resta il solo foglio valido, e
|
||||
* nessuno rischia di leggere le lezioni di un periodo finito.
|
||||
*/
|
||||
export function calendariDaMostrare(now: Date, list: Calendario[] = calendari): CalendarioMostrato[] {
|
||||
const t = now.getTime();
|
||||
return list
|
||||
.filter((c) => c.to === null || t <= Date.parse(c.to))
|
||||
.sort((a, b) => Date.parse(a.from) - Date.parse(b.from))
|
||||
.map((cal) => ({ cal, stato: t >= Date.parse(cal.from) ? 'in-corso' : 'futuro' }));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user