Skip to content

Commit 6b0b2fd

Browse files
committed
feat(tag-builder): translate rails enum values
In display text and also interactive select options
1 parent 8b3d091 commit 6b0b2fd

File tree

3 files changed

+80
-22
lines changed

3 files changed

+80
-22
lines changed

lib/activeadmin_addons/addons/tag_builder.rb

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ def select_tag
2525

2626
context.div(interactive_tag_select_params) do
2727
context.select do
28-
possible_values.each do |val|
29-
context.option(value: val, selected: val == data) do
30-
context.text_node val.capitalize
28+
possible_values.each do |label, value|
29+
context.option(value: value, selected: value == data) do
30+
context.text_node label
3131
end
3232
end
3333
end
@@ -36,7 +36,11 @@ def select_tag
3636
end
3737

3838
def display_data
39-
@enum_attr == :enumerize ? data.text : data
39+
if @enum_attr == :enumerize
40+
data.text
41+
else
42+
EnumUtils.translate_enum_option(model.class, attribute.to_s, data)
43+
end
4044
end
4145

4246
def interactive_params(klass)
@@ -69,9 +73,9 @@ def interactive_tag_select_params
6973
def possible_values
7074
klass = model.class
7175
if @enum_attr == :enumerize
72-
klass.enumerized_attributes[attribute.to_s].values
76+
klass.enumerized_attributes[attribute.to_s].values.map { |value| [value.capitalize, value] }
7377
else
74-
klass.defined_enums[attribute.to_s].keys
78+
EnumUtils.options_for_select(klass, attribute.to_s)
7579
end
7680
end
7781

spec/dummy/config/locales/en.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ en:
2020
attributes:
2121
invoice:
2222
item_ids: Items
23+
statuses:
24+
active: Activo
25+
archived: Archivado
2326
activeadmin:
2427
addons:
2528
boolean:

spec/features/tag_builder_spec.rb

Lines changed: 67 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -102,22 +102,7 @@
102102
end
103103

104104
context "using Rails Enum" do
105-
context "changing state value" do
106-
before do
107-
register_index(Invoice) do
108-
tag_column :status
109-
end
110-
111-
create_invoice(status: :archived)
112-
visit admin_invoices_path
113-
end
114-
115-
it "shows set value" do
116-
expect(page).to have_css('.archived')
117-
end
118-
end
119-
120-
context 'with interactive option' do
105+
shared_examples 'interactive select rendering' do
121106
let!(:invoice) { create_invoice(status: :active) }
122107

123108
before do
@@ -161,5 +146,71 @@
161146
expect(page).to have_css('.interactive-tag-select[data-value="active"]')
162147
end
163148
end
149+
150+
context 'with no translations' do
151+
around do |example|
152+
I18n.with_locale('de') do
153+
example.run
154+
end
155+
end
156+
157+
context "without interactive option" do
158+
before do
159+
register_index(Invoice) do
160+
tag_column :status
161+
end
162+
163+
create_invoice(status: :archived)
164+
visit admin_invoices_path
165+
end
166+
167+
it "shows untranslated text as value" do
168+
expect(page.find('td.col-status').text).to eq('Archived')
169+
end
170+
end
171+
172+
context 'with interactive option' do
173+
include_examples 'interactive select rendering'
174+
175+
it 'renders an option for each enum value, with translated text' do
176+
option_selector = '.interactive-tag-select option'
177+
expect(page.find("#{option_selector}[value='active']").text).to eq('active')
178+
expect(page.find("#{option_selector}[value='archived']").text).to eq('archived')
179+
end
180+
end
181+
end
182+
183+
context 'with translations' do
184+
around do |example|
185+
I18n.with_locale('en') do
186+
example.run
187+
end
188+
end
189+
190+
context "without interactive option" do
191+
before do
192+
register_index(Invoice) do
193+
tag_column :status
194+
end
195+
196+
create_invoice(status: :archived)
197+
visit admin_invoices_path
198+
end
199+
200+
it "shows translated text as value" do
201+
expect(page.find('td.col-status').text).to eq('Archivado')
202+
end
203+
end
204+
205+
context 'with interactive option' do
206+
include_examples 'interactive select rendering'
207+
208+
it 'renders an option for each enum value, with translated text' do
209+
option_selector = '.interactive-tag-select option'
210+
expect(page.find("#{option_selector}[value='active']").text).to eq('Activo')
211+
expect(page.find("#{option_selector}[value='archived']").text).to eq('Archivado')
212+
end
213+
end
214+
end
164215
end
165216
end

0 commit comments

Comments
 (0)