From 89cedc42870566981bd8b34e90e11606b7c15406 Mon Sep 17 00:00:00 2001 From: David Cook Date: Tue, 4 Jun 2024 15:59:10 +1000 Subject: [PATCH] Submit and render with Turbo Stream --- .../admin/column_preferences_controller.rb | 11 ++++++++--- app/views/admin/column_preferences/_form.html.haml | 12 ++++++++++++ .../bulk_update.turbo_stream.haml | 3 +++ app/views/admin/products_v3/_sort.html.haml | 13 +------------ config/locales/en.yml | 4 ++++ .../admin/column_preferences_controller_spec.rb | 4 ++-- 6 files changed, 30 insertions(+), 17 deletions(-) create mode 100644 app/views/admin/column_preferences/_form.html.haml create mode 100644 app/views/admin/column_preferences/bulk_update.turbo_stream.haml diff --git a/app/controllers/admin/column_preferences_controller.rb b/app/controllers/admin/column_preferences_controller.rb index 3f405cfd90..9d39e050fb 100644 --- a/app/controllers/admin/column_preferences_controller.rb +++ b/app/controllers/admin/column_preferences_controller.rb @@ -10,12 +10,17 @@ module Admin if @cp_set.save respond_to do |format| format.json { render json: @cp_set.collection, each_serializer: Api::Admin::ColumnPreferenceSerializer } - format.html { render inline: "saved" } #todo + format.turbo_stream { + flash.now[:success] = t('.success') + render :bulk_update, locals: { action: permitted_params[:action_name] } } end elsif @cp_set.errors.present? respond_to do |format| format.json { render json: { errors: @cp_set.errors }, status: :bad_request } - format.html { render inline: "errors" } #todo + format.turbo_stream { + flash.now[:error] = t('.error') + render :bulk_update, locals: { action: permitted_params[:action_name] } + } end else respond_to do |format| @@ -42,7 +47,7 @@ module Admin each_with_index.map { |cp, i| [i, cp] }] collection_attributes.select!{ |_i, cp| cp[:action_name] == permitted_params[:action_name] } end - format.html do + format.all do # Inject action name and user ID for each column_preference collection_attributes = permitted_params[:column_preferences].to_h.each_value { |cp| cp[:action_name] = permitted_params[:action_name] diff --git a/app/views/admin/column_preferences/_form.html.haml b/app/views/admin/column_preferences/_form.html.haml new file mode 100644 index 0000000000..7e58ba68eb --- /dev/null +++ b/app/views/admin/column_preferences/_form.html.haml @@ -0,0 +1,12 @@ += form_with url: bulk_update_admin_column_preferences_path, method: :put, id: :bulk_admin_column_preferences_form do |f| + = hidden_field_tag :action_name, action + + - ColumnPreference.for(spree_current_user, action).each_with_index do |column_preference, index| + = f.fields_for("column_preferences", column_preference, index:) do |cp_form| + = cp_form.hidden_field :id + = cp_form.hidden_field :column_name + %label + = cp_form.check_box :visible + = t("admin.products_page.columns." + column_preference.column_name) + + = f.submit t('admin.column_save_as_default') diff --git a/app/views/admin/column_preferences/bulk_update.turbo_stream.haml b/app/views/admin/column_preferences/bulk_update.turbo_stream.haml new file mode 100644 index 0000000000..70836e4657 --- /dev/null +++ b/app/views/admin/column_preferences/bulk_update.turbo_stream.haml @@ -0,0 +1,3 @@ += turbo_stream.replace "bulk_admin_column_preferences_form" do + = render partial: "admin/shared/flashes", locals: { flashes: flash } if defined? flash + = render partial: 'form', locals: { action: } diff --git a/app/views/admin/products_v3/_sort.html.haml b/app/views/admin/products_v3/_sort.html.haml index a8a3f1b335..f5d3d6329d 100644 --- a/app/views/admin/products_v3/_sort.html.haml +++ b/app/views/admin/products_v3/_sort.html.haml @@ -15,15 +15,4 @@ data: { controller: "tom-select search", action: "change->search#changePerPage", "tom-select-options-value": '{ "plugins": [] }'} / Columns dropdown - = form_with url: bulk_update_admin_column_preferences_path, method: :put do |f| - = hidden_field_tag :action_name, "#{controller_name}_#{action_name}" - - - ColumnPreference.for(spree_current_user, "#{controller_name}_#{action_name}").each do |column_preference| - = f.fields_for("column_preferences[]", column_preference) do |cp_form| - = cp_form.hidden_field :id - = cp_form.hidden_field :column_name - %label - = cp_form.check_box :visible - = t("admin.products_page.columns." + column_preference.column_name) - - = f.submit t('admin.column_save_as_default') + = render partial: "admin/column_preferences/form", locals: { action: "products_v3_index" } diff --git a/config/locales/en.yml b/config/locales/en.yml index 41c76b2cc8..c3bdca88a8 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -761,6 +761,10 @@ en: balance_due: "Balance Due" destroy: has_associated_subscriptions: "Delete failed: This customer has active subscriptions. Cancel them first." + column_preferences: + bulk_update: + success: "Column preferences saved" + error: "Column preferences could not be saved" contents: edit: title: Content diff --git a/spec/controllers/admin/column_preferences_controller_spec.rb b/spec/controllers/admin/column_preferences_controller_spec.rb index 5cd8707bb0..c29153534d 100644 --- a/spec/controllers/admin/column_preferences_controller_spec.rb +++ b/spec/controllers/admin/column_preferences_controller_spec.rb @@ -55,8 +55,8 @@ RSpec.describe Admin::ColumnPreferencesController, type: :controller do end end - context "html" do - let(:request_format) { :html } + context "turbo_stream" do + let(:request_format) { :turbo_stream } let(:column_preference_params) { { '0': { id: column_preference.id, column_name: "name", visible: "0" },