@@ -24,6 +24,7 @@ class BaseAction
24
24
attr_reader :arguments
25
25
attr_reader :icon
26
26
attr_reader :appended_turbo_streams
27
+ attr_reader :records_to_reload
27
28
28
29
# TODO: find a differnet way to delegate this to the uninitialized Current variable
29
30
delegate :context , to : Avo ::Current
@@ -237,6 +238,7 @@ def close_modal
237
238
self
238
239
end
239
240
241
+ # def do_nothing
240
242
alias_method :do_nothing , :close_modal
241
243
242
244
# Add a placeholder silent message from when a user wants to do a redirect action or something similar
@@ -264,6 +266,47 @@ def reload
264
266
self
265
267
end
266
268
269
+ def reload_record ( records )
270
+ # Force close modal to avoid default redirect to
271
+ # Redirect is 100% not wanted when using reload_record
272
+ close_modal
273
+
274
+ @records_to_reload = Array ( records )
275
+
276
+ append_to_response -> {
277
+ table_row_components = [ ]
278
+ header_fields = [ ]
279
+
280
+ @action . records_to_reload . each do |record |
281
+ resource = @resource . dup
282
+ resource . hydrate ( record :, view : :index )
283
+ resource . detect_fields
284
+ row_fields = resource . get_fields ( only_root : true )
285
+ header_fields . concat row_fields
286
+ table_row_components << resource . resolve_component ( Avo ::Index ::TableRowComponent ) . new (
287
+ resource : resource ,
288
+ header_fields : row_fields . map ( &:table_header_label ) ,
289
+ fields : row_fields
290
+ )
291
+ end
292
+
293
+ header_fields . uniq! ( &:table_header_label )
294
+
295
+ header_fields_ids = header_fields . map ( &:table_header_label )
296
+
297
+ table_row_components . map . with_index do |table_row_component , index |
298
+ table_row_component . header_fields = header_fields_ids
299
+ turbo_stream . replace (
300
+ "avo/index/table_row_component_#{ @action . records_to_reload [ index ] . to_param } " ,
301
+ table_row_component
302
+ )
303
+ end
304
+ }
305
+ end
306
+
307
+ # def reload_records
308
+ alias_method :reload_records , :reload_record
309
+
267
310
def navigate_to_action ( action , **kwargs )
268
311
response [ :type ] = :navigate_to_action
269
312
response [ :action ] = action
0 commit comments