From 5f09718e77c996b77dafb6d6ab5fee0eba5f7185 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Wed, 3 Apr 2024 22:17:01 +0200 Subject: [PATCH] Move globalize locales partial to a component --- .../globalize_locales_component.html.erb} | 8 +- .../shared/globalize_locales_component.rb | 91 +++++++++++++++++++ app/helpers/globalize_helper.rb | 79 ---------------- .../_globalize_locales.html.erb | 2 +- app/views/shared/_globalize_locales.html.erb | 7 +- 5 files changed, 100 insertions(+), 87 deletions(-) rename app/{views/shared/_common_globalize_locales.html.erb => components/shared/globalize_locales_component.html.erb} (83%) create mode 100644 app/components/shared/globalize_locales_component.rb diff --git a/app/views/shared/_common_globalize_locales.html.erb b/app/components/shared/globalize_locales_component.html.erb similarity index 83% rename from app/views/shared/_common_globalize_locales.html.erb rename to app/components/shared/globalize_locales_component.html.erb index 2ead5fd8c..aa73c9b24 100644 --- a/app/views/shared/_common_globalize_locales.html.erb +++ b/app/components/shared/globalize_locales_component.html.erb @@ -3,19 +3,19 @@ "> - <%= selected_languages_description(resource) %> + <%= selected_languages_description %> <%= select_tag :select_language, - options_for_select_language(resource), + options_for_select_language, prompt: t("shared.translations.select_language_prompt"), class: "js-select-language" %> - <%= select_language_error(resource) %> + <%= select_language_error %>
<% if manage_languages %> <% I18n.available_locales.each do |locale| %> <%= link_to t("shared.translations.remove_language"), "#", - style: display_destroy_locale_style(resource, locale), + style: display_destroy_locale_style(locale), class: "delete js-delete-language js-delete-#{locale}", data: { locale: locale } %> <% end %> diff --git a/app/components/shared/globalize_locales_component.rb b/app/components/shared/globalize_locales_component.rb new file mode 100644 index 000000000..8060cadc2 --- /dev/null +++ b/app/components/shared/globalize_locales_component.rb @@ -0,0 +1,91 @@ +class Shared::GlobalizeLocalesComponent < ApplicationComponent + attr_reader :resource, :manage_languages + use_helpers :first_translation, :first_marked_for_destruction_translation, + :enabled_locale?, :name_for_locale, :highlight_translation_html_class + + def initialize(resource = nil, manage_languages: true) + @resource = resource + @manage_languages = manage_languages + end + + private + + def options_for_select_language + options_for_select(available_locales, selected_locale) + end + + def available_locales + I18n.available_locales.select { |locale| enabled_locale?(resource, locale) }.map do |locale| + [name_for_locale(locale), locale, { data: { locale: locale }}] + end + end + + def selected_locale + return first_i18n_content_translation_locale if resource.blank? + + if resource.locales_not_marked_for_destruction.any? + first_translation(resource) + elsif resource.locales_persisted_and_marked_for_destruction.any? + first_marked_for_destruction_translation(resource) + else + I18n.locale + end + end + + def first_i18n_content_translation_locale + if I18nContentTranslation.existing_languages.count == 0 || + I18nContentTranslation.existing_languages.include?(I18n.locale) + I18n.locale + else + I18nContentTranslation.existing_languages.first + end + end + + def selected_languages_description + sanitize(t("shared.translations.languages_in_use", count: active_languages_count)) + end + + def select_language_error + return if resource.blank? + + current_translation = resource.translation_for(selected_locale) + if current_translation.errors.added? :base, :translations_too_short + tag.div class: "small error" do + current_translation.errors[:base].join(", ") + end + end + end + + def active_languages_count + if resource.blank? + no_resource_languages_count + elsif resource.locales_not_marked_for_destruction.size > 0 + resource.locales_not_marked_for_destruction.size + else + 1 + end + end + + def no_resource_languages_count + count = I18nContentTranslation.existing_languages.count + count > 0 ? count : 1 + end + + def display_destroy_locale_style(locale) + "display: none;" unless display_destroy_locale_link?(locale) + end + + def display_destroy_locale_link?(locale) + selected_locale == locale + end + + def options_for_add_language + options_for_select(all_language_options, nil) + end + + def all_language_options + I18n.available_locales.map do |locale| + [name_for_locale(locale), locale] + end + end +end diff --git a/app/helpers/globalize_helper.rb b/app/helpers/globalize_helper.rb index 2aab2c593..1d824fd06 100644 --- a/app/helpers/globalize_helper.rb +++ b/app/helpers/globalize_helper.rb @@ -1,14 +1,4 @@ module GlobalizeHelper - def options_for_select_language(resource) - options_for_select(available_locales(resource), selected_locale(resource)) - end - - def available_locales(resource) - I18n.available_locales.select { |locale| enabled_locale?(resource, locale) }.map do |locale| - [name_for_locale(locale), locale, { data: { locale: locale }}] - end - end - def enabled_locale?(resource, locale) return site_customization_enable_translation?(locale) if resource.blank? @@ -21,27 +11,6 @@ module GlobalizeHelper end end - def selected_locale(resource) - return first_i18n_content_translation_locale if resource.blank? - - if resource.locales_not_marked_for_destruction.any? - first_translation(resource) - elsif resource.locales_persisted_and_marked_for_destruction.any? - first_marked_for_destruction_translation(resource) - else - I18n.locale - end - end - - def first_i18n_content_translation_locale - if I18nContentTranslation.existing_languages.count == 0 || - I18nContentTranslation.existing_languages.include?(I18n.locale) - I18n.locale - else - I18nContentTranslation.existing_languages.first - end - end - def first_translation(resource) if resource.locales_not_marked_for_destruction.include? I18n.locale I18n.locale @@ -58,36 +27,6 @@ module GlobalizeHelper end end - def selected_languages_description(resource) - sanitize(t("shared.translations.languages_in_use", count: active_languages_count(resource))) - end - - def select_language_error(resource) - return if resource.blank? - - current_translation = resource.translation_for(selected_locale(resource)) - if current_translation.errors.added? :base, :translations_too_short - tag.div class: "small error" do - current_translation.errors[:base].join(", ") - end - end - end - - def active_languages_count(resource) - if resource.blank? - no_resource_languages_count - elsif resource.locales_not_marked_for_destruction.size > 0 - resource.locales_not_marked_for_destruction.size - else - 1 - end - end - - def no_resource_languages_count - count = I18nContentTranslation.existing_languages.count - count > 0 ? count : 1 - end - def display_translation_style(resource, locale) "display: none;" unless display_translation?(resource, locale) end @@ -104,24 +43,6 @@ module GlobalizeHelper end end - def display_destroy_locale_style(resource, locale) - "display: none;" unless display_destroy_locale_link?(resource, locale) - end - - def display_destroy_locale_link?(resource, locale) - selected_locale(resource) == locale - end - - def options_for_add_language - options_for_select(all_language_options, nil) - end - - def all_language_options - I18n.available_locales.map do |locale| - [name_for_locale(locale), locale] - end - end - def translation_enabled_tag(locale, enabled) hidden_field_tag("enabled_translations[#{locale}]", (enabled ? 1 : 0)) end diff --git a/app/views/admin/site_customization/information_texts/_globalize_locales.html.erb b/app/views/admin/site_customization/information_texts/_globalize_locales.html.erb index 8462c141a..1d38894fb 100644 --- a/app/views/admin/site_customization/information_texts/_globalize_locales.html.erb +++ b/app/views/admin/site_customization/information_texts/_globalize_locales.html.erb @@ -1 +1 @@ -<%= render "shared/common_globalize_locales", resource: nil, manage_languages: true %> +<%= render Shared::GlobalizeLocalesComponent.new %> diff --git a/app/views/shared/_globalize_locales.html.erb b/app/views/shared/_globalize_locales.html.erb index 32f1b9ce0..e35125c6f 100644 --- a/app/views/shared/_globalize_locales.html.erb +++ b/app/views/shared/_globalize_locales.html.erb @@ -1,5 +1,6 @@ <% if translations_interface_enabled? %> - <%= render "shared/common_globalize_locales", - resource: resource, - manage_languages: defined?(manage_languages) ? manage_languages : true %> + <%= render Shared::GlobalizeLocalesComponent.new( + resource, + manage_languages: defined?(manage_languages) ? manage_languages : true + ) %> <% end %>