@@ -71,7 +71,7 @@ defmodule DiffWeb.DiffLiveView do
71
71
{ :ok , diff_ids } = Diff.Storage . list_diffs ( package , from , to )
72
72
73
73
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 )
75
75
76
76
socket =
77
77
assign ( socket ,
@@ -81,12 +81,11 @@ defmodule DiffWeb.DiffLiveView do
81
81
to: to ,
82
82
metadata: metadata ,
83
83
all_diff_ids: diff_ids ,
84
- loaded_diffs: initial_diffs ,
84
+ loaded_diffs: [ ] ,
85
85
loaded_diff_content: % { } ,
86
- remaining_diffs: remaining ,
87
- loading: true ,
86
+ remaining_diffs: diff_ids ,
88
87
generating: false ,
89
- has_more_diffs: length ( remaining ) > 0
88
+ has_more_diffs: length ( diff_ids ) > 0
90
89
)
91
90
92
91
send ( self ( ) , { :load_diffs , initial_diffs } )
@@ -106,7 +105,6 @@ defmodule DiffWeb.DiffLiveView do
106
105
loaded_diffs: [ ] ,
107
106
loaded_diff_content: % { } ,
108
107
remaining_diffs: [ ] ,
109
- loading: false ,
110
108
generating: true ,
111
109
has_more_diffs: false
112
110
)
@@ -136,14 +134,7 @@ defmodule DiffWeb.DiffLiveView do
136
134
137
135
def handle_event ( "load-more" , _params , socket ) do
138
136
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 )
147
138
148
139
send ( self ( ) , { :load_diffs_and_update , next_batch } )
149
140
@@ -158,19 +149,18 @@ defmodule DiffWeb.DiffLiveView do
158
149
case process_stream_to_diffs ( package , from , to , stream ) do
159
150
{ :ok , metadata , diff_ids } ->
160
151
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 )
162
153
163
154
socket =
164
155
socket
165
156
|> assign (
166
157
metadata: metadata ,
167
158
all_diff_ids: diff_ids ,
168
- loaded_diffs: initial_diffs ,
159
+ loaded_diffs: [ ] ,
169
160
loaded_diff_content: % { } ,
170
- remaining_diffs: remaining ,
161
+ remaining_diffs: diff_ids ,
171
162
generating: false ,
172
- loading: true ,
173
- has_more_diffs: length ( remaining ) > 0
163
+ has_more_diffs: length ( diff_ids ) > 0
174
164
)
175
165
176
166
send ( self ( ) , { :load_diffs , initial_diffs } )
@@ -203,14 +193,20 @@ defmodule DiffWeb.DiffLiveView do
203
193
existing_content = Map . get ( socket . assigns , :loaded_diff_content , % { } )
204
194
all_loaded_content = Map . merge ( existing_content , new_loaded_content )
205
195
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
207
202
208
203
socket =
209
204
socket
210
205
|> assign (
211
206
loaded_diffs: new_loaded_diffs ,
212
207
loaded_diff_content: all_loaded_content ,
213
- loading: false
208
+ remaining_diffs: updated_remaining ,
209
+ has_more_diffs: length ( updated_remaining ) > 0
214
210
)
215
211
216
212
{ :noreply , socket }
@@ -226,11 +222,19 @@ defmodule DiffWeb.DiffLiveView do
226
222
diff_ids
227
223
)
228
224
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
+
229
231
socket =
230
232
socket
231
233
|> assign (
234
+ loaded_diffs: successfully_loaded_diffs ,
232
235
loaded_diff_content: loaded_content ,
233
- loading: false
236
+ remaining_diffs: updated_remaining ,
237
+ has_more_diffs: length ( updated_remaining ) > 0
234
238
)
235
239
236
240
{ :noreply , socket }
0 commit comments