From a3da55edac9e2dd942866cd91675e79a8de36ef4 Mon Sep 17 00:00:00 2001 From: Ioannis Igoumenos Date: Thu, 7 Mar 2024 16:56:29 +0200 Subject: [PATCH] Make autocomplete component fully dynamic --- webroot/js/autocomplete.js | 49 ++++++++++++++++++++++++++------------ webroot/js/members.js | 2 +- 2 files changed, 35 insertions(+), 16 deletions(-) diff --git a/webroot/js/autocomplete.js b/webroot/js/autocomplete.js index a0a5958..978bd08 100644 --- a/webroot/js/autocomplete.js +++ b/webroot/js/autocomplete.js @@ -5,6 +5,14 @@ export default { group: { type: String, default: "" + }, + action: { + type: String, + default: "addUser" + }, + icon: { + type: String, + default: 'add' } }, inject: ['txt', 'api'], @@ -16,8 +24,18 @@ export default { }; }, methods: { - addUser() { - this.$emit('add', this.item); + performAction() { + this.$emit(this.action, this.item); + }, + toKebabCase(str) { + console.log('to kebab') + console.log('str', str) + return str.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase(); + } + }, + computed: { + btnTxt() { + return eval(`this.txt.${this.action}`) } }, mounted(el) { @@ -27,20 +45,21 @@ export default { minLength: 3, maxShowItems: 15, focus: ( event, ui ) => { - $("#grouper-add-member-search-container .co-loading-mini").hide(); + $("#grouper-search-container .co-loading-mini").hide(); return false; }, open: function (event, ui) { - $("#grouper-add-member-search-container .co-loading-mini").hide(); + $("#grouper-search-container .co-loading-mini").hide(); }, - create: function (event, ui) { - $("#add-user-input").focus(); + create: (event, ui) => { + // debugger + $(`#${this.toKebabCase(this.action)}-input`).focus(); }, close: function (event, ui) { - $("#grouper-add-member-search-container .co-loading-mini").hide(); + $("#grouper-search-container .co-loading-mini").hide(); }, search: function (event, ui) { - $("#grouper-add-member-search-container .co-loading-mini").show(); + $("#grouper-search-container .co-loading-mini").show(); }, // XXX We need access to the parent data object. // As a result we have to use arrow function syntax (ES6) @@ -48,15 +67,15 @@ export default { this.val = ui.item.identifier; this.item = ui.item; this.search = `${ui.item.label} (${ui.item.value})`; - $("#addUserbutton").prop('disabled', false).focus(); + $(`#${this.toKebabCase(this.action)}-btn`).prop('disabled', false).focus(); return false; }, }).autocomplete( "instance" )._renderItem = formatCoPersonAutoselectItem; }, template: /*html*/` -
+
-
-
diff --git a/webroot/js/members.js b/webroot/js/members.js index 2fa0a09..4900d03 100644 --- a/webroot/js/members.js +++ b/webroot/js/members.js @@ -163,7 +163,7 @@ export default {
- +