Skip to content

Commit ca1d2c6

Browse files
authored
fix: tags value on select mode (#3576)
* fix: tags value on select mode * comment * test * fix select mode check * wip
1 parent 4dbc34d commit ca1d2c6

File tree

3 files changed

+44
-3
lines changed

3 files changed

+44
-3
lines changed

app/components/avo/fields/tags_field/edit_component.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,6 @@
3030
disabled: disabled?,
3131
placeholder: @field.placeholder,
3232
style: @field.get_html(:style, view: view, element: :input),
33-
value: @field.field_value.to_json
33+
value: @field.select_mode? ? @field.field_value.first : @field.field_value.to_json
3434
%>
3535
<% end %>

lib/avo/fields/tags_field.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,16 @@ def initialize(id, **args, &block)
3030
end
3131
end
3232

33+
def select_mode?
34+
@mode&.to_sym == :select
35+
end
36+
3337
def field_value
3438
@field_value ||= if acts_as_taggable_on.present?
3539
acts_as_taggable_on_values.map { |value| {value:} }.as_json
3640
else
37-
value || []
41+
# Wrap the value on Array to ensure select mode compatibility
42+
Array(value) || []
3843
end
3944
end
4045

@@ -53,7 +58,7 @@ def acts_as_taggable_on_values
5358
def fill_field(record, key, value, params)
5459
return fill_acts_as_taggable(record, key, value, params) if acts_as_taggable_on.present?
5560

56-
value = if value.is_a?(String)
61+
value = if value.is_a?(String) && !select_mode?
5762
value.split(delimiters[0])
5863
else
5964
value

spec/system/avo/tags_spec.rb

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,42 @@
234234
Avo::Resources::Course.restore_items_from_backup
235235
end
236236
end
237+
238+
describe "mode: :select" do
239+
let!(:projects) { create_list :project, 2 }
240+
241+
it "on index" do
242+
Avo::Resources::Project.with_temporary_items do
243+
field :stage, as: :tags, mode: :select
244+
end
245+
246+
visit avo.resources_projects_path
247+
248+
projects.each do |project|
249+
expect(page).to have_text(project.stage)
250+
end
251+
end
252+
253+
it "on show" do
254+
visit avo.resources_project_path(projects.first)
255+
256+
expect(page).to have_text(projects.first.stage)
257+
end
258+
259+
it "on edit / update" do
260+
visit avo.edit_resources_project_path(projects.first)
261+
262+
expect(page).to have_text(projects.first.stage)
263+
264+
click_on "Save"
265+
266+
wait_for_path_to_be(path: avo.resources_project_path(projects.first))
267+
268+
expect(page).to have_text(projects.first.stage)
269+
270+
Avo::Resources::Project.restore_items_from_backup
271+
end
272+
end
237273
end
238274

239275
def wait_for_tags_to_load(element, time = Capybara.default_max_wait_time)

0 commit comments

Comments
 (0)