Skip to content

Commit

Permalink
Fix primer autocompleter missing bindValue bug, hide already selected…
Browse files Browse the repository at this point in the history
… values.
  • Loading branch information
dombesz committed Feb 25, 2025
1 parent c7d76b6 commit 2f78237
Showing 1 changed file with 28 additions and 11 deletions.
39 changes: 28 additions & 11 deletions lib/primer/open_project/forms/autocompleter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,25 +20,42 @@ def initialize(input:, autocomplete_options:, wrapper_data_attributes: {})
@wrapper_data_attributes = wrapper_data_attributes
end

def extend_autocomplete_inputs(inputs) # rubocop:disable Metrics/AbcSize,Metrics/PerceivedComplexity
inputs[:classes] = "ng-select--primerized #{@input.invalid? ? '-error' : ''}"
inputs[:inputName] ||= builder.field_name(@input.name)
inputs[:labelForId] ||= builder.field_id(@input.name)
inputs[:defaultData] = true unless inputs.key?(:defaultData)
def extend_autocomplete_inputs(inputs)
inputs = autocomplete_input_defaults(inputs)

if inputs.delete(:decorated)
inputs[:items] = @input.select_options.map(&:to_h)
selected = @input.select_options.filter_map { |option| option.to_h if option.selected }
inputs[:model] = inputs[:multiple] ? selected : selected.first
inputs[:defaultData] = false
inputs[:additionalClassProperty] = "classes"
inputs[:bindLabel] = "name"
inputs = autocomplete_input_decorated(inputs)
elsif builder.object
inputs[:inputValue] ||= builder.object.send(@input.name)
end

inputs
end

private

def autocomplete_input_defaults(inputs)
inputs[:classes] = "ng-select--primerized #{@input.invalid? ? '-error' : ''}"
inputs[:inputName] ||= builder.field_name(@input.name)
inputs[:labelForId] ||= builder.field_id(@input.name)
inputs[:defaultData] = true unless inputs.key?(:defaultData)
inputs[:hideSelected] = true
inputs
end

def autocomplete_input_decorated(inputs)
selected = @input.select_options.filter_map { |option| option.to_h if option.selected }
model = inputs[:multiple] ? selected : selected.first

inputs.merge(
items: @input.select_options.map(&:to_h),
model:,
defaultData: false,
additionalClassProperty: "classes",
bindLabel: "name",
bindValue: "id"
)
end
end
end
end
Expand Down

0 comments on commit 2f78237

Please sign in to comment.