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:
@@ -172,11 +172,16 @@ export function TaskStatusPill({ status }: { status: TaskStatus }) {
|
|||||||
* disciplina introdotta insieme allo stato "in revisione", dopo che due liste
|
* disciplina introdotta insieme allo stato "in revisione", dopo che due liste
|
||||||
* fisse avevano già fatto sparire task dal portale senza un errore.
|
* 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 (
|
return (
|
||||||
<div className="mb-6 rounded-lg bg-muted/50 px-4 py-3">
|
<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">
|
<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">
|
<li key={status} className="flex items-center gap-1.5">
|
||||||
<span
|
<span
|
||||||
aria-hidden="true"
|
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
|
aspetta il tuo riscontro: scrivicelo dalla chat della fase. Ogni pagina include un giro di
|
||||||
revisione.
|
revisione.
|
||||||
</p>
|
</p>
|
||||||
|
{showCancelled && (
|
||||||
|
<p className="mt-1 text-[11px] leading-snug text-muted-foreground">
|
||||||
|
<span className="font-semibold text-foreground">Cancellata</span> — l'attività è
|
||||||
|
stata tolta dal lavoro, d'accordo con te: resta scritta ma non verrà realizzata, e
|
||||||
|
non pesa sull'avanzamento.
|
||||||
|
</p>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ export function PhaseViewToggle({
|
|||||||
token: string;
|
token: string;
|
||||||
}) {
|
}) {
|
||||||
const [view, setView] = useState<"timeline" | "kanban">("timeline");
|
const [view, setView] = useState<"timeline" | "kanban">("timeline");
|
||||||
|
const hasCancelled = phases.some((p) => p.tasks.some((t) => t.status === "cancelled"));
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
@@ -41,7 +42,7 @@ export function PhaseViewToggle({
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Fuori dallo switch: gli stati sono gli stessi in entrambe le viste */}
|
{/* Fuori dallo switch: gli stati sono gli stessi in entrambe le viste */}
|
||||||
<TaskStatusLegend />
|
<TaskStatusLegend showCancelled={hasCancelled} />
|
||||||
|
|
||||||
{view === "timeline" ? timelineView : <ClientKanban phases={phases} token={token} />}
|
{view === "timeline" ? timelineView : <ClientKanban phases={phases} token={token} />}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user