diff --git a/app/controllers/decidim/stratified_sortitions/admin/stratified_sortitions_controller.rb b/app/controllers/decidim/stratified_sortitions/admin/stratified_sortitions_controller.rb index d2320b9..b10f74f 100644 --- a/app/controllers/decidim/stratified_sortitions/admin/stratified_sortitions_controller.rb +++ b/app/controllers/decidim/stratified_sortitions/admin/stratified_sortitions_controller.rb @@ -34,9 +34,9 @@ def create @form = form(Decidim::StratifiedSortitions::Admin::StratifiedSortitionsForm).from_params(params) Decidim::StratifiedSortitions::Admin::CreateStratifiedSortition.call(@form) do - on(:ok) do + on(:ok) do |created_sortition| flash[:notice] = I18n.t("stratified_sortitions.create.success", scope: "decidim.stratified_sortitions.admin") - redirect_to stratified_sortitions_path(assembly_slug: -1, component_id: -1) + redirect_to edit_stratified_sortition_path(created_sortition) end on(:invalid) do @@ -199,7 +199,7 @@ def stratified_sortitions end def stratified_sortition - @stratified_sortition ||= collection.find(params[:id]) + @stratified_sortition ||= collection.find_by(id: params[:id]) end def form_presenter diff --git a/app/helpers/decidim/stratified_sortitions/application_helper.rb b/app/helpers/decidim/stratified_sortitions/application_helper.rb index f191b17..ea89f84 100644 --- a/app/helpers/decidim/stratified_sortitions/application_helper.rb +++ b/app/helpers/decidim/stratified_sortitions/application_helper.rb @@ -41,6 +41,33 @@ def dynamic_title(title, **options) end end + def navigation_menu_items(sortition) + has_sortition = sortition.present? + + [ + { + path: has_sortition ? edit_stratified_sortition_path(sortition) : new_stratified_sortition_path, + icon: "settings-4-line", + label: t("actions.configure", scope: "decidim.stratified_sortitions.admin"), + active: %w(new edit).include?(action_name), + }, + { + path: has_sortition ? upload_sample_stratified_sortition_path(sortition) : "#", + icon: "group-line", + label: t("actions.census_management", scope: "decidim.stratified_sortitions.admin"), + active: action_name == "upload_sample", + disabled: has_sortition ? !sortition.strata_and_substrata_configured? : true, + }, + { + path: has_sortition ? execute_stratified_sortition_path(sortition) : "#", + icon: "play-fill", + label: t("actions.execute", scope: "decidim.stratified_sortitions.admin"), + active: action_name == "execute", + disabled: has_sortition ? !sortition.can_execute? : true, + }, + ] + end + def filter_sections_stratified_sortitions sections = [{ method: :with_any_state, collection: filter_state_values, label_scope: "decidim.stratified_sortitions.stratified_sortitions.filters", id: "state" }] sections.reject { |item| item[:collection].blank? } diff --git a/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_navigation_menu.html.erb b/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_navigation_menu.html.erb index 28e93dc..5ff0a51 100644 --- a/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_navigation_menu.html.erb +++ b/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/_navigation_menu.html.erb @@ -1,19 +1,10 @@
- <%= button_to edit_stratified_sortition_path(stratified_sortition), - method: :get, - class: "import-sample-btn #{'active' if action_name == 'edit'}" do %> - <%= icon "settings-4-line" %> <%= t("actions.configure", scope: "decidim.stratified_sortitions.admin") %> - <% end %> - <%= button_to upload_sample_stratified_sortition_path(stratified_sortition), - method: :get, - class: "import-sample-btn #{'active' if action_name == 'upload_sample'}", - disabled: !stratified_sortition.strata_and_substrata_configured? do %> - <%= icon "group-line" %> <%= t("actions.census_management", scope: "decidim.stratified_sortitions.admin") %> - <% end %> - <%= button_to execute_stratified_sortition_path(stratified_sortition), - method: :get, - class: "import-sample-btn #{'active' if action_name == 'execute'}", - disabled: !stratified_sortition.can_execute? do %> - <%= icon "play-fill" %> <%= t("actions.execute", scope: "decidim.stratified_sortitions.admin") %> + <% navigation_menu_items(stratified_sortition).each do |item| %> + <%= button_to item[:path], + method: :get, + class: "import-sample-btn #{'active' if item[:active]}", + disabled: item[:disabled] do %> + <%= icon item[:icon] %> <%= item[:label] %> + <% end %> <% end %>
\ No newline at end of file diff --git a/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/new.html.erb b/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/new.html.erb index 2761db3..02964a4 100644 --- a/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/new.html.erb +++ b/app/views/decidim/stratified_sortitions/admin/stratified_sortitions/new.html.erb @@ -4,6 +4,9 @@ <%= t(".title") %> + +<%= render 'navigation_menu' %> +
<%= decidim_form_for(@form, html: { class: "form-defaults form new_stratified_sortition stratified_sortition_form_admin" }) do |f| %> diff --git a/spec/controllers/decidim/sortitions/admin/stratified_sortitions_controller_spec.rb b/spec/controllers/decidim/sortitions/admin/stratified_sortitions_controller_spec.rb index 6a91ada..e3c06da 100644 --- a/spec/controllers/decidim/sortitions/admin/stratified_sortitions_controller_spec.rb +++ b/spec/controllers/decidim/sortitions/admin/stratified_sortitions_controller_spec.rb @@ -80,9 +80,10 @@ module Admin end context "with valid params" do - it "redirects to the stratified sortitions list" do + it "redirects to the newly created stratified sortition edit page" do post(:create, params:) - expect(response).to redirect_to(stratified_sortitions_path(assembly_slug: -1, component_id: -1)) + created_sortition = StratifiedSortition.last + expect(response).to redirect_to(edit_stratified_sortition_path(created_sortition)) end it "creates a stratified sortition associated with the current component" do