Fix "+ Réplique" qui remplaçait la bulle au lieu d'en ajouter une
Bug : questSaveDialogues() adoptait la réponse du serveur comme nouvel état local après chaque enregistrement. Une bulle fraîchement ajoutée a un texte encore vide (rien tapé) — sanitize_quest_dialogues.py la rejette légitimement (jamais de réplique sans texte persistée) — donc la réponse renvoyait un tableau amputé de cette bulle, que le client adoptait aveuglément, effaçant la bulle en cours d'écriture. Le clic suivant sur "+ Réplique" repartait donc du même état qu'avant, semblant "remplacer" la bulle plutôt que d'en ajouter une seconde. Le client ne resynchronise plus jamais son état depuis la réponse d'enregistrement — il est déjà la seule source de vérité pendant l'édition. Colonnes de dialogue : occupent maintenant toute la hauteur disponible de la modale plein écran et défilent chacune indépendamment (titre et bouton "+ Réplique" restent fixes), au lieu d'une hauteur minimale fixe. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
521792fe00
commit
077af2234d
@@ -321,12 +321,19 @@ function questUpdateField(questId, field, value) {
|
||||
|
||||
// Dialogues : toujours les 3 colonnes ENTIÈRES postées ensemble (voir
|
||||
// db/quests/set_quest_dialogues.py) — jamais une réplique isolée.
|
||||
// N'ADOPTE JAMAIS la réponse du serveur comme nouvel état local (bug
|
||||
// corrigé : sanitize_quest_dialogues.py rejette toute réplique au texte
|
||||
// encore vide — juste ajoutée, pas encore tapée — donc chaque
|
||||
// enregistrement renvoyait un tableau amputé de la bulle en cours
|
||||
// d'écriture ; l'adopter effaçait silencieusement la bulle que l'auteur
|
||||
// venait d'ajouter, et le clic suivant sur "+ Réplique" semblait la
|
||||
// "remplacer" au lieu d'en ajouter une seconde). L'état local, construit
|
||||
// par des mutations client explicites, est déjà la seule source de
|
||||
// vérité pendant l'édition.
|
||||
function questSaveDialogues(quest) {
|
||||
fetch('/game/' + GAME_SLUG + '/quests/' + quest.id + '/dialogues', {
|
||||
method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ dialogues: quest.dialogues }),
|
||||
})
|
||||
.then(function (r) { return r.json(); })
|
||||
.then(function (json) { if (json.dialogues) quest.dialogues = json.dialogues; });
|
||||
});
|
||||
}
|
||||
|
||||
// Alterne "Joueur" <-> le premier personnage nommé (ou "PNJ" faute de
|
||||
|
||||
Reference in New Issue
Block a user