diff --git a/src/app.js b/src/app.js index d9368a9..566a0a6 100644 --- a/src/app.js +++ b/src/app.js @@ -310,7 +310,7 @@ const buildDriverActivePracticeStats = (trainingState, driverId, nowTs = Date.no const buildTrainingRecommendation = (stats) => buildTrainingRecommendationLogic(stats); const getTrainingGoalProgress = (goal, stats) => getTrainingGoalProgressLogic(goal, stats); const getNextTrainingMilestone = (stats) => getNextTrainingMilestoneLogic(stats); -const renderTraining = () => renderTrainingView({ state, dom, t, escapeHtml, formatLap, formatRaceClock, uid, saveState, renderView, normalizeTrainingState, syncTrainingLedger, buildDriverTrainingStats, buildDriverTimingChannelStats: buildDriverTimingChannelStatsLogic, buildDriverActivePracticeStats, buildTrainingRecommendation, getTrainingGoalProgress, getNextTrainingMilestone, buildTrainingMissions: buildTrainingMissionsLogic, buildTrainingHighlights: buildTrainingHighlightsLogic, getClubTrainingGoalProgress: getClubTrainingGoalProgressLogic, buildTrainingPaceBuckets: buildTrainingPaceBucketsLogic, buildTrainingWeekdayStats: buildTrainingWeekdayStatsLogic, buildTrainingStintAnalysis: buildTrainingStintAnalysisLogic, buildTrainingMarkerComparisons: buildTrainingMarkerComparisonsLogic, getSelectedDriverId: () => selectedTrainingDriverId, setSelectedDriverId: (value) => { selectedTrainingDriverId = value; updateViewUrl("training", value, selectedTrainingClassId); }, getSelectedClassId: () => selectedTrainingClassId, setSelectedClassId: (value) => { selectedTrainingClassId = value; updateViewUrl("training", selectedTrainingDriverId, value); } }); +const renderTraining = () => renderTrainingView({ state, dom, t, escapeHtml, formatLap, formatRaceClock, uid, saveState, syncStateToBackend, renderView, normalizeTrainingState, syncTrainingLedger, buildDriverTrainingStats, buildDriverTimingChannelStats: buildDriverTimingChannelStatsLogic, buildDriverActivePracticeStats, buildTrainingRecommendation, getTrainingGoalProgress, getNextTrainingMilestone, buildTrainingMissions: buildTrainingMissionsLogic, buildTrainingHighlights: buildTrainingHighlightsLogic, getClubTrainingGoalProgress: getClubTrainingGoalProgressLogic, buildTrainingPaceBuckets: buildTrainingPaceBucketsLogic, buildTrainingWeekdayStats: buildTrainingWeekdayStatsLogic, buildTrainingStintAnalysis: buildTrainingStintAnalysisLogic, buildTrainingMarkerComparisons: buildTrainingMarkerComparisonsLogic, getSelectedDriverId: () => selectedTrainingDriverId, setSelectedDriverId: (value) => { selectedTrainingDriverId = value; updateViewUrl("training", value, selectedTrainingClassId); }, getSelectedClassId: () => selectedTrainingClassId, setSelectedClassId: (value) => { selectedTrainingClassId = value; updateViewUrl("training", selectedTrainingDriverId, value); } }); const applyCompetitorCorrection = (session, row, options = {}) => { const result = applyCompetitorCorrectionLogic(session, row, options, { ensureSessionResult, uid, t, formatLap, saveState }); if (!options.reset && ((Number(options.timeMsDelta || 0) > 0) || (Number(options.lapDelta || 0) < 0))) { diff --git a/src/training_views.js b/src/training_views.js index 6f66738..90783c5 100644 --- a/src/training_views.js +++ b/src/training_views.js @@ -29,6 +29,8 @@ function renderStintRow(row, { t, escapeHtml, formatLap, formatRaceClock }) { export function renderTrainingView(deps) { const moreStatsWasOpen = Boolean(document.getElementById("trainingMoreStats")?.open); + const goalsSharingElement = document.getElementById("trainingGoalsSharing"); + const goalsSharingWasOpen = goalsSharingElement ? goalsSharingElement.open : true; const { state, dom, @@ -38,6 +40,7 @@ export function renderTrainingView(deps) { formatRaceClock, uid, saveState, + syncStateToBackend, renderView, normalizeTrainingState, syncTrainingLedger, @@ -420,7 +423,7 @@ export function renderTrainingView(deps) { ` : ""}
-
+
${escapeHtml(t("training.manage_goals_sharing"))}${escapeHtml(t("training.manage_goals_sharing_hint"))} + @@ -700,7 +703,7 @@ export function renderTrainingView(deps) { }); }); - document.getElementById("trainingPublicBaseSave")?.addEventListener("click", () => { + document.getElementById("trainingPublicBaseSave")?.addEventListener("click", async () => { const input = document.getElementById("trainingPublicBaseUrl"); const normalized = normalizePublicBaseUrl(input?.value); if (input?.value && !normalized) { @@ -709,6 +712,7 @@ export function renderTrainingView(deps) { } state.settings.publicBaseUrl = normalized; saveState(); + await syncStateToBackend(); renderView(); }); document.getElementById("trainingPublicAddressDetect")?.addEventListener("click", async () => { @@ -725,9 +729,10 @@ export function renderTrainingView(deps) { if (status) status.textContent = t("training.detect_public_ip_failed"); } }); - document.getElementById("trainingPublicProfileEnable")?.addEventListener("click", () => { + document.getElementById("trainingPublicProfileEnable")?.addEventListener("click", async () => { replacePublicProfileShare(state, selectedProfileId, profileReferences); saveState(); + await syncStateToBackend(); renderView(); }); document.getElementById("trainingPublicProfileCopy")?.addEventListener("click", async () => { @@ -736,15 +741,17 @@ export function renderTrainingView(deps) { document.getElementById("trainingPublicProfileOpen")?.addEventListener("click", () => { window.open(publicProfileUrl, "_blank", "noopener,noreferrer"); }); - document.getElementById("trainingPublicProfileRotate")?.addEventListener("click", () => { + document.getElementById("trainingPublicProfileRotate")?.addEventListener("click", async () => { if (!confirm(t("training.replace_link_confirm"))) return; replacePublicProfileShare(state, selectedProfileId, profileReferences); saveState(); + await syncStateToBackend(); renderView(); }); - document.getElementById("trainingPublicProfileDisable")?.addEventListener("click", () => { + document.getElementById("trainingPublicProfileDisable")?.addEventListener("click", async () => { state.training.shares = state.training.shares.map((share) => profileReferences.has(String(share.driverId || "")) ? { ...share, enabled: false } : share); saveState(); + await syncStateToBackend(); renderView(); }); document.querySelectorAll(".training-club-driver").forEach((button) => {