1
0
mirror of https://github.com/jcwimer/wrestlingApp synced 2026-03-25 01:14:43 +00:00

Fixed match stats when localstorage is empty but server data is not.

This commit is contained in:
2025-04-28 16:35:24 -04:00
parent 1fcaec876f
commit 68a7b214c9

View File

@@ -310,12 +310,77 @@ function updateStatsBox(wrestler, timerKey, elapsedSeconds) {
const formattedTime = `${Math.floor(elapsedSeconds / 60)}m ${elapsedSeconds % 60}s`;
updateStats(wrestler, `${timerType}: ${formattedTime}`);
}
// Function to initialize timer displays based on loaded data
function initializeTimers(wrestler) {
// Implementation of initializeTimers method
if (!wrestler || !wrestler.timers) return;
updateTimerDisplay(wrestler, 'injury', wrestler.timers.injury.time || 0);
updateTimerDisplay(wrestler, 'blood', wrestler.timers.blood.time || 0);
}
// Modified function to load from local storage conditionally
function initializeFromLocalStorage() {
console.log("[Init] Initializing from local storage...");
// ... existing initializeFromLocalStorage logic ...
console.log("[Init] Initializing stats state...");
const now = new Date().toISOString(); // Get current time for potential updates
// Process Wrestler 1
const localDataW1 = loadFromLocalStorage('w1');
// Check if local data exists, has non-blank stats, and an updated_at timestamp
const useLocalW1 = localDataW1 && localDataW1.stats && typeof localDataW1.stats === 'string' && localDataW1.stats.trim() !== '' && localDataW1.updated_at;
if (useLocalW1) {
console.log("[Init W1] Using valid data from local storage.");
w1.stats = localDataW1.stats;
w1.updated_at = localDataW1.updated_at;
// Ensure timers object exists and has the expected structure
w1.timers = localDataW1.timers && localDataW1.timers.injury && localDataW1.timers.blood
? localDataW1.timers
: { injury: { time: 0, startTime: null, interval: null }, blood: { time: 0, startTime: null, interval: null } };
} else {
// Use server data (already in w1.stats from updateJsValues)
// Check if local data exists but is invalid/old, or doesn't exist at all
if (localDataW1) {
console.log("[Init W1] Local storage data invalid/blank/missing timestamp. Overwriting with server data.");
} else {
console.log("[Init W1] No local storage data found. Using server data.");
}
// w1.stats already holds server value
w1.updated_at = now; // Mark as updated now
w1.timers = { injury: { time: 0, startTime: null, interval: null }, blood: { time: 0, startTime: null, interval: null } }; // Reset timers
saveToLocalStorage(w1); // Save the server state to local storage
}
// Process Wrestler 2
const localDataW2 = loadFromLocalStorage('w2');
// Check if local data exists, has non-blank stats, and an updated_at timestamp
const useLocalW2 = localDataW2 && localDataW2.stats && typeof localDataW2.stats === 'string' && localDataW2.stats.trim() !== '' && localDataW2.updated_at;
if (useLocalW2) {
console.log("[Init W2] Using valid data from local storage.");
w2.stats = localDataW2.stats;
w2.updated_at = localDataW2.updated_at;
// Ensure timers object exists
w2.timers = localDataW2.timers && localDataW2.timers.injury && localDataW2.timers.blood
? localDataW2.timers
: { injury: { time: 0, startTime: null, interval: null }, blood: { time: 0, startTime: null, interval: null } };
} else {
// Use server data (already in w2.stats from updateJsValues)
if (localDataW2) {
console.log("[Init W2] Local storage data invalid/blank/missing timestamp. Overwriting with server data.");
} else {
console.log("[Init W2] No local storage data found. Using server data.");
}
// w2.stats already holds server value
w2.updated_at = now; // Mark as updated now
w2.timers = { injury: { time: 0, startTime: null, interval: null }, blood: { time: 0, startTime: null, interval: null } }; // Reset timers
saveToLocalStorage(w2); // Save the server state to local storage
}
// After deciding state, update HTML elements and timer displays
updateHtmlValues();
initializeTimers(w1);
initializeTimers(w2);
console.log("[Init] State initialization complete.");
}
// ############### ACTION CABLE LIFECYCLE (Define Before Listeners) #############
@@ -425,18 +490,24 @@ document.addEventListener("turbolinks:load", () => {
// --- Check if we are actually on the match stats page ---
const statsElementCheck = document.getElementById('match_w1_stat'); // Check for stats textarea
if (!statsElementCheck) {
console.log("Stats Event: Not on match stats page, skipping AC setup.");
console.log("Stats Event: Not on match stats page, skipping init and AC setup.");
cleanupSubscription(); // Cleanup just in case
return;
}
// --- End Check ---
initializeFromLocalStorage(); // Load state first
// 1. Initialize JS objects with server-rendered values from HTML first
updateJsValues();
// 2. Attempt to load from local storage, overwriting server values only if local is valid and non-blank
initializeFromLocalStorage(); // This now contains the core logic
// 3. Setup ActionCable
const matchId = <%= @match.id %>;
if (matchId) {
setupSubscription(matchId); // Then setup ActionCable
setupSubscription(matchId);
} else {
console.warn("Stats Event: turbolinks:load - Could not determine match ID");
console.warn("Stats Event: turbolinks:load - Could not determine match ID for AC setup.");
}
});