Skip to content

Commit 92e9d5a

Browse files
committed
Improve visuals while loading
1 parent 45e7811 commit 92e9d5a

File tree

3 files changed

+43
-43
lines changed

3 files changed

+43
-43
lines changed

assets/css/app.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,7 @@ table.package-list .button {
408408
font-weight: 600;
409409
}
410410

411-
#loading-trigger {
411+
.loading-spinner {
412412
height: 60px;
413413
width: 100%;
414414
margin: 30px 0;
@@ -420,7 +420,7 @@ table.package-list .button {
420420
opacity: 0.8;
421421
}
422422

423-
#loading-trigger::before {
423+
.loading-spinner::before {
424424
content: '';
425425
width: 20px;
426426
height: 20px;

lib/diff_web/live/diff_live_view.ex

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ defmodule DiffWeb.DiffLiveView do
7171
{:ok, diff_ids} = Diff.Storage.list_diffs(package, from, to)
7272

7373
initial_batch_size = 5
74-
{initial_diffs, remaining} = Enum.split(diff_ids, initial_batch_size)
74+
{initial_diffs, _remaining} = Enum.split(diff_ids, initial_batch_size)
7575

7676
socket =
7777
assign(socket,
@@ -81,12 +81,11 @@ defmodule DiffWeb.DiffLiveView do
8181
to: to,
8282
metadata: metadata,
8383
all_diff_ids: diff_ids,
84-
loaded_diffs: initial_diffs,
84+
loaded_diffs: [],
8585
loaded_diff_content: %{},
86-
remaining_diffs: remaining,
87-
loading: true,
86+
remaining_diffs: diff_ids,
8887
generating: false,
89-
has_more_diffs: length(remaining) > 0
88+
has_more_diffs: length(diff_ids) > 0
9089
)
9190

9291
send(self(), {:load_diffs, initial_diffs})
@@ -106,7 +105,6 @@ defmodule DiffWeb.DiffLiveView do
106105
loaded_diffs: [],
107106
loaded_diff_content: %{},
108107
remaining_diffs: [],
109-
loading: false,
110108
generating: true,
111109
has_more_diffs: false
112110
)
@@ -136,14 +134,7 @@ defmodule DiffWeb.DiffLiveView do
136134

137135
def handle_event("load-more", _params, socket) do
138136
batch_size = 5
139-
{next_batch, remaining} = Enum.split(socket.assigns.remaining_diffs, batch_size)
140-
141-
socket =
142-
socket
143-
|> assign(
144-
remaining_diffs: remaining,
145-
has_more_diffs: length(remaining) > 0
146-
)
137+
{next_batch, _remaining} = Enum.split(socket.assigns.remaining_diffs, batch_size)
147138

148139
send(self(), {:load_diffs_and_update, next_batch})
149140

@@ -158,19 +149,18 @@ defmodule DiffWeb.DiffLiveView do
158149
case process_stream_to_diffs(package, from, to, stream) do
159150
{:ok, metadata, diff_ids} ->
160151
initial_batch_size = 5
161-
{initial_diffs, remaining} = Enum.split(diff_ids, initial_batch_size)
152+
{initial_diffs, _remaining} = Enum.split(diff_ids, initial_batch_size)
162153

163154
socket =
164155
socket
165156
|> assign(
166157
metadata: metadata,
167158
all_diff_ids: diff_ids,
168-
loaded_diffs: initial_diffs,
159+
loaded_diffs: [],
169160
loaded_diff_content: %{},
170-
remaining_diffs: remaining,
161+
remaining_diffs: diff_ids,
171162
generating: false,
172-
loading: true,
173-
has_more_diffs: length(remaining) > 0
163+
has_more_diffs: length(diff_ids) > 0
174164
)
175165

176166
send(self(), {:load_diffs, initial_diffs})
@@ -203,14 +193,20 @@ defmodule DiffWeb.DiffLiveView do
203193
existing_content = Map.get(socket.assigns, :loaded_diff_content, %{})
204194
all_loaded_content = Map.merge(existing_content, new_loaded_content)
205195

206-
new_loaded_diffs = socket.assigns.loaded_diffs ++ diff_ids
196+
# Only add successfully loaded diffs to loaded_diffs
197+
successfully_loaded_new_diffs = Map.keys(new_loaded_content)
198+
new_loaded_diffs = socket.assigns.loaded_diffs ++ successfully_loaded_new_diffs
199+
200+
# Remove successfully loaded diffs from remaining_diffs
201+
updated_remaining = socket.assigns.remaining_diffs -- successfully_loaded_new_diffs
207202

208203
socket =
209204
socket
210205
|> assign(
211206
loaded_diffs: new_loaded_diffs,
212207
loaded_diff_content: all_loaded_content,
213-
loading: false
208+
remaining_diffs: updated_remaining,
209+
has_more_diffs: length(updated_remaining) > 0
214210
)
215211

216212
{:noreply, socket}
@@ -226,11 +222,19 @@ defmodule DiffWeb.DiffLiveView do
226222
diff_ids
227223
)
228224

