mirror of
https://github.com/plausible/analytics.git
synced 2024-12-23 09:33:19 +03:00
Bug fix - show views_per_visit
when stats include imported data (#2738)
* show views_per_visit with imported data * use optional chaining instead
This commit is contained in:
parent
4eca1aef70
commit
ad3edbfb9a
@ -44,10 +44,14 @@ export default class TopStats extends React.Component {
|
|||||||
let statName = stat.name.toLowerCase()
|
let statName = stat.name.toLowerCase()
|
||||||
statName = stat.value === 1 ? statName.slice(0, -1) : statName
|
statName = stat.value === 1 ? statName.slice(0, -1) : statName
|
||||||
|
|
||||||
|
const { topStatData, lastLoadTimestamp } = this.props
|
||||||
|
const showingImported = topStatData?.imported_source && topStatData?.with_imported
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<div className="whitespace-nowrap">{this.topStatNumberLong(stat)} {statName}</div>
|
<div className="whitespace-nowrap">{this.topStatNumberLong(stat)} {statName}</div>
|
||||||
{stat.name === 'Current visitors' && <p className="font-normal text-xs">Last updated <SecondsSinceLastLoad lastLoadTimestamp={this.props.lastLoadTimestamp}/>s ago</p>}
|
{stat.name === 'Current visitors' && <p className="font-normal text-xs">Last updated <SecondsSinceLastLoad lastLoadTimestamp={lastLoadTimestamp}/>s ago</p>}
|
||||||
|
{stat.name === 'Views per visit' && showingImported && <p className="font-normal text-xs whitespace-nowrap">Based only on native data</p>}
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -452,6 +452,14 @@ defmodule Plausible.Stats.Imported do
|
|||||||
|> select_joined_metrics(rest)
|
|> select_joined_metrics(rest)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp select_joined_metrics(q, [:views_per_visit | rest]) do
|
||||||
|
q
|
||||||
|
|> select_merge([s, _i], %{
|
||||||
|
views_per_visit: s.views_per_visit
|
||||||
|
})
|
||||||
|
|> select_joined_metrics(rest)
|
||||||
|
end
|
||||||
|
|
||||||
defp select_joined_metrics(q, [:bounce_rate | rest]) do
|
defp select_joined_metrics(q, [:bounce_rate | rest]) do
|
||||||
q
|
q
|
||||||
|> select_merge([s, i], %{
|
|> select_merge([s, i], %{
|
||||||
|
@ -125,6 +125,47 @@ defmodule PlausibleWeb.Api.StatsController.TopStatsTest do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "GET /api/stats/top-stats - with imported data" do
|
||||||
|
setup [:create_user, :log_in, :create_new_site, :add_imported_data]
|
||||||
|
|
||||||
|
test "merges imported data into all top stat metrics except views_per_visit", %{
|
||||||
|
conn: conn,
|
||||||
|
site: site
|
||||||
|
} do
|
||||||
|
populate_stats(site, [
|
||||||
|
build(:pageview,
|
||||||
|
user_id: @user_id,
|
||||||
|
timestamp: ~N[2021-01-01 00:00:00]
|
||||||
|
),
|
||||||
|
build(:pageview,
|
||||||
|
user_id: @user_id,
|
||||||
|
timestamp: ~N[2021-01-01 00:15:00]
|
||||||
|
),
|
||||||
|
build(:pageview,
|
||||||
|
timestamp: ~N[2021-01-01 00:15:00]
|
||||||
|
),
|
||||||
|
build(:imported_visitors, date: ~D[2021-01-01])
|
||||||
|
])
|
||||||
|
|
||||||
|
conn =
|
||||||
|
get(
|
||||||
|
conn,
|
||||||
|
"/api/stats/#{site.domain}/top-stats?period=day&date=2021-01-01&with_imported=true"
|
||||||
|
)
|
||||||
|
|
||||||
|
res = json_response(conn, 200)
|
||||||
|
|
||||||
|
assert res["top_stats"] == [
|
||||||
|
%{"name" => "Unique visitors", "value" => 3, "change" => 100},
|
||||||
|
%{"name" => "Total visits", "value" => 3, "change" => 100},
|
||||||
|
%{"name" => "Total pageviews", "value" => 4, "change" => 100},
|
||||||
|
%{"name" => "Views per visit", "value" => 1.5, "change" => 100},
|
||||||
|
%{"name" => "Bounce rate", "value" => 33, "change" => nil},
|
||||||
|
%{"name" => "Visit duration", "value" => 303, "change" => 100}
|
||||||
|
]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "GET /api/stats/top-stats - realtime" do
|
describe "GET /api/stats/top-stats - realtime" do
|
||||||
setup [:create_user, :log_in, :create_new_site]
|
setup [:create_user, :log_in, :create_new_site]
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user