From aa6354dd7aa05dcbfb101a9d5f3f05c3fd01d6d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cornelius=20Wei=C3=9F?= Date: Wed, 23 Sep 2020 15:23:32 +0200 Subject: [PATCH] feature(Felamimail): parse addresslist in client MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Icfd3dd9f26ea3b47cb0cdf2185c637f85f66558a Reviewed-on: http://gerrit.tine20.com/customers/17993 Tested-by: Jenkins CI (http://ci.tine20.com/) Reviewed-by: Philipp Schüle --- tine20/Felamimail/js/RecipientGrid.js | 27 ++++++++++++++++++++++++++ tine20/Tinebase/js/npm-shrinkwrap.json | 10 ++++++++++ tine20/Tinebase/js/package.json | 2 ++ 3 files changed, 39 insertions(+) diff --git a/tine20/Felamimail/js/RecipientGrid.js b/tine20/Felamimail/js/RecipientGrid.js index 95734aeb620..c72ede632cf 100644 --- a/tine20/Felamimail/js/RecipientGrid.js +++ b/tine20/Felamimail/js/RecipientGrid.js @@ -205,11 +205,38 @@ Tine.Felamimail.RecipientGrid = Ext.extend(Ext.grid.EditorGridPanel, { this.searchCombo = new Tine.Felamimail.ContactSearchCombo({ lazyInit: false, + lastInputEventValue: '', listeners: { scope: this, specialkey: this.onSearchComboSpecialkey, select: this.onSearchComboSelect, + render: (combo) => { + combo.getEl().on('input', (e, dom) => { + const value = this.searchCombo.getValue(); + if (Math.abs(value.length - this.searchCombo.lastInputEventValue.length) > 5 && (value.match(/@/g) || []).length > 1) { + import(/* webpackChunkName: "Tinebase/js/email-addresses" */ 'email-addresses').then((addrs) => { + if (!this.loadMask) { + this.loadMask = new Ext.LoadMask(Ext.getBody(), {msg: app.i18n._('Loading Mail Addresses')}); + } + this.loadMask.show(); + + const parsed = addrs.parseAddressList(value.replace(';', ',')); + const emails = _.map(parsed, (p) => { return (p.name ? `"${p.name}" <${p.address}>` : p.address) }); + + this._addRecipients(emails, this.activeEditor ? this.activeEditor.record.data.type : this.lastActiveEditor.record.data.type); + this.setFixedHeight(false); + this.ownerCt.doLayout(); + this.store.remove(this.activeEditor ? this.activeEditor.record : this.lastEditedRecord); + this.addRowAndDoLayout(this.activeEditor ? this.activeEditor.record : this.lastEditedRecord); + }).then(() => { + this.loadMask.hide(); + }); + } + this.searchCombo.lastInputEventValue = value; + }) + }, blur: function(combo) { + this.lastInputEventValue = ''; Tine.log.debug('Tine.Felamimail.MessageEditDialog::onSearchComboBlur()'); this.getView().el.select('.x-grid3-td-address-editing').removeClass('x-grid3-td-address-editing'); // need to update record because it might not be updated otherwise (for example: delete value, click into next row or subject) diff --git a/tine20/Tinebase/js/npm-shrinkwrap.json b/tine20/Tinebase/js/npm-shrinkwrap.json index 82b6e66698c..1e8af769724 100644 --- a/tine20/Tinebase/js/npm-shrinkwrap.json +++ b/tine20/Tinebase/js/npm-shrinkwrap.json @@ -4621,6 +4621,11 @@ } } }, + "email-addresses": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.1.0.tgz", + "integrity": "sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg==" + }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", @@ -15735,6 +15740,11 @@ "tslib": "^1.9.0" } }, + "s": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/s/-/s-1.0.0.tgz", + "integrity": "sha512-Tz63UXhdEBvvIV6Q0a+AV2Dx1TPq+vVWNYBxyCT9TG0uqn9kySwFTjfq3C1YuGBRwYtt9Tof11L6GCKi88foqw==" + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", diff --git a/tine20/Tinebase/js/package.json b/tine20/Tinebase/js/package.json index 96114b6cfc4..5f1d8ab464c 100644 --- a/tine20/Tinebase/js/package.json +++ b/tine20/Tinebase/js/package.json @@ -26,6 +26,7 @@ "cytoscape": "^3.15.0", "cytoscape-dagre": "^2.2.2", "director": "^1.2.8", + "email-addresses": "^3.1.0", "format-message": "^6.2.3", "graphlib": "^2.1.8", "hammerjs": "^2.0.8", @@ -43,6 +44,7 @@ "postal.request-response": "github:tine20/postal.request-response", "postal.xwindow": "github:tine20/postal.xwindow", "promises-to-retry": "^1.3.0", + "s": "^1.0.0", "sass": "^1.26.10", "sass-loader": "^9.0.2", "store2": "^2.11.2",