225+
# Only add diffs to loaded_diffs if content was successfully loaded
226+
successfully_loaded_diffs = Map.keys(loaded_content)
227+
228+
# Remove successfully loaded diffs from remaining_diffs
229+
updated_remaining = socket.assigns.remaining_diffs -- successfully_loaded_diffs
230+
229231
socket =
230232
socket
231233
|> assign(
234+
loaded_diffs: successfully_loaded_diffs,
232235
loaded_diff_content: loaded_content,
233-
loading: false
236+
remaining_diffs: updated_remaining,
237+
has_more_diffs: length(updated_remaining) > 0
234238
)
235239

236240
{:noreply, socket}

lib/diff_web/templates/live/diff.html.leex

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18,35 +18,31 @@
1818
</div>
1919
</div>
2020
<% else %>
21-
<div class="search-area">
22-
<div class="diff-stats-header">
23-
<span class="files-changed"><%= @metadata.files_changed %> files changed</span>
24-
<span class="additions">+<%= @metadata.total_additions %></span>
25-
<span class="deletions">-<%= @metadata.total_deletions %></span>
26-
</div>
27-
</div>
28-
29-
<%= if @generating do %>
30-
<div class="message-container">
31-
<div class="message">Generating diffs...</div>
32-
</div>
33-
<% end %>
34-
35-
<%= if @loading do %>
36-
<div class="message-container">
37-
<div class="message">Loading diffs...</div>
21+
<%= unless @generating do %>
22+
<div class="search-area">
23+
<div class="diff-stats-header">
24+
<span class="files-changed"><%= @metadata.files_changed %> files changed</span>
25+
<span class="additions">+<%= @metadata.total_additions %></span>
26+
<span class="deletions">-<%= @metadata.total_deletions %></span>
27+
</div>
3828
</div>
3929
<% end %>
4030

4131
<div class="ghd-container" id="diff-list">
32+
<%= if @generating do %>
33+
<div class="loading-spinner">
34+
Generating diffs...
35+
</div>
36+
<% end %>
37+
4238
<%= for diff_id <- @loaded_diffs do %>
4339
<div id="diff-<%= diff_id %>">
44-
<%= raw(Map.get(@loaded_diff_content, diff_id, "<div class='diff-error'>Diff content not loaded</div>")) %>
40+
<%= raw(Map.fetch!(@loaded_diff_content, diff_id)) %>
4541
</div>
4642
<% end %>
4743

4844
<%= if @has_more_diffs do %>
49-
<div id="loading-trigger" phx-hook="InfiniteScroll" data-loaded="<%= length(@loaded_diffs) %>">
45+
<div id="loading-trigger" class="loading-spinner" phx-hook="InfiniteScroll" data-loaded="<%= length(@loaded_diffs) %>">
5046
Loading more diffs...
5147
</div>
5248
<% end %>

0 commit comments

Comments
 (0)