Module: RemoteSelect::ViewHelpers
- Defined in:
- lib/remote_select/view_helpers.rb
Instance Method Summary collapse
-
#remote_select(form, attribute, endpoint, options = {}) ⇒ Object
Renders a remote-data searchable select for a Rails form.
Instance Method Details
#remote_select(form, attribute, endpoint, options = {}) ⇒ Object
Renders a remote-data searchable select for a Rails form.
Options:
:selected_value [String/Integer] pre-selected value id
:selected_text [String] pre-selected display text
:min_chars [Integer] chars needed before search fires (default: 2)
:debounce_delay [Integer] debounce in ms (default: 250)
:placeholder [String] i18n: remote_select.placeholder
:per_page [Integer] results per page (default: 20)
:depends_on [String] CSS selector(s) of dependency field(s)
:clear_on_dependency_change [Boolean] clear on dependency change (default: true)
:empty_text [String] i18n: remote_select.empty_text
:loading_text [String] i18n: remote_select.loading_text
:html [Hash] extra HTML attrs for the hidden input
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/remote_select/view_helpers.rb', line 23 def remote_select(form, attribute, endpoint, = {}) selected_value = .delete(:selected_value) || form.object.try(attribute) selected_text = .delete(:selected_text) = .delete(:html) || {} data_attrs = { remote_select: true, endpoint: endpoint, selected_value: selected_value, selected_text: selected_text } data_attrs[:placeholder] = [:placeholder] || I18n.t("remote_select.placeholder", default: "Type to search...") data_attrs[:empty_text] = [:empty_text] || I18n.t("remote_select.empty_text", default: "No results found") data_attrs[:loading_text] = [:loading_text] || I18n.t("remote_select.loading_text", default: "Loading...") %i[min_chars debounce_delay per_page depends_on].each do |key| data_attrs[key] = [key] if [key].present? end unless [:clear_on_dependency_change].nil? data_attrs[:clear_on_dependency_change] = [:clear_on_dependency_change] end [:data] ||= {} [:data].merge!(data_attrs) [:class] = [[:class], "remote-select-input"].compact.join(" ") [:value] ||= selected_value if selected_value.present? form.hidden_field(attribute, ) end |