Skip to content

Commit af90d07

Browse files
committed
Use assign instead of assign_async for pages breakdown query result
1 parent a0bd5f8 commit af90d07

File tree

3 files changed

+63
-83
lines changed

3 files changed

+63
-83
lines changed

lib/plausible_web/live/components/dashboard/report_list.ex

Lines changed: 46 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -29,60 +29,55 @@ defmodule PlausibleWeb.Components.Dashboard.ReportList do
2929
col_min_width: @col_min_width
3030
)
3131

32-
if assigns.query_result.loading || !assigns.query_result.ok? do
33-
~H"""
34-
"""
35-
else
36-
%QueryResult{results: results, meta: meta, query: query} = assigns.query_result.result
37-
38-
assigns =
39-
assign(assigns,
40-
results: results,
41-
metric_keys: query[:metrics],
42-
metric_labels: meta[:metric_labels],
43-
empty?: Enum.empty?(results)
44-
)
45-
46-
~H"""
47-
<.no_data :if={@empty?} min_height={@min_height} />
48-
49-
<div :if={not @empty?} class="h-full flex flex-col" data-test-id={@data_test_id}>
50-
<div style={"row-height: #{@row_height}px;"}>
51-
<.report_header
52-
key_label={@key_label}
53-
metric_labels={@metric_labels}
54-
col_min_width={@col_min_width}
55-
/>
56-
</div>
32+
%QueryResult{results: results, meta: meta, query: query} = assigns.query_result
5733

58-
<div class="grow" style={"min-height: #{@data_container_height}px;"}>
59-
<.report_row
60-
:for={{item, item_index} <- Enum.with_index(@results)}
61-
link_fn={assigns[:external_link_fn]}
62-
item={item}
63-
item_index={item_index}
64-
item_name={List.first(item.dimensions)}
65-
metrics={Enum.zip(@metric_keys, item.metrics)}
66-
bar_max_value={bar_max_value(@results, @metric_keys)}
67-
site={@site}
68-
params={@params}
69-
dimension={@dimension}
70-
row_height={@row_height}
71-
row_gap_height={@row_gap_height}
72-
col_min_width={@col_min_width}
73-
/>
74-
</div>
34+
assigns =
35+
assign(assigns,
36+
results: results,
37+
metric_keys: query[:metrics],
38+
metric_labels: meta[:metric_labels],
39+
empty?: Enum.empty?(results)
40+
)
7541

76-
<div class="w-full text-center">
77-
<.details_link
78-
site={@site}
79-
params={@params}
80-
path="/pages"
81-
/>
82-
</div>
42+
~H"""
43+
<.no_data :if={@empty?} min_height={@min_height} />
44+
45+
<div :if={not @empty?} class="h-full flex flex-col" data-test-id={@data_test_id}>
46+
<div style={"row-height: #{@row_height}px;"}>
47+
<.report_header
48+
key_label={@key_label}
49+
metric_labels={@metric_labels}
50+
col_min_width={@col_min_width}
51+
/>
8352
</div>
84-
"""
85-
end
53+
54+
<div class="grow" style={"min-height: #{@data_container_height}px;"}>
55+
<.report_row
56+
:for={{item, item_index} <- Enum.with_index(@results)}
57+
link_fn={assigns[:external_link_fn]}
58+
item={item}
59+
item_index={item_index}
60+
item_name={List.first(item.dimensions)}
61+
metrics={Enum.zip(@metric_keys, item.metrics)}
62+
bar_max_value={bar_max_value(@results, @metric_keys)}
63+
site={@site}
64+
params={@params}
65+
dimension={@dimension}
66+
row_height={@row_height}
67+
row_gap_height={@row_gap_height}
68+
col_min_width={@col_min_width}
69+
/>
70+
</div>
71+
72+
<div class="w-full text-center">
73+
<.details_link
74+
site={@site}
75+
params={@params}
76+
path="/pages"
77+
/>
78+
</div>
79+
</div>
80+
"""
8681
end
8782

8883
defp no_data(assigns) do

lib/plausible_web/live/dashboard/pages.ex

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -107,24 +107,22 @@ defmodule PlausibleWeb.Live.Dashboard.Pages do
107107
defp load_stats(socket) do
108108
%{active_tab: active_tab, site: site, params: params} = socket.assigns
109109

110-
assign_async(socket, :query_result, fn ->
111-
metrics = choose_metrics(params)
112-
dimension = get_tab_info(active_tab, :dimension)
113-
114-
params =
115-
params
116-
|> ParsedQueryParams.set(
117-
metrics: metrics,
118-
dimensions: [dimension],
119-
pagination: @pagination
120-
)
110+
metrics = choose_metrics(params)
111+
dimension = get_tab_info(active_tab, :dimension)
112+
113+
params =
114+
params
115+
|> ParsedQueryParams.set(
116+
metrics: metrics,
117+
dimensions: [dimension],
118+
pagination: @pagination
119+
)
121120

122-
query = QueryBuilder.build!(site, params)
121+
query = QueryBuilder.build!(site, params)
123122

124-
%QueryResult{} = query_result = Stats.query(site, query)
123+
%QueryResult{} = query_result = Stats.query(site, query)
125124

126-
{:ok, %{query_result: query_result}}
127-
end)
125+
assign(socket, :query_result, query_result)
128126
end
129127

130128
defp choose_metrics(%ParsedQueryParams{} = params) do

test/plausible_web/live/components/dashboard/report_list_test.exs

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ defmodule PlausibleWeb.Components.Dashboard.ReportListTest do
44

55
alias PlausibleWeb.Components.Dashboard.ReportList
66
alias Plausible.Stats.{ParsedQueryParams, QueryResult}
7-
alias Phoenix.LiveView.AsyncResult
87
import Plausible.DashboardTestUtils
98

109
@report_list_selector ~s|[data-test-id="pages-report-list"]|
@@ -23,31 +22,19 @@ defmodule PlausibleWeb.Components.Dashboard.ReportListTest do
2322
{:ok, %{assigns: assigns}}
2423
end
2524

26-
test "renders empty when loading", %{assigns: assigns} do
27-
assigns = Keyword.put(assigns, :query_result, AsyncResult.loading())
28-
assert render_component(&ReportList.report/1, assigns) == ""
29-
end
30-
31-
test "renders empty when result not ok", %{assigns: assigns} do
32-
assigns =
33-
Keyword.put(assigns, :query_result, AsyncResult.failed(AsyncResult.loading(), :some_error))
34-
35-
assert render_component(&ReportList.report/1, assigns) == ""
36-
end
37-
3825
test "item bar width depends on visitors metric", %{assigns: assigns} do
39-
successful_async_result =
40-
AsyncResult.ok(%QueryResult{
26+
query_result =
27+
%QueryResult{
4128
results: [
4229
%{metrics: [100, 60.0], dimensions: ["/a"]},
4330
%{metrics: [70, 40.0], dimensions: ["/b"]},
4431
%{metrics: [30, 20.0], dimensions: ["/c"]}
4532
],
4633
meta: Jason.OrderedObject.new(metric_labels: ["Conversions", "CR"]),
4734
query: Jason.OrderedObject.new(metrics: [:visitors, :conversion_rate])
48-
})
35+
}
4936

50-
assigns = Keyword.put(assigns, :query_result, successful_async_result)
37+
assigns = Keyword.put(assigns, :query_result, query_result)
5138

5239
html = render_component(&ReportList.report/1, assigns)
5340

0 commit comments

Comments
 (0)