diff --git a/app/components/admin/site_customization/information_texts/form_field_component.html.erb b/app/components/admin/site_customization/information_texts/form_field_component.html.erb new file mode 100644 index 000000000..95f9fedc3 --- /dev/null +++ b/app/components/admin/site_customization/information_texts/form_field_component.html.erb @@ -0,0 +1,9 @@ +<% globalize(locale) do %> + <%= hidden_field_tag "contents[content_#{i18n_content.key}][id]", i18n_content.key %> + <%= text_area_tag "contents[content_#{i18n_content.key}]values[value_#{locale}]", + text || t(i18n_content.key, locale: locale), + rows: 5, + class: "js-globalize-attribute", + style: site_customization_display_translation_style(locale), + data: { locale: locale } %> +<% end %> diff --git a/app/components/admin/site_customization/information_texts/form_field_component.rb b/app/components/admin/site_customization/information_texts/form_field_component.rb new file mode 100644 index 000000000..f292b1edf --- /dev/null +++ b/app/components/admin/site_customization/information_texts/form_field_component.rb @@ -0,0 +1,19 @@ +class Admin::SiteCustomization::InformationTexts::FormFieldComponent < ApplicationComponent + attr_reader :i18n_content, :locale + delegate :globalize, :site_customization_display_translation_style, to: :helpers + + def initialize(i18n_content, locale:) + @i18n_content = i18n_content + @locale = locale + end + + private + + def text + if i18n_content.present? + I18nContentTranslation.find_by(i18n_content_id: i18n_content.id, locale: locale)&.value + else + false + end + end +end diff --git a/app/helpers/site_customization_helper.rb b/app/helpers/site_customization_helper.rb index bd2824021..686b5747f 100644 --- a/app/helpers/site_customization_helper.rb +++ b/app/helpers/site_customization_helper.rb @@ -7,14 +7,6 @@ module SiteCustomizationHelper site_customization_enable_translation?(locale) ? "" : "display: none;" end - def translation_for_locale(content, locale) - if content.present? - I18nContentTranslation.find_by(i18n_content_id: content.id, locale: locale)&.value - else - false - end - end - def information_texts_tabs [:basic, :debates, :community, :proposals, :polls, :layouts, :mailers, :management, :welcome, :machine_learning] end diff --git a/app/views/admin/site_customization/information_texts/_form.html.erb b/app/views/admin/site_customization/information_texts/_form.html.erb index f31aa17f4..b7b4adf5b 100644 --- a/app/views/admin/site_customization/information_texts/_form.html.erb +++ b/app/views/admin/site_customization/information_texts/_form.html.erb @@ -8,7 +8,7 @@ <% group.each do |content| %> <%= content.key %> <% content.globalize_locales.each do |locale| %> - <%= render "form_field", content: content, locale: locale %> + <%= render Admin::SiteCustomization::InformationTexts::FormFieldComponent.new(content, locale: locale) %> <% end %> <% end %> <% end %> diff --git a/app/views/admin/site_customization/information_texts/_form_field.html.erb b/app/views/admin/site_customization/information_texts/_form_field.html.erb deleted file mode 100644 index 799a76b6e..000000000 --- a/app/views/admin/site_customization/information_texts/_form_field.html.erb +++ /dev/null @@ -1,9 +0,0 @@ -<% globalize(locale) do %> - <%= hidden_field_tag "contents[content_#{content.key}][id]", content.key %> - <%= text_area_tag "contents[content_#{content.key}]values[value_#{locale}]", - translation_for_locale(content, locale) || t(content.key, locale: locale), - rows: 5, - class: "js-globalize-attribute", - style: site_customization_display_translation_style(locale), - data: { locale: locale } %> -<% end %> diff --git a/spec/components/admin/site_customization/information_texts/form_field_component_spec.rb b/spec/components/admin/site_customization/information_texts/form_field_component_spec.rb new file mode 100644 index 000000000..40ad3cee6 --- /dev/null +++ b/spec/components/admin/site_customization/information_texts/form_field_component_spec.rb @@ -0,0 +1,14 @@ +require "rails_helper" + +describe Admin::SiteCustomization::InformationTexts::FormFieldComponent do + after { I18n.backend.reload! } + + it "uses the I18n translation when the record exists without a database translation" do + I18n.backend.store_translations(:en, { testing: "It works!" }) + content = I18nContent.create!(key: "testing") + + render_inline Admin::SiteCustomization::InformationTexts::FormFieldComponent.new(content, locale: :en) + + expect(page).to have_field with: "It works!" + end +end