Handle admin search orders with turbo_stream

This commit is contained in:
wandji20
2024-10-13 01:19:57 +01:00
parent 766396b979
commit c35dae6378
4 changed files with 32 additions and 31 deletions

View File

@@ -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!

View File

@@ -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'

View File

@@ -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'

View File

@@ -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' });
}
}