diff --git a/apps/platforms/src/layouts/Longevity.astro b/apps/platforms/src/layouts/Longevity.astro index 27b048b..b3a4444 100644 --- a/apps/platforms/src/layouts/Longevity.astro +++ b/apps/platforms/src/layouts/Longevity.astro @@ -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} ))} - Il mio referto + {haFascicolo && ( + Il mio referto + )}
@@ -78,6 +88,10 @@ const NAV_GESTIONALE = [ Longevity {crumbs.map((c) => / {c})}

+
diff --git a/apps/platforms/src/pages/longevity/io.astro b/apps/platforms/src/pages/longevity/io.astro index e03e8c0..76a3e25 100644 --- a/apps/platforms/src/pages/longevity/io.astro +++ b/apps/platforms/src/pages/longevity/io.astro @@ -22,7 +22,17 @@ const referto = sessioneId !== null ? refertoDi(db, sessioneId) : null; {!codice && (
-

Nessun fascicolo è ancora collegato al tuo account. Contatta lo staff InsanityLab.

+ {user.role === 'admin' || user.role === 'trainer' ? ( +

+ Il tuo account è da staff: non ha un fascicolo personale. + Torna al gestionale. +

+ ) : ( +

+ Nessun fascicolo è ancora collegato al tuo account. Contatta lo staff InsanityLab. + Torna alle piattaforme. +

+ )}
)} diff --git a/apps/platforms/src/styles/longevity.css b/apps/platforms/src/styles/longevity.css index d3e4470..2f338b2 100644 --- a/apps/platforms/src/styles/longevity.css +++ b/apps/platforms/src/styles/longevity.css @@ -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; } diff --git a/apps/platforms/tests/longevity/pagine.test.ts b/apps/platforms/tests/longevity/pagine.test.ts index 5d55d28..1b76c99 100644 --- a/apps/platforms/tests/longevity/pagine.test.ts +++ b/apps/platforms/tests/longevity/pagine.test.ts @@ -13,6 +13,19 @@ describe('il guscio della piattaforma', () => { expect(l).toMatch(/noindex/); // area riservata: mai indicizzata }); + it('nessuna pagina Longevity e senza uscita (#10): il referto porta sempre a Piattaforme, e a Gestionale per lo staff', () => { + const l = leggi('src/layouts/Longevity.astro'); + expect(l).toMatch(/href=["']\/piattaforme["']/); + expect(l).toMatch(/href=["']\/longevity\/gestionale["']/); + // "Il mio referto" nel gestionale va mostrato solo a chi ha davvero un fascicolo. + expect(l).toMatch(/haFascicolo &&/); + }); + + it('io.astro offre un uscita al gestionale per chi non ha un fascicolo (staff)', () => { + const src = leggi('src/pages/longevity/io.astro'); + expect(src).toMatch(/href=["']\/longevity\/gestionale["']/); + }); + it('il foglio di stile e globale e prefissato, non scoped', () => { expect(existsSync(join(process.cwd(), 'src/styles/longevity.css'))).toBe(true); const css = leggi('src/styles/longevity.css');