From 7c3ec105d5aba69981c1cf2810db21fce0733e31 Mon Sep 17 00:00:00 2001 From: david raistrick <1108844+keen99@users.noreply.github.com> Date: Wed, 1 Jul 2026 16:03:38 -0400 Subject: [PATCH] refactor: App.js 1-list display + start/resume (no re-sort) 3 sites fixed to match shared 1-list model: - line 1216 display: sortedParticipants = participants[] (no re-sort). GM list renders participants[] directly = turnOrderIds. - startCombat inline: sort ALL participants by init (active+inactive), first active = current, persist participants[] reordered + turnOrderIds. - resume inline: no re-sort on resume. turnOrderIds unchanged. Display === rotation === turnOrderIds by construction (1-list invariant). Build green. --- src/App.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/App.js b/src/App.js index 0a97649..05488e0 100644 --- a/src/App.js +++ b/src/App.js @@ -1213,7 +1213,8 @@ function ParticipantManager({ encounter, encounterPath, campaignCharacters }) { setDraggedItemId(null); }; - const sortedParticipants = sortParticipantsByInitiative(participants, participants); + // 1-list model: participants[] IS the display order. No re-sort. + const sortedParticipants = participants; const initiativeGroups = participants.reduce((acc, p) => { acc[p.initiative] = (acc[p.initiative] || 0) + 1; @@ -1595,14 +1596,18 @@ function InitiativeControls({ campaignId, encounter, encounterPath }) { return; } - const sortedParticipants = sortParticipantsByInitiative(activeParticipants, encounter.participants); + // 1-list model: sort ALL participants by init (active+inactive), + // first active = current. Matches shared.startEncounter. + const sortedParticipants = sortParticipantsByInitiative(encounter.participants, encounter.participants); + const firstActive = sortedParticipants.find(p => p.isActive); try { await storage.updateDoc(encounterPath, { isStarted: true, isPaused: false, round: 1, - currentTurnParticipantId: sortedParticipants[0].id, + participants: sortedParticipants, + currentTurnParticipantId: firstActive.id, turnOrderIds: sortedParticipants.map(p => p.id) }); @@ -1635,9 +1640,9 @@ function InitiativeControls({ campaignId, encounter, encounterPath }) { let newTurnOrderIds = encounter.turnOrderIds; if (!newPausedState && encounter.isPaused) { - const activeParticipants = encounter.participants.filter(p => p.isActive); - const sortedParticipants = sortParticipantsByInitiative(activeParticipants, encounter.participants); - newTurnOrderIds = sortedParticipants.map(p => p.id); + // 1-list model: no re-sort on resume. turnOrderIds already mirrors + // participants[] (set at start/add/reorder). Resume = unpause only. + newTurnOrderIds = encounter.turnOrderIds; } try {