Skip to content

Commit 5e9b99c

Browse files
authored
wip (#3372)
1 parent 40abfed commit 5e9b99c

File tree

4 files changed

+51
-1
lines changed

4 files changed

+51
-1
lines changed

app/components/avo/index/table_row_component.html.erb

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<%# hover:z-[21] removed from tr class to solve flickering actions component on row controls and z-20 changed to z-21%>
22

33
<%= content_tag :tr,
4+
id: "#{self.class.to_s.underscore}_#{@resource.record.to_param}",
45
class: class_names("bg-white hover:bg-gray-50 hover:shadow-row z-21 border-b", {"cursor-pointer": click_row_to_view_record}),
56
data: {
67
component_name: self.class.to_s.underscore,

lib/avo/base_action.rb

+43
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class BaseAction
2424
attr_reader :arguments
2525
attr_reader :icon
2626
attr_reader :appended_turbo_streams
27+
attr_reader :records_to_reload
2728

2829
# TODO: find a differnet way to delegate this to the uninitialized Current variable
2930
delegate :context, to: Avo::Current
@@ -237,6 +238,7 @@ def close_modal
237238
self
238239
end
239240

241+
# def do_nothing
240242
alias_method :do_nothing, :close_modal
241243

242244
# Add a placeholder silent message from when a user wants to do a redirect action or something similar
@@ -264,6 +266,47 @@ def reload
264266
self
265267
end
266268

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+
267310
def navigate_to_action(action, **kwargs)
268311
response[:type] = :navigate_to_action
269312
response[:action] = action

spec/dummy/app/avo/actions/city/update.rb

+5-1
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,14 @@ def fields
88
end
99

1010
def handle(**args)
11-
City.find(arguments[:cities]).each do |city|
11+
cities = City.find(arguments[:cities])
12+
13+
cities.each do |city|
1214
city.update! args[:fields]
1315
end
1416

1517
succeed "City updated!"
18+
19+
reload_records(cities)
1620
end
1721
end

spec/dummy/app/avo/actions/toggle_inactive.rb

+2
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,7 @@ def handle(**args)
3434
end
3535

3636
silent
37+
38+
reload_records(query)
3739
end
3840
end

0 commit comments

Comments
 (0)