@@ -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 }
0 commit comments