fix: preload historik per spelare så history-chart renderas direkt #10
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Beskrivning
History-charten i den expanderade spelarraden renderas inte vid första expansionen — den dyker först upp vid andra (eller senare) klick på samma rad. Pattern är att de tomma
<div class="player-chart">-elementen finns i DOM:en efter HTMX-swappet, menchart.js-initialiseringen hinner antingen inte köra, eller väljer fel container, på första swappen.Konkret bug-flöde idag:
togglePlayerHistory(pdgaNumber)ipublic/js/players.jsvisar.expanded-content-raden./partials/player-history/:pdgaNumberoch swappar in markupen i#history-content-{pdgaNumber}.setupTooltipsAfterSwap(kopplad mothtmx:afterSwap) försöker hitta.player-chart/.chart-containeri swappad markup och anropacreateRatingChart().Förväntat beteende
History-charten ska finnas i DOM:en (men dold) redan vid sidladdning. När användaren expanderar raden ska charten synas omedelbart utan HTMX-runda och utan race-condition.
Föreslagen lösning: preload server-side, droppa HTMX lazy-load
Istället för att försöka fixa race-conditionen mellan HTMX-swap och chart-init, rendera
player-history-partialen inline för varje rad direkt iviews/partials/ratings-table.ejs. Hela.expanded-content-raden blir då fullt populerad vid första render, dold meddisplay: nonetills användaren expanderar.Det betyder:
/partials/ratings-table.chart.jskan initialiseras vid förstasetupTooltipsAfterSwap-anrop (samma som körs när tabellen laddas), och hitta alla.player-chart-element samtidigt.Tekniska noteringar
Datakontrakt-ändring: chart.js förväntar sig en
history-array av{ rating, date }-objekt. Idag exponerargetAllRatingsFromDB(src/services/player-service.js) baramonthlyHistory: number[]per spelare (introducerades i #6 för sparklinerna). Två alternativ:ratingHistory: { rating, date }[]på player-objektet — bulkhämta i samma stil somgetAllMonthlyHistoriesFromDB(en query, gruppera i minnet). Mer data per request men hela serien finns redan irating_history-tabellen.(a) är att föredra — minimerar designavvikelser och datavolymen är trivial (~11 spelare × N månader).
Filer som troligen påverkas:
src/services/player-service.js— exponeraratingHistoryi bulkpathensrc/models/player.js— eventuellt engetAllRatingHistoriesFromDBhelpersrc/routes/players.js—/partials/ratings-table-routen passerar full history per spelareviews/partials/ratings-table.ejs— inkluderaplayer-historypartialen inline per rad, ta bortloading-chart-placeholdernpublic/js/players.js—togglePlayerHistoryslutar trigga HTMX-fetch (den är redan idempotent men koden kan förenklas)src/routes/players.js—/partials/player-history/:pdgaNumber-endpointen blir oanvänd. Antingen ta bort eller behåll för bakåtkompatibilitet.Steg för att reproducera
/i webbläsaren efterdco restart(ren cache).Scope
Inkluderat: Preload av rating history server-side, refaktor av charts init så att första-klick alltid funkar, datakontrakts-uppdatering för
ratingHistory-fältet.Exkluderat: Sparkline-rendering (redan server-side, fungerar). Topbar-refresh-logik. Övriga sidor (
/courses).Beroenden
Bygger på #4 (shared visual layer) och #7 (expanderad rad). Lösning sammanfaller med arbetet på
feat/shared-visual-layer-topbar-4-grenen, men hör hemma som separat issue/PR eftersom den fixar en regressions-bug snarare än levererar ny funktionalitet.