diff --git a/public/scripts/extensions/quick-reply/html/settings.html b/public/scripts/extensions/quick-reply/html/settings.html index 3c8100aae..210ad4f32 100644 --- a/public/scripts/extensions/quick-reply/html/settings.html +++ b/public/scripts/extensions/quick-reply/html/settings.html @@ -51,6 +51,7 @@ + diff --git a/public/scripts/extensions/quick-reply/src/ui/SettingsUi.js b/public/scripts/extensions/quick-reply/src/ui/SettingsUi.js index de7bc0d7f..419275b92 100644 --- a/public/scripts/extensions/quick-reply/src/ui/SettingsUi.js +++ b/public/scripts/extensions/quick-reply/src/ui/SettingsUi.js @@ -120,7 +120,8 @@ export class SettingsUi { importFile.value = null; }); this.dom.querySelector('#qr--set-import').addEventListener('click', ()=>importFile.click()); - this.dom.querySelector('#qr--set-export').addEventListener('click', async()=>this.exportQrSet()); + this.dom.querySelector('#qr--set-export').addEventListener('click', async () => this.exportQrSet()); + this.dom.querySelector('#qr--set-duplicate').addEventListener('click', async () => this.duplicateQrSet()); this.dom.querySelector('#qr--set-delete').addEventListener('click', async()=>this.deleteQrSet()); this.dom.querySelector('#qr--set-add').addEventListener('click', async()=>{ this.currentQrSet.addQuickReply(); @@ -460,6 +461,40 @@ export class SettingsUi { URL.revokeObjectURL(url); } + async duplicateQrSet() { + const newName = await Popup.show.input('Duplicate Quick Reply Set', 'Enter a name for the new Quick Reply Set:', `${this.currentQrSet.name} (Copy)`); + if (newName && newName.length > 0) { + const existingSet = QuickReplySet.get(newName); + if (existingSet) { + toastr.error(`A Quick Reply Set named "${newName}" already exists.`); + return; + } + const newQrSet = QuickReplySet.from(JSON.parse(JSON.stringify(this.currentQrSet))); + newQrSet.name = newName; + newQrSet.qrList = this.currentQrSet.qrList.map(qr => QuickReply.from(JSON.parse(JSON.stringify(qr)))); + newQrSet.addQuickReply(); + const idx = QuickReplySet.list.findIndex(it => it.name.toLowerCase().localeCompare(newName.toLowerCase()) == 1); + if (idx > -1) { + QuickReplySet.list.splice(idx, 0, newQrSet); + } else { + QuickReplySet.list.push(newQrSet); + } + const opt = document.createElement('option'); { + opt.value = newQrSet.name; + opt.textContent = newQrSet.name; + if (idx > -1) { + this.currentSet.children[idx].insertAdjacentElement('beforebegin', opt); + } else { + this.currentSet.append(opt); + } + } + this.currentSet.value = newName; + this.onQrSetChange(); + this.prepareGlobalSetList(); + this.prepareChatSetList(); + } + } + selectQrSet(qrs) { this.currentSet.value = qrs.name; this.onQrSetChange();