fix(portale): la legenda spiega "Cancellata" solo a chi ne ha una

Due sostituzioni del commit precedente non avevano agganciato — il testo
cercato aveva un a capo diverso — e la frase che spiega lo stato non è mai
finita nel file. Rifatte con verifica.

Nel rimetterla, condizionata: la voce «Cancellata» e la sua riga di spiegazione
compaiono solo se quel progetto ha davvero un task cancellato. Nella maggior
parte dei casi non ce n'è nessuno, e raccontare a tutti uno stato che non
vedranno mai è rumore in un riquadro che serve a togliere dubbi. La condizione
guarda i task veri, mai una preferenza: se una cancellata c'è, la legenda la
spiega.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-22 14:54:31 +02:00
parent 4403b39e63
commit bec7e039d7
2 changed files with 16 additions and 3 deletions
+14 -2
View File
@@ -172,11 +172,16 @@ export function TaskStatusPill({ status }: { status: TaskStatus }) {
* disciplina introdotta insieme allo stato "in revisione", dopo che due liste
* fisse avevano già fatto sparire task dal portale senza un errore.
*/
export function TaskStatusLegend() {
export function TaskStatusLegend({ showCancelled = false }: { showCancelled?: boolean }) {
// "Cancellata" è l'unica voce condizionata: nella maggior parte dei progetti non
// ce n'è nessuna, e spiegare a tutti uno stato che non vedranno mai è rumore.
// La condizione guarda i task veri: se una cancellata c'è, la legenda la spiega.
const statuses = TASK_STATUSES.filter((s) => s !== "cancelled" || showCancelled);
return (
<div className="mb-6 rounded-lg bg-muted/50 px-4 py-3">
<ul className="flex flex-wrap items-center gap-x-5 gap-y-2">
{TASK_STATUSES.map((status) => (
{statuses.map((status) => (
<li key={status} className="flex items-center gap-1.5">
<span
aria-hidden="true"
@@ -193,6 +198,13 @@ export function TaskStatusLegend() {
aspetta il tuo riscontro: scrivicelo dalla chat della fase. Ogni pagina include un giro di
revisione.
</p>
{showCancelled && (
<p className="mt-1 text-[11px] leading-snug text-muted-foreground">
<span className="font-semibold text-foreground">Cancellata</span> l&apos;attività è
stata tolta dal lavoro, d&apos;accordo con te: resta scritta ma non verrà realizzata, e
non pesa sull&apos;avanzamento.
</p>
)}
</div>
);
}
@@ -15,6 +15,7 @@ export function PhaseViewToggle({
token: string;
}) {
const [view, setView] = useState<"timeline" | "kanban">("timeline");
const hasCancelled = phases.some((p) => p.tasks.some((t) => t.status === "cancelled"));
return (
<div>
@@ -41,7 +42,7 @@ export function PhaseViewToggle({
</div>
{/* Fuori dallo switch: gli stati sono gli stessi in entrambe le viste */}
<TaskStatusLegend />
<TaskStatusLegend showCancelled={hasCancelled} />
{view === "timeline" ? timelineView : <ClientKanban phases={phases} token={token} />}
</div>