Skip to content

Commit 579aec4

Browse files
committed
feat: migliorata visualizzazione dei dati nella pagina Numeri con grafico lollipop responsive e tabella mobile
1 parent 29f27a0 commit 579aec4

2 files changed

Lines changed: 65 additions & 9 deletions

File tree

LOG.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,12 @@
88
* Aggiunta gestione dei percorsi normalizzati nel menu hamburger.
99
* Creata pagina Numeri con statistiche e grafici delle iniziative.
1010
* Aggiunto grafico lollipop orizzontale nella pagina Numeri per visualizzare le top 10 iniziative con più alta media di sostenitori giornalieri.
11-
* Implementate ancore cliccabili per i titoli delle sezioni grafiche per consentire link diretti.
12-
* Applicata conformità alle best practices per la gestione dei percorsi usando le utility centralizzate.
11+
* Implementata visualizzazione responsive per il grafico lollipop: su desktop viene mostrato il grafico, su mobile una tabella compatta con titoli troncati.
12+
* Aggiunta logica per caricare e unire i dati da `media_sostenitori_giornaliera.jsonl` con le iniziative esistenti.
13+
* Implementate ancore cliccabili per i titoli delle sezioni grafiche per consentire link diretti e navigazione SEO-friendly.
14+
* Applicata conformità alle best practices per la gestione dei percorsi usando le utility centralizzate (`createPath`).
15+
* Creata immagine OpenGraph dedicata per la pagina Numeri (`og-numeri.png`) e aggiornato il generatore di immagini OG.
16+
* Aggiornate le note esplicative nella pagina Numeri per riflettere le nuove funzionalità di visualizzazione dati.
1317
* Migliorata la UI della vista a griglia: i box delle iniziative con stato "CHIUSA" ora appaiono con colori più spenti per distinguerli visivamente.
1418

1519
## 2025-07-06

src/pages/numeri.astro

Lines changed: 59 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -221,22 +221,73 @@ const baseUrl = import.meta.env.BASE_URL;
221221
</a>
222222
</h2>
223223

224-
<!-- Grafico Lollipop orizzontale --> <div class="space-y-6">
224+
<!-- Grafico Lollipop orizzontale (desktop) / Tabella (mobile) -->
225+
226+
<!-- Versione mobile: Tabella semplice -->
227+
<div class="md:hidden">
228+
<div class="overflow-hidden bg-white shadow ring-1 ring-black ring-opacity-5 rounded-lg">
229+
<table class="min-w-full divide-y divide-gray-300">
230+
<thead class="bg-gray-50">
231+
<tr>
232+
<th scope="col" class="px-4 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">
233+
Iniziativa
234+
</th>
235+
<th scope="col" class="px-4 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">
236+
Media/giorno
237+
</th>
238+
</tr>
239+
</thead>
240+
<tbody class="bg-white divide-y divide-gray-200">
241+
{top10ByMedia.map((initiative, index) => {
242+
const initiativeUrl = createPath(`/initiative/${initiative.id}`);
243+
const truncatedTitle = initiative.titolo.length > 40
244+
? initiative.titolo.substring(0, 40) + '...'
245+
: initiative.titolo;
246+
247+
return (
248+
<tr class="hover:bg-gray-50">
249+
<td class="px-4 py-3">
250+
<a
251+
href={initiativeUrl}
252+
class="text-sm text-blue-600 hover:text-blue-800 font-medium transition-colors duration-200"
253+
title={initiative.titolo}
254+
>
255+
{truncatedTitle}
256+
</a>
257+
</td>
258+
<td class="px-4 py-3 text-right">
259+
<span class="text-sm font-semibold text-gray-900">
260+
{initiative.sostenitori_delta_mean}
261+
</span>
262+
</td>
263+
</tr>
264+
);
265+
})}
266+
</tbody>
267+
</table>
268+
</div>
269+
</div>
270+
271+
<!-- Versione desktop: Grafico Lollipop -->
272+
<div class="hidden md:block space-y-6">
225273
{top10ByMedia.map((initiative, index) => {
226274
const percentage = (initiative.sostenitori_delta_mean / maxMediaValue) * 100;
227275
const initiativeUrl = createPath(`/initiative/${initiative.id}`);
276+
const truncatedTitle = initiative.titolo.length > 40
277+
? initiative.titolo.substring(0, 40) + '...'
278+
: initiative.titolo;
228279

229280
return (
230281
<div class="relative flex items-center">
231-
<!-- ID cliccabile con tooltip -->
232-
<div class="w-20 flex-shrink-0">
282+
<!-- Titolo troncato su desktop -->
283+
<div class="w-80 flex-shrink-0">
233284
<a
234285
href={initiativeUrl}
235286
class="text-sm font-bold text-blue-600 hover:text-blue-800 transition-colors duration-200 cursor-pointer hover:underline"
236287
title={initiative.titolo}
237288
data-tooltip={initiative.titolo}
238289
>
239-
{initiative.id}
290+
{truncatedTitle}
240291
</a>
241292
</div>
242293

@@ -276,11 +327,12 @@ const baseUrl = import.meta.env.BASE_URL;
276327
<!-- Legenda e note -->
277328
<div class="mt-6 p-4 bg-gray-50 rounded-lg">
278329
<p class="text-sm text-gray-600">
279-
<strong>Nota:</strong> Il grafico mostra le 10 iniziative con la più alta media di sostenitori acquisiti per giorno.
280-
Passa il mouse sull'ID per vedere il titolo completo dell'iniziativa.
330+
<strong>Nota:</strong> Mostra le 10 iniziative con la più alta media di sostenitori acquisiti per giorno.
331+
Passa il mouse sulla voce per vedere il titolo completo dell'iniziativa.
281332
</p>
282333
<p class="text-sm text-gray-600 mt-2">
283-
<strong>Tip:</strong> Clicca sull'ID per accedere alla pagina di dettaglio dell'iniziativa.
334+
<strong>Tip:</strong> Clicca sulla voce per accedere alla pagina di dettaglio dell'iniziativa.
335+
Su desktop viene mostrato un grafico lollipop, su mobile una tabella compatta.
284336
Clicca sul titolo della sezione per ottenere un link diretto a questo grafico.
285337
</p>
286338
</div>

0 commit comments

Comments
 (0)