diff --git a/app/controllers/spree/admin/orders_controller.rb b/app/controllers/spree/admin/orders_controller.rb index a73adf58c4..4d6d33e4e3 100644 --- a/app/controllers/spree/admin/orders_controller.rb +++ b/app/controllers/spree/admin/orders_controller.rb @@ -11,15 +11,11 @@ module Spree before_action :load_order, only: [:edit, :update, :fire, :resend, :invoice, :print] before_action :load_distribution_choices, only: [:new, :create, :edit, :update] before_action :require_distributor_abn, only: :invoice - before_action :restore_saved_query!, only: :index - - respond_to :html, :json def index orders = SearchOrders.new(search_params, spree_current_user).orders @pagy, @orders = pagy(orders, items: params[:per_page] || 15) - - update_search_results if searching? + @stored_query = search_params.to_query end def new @@ -121,19 +117,6 @@ module Spree false end - def update_search_results - session[:admin_orders_search] = search_params - - render cable_ready: cable_car.inner_html( - "#orders-index", - partial("spree/admin/orders/table", locals: { pagy: @pagy, orders: @orders }) - ) - end - - def searching? - params[:q].present? && request.format.symbol == :cable_ready - end - def search_params default_filters.deep_merge( params.permit(:page, :per_page, :shipping_method_id, q: {}) @@ -144,13 +127,6 @@ module Spree { q: { completed_at_not_null: 1, s: "completed_at desc" } } end - def restore_saved_query! - return unless request.format.html? - - @_params = ActionController::Parameters.new(session[:admin_orders_search] || {}) - @stored_query = search_params.to_query - end - def on_update @order.recreate_all_fees! diff --git a/app/views/spree/admin/orders/_filters.html.haml b/app/views/spree/admin/orders/_filters.html.haml index fcf14a4441..9b4b0aaa5b 100644 --- a/app/views/spree/admin/orders/_filters.html.haml +++ b/app/views/spree/admin/orders/_filters.html.haml @@ -1,5 +1,5 @@ -%div.admin-orders-index-search{ "data-controller": "search", "data-search-restore-value": @stored_query } - = form_with url: spree.admin_orders_url, id: "orders_form", method: :get, data: { remote: true, "search-target": "form" } do +%div.admin-orders-index-search{ "data-controller": "search turbo-search", "data-search-restore-value": @stored_query } + = form_with url: spree.admin_orders_url, id: "orders_form", method: :get, data: { turbo: false, turbo_frame: 'order-results', 'turbo-search-target': 'form', "search-target": "form" } do = hidden_field_tag :page, 1, class: "page" = hidden_field_tag :per_page, 15, class: "per-page" = hidden_field_tag "[q][s]", params.dig(:q, :s) || "completed_at desc", class: "sort", "data-default": "completed_at desc" @@ -57,5 +57,4 @@ %i.icon-search = t(:filter_results) .eight.columns.omega - %button.float-left{"id": "clear_filters_button", type: "button", "data-controller": "search", "data-action": "click->search#reset" } - = t(:clear_filters) + = link_to t(:clear_filters), admin_orders_url, "id": "clear_filters_button", class: 'float-left primary button' diff --git a/app/views/spree/admin/orders/index.html.haml b/app/views/spree/admin/orders/index.html.haml index 26a7965a69..ed1028848b 100644 --- a/app/views/spree/admin/orders/index.html.haml +++ b/app/views/spree/admin/orders/index.html.haml @@ -15,8 +15,9 @@ - content_for :table_filter do = render partial: 'filters' -#orders-index{"data-controller": "search checked"} - = render partial: "table", locals: { pagy: @pagy, orders: @orders } +%turbo-frame#order-results + #orders-index{"data-controller": "search checked"} + = render partial: "table", locals: { pagy: @pagy, orders: @orders } = render 'spree/admin/shared/custom-confirm' diff --git a/app/webpacker/controllers/turbo_search_controller.js b/app/webpacker/controllers/turbo_search_controller.js new file mode 100644 index 0000000000..5561a0659f --- /dev/null +++ b/app/webpacker/controllers/turbo_search_controller.js @@ -0,0 +1,25 @@ +import { Controller } from "stimulus"; + +export default class extends Controller { + static targets = ['form']; + + connect() { + this.formTarget.addEventListener('submit', this.turboSubmit); + } + + disconnect() { + this.formTarget.removeEventListener('submit', this.turboSubmit); + } + + turboSubmit(e) { + e.preventDefault(); + const form = e.target; + const url = new URL(form.action); + const formData = new FormData(form); + const params = new URLSearchParams(formData).toString(); + + // Manually visit the new URL with the search params + // inorder to preserve params + Turbo.visit(`${url.pathname}?${params}`, { action: 'replace' }); + } +}