longevity: nessuna pagina senza uscita, "Il mio referto" solo a chi ha un fascicolo
Refs #10 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -14,6 +14,7 @@ import '@fontsource/open-sans/400.css';
|
||||
import '@fontsource/open-sans/600.css';
|
||||
import '../styles/global.css';
|
||||
import '../styles/longevity.css';
|
||||
import { codicePerUtenteLoggato } from '../lib/longevity/anagrafica';
|
||||
|
||||
interface Props {
|
||||
title: string;
|
||||
@@ -25,6 +26,13 @@ interface Props {
|
||||
const { title, crumbs = [], variante = 'referto' } = Astro.props;
|
||||
const path = Astro.url.pathname;
|
||||
|
||||
// Nessuna pagina di Longevity deve lasciare l'utente senza un'uscita (#10): il gestionale
|
||||
// mostra "Il mio referto" solo a chi ha davvero un fascicolo, e il referto porta sempre
|
||||
// un link fuori dalla piattaforma (più uno al gestionale, per lo staff).
|
||||
const user = Astro.locals.user;
|
||||
const staff = user?.role === 'admin' || user?.role === 'trainer';
|
||||
const haFascicolo = user ? codicePerUtenteLoggato(user.id) !== null : false;
|
||||
|
||||
// Le voci della barra laterale del gestionale: nasce con due pagine, non le sette di
|
||||
// Stress Index — un elenco più lungo arriverà con gli sviluppi futuri (#3, #7, #8).
|
||||
const NAV_GESTIONALE = [
|
||||
@@ -58,7 +66,9 @@ const NAV_GESTIONALE = [
|
||||
{item.label}
|
||||
</a>
|
||||
))}
|
||||
<a class="lg-nav__link lg-nav__link--referto" href="/longevity/io">Il mio referto</a>
|
||||
{haFascicolo && (
|
||||
<a class="lg-nav__link lg-nav__link--referto" href="/longevity/io">Il mio referto</a>
|
||||
)}
|
||||
</nav>
|
||||
</aside>
|
||||
<div class="lg-body">
|
||||
@@ -78,6 +88,10 @@ const NAV_GESTIONALE = [
|
||||
<strong>Longevity</strong>
|
||||
{crumbs.map((c) => <span> / {c}</span>)}
|
||||
</p>
|
||||
<p class="lg-top__links">
|
||||
{staff && <a class="lg-top__link" href="/longevity/gestionale">← Gestionale</a>}
|
||||
<a class="lg-top__link" href="/piattaforme">Piattaforme</a>
|
||||
</p>
|
||||
</header>
|
||||
<main class="lg-main"><slot /></main>
|
||||
</div>
|
||||
|
||||
@@ -22,7 +22,17 @@ const referto = sessioneId !== null ? refertoDi(db, sessioneId) : null;
|
||||
<Longevity title="Il tuo referto" crumbs={['Il tuo referto']}>
|
||||
{!codice && (
|
||||
<div class="lg-card">
|
||||
<p>Nessun fascicolo è ancora collegato al tuo account. Contatta lo staff InsanityLab.</p>
|
||||
{user.role === 'admin' || user.role === 'trainer' ? (
|
||||
<p>
|
||||
Il tuo account è da staff: non ha un fascicolo personale.
|
||||
<a href="/longevity/gestionale">Torna al gestionale</a>.
|
||||
</p>
|
||||
) : (
|
||||
<p>
|
||||
Nessun fascicolo è ancora collegato al tuo account. Contatta lo staff InsanityLab.
|
||||
<a href="/piattaforme">Torna alle piattaforme</a>.
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
|
||||
|
||||
@@ -43,6 +43,11 @@
|
||||
top: 0;
|
||||
z-index: 10;
|
||||
background: var(--lg-surface);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
gap: 6px 20px;
|
||||
}
|
||||
.lg-top p { margin: 0; }
|
||||
.lg-top__crumbs {
|
||||
@@ -50,6 +55,12 @@
|
||||
text-transform: uppercase; color: var(--c-text-light);
|
||||
}
|
||||
.lg-top__crumbs strong { color: var(--c-heading); font-weight: 600; }
|
||||
.lg-top__links { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; }
|
||||
.lg-top__link {
|
||||
font-family: var(--font-heading); font-size: .74rem; font-weight: 600; letter-spacing: .1em;
|
||||
text-transform: uppercase; color: var(--c-text-light); text-decoration: none;
|
||||
}
|
||||
.lg-top__link:hover { color: var(--c-heading); }
|
||||
|
||||
.lg-main { flex: 1; padding: 34px 32px 70px; }
|
||||
|
||||
|
||||
Reference in New Issue
Block a user