|
2 | 2 | type_collection = field.polymorphic_type_collection |
3 | 3 | type_column = field.association.foreign_type.to_s |
4 | 4 | selected_type = field.bindings[:object].send(type_column) |
5 | | - collection = field.associated_collection(selected_type) |
6 | 5 | selected = field.bindings[:object].send(field.association.name) |
| 6 | + collection = selected ? [[field.formatted_value, selected.id]] : [[]] |
7 | 7 | column_type_dom_id = form.dom_id(field).sub(field.method_name.to_s, type_column) |
| 8 | + current_action = params[:action].in?(['create', 'new']) ? 'create' : 'update' |
| 9 | + |
| 10 | + default_options = { float_left: false } |
| 11 | + |
| 12 | + js_data = type_collection.inject({}) do |options, model| |
| 13 | + model_name = model.second.underscore.downcase |
| 14 | + source_abstract_model = RailsAdmin.config(form.object.class).abstract_model |
| 15 | + options.merge(model_name.gsub("_", "") => { |
| 16 | + xhr: true, |
| 17 | + remote_source: index_path(model_name, source_object_id: form.object.id, source_abstract_model: source_abstract_model.to_param, current_action: current_action, compact: true), |
| 18 | + float_left: false |
| 19 | + }) |
| 20 | + end |
8 | 21 |
|
9 | 22 | .form-inline |
10 | | - = form.select type_column, type_collection, {include_blank: true, selected: selected_type}, class: "form-control", id: column_type_dom_id, data: { polymorphic: true, urls: field.polymorphic_type_urls.to_json } |
11 | | - = form.select field.method_name, collection, {include_blank: true, selected: selected.try(:id)}, class: "form-control" |
| 23 | + - js_data.each do |model, value| |
| 24 | + %div{id: "#{model}-js-options", data: { options: value.to_json } } |
| 25 | + = form.select type_column, type_collection, {include_blank: true, selected: selected_type}, class: "form-control", id: column_type_dom_id, data: { polymorphic: true, urls: field.polymorphic_type_urls.to_json }, style: "float: left; margin-right: 10px;" |
| 26 | + = form.select field.method_name, collection, {include_blank: true, selected: selected.try(:id)}, class: "form-control", data: { filteringselect: true, options: js_data[selected_type.try(:downcase)] || default_options }, placeholder: 'Search' |
0 commit comments