diff --git a/static/js/tts-preview.js b/static/js/tts-preview.js index 3ba9d32..6ac2d13 100644 --- a/static/js/tts-preview.js +++ b/static/js/tts-preview.js @@ -709,6 +709,8 @@ function perfHistoryAvatarHtml(entry) { } +const PERF_HISTORY_TEXT_KEYS = ['backend', 'language', 'gender', 'voice', 'device']; + function perfHistorySortValue(entry, key) { switch (key) { case 'backend': return String(entry.backend || '').toLowerCase(); @@ -716,21 +718,22 @@ function perfHistorySortValue(entry, key) { case 'gender': return String(perfHistoryGenderLabel(perfHistoryVoiceMeta(entry).gender) || '').toLowerCase(); case 'voice': return String(entry.voice || '').toLowerCase(); case 'device': return String(perfHistoryDeviceLabel(entry) || '').toLowerCase(); - case 'avgLatencyMs': return Number(entry.avgLatencyMs); - case 'minLatencyMs': return Number(entry.minLatencyMs); - case 'avgRtf': return Number(entry.avgRtf); - case 'ts': - default: return Number(entry.ts); + default: return ''; } } +function perfHistoryNumericValue(entry, key) { + return Number(['avgLatencyMs', 'minLatencyMs', 'avgRtf'].includes(key) ? entry[key] : entry.ts); +} + function perfHistoryCompare(a, b) { - const av = perfHistorySortValue(a, PERF_HISTORY_SORT.key); - const bv = perfHistorySortValue(b, PERF_HISTORY_SORT.key); + const key = PERF_HISTORY_SORT.key; let result = 0; - if (typeof av === 'string' || typeof bv === 'string') { - result = String(av).localeCompare(String(bv), undefined, { numeric: true, sensitivity: 'base' }); + if (PERF_HISTORY_TEXT_KEYS.includes(key)) { + result = perfHistorySortValue(a, key).localeCompare(perfHistorySortValue(b, key), undefined, { numeric: true, sensitivity: 'base' }); } else { + const av = perfHistoryNumericValue(a, key); + const bv = perfHistoryNumericValue(b, key); const an = Number.isFinite(av) ? av : -Infinity; const bn = Number.isFinite(bv) ? bv : -Infinity; result = an === bn ? 0 : an - bn;