From 39b7f56e6d245293ea66883d0353b5a25e78318b Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Bellet Date: Tue, 31 May 2022 08:57:11 +0200 Subject: [PATCH] Use mixins `useSearchCustomer` Prefer composition vs. inheritance --- .../controllers/mixins/useSearchCustomer.js | 22 +++++++++++++++++++ .../controllers/select_customer_controller.js | 21 ++---------------- 2 files changed, 24 insertions(+), 19 deletions(-) create mode 100644 app/webpacker/controllers/mixins/useSearchCustomer.js diff --git a/app/webpacker/controllers/mixins/useSearchCustomer.js b/app/webpacker/controllers/mixins/useSearchCustomer.js new file mode 100644 index 0000000000..a7776e14fc --- /dev/null +++ b/app/webpacker/controllers/mixins/useSearchCustomer.js @@ -0,0 +1,22 @@ +export const useSearchCustomer = (controller) => { + Object.assign(controller, { + load: function (query, callback) { + var params = { + q: query, + distributor_id: this.distributorValue, + }; + + fetch("/admin/search/customers.json?" + new URLSearchParams(params)) + .then((response) => response.json()) + .then((json) => { + this.items = json; + callback(json); + }) + .catch((error) => { + this.items = []; + console.log(error); + callback(); + }); + }, + }); +}; diff --git a/app/webpacker/controllers/select_customer_controller.js b/app/webpacker/controllers/select_customer_controller.js index f67d3f6625..c02ff5bcc8 100644 --- a/app/webpacker/controllers/select_customer_controller.js +++ b/app/webpacker/controllers/select_customer_controller.js @@ -1,9 +1,11 @@ import TomSelectController from "./tom_select_controller"; +import { useSearchCustomer } from "./mixins/useSearchCustomer"; export default class extends TomSelectController { static values = { options: Object, distributor: Number }; connect() { + useSearchCustomer(this); const options = { valueField: "id", labelField: "email", @@ -19,25 +21,6 @@ export default class extends TomSelectController { this.items = []; } - load(query, callback) { - var params = { - q: query, - distributor_id: this.distributorValue, - }; - - fetch("/admin/search/customers.json?" + new URLSearchParams(params)) - .then((response) => response.json()) - .then((json) => { - this.items = json; - callback(json); - }) - .catch((error) => { - this.items = []; - console.log(error); - callback(); - }); - } - renderOption(item, escape) { if (!item.bill_address) { return this.renderWithNoBillAddress(item, escape);