Updated metrics components for compare mode.

This commit is contained in:
Mike Cao 2024-05-23 00:17:20 -07:00
parent 6b03935fca
commit df66acaacf
117 changed files with 602 additions and 513 deletions

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Average visit time"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Visit duration"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "المتوسط"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "متوسط وقت الزيارة"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "متوسط وقت الزيارة"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Сярэдняя даўжыня наведвання"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Сярэдняя даўжыня наведвання"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "গড় পরিদর্শনের সময়"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "গড় পরিদর্শনের সময়"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Prosjek"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Prosječno vrijeme posjete"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Pregledi po posjeti"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Prosječno vrijeme posjete"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Mitjana"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Temps mitjà de visita"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Temps mitjà de visita"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Průměrný čas návštěvy"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Průměrný čas návštěvy"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Gennemsnitlig besøgstid"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Gennemsnitlig besøgstid"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Durchschn. Bsuechsziit"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Durchschn. Bsuechsziit"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Durchschnitt"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Durchschn. Besuchszeit"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Durchschn. Besuchszeit"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Μέσος χρόνος επίσκεψης"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Μέσος χρόνος επίσκεψης"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Average visit time"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Visit duration"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Average visit time"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Visit duration"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Media"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Tiempo promedio de visita"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Tiempo promedio de visita"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -71,7 +71,7 @@
"value": "Average"
}
],
"label.average-visit-time": [
"label.visit-duration": [
{
"type": 0,
"value": "Tiempo promedio de visita"

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "میانگین زمان بازدید"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "میانگین زمان بازدید"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Keskimääräinen vierailuaika"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Keskimääräinen vierailuaika"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Miðal vitjurnartíð "
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Miðal vitjurnartíð "
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Moyenne"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Temps de visite moyen"
}
],
"label.back": [
{
"type": 0,
@ -1237,6 +1231,12 @@
"value": "Vues par visite"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Temps de visite moyen"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Tempo medio de visita"
}
],
"label.back": [
{
"type": 0,
@ -1257,6 +1251,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Tempo medio de visita"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "זמן ביקור ממוצע"
}
],
"label.back": [
{
"type": 0,
@ -1241,6 +1235,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "זמן ביקור ממוצע"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "औसत दृश्य समय"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "औसत दृश्य समय"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Average visit time"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Visit duration"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Átlagos látogatási idő"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Átlagos látogatási idő"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Waktu kunjungan rata-rata"
}
],
"label.back": [
{
"type": 0,
@ -1241,6 +1235,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Waktu kunjungan rata-rata"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Tempo medio di visita"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Tempo medio di visita"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "平均"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "平均滞在時間"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "平均滞在時間"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "មើលជាមធ្យម"
}
],
"label.back": [
{
"type": 0,
@ -1241,6 +1235,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "មើលជាមធ្យម"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "평균 방문 시간"
}
],
"label.back": [
{
"type": 0,
@ -1253,6 +1247,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "평균 방문 시간"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Vidurkis"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Vidutinė vizito trukmė"
}
],
"label.back": [
{
"type": 0,
@ -1354,6 +1348,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Vidutinė vizito trukmė"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Дундаж"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Зочилсон дундаж хугацаа"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Зочилсон дундаж хугацаа"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Purata tempoh masa lawatan"
}
],
"label.back": [
{
"type": 0,
@ -1241,6 +1235,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Purata tempoh masa lawatan"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "ပျမ်းမျှ"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "ဝဘက်ဘ်ဆိုဒ်တွင် ပျမ်းမျှကုန်ဆုံးချိန်"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "ဝဘက်ဘ်ဆိုဒ်တွင် ပျမ်းမျှကုန်ဆုံးချိန်"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Gjennomsnittlig besøkstid"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Gjennomsnittlig besøkstid"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Gemiddelde"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Gemiddelde bezoektijd"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Gemiddelde bezoektijd"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Średnia"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Średni czas wizyty"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Średni czas wizyty"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Média"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Tempo médio de visita"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Visualizações por visita"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Tempo médio de visita"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Tempo médio de visita"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Tempo médio de visita"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Mediu"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Timp mediu de vizitare"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Timp mediu de vizitare"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Среднее время посещения"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Среднее время посещения"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Average visit time"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Visit duration"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Priemerný čas návštevy"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Priemerný čas návštevy"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Povprečno"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Povprečni čas obiska"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Povprečni čas obiska"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Genomsnitt"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Genomsnittlig besökstid"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Genomsnittlig besökstid"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "சராசரி வருகை நேரம்"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "சராசரி வருகை நேரம்"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "ระยะเวลาเข้าชมเฉลี่ย"
}
],
"label.back": [
{
"type": 0,
@ -1241,6 +1235,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "ระยะเวลาเข้าชมเฉลี่ย"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Ortalama"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Ortalama ziyaret süresi"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Ziyaret başına görüntüleme"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Ortalama ziyaret süresi"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Середнє"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Середній час візиту"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Перегляди за візит"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Середній час візиту"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "وزٹ کا اوسط وقت"
}
],
"label.back": [
{
"type": 0,
@ -1249,6 +1243,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "وزٹ کا اوسط وقت"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "Average"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "Thời gian truy cập trung bình"
}
],
"label.back": [
{
"type": 0,
@ -1241,6 +1235,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "Thời gian truy cập trung bình"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "平均"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "平均访问时间"
}
],
"label.back": [
{
"type": 0,
@ -1257,6 +1251,12 @@
"value": "每次访问的浏览量"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "平均访问时间"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -83,12 +83,6 @@
"value": "平均"
}
],
"label.average-visit-time": [
{
"type": 0,
"value": "平均造訪時間"
}
],
"label.back": [
{
"type": 0,
@ -1253,6 +1247,12 @@
"value": "Views per visit"
}
],
"label.visit-duration": [
{
"type": 0,
"value": "平均造訪時間"
}
],
"label.visitors": [
{
"type": 0,

View File

@ -1,6 +1,6 @@
.container {
display: grid;
grid-template-columns: 1fr max-content;
grid-template-columns: 2fr 1fr;
justify-content: space-between;
align-items: center;
background: var(--base50);
@ -15,6 +15,19 @@
flex-direction: row;
justify-content: flex-end;
gap: 10px;
flex-wrap: wrap;
}
.vs {
display: flex;
align-items: center;
justify-content: flex-end;
flex-basis: 100%;
gap: 10px;
}
.dropdown {
min-width: 200px;
}
@media screen and (max-width: 1200px) {

View File

@ -1,3 +1,4 @@
import { useState } from 'react';
import classNames from 'classnames';
import { useMessages, useSticky } from 'components/hooks';
import WebsiteDateFilter from 'components/input/WebsiteDateFilter';
@ -7,21 +8,65 @@ import { formatShortTime } from 'lib/format';
import WebsiteFilterButton from './WebsiteFilterButton';
import useWebsiteStats from 'components/hooks/queries/useWebsiteStats';
import styles from './WebsiteMetricsBar.module.css';
import { Dropdown, Item } from 'react-basics';
export function WebsiteMetricsBar({ websiteId, sticky }: { websiteId: string; sticky?: boolean }) {
export function WebsiteMetricsBar({
websiteId,
sticky,
compareMode = false,
}: {
websiteId: string;
sticky?: boolean;
compareMode?: boolean;
}) {
const { formatMessage, labels } = useMessages();
const [compare, setCompare] = useState('prev');
const { ref, isSticky } = useSticky({ enabled: sticky });
const { data, isLoading, isFetched, error } = useWebsiteStats(websiteId);
const { data, isLoading, isFetched, error } = useWebsiteStats(websiteId, compare);
const { pageviews, visitors, visits, bounces, totaltime } = data || {};
const num = Math.min(data && visitors.value, data && bounces.value);
const diffs = data && {
pageviews: pageviews.value - pageviews.change,
visitors: visitors.value - visitors.change,
visits: visits.value - visits.change,
bounces: bounces.value - bounces.change,
totaltime: totaltime.value - totaltime.change,
};
const metrics = data
? [
{
...pageviews,
label: formatMessage(labels.views),
change: pageviews.value - pageviews.prev,
},
{
...visits,
label: formatMessage(labels.visits),
change: visits.value - visits.prev,
},
{
...visitors,
label: formatMessage(labels.visitors),
change: visitors.value - visitors.prev,
},
{
label: formatMessage(labels.bounceRate),
value: (Math.min(visitors.value, bounces.value) / visitors.value) * 100,
prev: (Math.min(visitors.prev, bounces.prev) / visitors.prev) * 100,
change:
(Math.min(visitors.value, bounces.value) / visitors.value) * 100 -
(Math.min(visitors.prev, bounces.prev) / visitors.prev) * 100,
format: n => Number(n).toFixed(0) + '%',
reverseColors: true,
},
{
label: formatMessage(labels.visitDuration),
value: totaltime.value / visits.value,
prev: totaltime.prev / visits.prev,
change: totaltime.value / visits.value - totaltime.prev / visits.prev,
format: n => `${+n < 0 ? '-' : ''}${formatShortTime(Math.abs(~~n), ['m', 's'], ' ')}`,
},
]
: [];
const items = [
{ label: formatMessage(labels.previousPeriod), value: 'prev' },
{ label: formatMessage(labels.yearOverYear), value: 'yoy' },
];
return (
<div
@ -31,58 +76,44 @@ export function WebsiteMetricsBar({ websiteId, sticky }: { websiteId: string; st
[styles.isSticky]: isSticky,
})}
>
<div>
<MetricsBar isLoading={isLoading} isFetched={isFetched} error={error}>
{pageviews && visitors && (
<>
{metrics.map(({ label, value, prev, change, format, reverseColors }) => {
return (
<MetricCard
label={formatMessage(labels.views)}
value={pageviews.value}
change={pageviews.change}
key={label}
value={value}
previousValue={prev}
label={label}
change={change}
format={format}
reverseColors={reverseColors}
showPrevious={compareMode}
/>
<MetricCard
label={formatMessage(labels.visits)}
value={visits.value}
change={visits.change}
/>
<MetricCard
label={formatMessage(labels.visitors)}
value={visitors.value}
change={visitors.change}
/>
<MetricCard
label={formatMessage(labels.bounceRate)}
value={visitors.value ? (num / visitors.value) * 100 : 0}
change={
visitors.value && visitors.change
? (num / visitors.value) * 100 -
(Math.min(diffs.visitors, diffs.bounces) / diffs.visitors) * 100 || 0
: 0
}
format={n => Number(n).toFixed(0) + '%'}
reverseColors
/>
<MetricCard
label={formatMessage(labels.averageVisitTime)}
value={
totaltime.value && pageviews.value
? totaltime.value / (pageviews.value - bounces.value)
: 0
}
change={
totaltime.value && pageviews.value
? (diffs.totaltime / (diffs.pageviews - diffs.bounces) -
totaltime.value / (pageviews.value - bounces.value)) *
-1 || 0
: 0
}
format={n => `${+n < 0 ? '-' : ''}${formatShortTime(Math.abs(~~n), ['m', 's'], ' ')}`}
/>
</>
)}
);
})}
</MetricsBar>
</div>
<div className={styles.actions}>
<WebsiteFilterButton websiteId={websiteId} />
<WebsiteDateFilter websiteId={websiteId} />
{compareMode && (
<div className={styles.vs}>
<b>VS</b>
<Dropdown
className={styles.dropdown}
items={items}
value={compare}
renderValue={value => items.find(i => i.value === value)?.label}
alignment="end"
onChange={(e: any) => setCompare(e)}
>
{items.map(({ label, value }) => (
<Item key={value}>{label}</Item>
))}
</Dropdown>
</div>
)}
</div>
</div>
);

View File

@ -1,11 +1,25 @@
'use client';
import WebsiteHeader from '../WebsiteHeader';
import WebsiteMetricsBar from '../WebsiteMetricsBar';
import FilterTags from 'components/metrics/FilterTags';
import { useNavigation } from 'components/hooks';
import { FILTER_COLUMNS } from 'lib/constants';
export function WebsiteComparePage({ websiteId }) {
const { query } = useNavigation();
const params = Object.keys(query).reduce((obj, key) => {
if (FILTER_COLUMNS[key]) {
obj[key] = query[key];
}
return obj;
}, {});
return (
<>
<WebsiteHeader websiteId={websiteId} />
<WebsiteMetricsBar websiteId={websiteId} />
<FilterTags websiteId={websiteId} params={params} />
<WebsiteMetricsBar websiteId={websiteId} compareMode={true} />
</>
);
}

View File

@ -14,25 +14,25 @@ export function RealtimeHeader({ data }: { data: RealtimeData }) {
className={styles.card}
label={formatMessage(labels.views)}
value={pageviews?.length}
hideComparison
showChange
/>
<MetricCard
className={styles.card}
label={formatMessage(labels.visitors)}
value={visitors?.length}
hideComparison
showChange
/>
<MetricCard
className={styles.card}
label={formatMessage(labels.events)}
value={events?.length}
hideComparison
showChange
/>
<MetricCard
className={styles.card}
label={formatMessage(labels.countries)}
value={countries?.length}
hideComparison
showChange
/>
</div>
</div>

View File

@ -1,13 +1,17 @@
import { useApi } from './useApi';
import { useFilterParams } from '../useFilterParams';
export function useWebsiteStats(websiteId: string, options?: { [key: string]: string }) {
export function useWebsiteStats(
websiteId: string,
compare?: string,
options?: { [key: string]: string },
) {
const { get, useQuery } = useApi();
const params = useFilterParams(websiteId);
return useQuery({
queryKey: ['websites:stats', { websiteId, ...params }],
queryFn: () => get(`/websites/${websiteId}/stats`, params),
queryKey: ['websites:stats', { websiteId, ...params, compare }],
queryFn: () => get(`/websites/${websiteId}/stats`, { ...params, compare }),
enabled: !!websiteId,
...options,
});

View File

@ -134,7 +134,7 @@ export const labels = defineMessages({
uniqueVisitors: { id: 'label.unique-visitors', defaultMessage: 'Unique visitors' },
bounceRate: { id: 'label.bounce-rate', defaultMessage: 'Bounce rate' },
viewsPerVisit: { id: 'label.views-per-visit', defaultMessage: 'Views per visit' },
averageVisitTime: { id: 'label.average-visit-time', defaultMessage: 'Average visit time' },
visitDuration: { id: 'label.visit-duration', defaultMessage: 'Visit duration' },
desktop: { id: 'label.desktop', defaultMessage: 'Desktop' },
laptop: { id: 'label.laptop', defaultMessage: 'Laptop' },
tablet: { id: 'label.tablet', defaultMessage: 'Tablet' },
@ -253,6 +253,8 @@ export const labels = defineMessages({
defaultMessage: 'Understand how users nagivate through your website.',
},
compare: { id: 'label.compare', defaultMessage: 'Compare' },
previousPeriod: { id: 'label.previous-period', defaultMessage: 'Previous period' },
yearOverYear: { id: 'label.year-over-year', defaultMessage: 'Year over year' },
});
export const messages = defineMessages({

View File

@ -2,7 +2,16 @@
display: flex;
flex-direction: column;
justify-content: center;
min-width: 140px;
min-width: 150px;
}
.card.compare {
gap: 10px;
}
.card.compare .change {
font-size: 16px;
padding: 5px 10px;
}
.card:first-child {
@ -14,30 +23,33 @@
}
.value {
display: flex;
align-items: center;
font-size: 36px;
font-size: 40px;
font-weight: 700;
white-space: nowrap;
min-height: 60px;
color: var(--base900);
line-height: 1.5;
}
.value.prev {
color: var(--base800);
}
.label {
display: flex;
align-items: center;
font-weight: 700;
gap: 10px;
white-space: nowrap;
min-height: 30px;
color: var(--base800);
}
.change {
font-size: 12px;
display: flex;
align-items: center;
gap: 5px;
font-size: 13px;
font-weight: 700;
padding: 0 5px;
border-radius: 5px;
color: var(--base500);
align-self: flex-start;
}
.change.positive {
@ -49,7 +61,3 @@
color: var(--red700);
background: var(--red100);
}
.change.plusSign::before {
content: '+';
}

View File

@ -1,15 +1,19 @@
import classNames from 'classnames';
import { Icon, Icons } from 'react-basics';
import { useSpring, animated } from '@react-spring/web';
import { formatNumber } from 'lib/format';
import styles from './MetricCard.module.css';
export interface MetricCardProps {
value: number;
previousValue?: number;
change?: number;
label: string;
label?: string;
reverseColors?: boolean;
format?: typeof formatNumber;
hideComparison?: boolean;
showLabel?: boolean;
showChange?: boolean;
showPrevious?: boolean;
className?: string;
}
@ -19,32 +23,43 @@ export const MetricCard = ({
label,
reverseColors = false,
format = formatNumber,
hideComparison = false,
showLabel = true,
showChange = true,
showPrevious = false,
className,
}: MetricCardProps) => {
const props = useSpring({ x: Number(value) || 0, from: { x: 0 } });
const changeProps = useSpring({ x: Number(change) || 0, from: { x: 0 } });
const prevProps = useSpring({ x: Number(value - change) || 0, from: { x: 0 } });
const positive = change * (reverseColors ? -1 : 1) >= 0;
const negative = change * (reverseColors ? -1 : 1) < 0;
return (
<div className={classNames(styles.card, className)}>
<div className={styles.label}>
{label}
{~~change !== 0 && !hideComparison && (
<animated.span
className={classNames(styles.change, {
[styles.positive]: change * (reverseColors ? -1 : 1) >= 0,
[styles.negative]: change * (reverseColors ? -1 : 1) < 0,
[styles.plusSign]: change > 0,
})}
title={changeProps?.x as any}
>
{changeProps?.x?.to(x => format(x))}
</animated.span>
)}
</div>
<div className={classNames(styles.card, className, showPrevious && styles.compare)}>
{showLabel && <div className={styles.label}>{label}</div>}
<animated.div className={styles.value} title={props?.x as any}>
{props?.x?.to(x => format(x))}
</animated.div>
{showChange && (
<div
className={classNames(styles.change, {
[styles.positive]: positive,
[styles.negative]: negative,
})}
>
<Icon rotate={positive ? -45 : 45} size={showPrevious ? 'sm' : 'xs'}>
<Icons.ArrowRight />
</Icon>
<animated.span title={changeProps?.x as any}>
{changeProps?.x?.to(x => format(Math.abs(x)))}
</animated.span>
</div>
)}
{showPrevious && (
<animated.div className={classNames(styles.value, styles.prev)} title={prevProps?.x as any}>
{prevProps?.x?.to(x => format(x))}
</animated.div>
)}
</div>
);
};

View File

@ -13,7 +13,7 @@
"label.all-time": "All time",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "Average visit time",
"label.visit-duration": "Average visit time",
"label.back": "Back",
"label.before": "Before",
"label.bounce-rate": "Bounce rate",

View File

@ -13,7 +13,7 @@
"label.all-time": "كل الوقت",
"label.analytics": "تحليلات",
"label.average": "المتوسط",
"label.average-visit-time": "متوسط وقت الزيارة",
"label.visit-duration": "متوسط وقت الزيارة",
"label.back": "للخلف",
"label.before": "قبل",
"label.bounce-rate": "معدل الارتداد",

View File

@ -13,7 +13,7 @@
"label.all-time": "Увесь час",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "Сярэдняя даўжыня наведвання",
"label.visit-duration": "Сярэдняя даўжыня наведвання",
"label.back": "Назад",
"label.before": "Before",
"label.bounce-rate": "Паказчык адмоваў",

View File

@ -13,7 +13,7 @@
"label.all-time": "সব সময়",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "গড় পরিদর্শনের সময়",
"label.visit-duration": "গড় পরিদর্শনের সময়",
"label.back": "পেছনে",
"label.before": "Before",
"label.bounce-rate": "বহিষ্কারের হার",

View File

@ -13,7 +13,7 @@
"label.all-time": "Cijelo vrijeme",
"label.analytics": "Analitike",
"label.average": "Prosjek",
"label.average-visit-time": "Prosječno vrijeme posjete",
"label.visit-duration": "Prosječno vrijeme posjete",
"label.back": "Nazad",
"label.before": "Prije",
"label.bounce-rate": "Bounce rate",

View File

@ -13,7 +13,7 @@
"label.all-time": "Sempre",
"label.analytics": "Analítiques",
"label.average": "Mitjana",
"label.average-visit-time": "Temps mitjà de visita",
"label.visit-duration": "Temps mitjà de visita",
"label.back": "Enrere",
"label.before": "Abans",
"label.bounce-rate": "Percentatge de rebot",

View File

@ -13,7 +13,7 @@
"label.all-time": "All time",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "Průměrný čas návštěvy",
"label.visit-duration": "Průměrný čas návštěvy",
"label.back": "Zpět",
"label.before": "Before",
"label.bounce-rate": "Okamžité opuštění",

View File

@ -13,7 +13,7 @@
"label.all-time": "Altid",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "Gennemsnitlig besøgstid",
"label.visit-duration": "Gennemsnitlig besøgstid",
"label.back": "Tilbage",
"label.before": "Before",
"label.bounce-rate": "Afvisningsprocent",

View File

@ -13,7 +13,7 @@
"label.all-time": "Gesamte Zitruum",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "Durchschn. Bsuechsziit",
"label.visit-duration": "Durchschn. Bsuechsziit",
"label.back": "Zrugg",
"label.before": "Before",
"label.bounce-rate": "Absprungsrate",

View File

@ -13,7 +13,7 @@
"label.all-time": "Gesamter Zeitraum",
"label.analytics": "Analytics",
"label.average": "Durchschnitt",
"label.average-visit-time": "Durchschn. Besuchszeit",
"label.visit-duration": "Durchschn. Besuchszeit",
"label.back": "Zurück",
"label.before": "Vor",
"label.bounce-rate": "Absprungrate",

View File

@ -13,7 +13,7 @@
"label.all-time": "All time",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "Μέσος χρόνος επίσκεψης",
"label.visit-duration": "Μέσος χρόνος επίσκεψης",
"label.back": "Πίσω",
"label.before": "Before",
"label.bounce-rate": "Ποσοστό αναπήδησης",

View File

@ -13,7 +13,7 @@
"label.all-time": "All time",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "Average visit time",
"label.visit-duration": "Average visit time",
"label.back": "Back",
"label.before": "Before",
"label.bounce-rate": "Bounce rate",

View File

@ -13,7 +13,7 @@
"label.all-time": "All time",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "Average visit time",
"label.visit-duration": "Average visit time",
"label.back": "Back",
"label.before": "Before",
"label.bounce-rate": "Bounce rate",

View File

@ -13,7 +13,7 @@
"label.all-time": "Todos los tiempos",
"label.analytics": "Analíticas",
"label.average": "Media",
"label.average-visit-time": "Tiempo promedio de visita",
"label.visit-duration": "Tiempo promedio de visita",
"label.back": "Atrás",
"label.before": "Antes",
"label.bounce-rate": "Porcentaje de rebote",

View File

@ -13,7 +13,7 @@
"label.all-time": "همه زمان",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "میانگین زمان بازدید",
"label.visit-duration": "میانگین زمان بازدید",
"label.back": "برگشت",
"label.before": "Before",
"label.bounce-rate": "نرخ Bounce",

View File

@ -13,7 +13,7 @@
"label.all-time": "Alusta lähtien",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "Keskimääräinen vierailuaika",
"label.visit-duration": "Keskimääräinen vierailuaika",
"label.back": "Takaisin",
"label.before": "Before",
"label.bounce-rate": "Välitön poistuminen",

View File

@ -13,7 +13,7 @@
"label.all-time": "All time",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "Miðal vitjurnartíð ",
"label.visit-duration": "Miðal vitjurnartíð ",
"label.back": "Aftur",
"label.before": "Before",
"label.bounce-rate": "Bounce prosenttal",

View File

@ -13,7 +13,7 @@
"label.all-time": "Toutes les données",
"label.analytics": "Analytics",
"label.average": "Moyenne",
"label.average-visit-time": "Temps de visite moyen",
"label.visit-duration": "Temps de visite moyen",
"label.back": "Retour",
"label.before": "Avant",
"label.bounce-rate": "Taux de rebond",

View File

@ -13,7 +13,7 @@
"label.all-time": "Sempre",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "Tempo medio de visita",
"label.visit-duration": "Tempo medio de visita",
"label.back": "Atrás",
"label.before": "Before",
"label.bounce-rate": "Proporción de rebote",

View File

@ -13,7 +13,7 @@
"label.all-time": "All time",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "זמן ביקור ממוצע",
"label.visit-duration": "זמן ביקור ממוצע",
"label.back": "חזרה",
"label.before": "Before",
"label.bounce-rate": "Bounce rate",

View File

@ -13,7 +13,7 @@
"label.all-time": "All time",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "औसत दृश्य समय",
"label.visit-duration": "औसत दृश्य समय",
"label.back": "पीछे",
"label.before": "Before",
"label.bounce-rate": "उछाल दर",

View File

@ -13,7 +13,7 @@
"label.all-time": "Svo vrijeme",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "Average visit time",
"label.visit-duration": "Average visit time",
"label.back": "Natrag ",
"label.before": "Before",
"label.bounce-rate": "Bounce rate",

View File

@ -13,7 +13,7 @@
"label.all-time": "All time",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "Átlagos látogatási idő",
"label.visit-duration": "Átlagos látogatási idő",
"label.back": "Vissza",
"label.before": "Before",
"label.bounce-rate": "Visszafordulási arány",

View File

@ -13,7 +13,7 @@
"label.all-time": "Semua waktu",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "Waktu kunjungan rata-rata",
"label.visit-duration": "Waktu kunjungan rata-rata",
"label.back": "Kembali",
"label.before": "Before",
"label.bounce-rate": "Rasio pentalan",

View File

@ -13,7 +13,7 @@
"label.all-time": "Sempre",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "Tempo medio di visita",
"label.visit-duration": "Tempo medio di visita",
"label.back": "Indietro",
"label.before": "Before",
"label.bounce-rate": "Frequenza di rimbalzo",

View File

@ -13,7 +13,7 @@
"label.all-time": "すべての時間帯",
"label.analytics": "アナリティクス",
"label.average": "平均",
"label.average-visit-time": "平均滞在時間",
"label.visit-duration": "平均滞在時間",
"label.back": "戻る",
"label.before": "直前",
"label.bounce-rate": "直帰率",

View File

@ -13,7 +13,7 @@
"label.all-time": "គ្រប់ពេល",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "មើលជាមធ្យម",
"label.visit-duration": "មើលជាមធ្យម",
"label.back": "ថយក្រោយ",
"label.before": "Before",
"label.bounce-rate": "ចំនួនវិលត្រឡប់",

View File

@ -13,7 +13,7 @@
"label.all-time": "All time",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "평균 방문 시간",
"label.visit-duration": "평균 방문 시간",
"label.back": "뒤로",
"label.before": "Before",
"label.bounce-rate": "이탈률",

View File

@ -13,7 +13,7 @@
"label.all-time": "Visas laikotarpis",
"label.analytics": "Analytics",
"label.average": "Vidurkis",
"label.average-visit-time": "Vidutinė vizito trukmė",
"label.visit-duration": "Vidutinė vizito trukmė",
"label.back": "Atgal",
"label.before": "Prieš",
"label.bounce-rate": "Atmetimo rodiklis",

View File

@ -13,7 +13,7 @@
"label.all-time": "Бүх цаг үеийн",
"label.analytics": "Analytics",
"label.average": "Дундаж",
"label.average-visit-time": "Зочилсон дундаж хугацаа",
"label.visit-duration": "Зочилсон дундаж хугацаа",
"label.back": "Буцах",
"label.before": "Өмнө",
"label.bounce-rate": "Нэг хуудас үзээд гарсан",

View File

@ -13,7 +13,7 @@
"label.all-time": "All time",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "Purata tempoh masa lawatan",
"label.visit-duration": "Purata tempoh masa lawatan",
"label.back": "Kembali",
"label.before": "Before",
"label.bounce-rate": "Kadar lantunan",

View File

@ -13,7 +13,7 @@
"label.all-time": "အချိန်အစမှအခုထိ",
"label.analytics": "အန်နလစ်တစ်",
"label.average": "ပျမ်းမျှ",
"label.average-visit-time": "ဝဘက်ဘ်ဆိုဒ်တွင် ပျမ်းမျှကုန်ဆုံးချိန်",
"label.visit-duration": "ဝဘက်ဘ်ဆိုဒ်တွင် ပျမ်းမျှကုန်ဆုံးချိန်",
"label.back": "နောက်သို့",
"label.before": "မတိုင်မီ",
"label.bounce-rate": "Bounce နှုန်း",

View File

@ -13,7 +13,7 @@
"label.all-time": "Noensinne",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "Gjennomsnittlig besøkstid",
"label.visit-duration": "Gjennomsnittlig besøkstid",
"label.back": "Tilbake",
"label.before": "Before",
"label.bounce-rate": "Avvisningsfrekvens",

View File

@ -13,7 +13,7 @@
"label.all-time": "Onbeperkt",
"label.analytics": "Analytics",
"label.average": "Gemiddelde",
"label.average-visit-time": "Gemiddelde bezoektijd",
"label.visit-duration": "Gemiddelde bezoektijd",
"label.back": "Terug",
"label.before": "Voor",
"label.bounce-rate": "Bouncepercentage",

View File

@ -13,7 +13,7 @@
"label.all-time": "Cały czas",
"label.analytics": "Analityka",
"label.average": "Średnia",
"label.average-visit-time": "Średni czas wizyty",
"label.visit-duration": "Średni czas wizyty",
"label.back": "Powrót",
"label.before": "Przed",
"label.bounce-rate": "Współczynnik odrzuceń",

View File

@ -13,7 +13,7 @@
"label.all-time": "Todos os períodos",
"label.analytics": "Análise",
"label.average": "Média",
"label.average-visit-time": "Tempo médio de visita",
"label.visit-duration": "Tempo médio de visita",
"label.back": "Voltar",
"label.before": "Antes",
"label.bounce-rate": "Taxa de rejeição",
@ -243,4 +243,4 @@
"message.viewed-page": "Página visualizada",
"message.visitor-log": "Visitante de {country} usando o navegador {browser} em um {device} com sistema operacional {os}.",
"message.visitors-dropped-off": "Visitantes abandonados"
}
}

View File

@ -13,7 +13,7 @@
"label.all-time": "Todo o tempo",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "Tempo médio de visita",
"label.visit-duration": "Tempo médio de visita",
"label.back": "Voltar",
"label.before": "Before",
"label.bounce-rate": "Taxa de rejeição",

View File

@ -13,7 +13,7 @@
"label.all-time": "Pentru tot timpul",
"label.analytics": "Analytics",
"label.average": "Mediu",
"label.average-visit-time": "Timp mediu de vizitare",
"label.visit-duration": "Timp mediu de vizitare",
"label.back": "Înapoi",
"label.before": "Înainte",
"label.bounce-rate": "Rata de respingere",

View File

@ -13,7 +13,7 @@
"label.all-time": "Все время",
"label.analytics": "Аналитика",
"label.average": "Average",
"label.average-visit-time": "Среднее время посещения",
"label.visit-duration": "Среднее время посещения",
"label.back": "Назад",
"label.before": "Before",
"label.bounce-rate": "Отказы",

View File

@ -13,7 +13,7 @@
"label.all-time": "හැම වෙලාවෙම",
"label.analytics": "Analytics",
"label.average": "Average",
"label.average-visit-time": "Average visit time",
"label.visit-duration": "Average visit time",
"label.back": "ආපසු",
"label.before": "Before",
"label.bounce-rate": "Bounce rate",

Some files were not shown because too many files have changed in this diff Show More