From fba1bea247d928ead1a77e7792f9f663f709cc74 Mon Sep 17 00:00:00 2001 From: Samuel Enocsson Date: Fri, 22 May 2026 11:47:47 +0200 Subject: [PATCH] =?UTF-8?q?refactor:=20address=20review=20feedback=20?= =?UTF-8?q?=E2=80=94=20extract=20date=20helper,=20rename=20listener?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/js/players.js | 5 ++--- src/routes/players.js | 10 +++------- src/services/player-service.js | 13 +++++++++---- views/pages/index.ejs | 2 +- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/public/js/players.js b/public/js/players.js index 563434c..d310850 100644 --- a/public/js/players.js +++ b/public/js/players.js @@ -40,15 +40,14 @@ function initChartsIn(rootEl) { }); } -function setupTooltipsAfterSwap() { +function setupAfterTableSwap() { document.body.addEventListener('htmx:afterSwap', function(event) { const target = event.detail.target; if (target.id === 'ratings-table') { initRatingsTooltips(); - initChartsIn(target); // initial table render — chart any pre-loaded .player-chart + initChartsIn(target); return; } - // refreshRatingHistory still re-fetches into #history-content- if (target.id && target.id.startsWith('history-content-')) { initChartsIn(target); } diff --git a/src/routes/players.js b/src/routes/players.js index e09a85c..064b77e 100644 --- a/src/routes/players.js +++ b/src/routes/players.js @@ -5,7 +5,7 @@ const { getPlayerFromDB, savePlayerToDB, getRatingHistoryFromDB, saveRatingHisto const { fetchPlayerDataHTTP, parsePlayerData, fetchRatingHistory, parseRatingHistory } = require('../scrapers/player-http'); const { getOfficialRatingHistory, getOptimizedPlayerRounds } = require('../scrapers/player-puppeteer'); const { launchBrowser } = require('../scrapers/browser'); -const { getPlayerDataFromDB, scrapePDGARating, getAllRatingsFromDB, refreshAllPlayersInDB, getPredictedRatingFromDB } = require('../services/player-service'); +const { getPlayerDataFromDB, scrapePDGARating, getAllRatingsFromDB, refreshAllPlayersInDB, getPredictedRatingFromDB, formatDisplayDate } = require('../services/player-service'); const { getTopbarLocals } = require('../services/topbar-service'); const { calculatePredictedRating } = require('../services/rating-calculator'); const logger = require('../logger'); @@ -63,7 +63,7 @@ router.get('/partials/player-history/:pdgaNumber', async (req, res) => { const formattedHistory = (history || []).map(row => ({ date: row.date, rating: row.rating, - displayDate: new Date(row.date).toLocaleDateString('en-US', { day: '2-digit', month: 'short', year: 'numeric' }) + displayDate: formatDisplayDate(row.date) })); const player = await getPlayerDataFromDB(pdgaNumber); @@ -119,11 +119,7 @@ router.get('/api/rating-history/:pdgaNumber', async (req, res) => { const formattedHistory = cachedHistory.map(row => ({ date: row.date, rating: row.rating, - displayDate: new Date(row.date).toLocaleDateString('en-US', { - day: '2-digit', - month: 'short', - year: 'numeric' - }) + displayDate: formatDisplayDate(row.date) })); res.json({ diff --git a/src/services/player-service.js b/src/services/player-service.js index e7efe7e..98a4517 100644 --- a/src/services/player-service.js +++ b/src/services/player-service.js @@ -4,6 +4,12 @@ const { fetchPlayerDataHTTP, parsePlayerData } = require('../scrapers/player-htt const { calculatePredictedRating } = require('./rating-calculator'); const logger = require('../logger'); +function formatDisplayDate(dateStr) { + return new Date(dateStr).toLocaleDateString('en-US', { + day: '2-digit', month: 'short', year: 'numeric' + }); +} + // Derives previous-month rating and the delta to it. Prefers PDGA's reported // rating_change (canonical), falls back to our own monthly snapshots when // rating_change is missing — common for players whose latest scrape failed. @@ -194,9 +200,7 @@ async function getAllRatingsFromDB(progressCallback = null) { playerData.ratingHistory = rawHistory.map(row => ({ date: row.date, rating: row.rating, - displayDate: new Date(row.date).toLocaleDateString('en-US', { - day: '2-digit', month: 'short', year: 'numeric' - }) + displayDate: formatDisplayDate(row.date) })); // Re-derive now that history is attached — bulk path skipped includeMonthlyHistory const derived = deriveMonthlyDeltas(playerData.rating, player.rating_change, playerData.monthlyHistory); @@ -354,5 +358,6 @@ module.exports = { getPredictedRatingFromDB, getAllRatingsFromDB, refreshAllPlayersInDB, - computeKpis + computeKpis, + formatDisplayDate }; diff --git a/views/pages/index.ejs b/views/pages/index.ejs index c600e18..3b962b9 100644 --- a/views/pages/index.ejs +++ b/views/pages/index.ejs @@ -109,7 +109,7 @@ activePage: 'players', cssFiles: ['players.css'], jsFiles: ['tooltips.js', 'chart.js', 'players.js'], - initScript: 'setupTooltipsAfterSwap();', + initScript: 'setupAfterTableSwap();', body: body, modals: modals }) %>