Combine bulk action controllers and pass reflex as an argument

This commit is contained in:
Matt-Yorkley
2023-05-09 23:11:42 +01:00
parent 5930d0c1f5
commit bee46720f4
10 changed files with 27 additions and 71 deletions

View File

@@ -1,11 +1,12 @@
# frozen_string_literal: true
class ConfirmModalComponent < ModalComponent
def initialize(id:, confirm_actions: nil, controllers: nil, message: nil, confirm_reflexes: nil)
def initialize(id:, confirm_actions: nil, reflex: nil, controller: nil, message: nil, confirm_reflexes: nil)
super(id: id, close_button: true)
@confirm_actions = confirm_actions
@reflex = reflex
@confirm_reflexes = confirm_reflexes
@controllers = controllers
@controller = controller
@message = message
end

View File

@@ -1,4 +1,4 @@
%div{ id: @id, "data-controller": "modal #{@controllers}", "data-action": "keyup@document->modal#closeIfEscapeKey" }
%div{ id: @id, "data-controller": "modal #{@controller}", "data-action": "keyup@document->modal#closeIfEscapeKey", "data-#{@controller}-reflex-value": @reflex }
.reveal-modal-bg.fade{ "data-modal-target": "background", "data-action": "click->modal#close" }
.reveal-modal.fade.tiny.help-modal{ "data-modal-target": "modal" }
= content

View File

@@ -13,7 +13,7 @@
%span.name{ "data-controller": "modal-link", "data-action": "click->modal-link#open", "data-modal-link-target-value": "send_invoice" }
= t('spree.admin.orders.index.send_invoice')
%div.menu_item
%span.name{ "data-controller": "bulk-invoice", "data-action": "click->bulk-invoice#generate" }
%span.name{ "data-controller": "bulk-actions", "data-action": "click->bulk-actions#perform", "data-bulk-actions-reflex-value": "Admin::Orders#bulk_invoice" }
= t('spree.admin.orders.index.print_invoices')
%div.menu_item
%span.name{ "data-controller": "modal-link", "data-action": "click->modal-link#open", "data-modal-link-target-value": "cancel_orders" }

View File

@@ -20,14 +20,14 @@
= render 'spree/admin/shared/custom-confirm'
= render ConfirmModalComponent.new(id: "resend_confirmation", confirm_actions: "click->resend-confirmation-email#confirm", controllers: "resend-confirmation-email") do
= render ConfirmModalComponent.new(id: "resend_confirmation", confirm_actions: "click->bulk-actions#perform", controller: "bulk-actions", reflex: "BulkActionsInOrdersList#resend_confirmation_email") do
.margin-bottom-30
= t('.resend_confirmation_confirm_html')
= render ConfirmModalComponent.new(id: "send_invoice", confirm_actions: "click->send-invoice#confirm", controllers: "send-invoice") do
= render ConfirmModalComponent.new(id: "send_invoice", confirm_actions: "click->bulk-actions#perform", controller: "bulk-actions", reflex: "BulkActionsInOrdersList#send_invoice") do
.margin-bottom-30
= t('.send_invoice_confirm_html')
= render ConfirmModalComponent.new(id: "cancel_orders", confirm_actions: "click->cancel-orders#confirm", controllers: "cancel-orders", message: "spree/admin/orders/messages/cancel_orders") do
= render ConfirmModalComponent.new(id: "cancel_orders", confirm_actions: "click->bulk-actions#perform", controller: "bulk-actions", reflex: "CancelOrders#confirm", message: "spree/admin/orders/messages/cancel_orders") do
.margin-bottom-30
= t("js.admin.orders.cancel_the_order_html")

View File

@@ -1,5 +1,5 @@
.modal-message
%form{ "data-cancel-orders-target": "extraParams" }
%form{ "data-bulk-actions-target": "extraParams" }
%input{ type: "checkbox", name: "send_cancellation_email", value: "1", id: "send_cancellation_email", checked: "true" }
%label{ for: "send_cancellation_email" }
= t("js.admin.orders.cancel_the_order_send_cancelation_email")

View File

@@ -1,20 +1,35 @@
import ApplicationController from "./application_controller";
export default class extends ApplicationController {
static targets = ["extraParams"]
static values = { reflex: String }
connect() {
super.connect();
}
// abstract
confirm(action) {
this.stimulate(action, this.getSelectedIds());
perform() {
let params = { bulk_ids: this.getSelectedIds() };
if (this.hasExtraParamsTarget) {
Object.assign(params, this.extraFormData())
}
this.stimulate(this.reflexValue, params);
}
// private
getSelectedIds() {
const checkboxes = document.querySelectorAll(
"table input[name='bulk_ids[]']:checked"
);
return Array.from(checkboxes).map((checkbox) => checkbox.value);
}
extraFormData() {
if (this.extraParamsTarget.constructor.name !== "HTMLFormElement") { return {} }
return Object.fromEntries(new FormData(this.extraParamsTarget).entries())
}
}

View File

@@ -1,11 +0,0 @@
import BulkActionsController from "./bulk_actions_controller";
export default class extends BulkActionsController {
connect() {
super.connect();
}
generate() {
this.stimulate("Admin::OrdersReflex#bulk_invoice", { bulk_ids: super.getSelectedIds() });
}
}

View File

@@ -1,27 +0,0 @@
import BulkActionsController from "./bulk_actions_controller";
export default class extends BulkActionsController {
static targets = ["extraParams"]
connect() {
super.connect();
}
confirm() {
let data = { bulk_ids: super.getSelectedIds() };
if (this.hasExtraParamsTarget) {
Object.assign(data, this.extraFormData())
}
this.stimulate("CancelOrdersReflex#confirm", data);
}
// private
extraFormData() {
if (this.extraParamsTarget.constructor.name !== "HTMLFormElement") { return {} }
return Object.fromEntries(new FormData(this.extraParamsTarget).entries())
}
}

View File

@@ -1,11 +0,0 @@
import BulkActionsController from "./bulk_actions_controller";
export default class extends BulkActionsController {
connect() {
super.connect();
}
confirm() {
super.confirm("BulkActionsInOrdersList#resend_confirmation_email");
}
}

View File

@@ -1,11 +0,0 @@
import BulkActionsController from "./bulk_actions_controller";
export default class extends BulkActionsController {
connect() {
super.connect();
}
confirm() {
super.confirm("BulkActionsInOrdersList#send_invoice");
}
}