mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-10 23:07:47 +00:00
Handle admin search orders with turbo_stream
This commit is contained in:
@@ -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!
|
||||
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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'
|
||||
|
||||
|
||||
25
app/webpacker/controllers/turbo_search_controller.js
Normal file
25
app/webpacker/controllers/turbo_search_controller.js
Normal 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' });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user