Cette page charge la vraie proposition via l'API publique et rend les vrais composants de fiche. Les aperçus sont des iframes, qui ont leur propre viewport : les points de rupture réagissent comme sur un vrai appareil. Aucun bouton n'envoie quoi que ce soit au back.
Le bloc est à sa place sous la proposition, puis se colle au bas de l'écran dès que le défilement le ferait sortir, en pleine largeur. Un seul bloc, donc pas de doublon, et aucun JavaScript, donc rien à désynchroniser.
position: sticky; bottom: 0
Annoncer un montant total sur un évènement en billetterie laisse croire à l'hôte qu'il achète la prestation. On montre le prix des places et le public visé, qui lui disent si c'est réalisable chez lui. Le montant ne réapparaît que quand l'hôte règle vraiment.
wish.tariffes, wish.minimumPublicExpected, place.maxPublic
Hôte qui reçoit, artiste qui reçoit, et les deux vues de celui qui a envoyé. La page actuelle ne montre aujourd'hui aucun état à l'émetteur tant que la proposition est en attente.
sélecteur Point de vue
« Voir le détail » n'ouvrait une modale que pour révéler une heure. Une seule date, comme le front en envoie depuis qu'on a vu que plusieurs dates étaient lues comme un choix à faire.
components/ProposalDetailCard.vue:21
refusalMessage existe côté back et déclenche mail, SMS, message interne et ouverture de la conversation. Le front ne l'envoyait jamais : tous les refus passaient par la branche froide.
ProposalRefusalType.php:35, ProposalSubscriber.php:171
Sans fuseau explicite, Luxon rend dans le fuseau du serveur, et en build de production Vue garde le texte du serveur. Un créneau choisi à 18h00 s'affiche 16h00 pour tout le monde. Comparez les deux versions.
setZone('Europe/Paris')