batchCooking/apps/web/src/pages/download/download-page.scss
Nicolas d6cf4aa63d
Some checks failed
CI / lint (push) Successful in 3m35s
CI / build (push) Successful in 4m33s
CI / intent-service-test (push) Successful in 4m43s
CI / e2e (push) Successful in 15m5s
CI / test (push) Failing after 15m28s
CI / build-android (push) Has been skipped
feat(mobile): redirection vers l'appli + page de telechargement
Ticket #84 du chantier UI mobile & tablette. Aucune infra de deep-link
n'existait (verifie en amont : pas de scheme personnalise, pas d'App
Links, pas d'assetlinks.json, pas de listener appUrlOpen).

- lib/mobile-app-redirect.ts : attemptOpenNativeApp() (pattern "smart
  app banner" classique - tente le scheme batchcooking://, bascule sur
  onFallback si la page est toujours visible passe un court delai) et
  isAndroidPhoneBrowser() (UA Android+Mobile, deliberement distinct de
  useIsMobileViewport() - une question de plateforme, pas de largeur).
  Respecte une preference "rester sur le web" (localStorage, cle
  exportee pour que l'onglet Parametres d'application - ticket #86 -
  la reutilise) sans jamais forcer la redirection.
- AndroidManifest.xml : nouvel intent-filter additif (scheme
  batchcooking, sans toucher au filtre MAIN/LAUNCHER existant).
- Nouvelle page /telecharger (publique, hors RequireAuth - un visiteur
  deja connecte sur le web mais sans l'appli sur cet appareil a une
  raison legitime d'y atterrir) : lien direct vers le proxy existant
  ${API_BASE_URL}/mobile/download (rien a changer cote API), bouton
  "reessayer d'ouvrir l'appli".

Deliberement pas de changement sur la landing page ici (lien discret
actuel laisse tel quel) - c'est le ticket #85, separe pour rester
petit/revuable.

Verifie en local : tsc -b --force, biome check, build de prod, suite
Cypress e2e complete (141/141 sur cette branche - #91 n'est pas encore
merge, layout.cy.ts y est donc encore dans son etat pre-#91) et
composants (69/69, incluant le nouveau mobile-app-redirect.cy.tsx).
Note technique : le premier essai de test du composant tentait un vrai
window.location.href vers le scheme personnalise depuis Cypress/
Electron, ce qui bloquait le runner indefiniment (protocole inconnu
mal gere par Electron) - corrige en rendant ce seul appel injectable
(openAppUrl, reserve aux tests) sans toucher au comportement reel.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-07 12:20:16 +02:00

84 lines
1.9 KiB
SCSS

// DownloadPage — colocated with DownloadPage.tsx. A small centered card,
// same "full-viewport centering wrapper + raised card" language as
// features/auth/auth-form.scss's `.auth-page`/`.auth-card` (this page sits
// in the same "not logged in yet, or not on this device yet" context), but
// its own classes rather than reused ones — no real behavior in common,
// just a similar look.
.download-page {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: var(--space-md);
background: var(--color-background);
}
.download-page__card {
display: flex;
flex-direction: column;
align-items: flex-start;
gap: var(--space-sm);
width: 100%;
max-width: var(--max-width-form);
padding: var(--space-xl);
background: var(--color-surface);
border-radius: var(--radius-md);
box-shadow: var(--shadow-md);
color: var(--color-text);
h1 {
font-size: var(--font-size-lg);
margin: 0;
}
}
.download-page__lede {
margin: 0;
color: var(--color-text-muted);
}
.download-page__cta {
align-self: stretch;
text-align: center;
padding: var(--space-sm) var(--space-md);
margin-top: var(--space-sm);
border-radius: var(--radius-base);
background: var(--color-primary);
color: #fff;
font-weight: 600;
text-decoration: none;
&:hover {
background: var(--color-primary-hover);
}
}
.download-page__retry {
align-self: stretch;
text-align: center;
padding: var(--space-sm) var(--space-md);
border: 1px solid var(--color-border);
border-radius: var(--radius-base);
background: none;
color: var(--color-text);
font-family: var(--font-body);
font-weight: 600;
cursor: pointer;
&:hover {
background: var(--color-surface-alt);
}
}
.download-page__hint {
margin: 0;
font-size: var(--font-size-xs);
color: var(--color-text-muted);
}
.download-page__back {
margin-top: var(--space-sm);
font-size: var(--font-size-sm);
color: var(--color-primary);
}