diff --git a/public/intl/messages/ar-SA.json b/public/intl/messages/ar-SA.json
index 5b37ed759..dfae6b16d 100644
--- a/public/intl/messages/ar-SA.json
+++ b/public/intl/messages/ar-SA.json
@@ -240,7 +240,7 @@
"query": "استعلام",
"query-parameters": "معاملات الاستعلام",
"realtime": "الوقت الفعلي",
- "recorded-at": "سُجِّل في",
+ "recorded": "سُجِّل في",
"referral": "إحالة",
"referrer": "المرجع",
"referrers": "التحويلات",
diff --git a/public/intl/messages/be-BY.json b/public/intl/messages/be-BY.json
index f1dd20074..4c1d35461 100644
--- a/public/intl/messages/be-BY.json
+++ b/public/intl/messages/be-BY.json
@@ -240,7 +240,7 @@
"query": "Запыт",
"query-parameters": "Параметры запыту",
"realtime": "У рэяльным часе",
- "recorded-at": "Запісана ў",
+ "recorded": "Запісана ў",
"referral": "Рэферал",
"referrer": "Рэферэр",
"referrers": "Рэферэры",
diff --git a/public/intl/messages/bg-BG.json b/public/intl/messages/bg-BG.json
index cde9b371a..fa58a6878 100644
--- a/public/intl/messages/bg-BG.json
+++ b/public/intl/messages/bg-BG.json
@@ -240,7 +240,7 @@
"query": "Запитване",
"query-parameters": "Параметри на търсене",
"realtime": "В реално време",
- "recorded-at": "Записано на",
+ "recorded": "Записано на",
"referral": "Реферал",
"referrer": "Референт",
"referrers": "Референти",
diff --git a/public/intl/messages/bn-BD.json b/public/intl/messages/bn-BD.json
index f48ecbcd1..85c33ea21 100644
--- a/public/intl/messages/bn-BD.json
+++ b/public/intl/messages/bn-BD.json
@@ -240,7 +240,7 @@
"query": "কোয়েরি",
"query-parameters": "কোয়েরি প্যারামিটার",
"realtime": "সরাসরি",
- "recorded-at": "রেকর্ড করা হয়েছে",
+ "recorded": "রেকর্ড করা হয়েছে",
"referral": "রেফারেল",
"referrer": "রেফারার",
"referrers": "রেফারার্স",
diff --git a/public/intl/messages/bs-BA.json b/public/intl/messages/bs-BA.json
index 04da17b15..7a42b4e08 100644
--- a/public/intl/messages/bs-BA.json
+++ b/public/intl/messages/bs-BA.json
@@ -240,7 +240,7 @@
"query": "Upit",
"query-parameters": "Parametri upita",
"realtime": "Realno vrijeme",
- "recorded-at": "Snimljeno u",
+ "recorded": "Snimljeno u",
"referral": "Preporuka",
"referrer": "Preporučilac",
"referrers": "Preporučioci",
diff --git a/public/intl/messages/ca-ES.json b/public/intl/messages/ca-ES.json
index b4cb02db6..1adc4743b 100644
--- a/public/intl/messages/ca-ES.json
+++ b/public/intl/messages/ca-ES.json
@@ -240,7 +240,7 @@
"query": "Consulta",
"query-parameters": "Paràmetres de consulta",
"realtime": "Temps real",
- "recorded-at": "Registrat a",
+ "recorded": "Registrat a",
"referral": "Referència",
"referrer": "Referent",
"referrers": "Referents",
diff --git a/public/intl/messages/cs-CZ.json b/public/intl/messages/cs-CZ.json
index 2478a0a12..3b64dd8fc 100644
--- a/public/intl/messages/cs-CZ.json
+++ b/public/intl/messages/cs-CZ.json
@@ -240,7 +240,7 @@
"query": "Dotaz",
"query-parameters": "Parametry dotazu",
"realtime": "Aktuálně",
- "recorded-at": "Zaznamenáno v",
+ "recorded": "Zaznamenáno v",
"referral": "Doporučení",
"referrer": "Odkazující",
"referrers": "Odkazující",
diff --git a/public/intl/messages/da-DK.json b/public/intl/messages/da-DK.json
index 9f46ddcf3..967d9a0cf 100644
--- a/public/intl/messages/da-DK.json
+++ b/public/intl/messages/da-DK.json
@@ -240,7 +240,7 @@
"query": "Forespørgsel",
"query-parameters": "Forespørgselsparametre",
"realtime": "Realtid",
- "recorded-at": "Optaget den",
+ "recorded": "Optaget den",
"referral": "Henvisning",
"referrer": "Henviser",
"referrers": "Henvisninger",
diff --git a/public/intl/messages/de-CH.json b/public/intl/messages/de-CH.json
index 813e4a940..fecef5cc1 100644
--- a/public/intl/messages/de-CH.json
+++ b/public/intl/messages/de-CH.json
@@ -240,7 +240,7 @@
"query": "Abfrag",
"query-parameters": "Abfragparameter",
"realtime": "Echtzit",
- "recorded-at": "Aufgezeichnet am",
+ "recorded": "Aufgezeichnet am",
"referral": "Empfehlig",
"referrer": "Verwiiser",
"referrers": "Verwiisendi",
diff --git a/public/intl/messages/de-DE.json b/public/intl/messages/de-DE.json
index 0a3d54f4b..e5be06cb9 100644
--- a/public/intl/messages/de-DE.json
+++ b/public/intl/messages/de-DE.json
@@ -240,7 +240,7 @@
"query": "Abfrage",
"query-parameters": "Abfrageparameter",
"realtime": "Echtzeit",
- "recorded-at": "Aufgezeichnet am",
+ "recorded": "Aufgezeichnet am",
"referral": "Empfehlung",
"referrer": "Übermittler",
"referrers": "Übermittler",
diff --git a/public/intl/messages/el-GR.json b/public/intl/messages/el-GR.json
index f62277059..199becdc4 100644
--- a/public/intl/messages/el-GR.json
+++ b/public/intl/messages/el-GR.json
@@ -240,7 +240,7 @@
"query": "Ερώτημα",
"query-parameters": "Παράμετροι ερωτήματος",
"realtime": "Πραγματικός χρόνος",
- "recorded-at": "Καταγράφηκε στις",
+ "recorded": "Καταγράφηκε στις",
"referral": "Παραπομπή",
"referrer": "Παραπέμπων",
"referrers": "Παραπομπές",
diff --git a/public/intl/messages/en-GB.json b/public/intl/messages/en-GB.json
index 45f53f74b..b29d7bcf2 100644
--- a/public/intl/messages/en-GB.json
+++ b/public/intl/messages/en-GB.json
@@ -240,7 +240,7 @@
"query": "Query",
"query-parameters": "Query parameters",
"realtime": "Realtime",
- "recorded-at": "Recorded at",
+ "recorded": "Recorded",
"referral": "Referral",
"referrer": "Referrer",
"referrers": "Referrers",
diff --git a/public/intl/messages/en-US.json b/public/intl/messages/en-US.json
index d52028caa..1d8f3be30 100644
--- a/public/intl/messages/en-US.json
+++ b/public/intl/messages/en-US.json
@@ -241,7 +241,7 @@
"query": "Query",
"query-parameters": "Query parameters",
"realtime": "Realtime",
- "recorded-at": "Recorded at",
+ "recorded": "Recorded",
"referral": "Referral",
"referrer": "Referrer",
"referrers": "Referrers",
diff --git a/public/intl/messages/es-ES.json b/public/intl/messages/es-ES.json
index d315f4686..e0923eca6 100644
--- a/public/intl/messages/es-ES.json
+++ b/public/intl/messages/es-ES.json
@@ -240,7 +240,7 @@
"query": "Consulta",
"query-parameters": "Parámetros de consulta",
"realtime": "Tiempo real",
- "recorded-at": "Registrado el",
+ "recorded": "Registrado el",
"referral": "Referencia",
"referrer": "Referido",
"referrers": "Referido desde",
diff --git a/public/intl/messages/fa-IR.json b/public/intl/messages/fa-IR.json
index 332b8a958..cd7352ac0 100644
--- a/public/intl/messages/fa-IR.json
+++ b/public/intl/messages/fa-IR.json
@@ -240,7 +240,7 @@
"query": "کوئری",
"query-parameters": "پارامترهای کوئری",
"realtime": "آمار زنده",
- "recorded-at": "ثبت شده در",
+ "recorded": "ثبت شده در",
"referral": "ارجاع",
"referrer": "ارجاع دهنده",
"referrers": "ارجاع دهندگان",
diff --git a/public/intl/messages/fi-FI.json b/public/intl/messages/fi-FI.json
index a0ed061c8..4dfc671b9 100644
--- a/public/intl/messages/fi-FI.json
+++ b/public/intl/messages/fi-FI.json
@@ -240,7 +240,7 @@
"query": "Kysely",
"query-parameters": "Kyselyn parametrit",
"realtime": "Juuri nyt",
- "recorded-at": "Tallennettu",
+ "recorded": "Tallennettu",
"referral": "Viittaus",
"referrer": "Viittaaja",
"referrers": "Viittaajat",
diff --git a/public/intl/messages/fo-FO.json b/public/intl/messages/fo-FO.json
index c98510a30..b765e78a5 100644
--- a/public/intl/messages/fo-FO.json
+++ b/public/intl/messages/fo-FO.json
@@ -240,7 +240,7 @@
"query": "Fyrispurningur",
"query-parameters": "Fyrispurningsparametrar",
"realtime": "Beinleiðis",
- "recorded-at": "Upptikið tann",
+ "recorded": "Upptikið tann",
"referral": "Ávísing",
"referrer": "Ávísari",
"referrers": "Framsendingar",
diff --git a/public/intl/messages/fr-FR.json b/public/intl/messages/fr-FR.json
index 47a0668fd..665651451 100644
--- a/public/intl/messages/fr-FR.json
+++ b/public/intl/messages/fr-FR.json
@@ -240,7 +240,7 @@
"query": "Requête",
"query-parameters": "Paramètres de requête",
"realtime": "Temps réel",
- "recorded-at": "Enregistré le",
+ "recorded": "Enregistré le",
"referral": "Référent",
"referrer": "Site référent",
"referrers": "Sites référents",
diff --git a/public/intl/messages/ga-ES.json b/public/intl/messages/ga-ES.json
index a5f8a7dbb..6c92798aa 100644
--- a/public/intl/messages/ga-ES.json
+++ b/public/intl/messages/ga-ES.json
@@ -240,7 +240,7 @@
"query": "Petición",
"query-parameters": "Parámetros da petición",
"realtime": "Agora mesmo",
- "recorded-at": "Rexistrado en",
+ "recorded": "Rexistrado en",
"referral": "Referencia",
"referrer": "Orixe",
"referrers": "Orixes",
diff --git a/public/intl/messages/he-IL.json b/public/intl/messages/he-IL.json
index 23727a08b..f5ed72c2f 100644
--- a/public/intl/messages/he-IL.json
+++ b/public/intl/messages/he-IL.json
@@ -240,7 +240,7 @@
"query": "שאילתה",
"query-parameters": "פרמטרי שאילתה",
"realtime": "זמן אמת",
- "recorded-at": "הוקלט ב",
+ "recorded": "הוקלט ב",
"referral": "הפניה",
"referrer": "מפנה",
"referrers": "מפנים",
diff --git a/public/intl/messages/hi-IN.json b/public/intl/messages/hi-IN.json
index 814b6c8e8..a1b7d396f 100644
--- a/public/intl/messages/hi-IN.json
+++ b/public/intl/messages/hi-IN.json
@@ -240,7 +240,7 @@
"query": "प्रश्न",
"query-parameters": "प्रश्न पैरामीटर",
"realtime": "वास्तव काल",
- "recorded-at": "रिकॉर्ड किया गया",
+ "recorded": "रिकॉर्ड किया गया",
"referral": "संदर्भ",
"referrer": "संदर्भकर्ता",
"referrers": "सन्दर्भदाता",
diff --git a/public/intl/messages/hr-HR.json b/public/intl/messages/hr-HR.json
index 57dece8a3..e21f32fda 100644
--- a/public/intl/messages/hr-HR.json
+++ b/public/intl/messages/hr-HR.json
@@ -240,7 +240,7 @@
"query": "Upit",
"query-parameters": "Parametri upita",
"realtime": "Stvarno vrijeme",
- "recorded-at": "Snimljeno u",
+ "recorded": "Snimljeno u",
"referral": "Preporuka",
"referrer": "Izvor preporuke",
"referrers": "Izvori preporuke",
diff --git a/public/intl/messages/hu-HU.json b/public/intl/messages/hu-HU.json
index b1d634c28..5315d3e72 100644
--- a/public/intl/messages/hu-HU.json
+++ b/public/intl/messages/hu-HU.json
@@ -240,7 +240,7 @@
"query": "Lekérdezés",
"query-parameters": "Lekérdezési paraméterek",
"realtime": "Valós idejű",
- "recorded-at": "Rögzítve",
+ "recorded": "Rögzítve",
"referral": "Hivatkozás",
"referrer": "Hivatkozó",
"referrers": "Hivatkozók",
diff --git a/public/intl/messages/id-ID.json b/public/intl/messages/id-ID.json
index df8946e6d..99a95553a 100644
--- a/public/intl/messages/id-ID.json
+++ b/public/intl/messages/id-ID.json
@@ -240,7 +240,7 @@
"query": "Kueri",
"query-parameters": "Parameter kueri",
"realtime": "Waktu nyata",
- "recorded-at": "Direkam pada",
+ "recorded": "Direkam pada",
"referral": "Rujukan",
"referrer": "Perujuk",
"referrers": "Perujuk",
diff --git a/public/intl/messages/it-IT.json b/public/intl/messages/it-IT.json
index a0f396416..5f902f3e2 100644
--- a/public/intl/messages/it-IT.json
+++ b/public/intl/messages/it-IT.json
@@ -240,7 +240,7 @@
"query": "Query",
"query-parameters": "Parametri query",
"realtime": "Tempo reale",
- "recorded-at": "Registrato il",
+ "recorded": "Registrato il",
"referral": "Referente",
"referrer": "Referente",
"referrers": "Referenti",
diff --git a/public/intl/messages/ja-JP.json b/public/intl/messages/ja-JP.json
index c1dce8573..bcf304f8e 100644
--- a/public/intl/messages/ja-JP.json
+++ b/public/intl/messages/ja-JP.json
@@ -240,7 +240,7 @@
"query": "クエリ",
"query-parameters": "クエリパラメーター",
"realtime": "リアルタイム",
- "recorded-at": "記録日時",
+ "recorded": "記録日時",
"referral": "リファラル",
"referrer": "リファラー",
"referrers": "リファラー",
diff --git a/public/intl/messages/km-KH.json b/public/intl/messages/km-KH.json
index 7253c68ab..9fb936623 100644
--- a/public/intl/messages/km-KH.json
+++ b/public/intl/messages/km-KH.json
@@ -240,7 +240,7 @@
"query": "សំណួរ",
"query-parameters": "ប៉ារ៉ាម៉ែត្រ Query",
"realtime": "ឥលូវនេះ",
- "recorded-at": "ថតនៅ",
+ "recorded": "ថតនៅ",
"referral": "ការបញ្ជូន",
"referrer": "អ្នកណែនាំ",
"referrers": "អ្នកណែនាំ",
diff --git a/public/intl/messages/ko-KR.json b/public/intl/messages/ko-KR.json
index fd1fbdd28..579b9b625 100644
--- a/public/intl/messages/ko-KR.json
+++ b/public/intl/messages/ko-KR.json
@@ -240,7 +240,7 @@
"query": "쿼리",
"query-parameters": "쿼리 매개 변수",
"realtime": "실시간",
- "recorded-at": "기록 시간",
+ "recorded": "기록 시간",
"referral": "추천",
"referrer": "리퍼러",
"referrers": "리퍼러",
diff --git a/public/intl/messages/lt-LT.json b/public/intl/messages/lt-LT.json
index 35604990d..9a9a7c92b 100644
--- a/public/intl/messages/lt-LT.json
+++ b/public/intl/messages/lt-LT.json
@@ -240,7 +240,7 @@
"query": "Užklausa",
"query-parameters": "Užklausų parametrai",
"realtime": "Realiuoju laiku",
- "recorded-at": "Įrašyta",
+ "recorded": "Įrašyta",
"referral": "Persiuntimas",
"referrer": "Persiuntėjas",
"referrers": "Persiuntėjai",
diff --git a/public/intl/messages/mn-MN.json b/public/intl/messages/mn-MN.json
index 086469037..a9841a278 100644
--- a/public/intl/messages/mn-MN.json
+++ b/public/intl/messages/mn-MN.json
@@ -240,7 +240,7 @@
"query": "Асуулга",
"query-parameters": "Query параметр",
"realtime": "Яг одоо",
- "recorded-at": "Бичигдсэн огноо",
+ "recorded": "Бичигдсэн огноо",
"referral": "Лавлагаа",
"referrer": "Чиглүүлэгч",
"referrers": "Чиглүүлэгч",
diff --git a/public/intl/messages/ms-MY.json b/public/intl/messages/ms-MY.json
index 3ae251797..7d1db53f6 100644
--- a/public/intl/messages/ms-MY.json
+++ b/public/intl/messages/ms-MY.json
@@ -240,7 +240,7 @@
"query": "Pertanyaan",
"query-parameters": "Parameter pertanyaan",
"realtime": "Siaran langsung",
- "recorded-at": "Direkodkan pada",
+ "recorded": "Direkodkan pada",
"referral": "Rujukan",
"referrer": "Perujuk",
"referrers": "Perujuk",
diff --git a/public/intl/messages/my-MM.json b/public/intl/messages/my-MM.json
index 4887cdc8f..74bea7fb6 100644
--- a/public/intl/messages/my-MM.json
+++ b/public/intl/messages/my-MM.json
@@ -240,7 +240,7 @@
"query": "Query (ကွာရီ)",
"query-parameters": "Query parameters (ကွာရီပါရာမီတာများ)",
"realtime": "အချိန်နှင့်တပြေးညီ",
- "recorded-at": "မှတ်တမ်းတင်ချိန်",
+ "recorded": "မှတ်တမ်းတင်ချိန်",
"referral": "ရည်ညွှန်းမှု",
"referrer": "ရည်ညွှန်းသူ",
"referrers": "ရည်ညွှန်းမှုများ",
diff --git a/public/intl/messages/nb-NO.json b/public/intl/messages/nb-NO.json
index 4df73c3a5..e79a813ad 100644
--- a/public/intl/messages/nb-NO.json
+++ b/public/intl/messages/nb-NO.json
@@ -240,7 +240,7 @@
"query": "Forespørsel",
"query-parameters": "Forespørsel parametere",
"realtime": "Sanntid",
- "recorded-at": "Registrert den",
+ "recorded": "Registrert den",
"referral": "Henvisning",
"referrer": "Henviser",
"referrers": "Henvisere",
diff --git a/public/intl/messages/nl-NL.json b/public/intl/messages/nl-NL.json
index acebcee82..8c617dab7 100644
--- a/public/intl/messages/nl-NL.json
+++ b/public/intl/messages/nl-NL.json
@@ -240,7 +240,7 @@
"query": "Query",
"query-parameters": "URL-parameters",
"realtime": "Actueel",
- "recorded-at": "Opgenomen op",
+ "recorded": "Opgenomen op",
"referral": "Verwijzing",
"referrer": "Verwijzer",
"referrers": "Verwijzers",
diff --git a/public/intl/messages/pl-PL.json b/public/intl/messages/pl-PL.json
index e60861cc6..7803fcd38 100644
--- a/public/intl/messages/pl-PL.json
+++ b/public/intl/messages/pl-PL.json
@@ -240,7 +240,7 @@
"query": "Zapytanie",
"query-parameters": "Parametry zapytania",
"realtime": "Czas rzeczywisty",
- "recorded-at": "Nagrano o",
+ "recorded": "Nagrano o",
"referral": "Polecenie",
"referrer": "Źródło odsyłające",
"referrers": "Źródła odsyłające",
diff --git a/public/intl/messages/pt-BR.json b/public/intl/messages/pt-BR.json
index 62dba74ea..dbc38a2d3 100644
--- a/public/intl/messages/pt-BR.json
+++ b/public/intl/messages/pt-BR.json
@@ -240,7 +240,7 @@
"query": "Consulta",
"query-parameters": "Parâmetros da consulta",
"realtime": "Tempo real",
- "recorded-at": "Registrado em",
+ "recorded": "Registrado em",
"referral": "Referência",
"referrer": "Referência",
"referrers": "Referências",
diff --git a/public/intl/messages/pt-PT.json b/public/intl/messages/pt-PT.json
index 26ce3ff60..25915dacb 100644
--- a/public/intl/messages/pt-PT.json
+++ b/public/intl/messages/pt-PT.json
@@ -240,7 +240,7 @@
"query": "Consulta",
"query-parameters": "Parâmetros de consulta",
"realtime": "Tempo real",
- "recorded-at": "Registado em",
+ "recorded": "Registado em",
"referral": "Referência",
"referrer": "Referência",
"referrers": "Referenciadores",
diff --git a/public/intl/messages/ro-RO.json b/public/intl/messages/ro-RO.json
index 0424ff073..bc6805a5f 100644
--- a/public/intl/messages/ro-RO.json
+++ b/public/intl/messages/ro-RO.json
@@ -240,7 +240,7 @@
"query": "Interogare",
"query-parameters": "Parametri de interogare",
"realtime": "Timp real",
- "recorded-at": "Înregistrat la",
+ "recorded": "Înregistrat la",
"referral": "Referință",
"referrer": "Proveniență",
"referrers": "Site-uri de proveniență",
diff --git a/public/intl/messages/ru-RU.json b/public/intl/messages/ru-RU.json
index 2cbbf1019..5bf41593c 100644
--- a/public/intl/messages/ru-RU.json
+++ b/public/intl/messages/ru-RU.json
@@ -240,7 +240,7 @@
"query": "Запрос",
"query-parameters": "Параметры запроса",
"realtime": "Реальное время",
- "recorded-at": "Записано",
+ "recorded": "Записано",
"referral": "Реферал",
"referrer": "Реферер",
"referrers": "Источники",
diff --git a/public/intl/messages/si-LK.json b/public/intl/messages/si-LK.json
index 850ab3558..570687e4b 100644
--- a/public/intl/messages/si-LK.json
+++ b/public/intl/messages/si-LK.json
@@ -240,7 +240,7 @@
"query": "විමසුම",
"query-parameters": "විමසුම් පරාමිති",
"realtime": "තත්ය කාල",
- "recorded-at": "පටිගත කළේ",
+ "recorded": "පටිගත කළේ",
"referral": "යොමු කිරීම",
"referrer": "යොමු කරන්නා",
"referrers": "යොමු කරන්නන්",
diff --git a/public/intl/messages/sk-SK.json b/public/intl/messages/sk-SK.json
index c9c051a81..070470190 100644
--- a/public/intl/messages/sk-SK.json
+++ b/public/intl/messages/sk-SK.json
@@ -240,7 +240,7 @@
"query": "Dotaz",
"query-parameters": "Parametre dotazu",
"realtime": "Aktuálne",
- "recorded-at": "Zaznamenané",
+ "recorded": "Zaznamenané",
"referral": "Odporúčanie",
"referrer": "Odkazovateľ",
"referrers": "Odkazy",
diff --git a/public/intl/messages/sl-SI.json b/public/intl/messages/sl-SI.json
index f55a9e02f..58a218858 100644
--- a/public/intl/messages/sl-SI.json
+++ b/public/intl/messages/sl-SI.json
@@ -242,7 +242,7 @@
"query": "Poizvedba",
"query-parameters": "Parametri poizvedbe",
"realtime": "V živo",
- "recorded-at": "Zabeleženo ob",
+ "recorded": "Zabeleženo ob",
"referral": "Napoten",
"referrer": "Vir",
"referrers": "Viri",
diff --git a/public/intl/messages/sv-SE.json b/public/intl/messages/sv-SE.json
index d1f188480..e54be158c 100644
--- a/public/intl/messages/sv-SE.json
+++ b/public/intl/messages/sv-SE.json
@@ -240,7 +240,7 @@
"query": "Fråga",
"query-parameters": "Frågeparametrar",
"realtime": "Realtid",
- "recorded-at": "Registrerad den",
+ "recorded": "Registrerad den",
"referral": "Hänvisning",
"referrer": "Hänvisare",
"referrers": "Hänvisare",
diff --git a/public/intl/messages/ta-IN.json b/public/intl/messages/ta-IN.json
index 96478eda5..5092f810d 100644
--- a/public/intl/messages/ta-IN.json
+++ b/public/intl/messages/ta-IN.json
@@ -240,7 +240,7 @@
"query": "வினவல்",
"query-parameters": "வினவல் அளவுருக்கள்",
"realtime": "தற்போதைய",
- "recorded-at": "பதிவுசெய்த நேரம்",
+ "recorded": "பதிவுசெய்த நேரம்",
"referral": "பரிந்துரை",
"referrer": "பரிந்துரையாளர்",
"referrers": "குறிப்பிடுவோர்",
diff --git a/public/intl/messages/th-TH.json b/public/intl/messages/th-TH.json
index 46964bdf4..275152e4b 100644
--- a/public/intl/messages/th-TH.json
+++ b/public/intl/messages/th-TH.json
@@ -240,7 +240,7 @@
"query": "คิวรี",
"query-parameters": "พารามิเตอร์คิวรี",
"realtime": "เรียลไทม์",
- "recorded-at": "บันทึกเมื่อ",
+ "recorded": "บันทึกเมื่อ",
"referral": "การอ้างอิง",
"referrer": "ผู้อ้างอิง",
"referrers": "แหล่งที่มา",
diff --git a/public/intl/messages/tr-TR.json b/public/intl/messages/tr-TR.json
index 053e606a0..2aa104940 100644
--- a/public/intl/messages/tr-TR.json
+++ b/public/intl/messages/tr-TR.json
@@ -240,7 +240,7 @@
"query": "Sorgu",
"query-parameters": "Sorgu parametreleri",
"realtime": "Gerçek Zamanlı",
- "recorded-at": "Kaydedildi",
+ "recorded": "Kaydedildi",
"referral": "Yönlendirme",
"referrer": "Yönlendiren",
"referrers": "Yönlendirenler",
diff --git a/public/intl/messages/uk-UA.json b/public/intl/messages/uk-UA.json
index aecb6d345..9d298a3f3 100644
--- a/public/intl/messages/uk-UA.json
+++ b/public/intl/messages/uk-UA.json
@@ -240,7 +240,7 @@
"query": "Запит",
"query-parameters": "Параметри запиту",
"realtime": "У реальному часі",
- "recorded-at": "Записано о",
+ "recorded": "Записано о",
"referral": "Реферал",
"referrer": "Джерело",
"referrers": "Джерела",
diff --git a/public/intl/messages/ur-PK.json b/public/intl/messages/ur-PK.json
index 99c4a066a..016af6ee0 100644
--- a/public/intl/messages/ur-PK.json
+++ b/public/intl/messages/ur-PK.json
@@ -240,7 +240,7 @@
"query": "استفسار",
"query-parameters": "استفسار پیرامیٹرز",
"realtime": "براہ راست",
- "recorded-at": "ریکارڈ کیا گیا",
+ "recorded": "ریکارڈ کیا گیا",
"referral": "حوالہ",
"referrer": "حوالہ دہندہ",
"referrers": "بھیجنے والے",
diff --git a/public/intl/messages/uz-UZ.json b/public/intl/messages/uz-UZ.json
index 3e5ef4589..2a1d7479a 100644
--- a/public/intl/messages/uz-UZ.json
+++ b/public/intl/messages/uz-UZ.json
@@ -242,7 +242,7 @@
"query": "Soʻrov",
"query-parameters": "Soʻrov parametrlari",
"realtime": "Haqiqiy vaqt",
- "recorded-at": "Yozib olingan",
+ "recorded": "Yozib olingan",
"referral": "Tavsiya",
"referrer": "Tavsiya etuvchi",
"referrers": "Tavsiya etuvchilar",
diff --git a/public/intl/messages/vi-VN.json b/public/intl/messages/vi-VN.json
index efc404b1d..eec7e013b 100644
--- a/public/intl/messages/vi-VN.json
+++ b/public/intl/messages/vi-VN.json
@@ -242,7 +242,7 @@
"query": "Truy vấn",
"query-parameters": "Tham số truy vấn",
"realtime": "Thời gian thực",
- "recorded-at": "Được ghi vào",
+ "recorded": "Được ghi vào",
"referral": "Giới thiệu",
"referrer": "Nguồn giới thiệu",
"referrers": "Các nguồn giới thiệu",
diff --git a/public/intl/messages/zh-CN.json b/public/intl/messages/zh-CN.json
index f92ccd14b..e552cf158 100644
--- a/public/intl/messages/zh-CN.json
+++ b/public/intl/messages/zh-CN.json
@@ -240,7 +240,7 @@
"query": "查询",
"query-parameters": "查询参数",
"realtime": "实时",
- "recorded-at": "录制于",
+ "recorded": "录制于",
"referral": "来源",
"referrer": "来源",
"referrers": "来源域名",
diff --git a/public/intl/messages/zh-TW.json b/public/intl/messages/zh-TW.json
index 93c23012b..1f644123c 100644
--- a/public/intl/messages/zh-TW.json
+++ b/public/intl/messages/zh-TW.json
@@ -240,7 +240,7 @@
"query": "查詢",
"query-parameters": "查詢參數",
"realtime": "即時",
- "recorded-at": "錄製於",
+ "recorded": "錄製於",
"referral": "推薦",
"referrer": "參照來源",
"referrers": "參照來源",
diff --git a/src/app/(main)/websites/[websiteId]/replays/ReplaysTable.tsx b/src/app/(main)/websites/[websiteId]/replays/ReplaysTable.tsx
index d47371011..64e460f04 100644
--- a/src/app/(main)/websites/[websiteId]/replays/ReplaysTable.tsx
+++ b/src/app/(main)/websites/[websiteId]/replays/ReplaysTable.tsx
@@ -69,7 +69,7 @@ export function ReplaysTable({ ...props }: DataTableProps) {
)}
-
+
{(row: any) => }
diff --git a/src/app/(main)/websites/[websiteId]/replays/SavedReplaysTable.tsx b/src/app/(main)/websites/[websiteId]/replays/SavedReplaysTable.tsx
index b7eed40b9..cf3f55768 100644
--- a/src/app/(main)/websites/[websiteId]/replays/SavedReplaysTable.tsx
+++ b/src/app/(main)/websites/[websiteId]/replays/SavedReplaysTable.tsx
@@ -1,5 +1,6 @@
import { Button, DataColumn, DataTable, type DataTableProps, Icon } from '@umami/react-zen';
import { Play } from 'lucide-react';
+import { DateDistance } from '@/components/common/DateDistance';
import { useMessages, useNavigation } from '@/components/hooks';
export function SavedReplaysTable({ ...props }: DataTableProps) {
@@ -23,7 +24,7 @@ export function SavedReplaysTable({ ...props }: DataTableProps) {
- {(row: any) => new Date(row.createdAt).toLocaleString()}
+ {(row: any) => }
);
diff --git a/src/app/(main)/websites/[websiteId]/replays/[replayId]/ReplayPlayback.tsx b/src/app/(main)/websites/[websiteId]/replays/[replayId]/ReplayPlayback.tsx
index 3c3a68313..d6f08a68c 100644
--- a/src/app/(main)/websites/[websiteId]/replays/[replayId]/ReplayPlayback.tsx
+++ b/src/app/(main)/websites/[websiteId]/replays/[replayId]/ReplayPlayback.tsx
@@ -8,6 +8,7 @@ import { LoadingPanel } from '@/components/common/LoadingPanel';
import {
useMessages,
useReplayQuery,
+ useReplaySavedQuery,
useUpdateQuery,
useWebsiteSessionQuery,
} from '@/components/hooks';
@@ -18,19 +19,22 @@ import { ReplaySaveForm } from './ReplaySaveForm';
export function ReplayPlayback({
websiteId,
replayId,
+ showSessionInfo = true,
onClose,
}: {
websiteId: string;
replayId: string;
+ showSessionInfo?: boolean;
onClose?: () => void;
}) {
const { data: replay, isLoading, error } = useReplayQuery(websiteId, replayId);
+ const { data: replaySaved } = useReplaySavedQuery(websiteId, replayId);
const { data: session } = useWebsiteSessionQuery(websiteId, replay?.sessionId);
const { t, labels } = useMessages();
const [isSaved, setIsSaved] = useState(null);
- const { mutate } = useUpdateQuery(`/websites/${websiteId}/replays/${replayId}`);
+ const { mutate } = useUpdateQuery(`/websites/${websiteId}/replays/saved/${replayId}`);
- const saved = isSaved ?? replay?.isSaved ?? false;
+ const saved = isSaved ?? replaySaved?.isSaved ?? false;
const handleUnsave = () => {
setIsSaved(false);
@@ -100,7 +104,7 @@ export function ReplayPlayback({
)}
- {session && }
+ {showSessionInfo && session && }
)}
diff --git a/src/app/(main)/websites/[websiteId]/replays/[replayId]/ReplaySaveForm.tsx b/src/app/(main)/websites/[websiteId]/replays/[replayId]/ReplaySaveForm.tsx
index 29be76f65..8132679f6 100644
--- a/src/app/(main)/websites/[websiteId]/replays/[replayId]/ReplaySaveForm.tsx
+++ b/src/app/(main)/websites/[websiteId]/replays/[replayId]/ReplaySaveForm.tsx
@@ -8,6 +8,7 @@ import {
TextField,
} from '@umami/react-zen';
import { useMessages, useUpdateQuery } from '@/components/hooks';
+import { touch } from '@/components/hooks/useModified';
export function ReplaySaveForm({
websiteId,
@@ -22,7 +23,7 @@ export function ReplaySaveForm({
}) {
const { t, labels, getErrorMessage } = useMessages();
const { mutateAsync, error, isPending } = useUpdateQuery(
- `/websites/${websiteId}/replays/${replayId}`,
+ `/websites/${websiteId}/replays/saved/${replayId}`,
);
const handleSubmit = async (formData: { name: string }) => {
@@ -30,6 +31,7 @@ export function ReplaySaveForm({
{ isSaved: true, name: formData.name },
{
onSuccess: () => {
+ touch('replays');
onSave?.();
onClose?.();
},
diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionReplaysDataTable.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionReplaysDataTable.tsx
index 6ce2b0449..daca0577c 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/SessionReplaysDataTable.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/SessionReplaysDataTable.tsx
@@ -2,18 +2,27 @@
import { Column } from '@umami/react-zen';
import { useState } from 'react';
import { DataGrid } from '@/components/common/DataGrid';
-import { useReplayQuery, useSessionReplaysQuery } from '@/components/hooks';
-import { ReplayPlayer } from '../replays/[replayId]/ReplayPlayer';
+import { useSessionReplaysQuery } from '@/components/hooks';
+import { ReplayPlayback } from '../replays/[replayId]/ReplayPlayback';
import { SessionReplaysTable } from './SessionReplaysTable';
-function InlinePlayer({ websiteId, replayId }: { websiteId: string; replayId: string }) {
- const { data: replay } = useReplayQuery(websiteId, replayId);
-
- if (!replay?.events?.length) return null;
-
+function InlinePlayer({
+ websiteId,
+ replayId,
+ onClose,
+}: {
+ websiteId: string;
+ replayId: string;
+ onClose: () => void;
+}) {
return (
-
+
);
}
@@ -34,7 +43,13 @@ export function SessionReplaysDataTable({
return (
- {selectedId && }
+ {selectedId && (
+ setSelectedId(undefined)}
+ />
+ )}
{({ data }) => (
diff --git a/src/app/(main)/websites/[websiteId]/sessions/SessionReplaysTable.tsx b/src/app/(main)/websites/[websiteId]/sessions/SessionReplaysTable.tsx
index 9c983dd04..41910e3b4 100644
--- a/src/app/(main)/websites/[websiteId]/sessions/SessionReplaysTable.tsx
+++ b/src/app/(main)/websites/[websiteId]/sessions/SessionReplaysTable.tsx
@@ -36,7 +36,7 @@ export function SessionReplaysTable({
{(row: any) => formatDuration(row.duration || 0)}
-
+
{(row: any) => }
diff --git a/src/app/api/websites/[websiteId]/replays/[replayId]/route.ts b/src/app/api/websites/[websiteId]/replays/[replayId]/route.ts
index 281236d9f..eb030c163 100644
--- a/src/app/api/websites/[websiteId]/replays/[replayId]/route.ts
+++ b/src/app/api/websites/[websiteId]/replays/[replayId]/route.ts
@@ -1,12 +1,6 @@
-import { z } from 'zod';
import { parseRequest } from '@/lib/request';
import { json, unauthorized } from '@/lib/response';
-import { canUpdateWebsite, canViewWebsite } from '@/permissions';
-import {
- createReplaySaved,
- deleteReplaySaved,
- getReplaySaved,
-} from '@/queries/prisma/sessionReplay';
+import { canViewWebsite } from '@/permissions';
import { getReplayChunks } from '@/queries/sql';
export async function GET(
@@ -25,10 +19,7 @@ export async function GET(
return unauthorized();
}
- const [chunks, isSaved] = await Promise.all([
- getReplayChunks(websiteId, replayId),
- getReplaySaved(websiteId, replayId),
- ]);
+ const chunks = await getReplayChunks(websiteId, replayId);
const allEvents = chunks.flatMap(chunk => chunk.events);
const sessionId = chunks.length > 0 ? chunks[0].sessionId : null;
@@ -42,35 +33,5 @@ export async function GET(
endedAt,
eventCount: allEvents.length,
chunkCount: chunks.length,
- isSaved,
});
}
-
-export async function POST(
- request: Request,
- { params }: { params: Promise<{ websiteId: string; replayId: string }> },
-) {
- const schema = z.object({
- isSaved: z.boolean(),
- name: z.string().max(100).optional(),
- });
- const { auth, body, error } = await parseRequest(request, schema);
-
- if (error) {
- return error();
- }
-
- const { websiteId, replayId } = await params;
-
- if (!(await canUpdateWebsite(auth, websiteId))) {
- return unauthorized();
- }
-
- if (body.isSaved) {
- await createReplaySaved(websiteId, replayId, body.name ?? '');
- } else {
- await deleteReplaySaved(websiteId, replayId);
- }
-
- return json({ ok: true });
-}
diff --git a/src/app/api/websites/[websiteId]/replays/saved/[replayId]/route.ts b/src/app/api/websites/[websiteId]/replays/saved/[replayId]/route.ts
new file mode 100644
index 000000000..2212d9d08
--- /dev/null
+++ b/src/app/api/websites/[websiteId]/replays/saved/[replayId]/route.ts
@@ -0,0 +1,60 @@
+import { z } from 'zod';
+import { parseRequest } from '@/lib/request';
+import { json, unauthorized } from '@/lib/response';
+import { canUpdateWebsite, canViewWebsite } from '@/permissions';
+import {
+ createReplaySaved,
+ deleteReplaySaved,
+ getReplaySaved,
+} from '@/queries/prisma/sessionReplay';
+
+export async function GET(
+ request: Request,
+ { params }: { params: Promise<{ websiteId: string; replayId: string }> },
+) {
+ const { auth, error } = await parseRequest(request);
+
+ if (error) {
+ return error();
+ }
+
+ const { websiteId, replayId } = await params;
+
+ if (!(await canViewWebsite(auth, websiteId))) {
+ return unauthorized();
+ }
+
+ const isSaved = await getReplaySaved(websiteId, replayId);
+
+ return json({ isSaved });
+}
+
+export async function POST(
+ request: Request,
+ { params }: { params: Promise<{ websiteId: string; replayId: string }> },
+) {
+ const schema = z.object({
+ isSaved: z.boolean(),
+ name: z.string().max(100).optional(),
+ });
+
+ const { auth, body, error } = await parseRequest(request, schema);
+
+ if (error) {
+ return error();
+ }
+
+ const { websiteId, replayId } = await params;
+
+ if (!(await canUpdateWebsite(auth, websiteId))) {
+ return unauthorized();
+ }
+
+ if (body.isSaved) {
+ await createReplaySaved(websiteId, replayId, body.name ?? '');
+ } else {
+ await deleteReplaySaved(websiteId, replayId);
+ }
+
+ return json({ ok: true });
+}
diff --git a/src/components/hooks/index.ts b/src/components/hooks/index.ts
index f7234bbd1..d683ce403 100644
--- a/src/components/hooks/index.ts
+++ b/src/components/hooks/index.ts
@@ -30,6 +30,7 @@ export * from './queries/usePixelSharesQuery';
export * from './queries/usePixelsQuery';
export * from './queries/useRealtimeQuery';
export * from './queries/useReplayQuery';
+export * from './queries/useReplaySavedQuery';
export * from './queries/useReplaysQuery';
export * from './queries/useReportQuery';
export * from './queries/useReportsQuery';
diff --git a/src/components/hooks/queries/useReplaySavedQuery.ts b/src/components/hooks/queries/useReplaySavedQuery.ts
new file mode 100644
index 000000000..93795821b
--- /dev/null
+++ b/src/components/hooks/queries/useReplaySavedQuery.ts
@@ -0,0 +1,15 @@
+import { useApi } from '../useApi';
+import { useModified } from '../useModified';
+
+export function useReplaySavedQuery(websiteId: string, replayId: string) {
+ const { get, useQuery } = useApi();
+ const { modified } = useModified('replays');
+
+ return useQuery({
+ queryKey: ['replay:saved', { websiteId, replayId, modified }],
+ queryFn: () => {
+ return get(`/websites/${websiteId}/replays/saved/${replayId}`);
+ },
+ enabled: Boolean(websiteId && replayId),
+ });
+}
diff --git a/src/components/messages.ts b/src/components/messages.ts
index 1e8073297..f5a3d6bca 100644
--- a/src/components/messages.ts
+++ b/src/components/messages.ts
@@ -377,7 +377,7 @@ export const labels: Record = {
blockSelector: 'label.block-selector',
retentionDays: 'label.retention-days',
duration: 'label.duration',
- recordedAt: 'label.recorded-at',
+ recorded: 'label.recorded',
};
export const messages: Record = {
diff --git a/src/queries/prisma/sessionReplay.ts b/src/queries/prisma/sessionReplay.ts
index 17b251672..2eb7ab922 100644
--- a/src/queries/prisma/sessionReplay.ts
+++ b/src/queries/prisma/sessionReplay.ts
@@ -97,7 +97,7 @@ export async function getSavedReplays(websiteId: string, filters: QueryFilters)
const where = {
websiteId,
- ...getSearchParameters(search, [{ name: 'contains' }, { visitId: 'contains' }]),
+ ...getSearchParameters(search, [{ name: 'contains' }]),
};
return pagedQuery(