From e72253a7b448f7ceb8d4728bd8230d9fdf616320 Mon Sep 17 00:00:00 2001 From: wRadion Date: Mon, 29 Dec 2025 17:09:43 +0100 Subject: [PATCH 1/4] fix: handle legacy pbs in friendlist frontend (show less details) --- frontend/src/ts/pages/friends.ts | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/frontend/src/ts/pages/friends.ts b/frontend/src/ts/pages/friends.ts index e192fee44dda..9bdeb1b7041d 100644 --- a/frontend/src/ts/pages/friends.ts +++ b/frontend/src/ts/pages/friends.ts @@ -181,10 +181,10 @@ function updatePendingConnections(): void { + + @@ -304,7 +304,7 @@ function buildFriendRow(entry: Friend): HTMLTableRowElement { entry.streak?.maxLength, "longest streak", )}" data-balloon-pos="up"> - ${formatStreak(entry.streak?.length)} + ${formatStreak(entry.streak?.length)} ${top60?.acc ?? "-"} ${actions} - + `; @@ -367,14 +367,25 @@ function formatPb(entry?: PersonalBest): details: "", }; - result.details = [ + const details = [ `${getLanguageDisplayString(entry.language)}`, `${result.wpm} wpm`, - `${result.acc} acc`, - `${result.raw} raw`, - `${result.con} con`, - `${dateFormat(entry.timestamp, "dd MMM yyyy")}`, - ].join("\n"); + ]; + + if (entry.acc) { + details.push(`${result.acc} acc`); + } + if (entry.raw) { + details.push(`${result.raw} raw`); + } + if (entry.consistency) { + details.push(`${result.con} con`); + } + if (entry.timestamp) { + details.push(`${dateFormat(entry.timestamp, "dd MMM yyyy")}`); + } + + result.details = details.join("\n"); return result; } From 0ed6973c2d2216312236bb178f5d9e84f7c56a2b Mon Sep 17 00:00:00 2001 From: Miodec <13181393+Miodec@users.noreply.github.com> Date: Mon, 29 Dec 2025 16:32:00 +0000 Subject: [PATCH 2/4] fix formatting --- pnpm-lock.yaml | 62 ++++---------------------------------------------- 1 file changed, 4 insertions(+), 58 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ad546b1d9e09..1f2334370adb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -224,7 +224,7 @@ importers: version: 10.0.0 '@vitest/coverage-v8': specifier: 4.0.15 - version: 4.0.15(vitest@4.0.15(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1)) + version: 4.0.15(vitest@4.0.15(@types/node@24.9.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1)) concurrently: specifier: 8.2.2 version: 8.2.2 @@ -483,7 +483,7 @@ importers: version: 1.1.0(vite@7.1.12(@types/node@24.9.1)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1))(workbox-build@7.1.1)(workbox-window@7.1.0) vitest: specifier: 4.0.15 - version: 4.0.15(@types/node@24.9.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1) + version: 4.0.15(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1) packages/contracts: dependencies: @@ -6252,6 +6252,7 @@ packages: keygrip@1.1.0: resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} engines: {node: '>= 0.6'} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -12548,23 +12549,6 @@ snapshots: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 - '@vitest/coverage-v8@4.0.15(vitest@4.0.15(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1))': - dependencies: - '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.15 - ast-v8-to-istanbul: 0.3.8 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 5.0.6 - istanbul-reports: 3.2.0 - magicast: 0.5.1 - obug: 2.1.1 - std-env: 3.10.0 - tinyrainbow: 3.0.3 - vitest: 4.0.15(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1) - transitivePeerDependencies: - - supports-color - '@vitest/coverage-v8@4.0.15(vitest@4.0.15(@types/node@20.5.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1))': dependencies: '@bcoe/v8-coverage': 1.0.2 @@ -12595,7 +12579,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.15(@types/node@24.9.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1) + vitest: 4.0.15(@opentelemetry/api@1.8.0)(@types/node@24.9.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -19513,44 +19497,6 @@ snapshots: - tsx - yaml - vitest@4.0.15(@types/node@24.9.1)(happy-dom@20.0.10)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1): - dependencies: - '@vitest/expect': 4.0.15 - '@vitest/mocker': 4.0.15(vite@7.1.12(@types/node@24.9.1)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1)) - '@vitest/pretty-format': 4.0.15 - '@vitest/runner': 4.0.15 - '@vitest/snapshot': 4.0.15 - '@vitest/spy': 4.0.15 - '@vitest/utils': 4.0.15 - es-module-lexer: 1.7.0 - expect-type: 1.2.2 - magic-string: 0.30.21 - obug: 2.1.1 - pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.10.0 - tinybench: 2.9.0 - tinyexec: 1.0.2 - tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.1.12(@types/node@24.9.1)(sass@1.70.0)(terser@5.44.1)(tsx@4.16.2)(yaml@2.8.1) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/node': 24.9.1 - happy-dom: 20.0.10 - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml - vlq@0.2.3: {} walkdir@0.4.1: {} From 017f34a4fef62df772aea611e554cb56f075e04c Mon Sep 17 00:00:00 2001 From: wRadion Date: Mon, 29 Dec 2025 17:49:46 +0100 Subject: [PATCH 3/4] fix(friendlist): handle edge cases where entry acc/raw/consistenty could be 0 --- frontend/src/ts/pages/friends.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/src/ts/pages/friends.ts b/frontend/src/ts/pages/friends.ts index 9bdeb1b7041d..b7c720984e19 100644 --- a/frontend/src/ts/pages/friends.ts +++ b/frontend/src/ts/pages/friends.ts @@ -372,13 +372,13 @@ function formatPb(entry?: PersonalBest): `${result.wpm} wpm`, ]; - if (entry.acc) { + if (entry.acc || entry.acc === 0) { details.push(`${result.acc} acc`); } - if (entry.raw) { + if (entry.raw || entry.raw === 0) { details.push(`${result.raw} raw`); } - if (entry.consistency) { + if (entry.consistency || entry.consistency === 0) { details.push(`${result.con} con`); } if (entry.timestamp) { From c67ddbc147fb70bc28d885c4133e2b629e8ddfdc Mon Sep 17 00:00:00 2001 From: wRadion Date: Mon, 29 Dec 2025 19:08:57 +0100 Subject: [PATCH 4/4] style: use isSafeNumber for conditions --- frontend/src/ts/pages/friends.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/frontend/src/ts/pages/friends.ts b/frontend/src/ts/pages/friends.ts index b7c720984e19..d4806c893ebd 100644 --- a/frontend/src/ts/pages/friends.ts +++ b/frontend/src/ts/pages/friends.ts @@ -372,16 +372,16 @@ function formatPb(entry?: PersonalBest): `${result.wpm} wpm`, ]; - if (entry.acc || entry.acc === 0) { + if (isSafeNumber(entry.acc)) { details.push(`${result.acc} acc`); } - if (entry.raw || entry.raw === 0) { + if (isSafeNumber(entry.raw)) { details.push(`${result.raw} raw`); } - if (entry.consistency || entry.consistency === 0) { + if (isSafeNumber(entry.consistency)) { details.push(`${result.con} con`); } - if (entry.timestamp) { + if (isSafeNumber(entry.timestamp)) { details.push(`${dateFormat(entry.timestamp, "dd MMM yyyy")}`); }