From 0ab65f50c4e40400a39c01bed8ae949ee69e7098 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Wed, 28 Mar 2018 21:06:53 -0300 Subject: [PATCH 1/7] fix inputs for rocketchat apps --- .../client/admin/appManage.html | 58 +++++++++++-- .../rocketchat-apps/client/admin/appManage.js | 84 +++++++++++-------- 2 files changed, 99 insertions(+), 43 deletions(-) diff --git a/packages/rocketchat-apps/client/admin/appManage.html b/packages/rocketchat-apps/client/admin/appManage.html index e9003525e4e8..b27c8a2df044 100644 --- a/packages/rocketchat-apps/client/admin/appManage.html +++ b/packages/rocketchat-apps/client/admin/appManage.html @@ -91,6 +91,54 @@ {{{parseDescription i18nDescription}}} + {{else if $eq type 'int'}} +
+ + {{# if i18nDescription}} +
{{{parseDescription i18nDescription}}}
+ {{/if}} + {{# if i18nAlert}} +
+
+ {{> icon block="rc-input__error-icon" icon="warning" classes="rc-input__error-icon-svg"}} +
+
{{_ "i18nAlert"}}
+
+ {{/if}} +
+ {{else if $eq type 'password'}} +
+ + {{# if i18nDescription}} +
{{{parseDescription i18nDescription}}}
+ {{/if}} + {{# if i18nAlert}} +
+
+ {{> icon block="rc-input__error-icon" icon="warning" classes="rc-input__error-icon-svg"}} +
+
{{_ "i18nAlert"}}
+
+ {{/if}} +
{{else}}
@@ -99,14 +147,6 @@ {{/if}} - {{#if $eq type 'password'}} - - {{/if}} - - {{#if $eq type 'int'}} - - {{/if}} - {{#if $eq type 'select'}}
@@ -234,7 +274,7 @@
- +
diff --git a/packages/rocketchat-apps/client/admin/appManage.js b/packages/rocketchat-apps/client/admin/appManage.js index 9014c3cea822..3f1566898623 100644 --- a/packages/rocketchat-apps/client/admin/appManage.js +++ b/packages/rocketchat-apps/client/admin/appManage.js @@ -3,6 +3,7 @@ import s from 'underscore.string'; import { AppEvents } from '../communication'; + Template.appManage.onCreated(function() { const instance = this; this.id = new ReactiveVar(FlowRouter.getParam('appId')); @@ -12,14 +13,16 @@ Template.appManage.onCreated(function() { this.processingEnabled = new ReactiveVar(false); this.app = new ReactiveVar({}); this.settings = new ReactiveVar({}); + this.loading = new ReactiveVar(false); const id = this.id.get(); function _morphSettings(settings) { Object.keys(settings).forEach((k) => { settings[k].i18nPlaceholder = settings[k].i18nPlaceholder || ' '; - settings[k].value = settings[k].value || settings[k].packageValue; + settings[k].value = settings[k].value !== undefined ? settings[k].value : settings[k].packageValue; settings[k].oldValue = settings[k].value; + settings[k].hasChanged = false; }); instance.settings.set(settings); @@ -73,17 +76,8 @@ Template.apps.onDestroyed(function() { Template.appManage.helpers({ disabled() { const t = Template.instance(); - - const toSave = Object.keys(t.settings.get()).filter((k) => { - const setting = t.settings.get()[k]; - if (setting.hasChanged) { - return true; - } - }); - - if (toSave.length === 0) { - return true; - } + const settings = t.settings.get(); + return !Object.keys(settings).some((k) => settings[k].hasChanged); }, isReady() { if (Template.instance().ready) { @@ -134,6 +128,9 @@ Template.appManage.helpers({ item.tokens.forEach((t) => item.html = item.html.replace(t.token, t.text)); return item.html; + }, + saving() { + return Template.instance().loading.get(); } }); @@ -172,42 +169,60 @@ Template.appManage.events({ }); }, - 'click .js-uninstall': (e, t) => { + 'click .js-uninstall': async(e, t) => { t.ready.set(false); - - RocketChat.API.delete(`apps/${ t.id.get() }`).then(() => { + try { + await RocketChat.API.delete(`apps/${ t.id.get() }`); FlowRouter.go('/admin/apps'); - }).catch((err) => { + } catch (err) { console.warn('Error:', err); + } finally { t.ready.set(true); - }); + } }, 'click .logs': (e, t) => { FlowRouter.go(`/admin/apps/${ t.id.get() }/logs`); }, - 'click .js-save': (e, t) => { - const toSave = []; - - Object.keys(t.settings.get()).forEach((k) => { - const setting = t.settings.get()[k]; - if (setting.hasChanged) { - toSave.push(setting); - } - }); - - if (toSave.length === 0) { - console.log('Nothing to save..'); + 'click .js-save': async(e, t) => { + if (t.loading.get()) { return; } + t.loading.set(true); + const settings = t.settings.get(); + + + try { + const toSave = []; + Object.keys(settings).forEach(k => { + const setting = settings[k]; + if (setting.hasChanged) { + toSave.push(setting); + } + // return !!setting.hasChanged; + }); - RocketChat.API.post(`apps/${ t.id.get() }/settings`, undefined, { settings: toSave }).then((result) => { + if (toSave.length === 0) { + throw 'Nothing to save..'; + } + const result = await RocketChat.API.post(`apps/${ t.id.get() }/settings`, undefined, { settings: toSave }); console.log('Updating results:', result); - result.updated.forEach((setting) => { - t.settings.get()[setting.id].oldValue = setting.value; + result.updated.forEach(setting => { + settings[setting.id].value = settings[setting.id].oldValue = setting.value; }); - }); + Object.keys(settings).forEach(k => { + const setting = settings[k]; + setting.hasChanged = false; + }); + t.settings.set(settings); + + } catch (e) { + console.log(e); + } finally { + t.loading.set(false); + } + }, 'change input[type="checkbox"]': (e, t) => { @@ -225,7 +240,7 @@ Template.appManage.events({ } }, - 'change .input-monitor, keyup .input-monitor': _.throttle(function(e, t) { + 'input input': _.throttle(function(e, t) { let value = s.trim($(e.target).val()); switch (this.type) { case 'int': @@ -240,6 +255,7 @@ Template.appManage.events({ if (setting.oldValue !== setting.value) { t.settings.get()[this.id].hasChanged = true; + t.settings.set(t.settings.get()); } }, 500) }); From 3c5a7caa36cafc855efee25c154ef859b6176326 Mon Sep 17 00:00:00 2001 From: graywolf336 Date: Thu, 29 Mar 2018 20:38:44 -0500 Subject: [PATCH 2/7] Fix the user connection status being undefined error for rocket.cat on the apps --- packages/rocketchat-apps/server/converters/users.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/rocketchat-apps/server/converters/users.js b/packages/rocketchat-apps/server/converters/users.js index d3904a885e57..6a3caeec3d1f 100644 --- a/packages/rocketchat-apps/server/converters/users.js +++ b/packages/rocketchat-apps/server/converters/users.js @@ -67,7 +67,7 @@ export class AppUsersConverter { return UserStatusConnection.BUSY; default: console.warn(`The user ${ username } (${ userId }) does not have a valid status (offline, online, away, or busy). It is currently: "${ status }"`); - return status === '' ? UserStatusConnection.OFFLINE : status.toUpperCase(); + return !status ? UserStatusConnection.OFFLINE : status.toUpperCase(); } } } From 08748346fe6eb5c615cd93c02c78639e0edab653 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Wed, 4 Apr 2018 13:43:01 -0300 Subject: [PATCH 3/7] text fields --- package-lock.json | 17 +++--- .../client/admin/appManage.html | 54 ++++++++++++++++--- 2 files changed, 53 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8b30ae6eded0..973dab109aeb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1680,7 +1680,7 @@ "bcrypt": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-1.0.3.tgz", - "integrity": "sha512-pRyDdo73C8Nim3jwFJ7DWe3TZCgwDfWZ6nHS5LSdU77kWbj1frruvdndP02AOavtD4y8v6Fp2dolbHgp4SDrfg==", + "integrity": "sha1-sC3cbAtS6ha40883XVoy54DatUg=", "requires": { "nan": "2.6.2", "node-pre-gyp": "0.6.36" @@ -3599,7 +3599,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.6.tgz", "integrity": "sha512-IsORQDpaaSwcDP4ZZnHxgE85werpo34VYn1Ud3mq+eUsF593faR8oCZNXrROVkpFu2TsbrNhHin0aUrTsQ9vNw==", - "optional": true, "requires": { "prr": "1.0.1" } @@ -5421,7 +5420,7 @@ "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "integrity": "sha1-wZyd+aAocC1nhhI4SmVSQExjbRU=", "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -8277,7 +8276,7 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", "requires": { "brace-expansion": "1.1.11" } @@ -8530,8 +8529,7 @@ "natives": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.1.tgz", - "integrity": "sha512-8eRaxn8u/4wN8tGkhlc2cgwwvOLMLUMUn4IYTexMgWd+LyUDfeXVkk2ygQR0hvIHbJQXgHujia3ieUUDwNGkEA==", - "optional": true + "integrity": "sha512-8eRaxn8u/4wN8tGkhlc2cgwwvOLMLUMUn4IYTexMgWd+LyUDfeXVkk2ygQR0hvIHbJQXgHujia3ieUUDwNGkEA==" }, "natural-compare": { "version": "1.4.0", @@ -8651,7 +8649,7 @@ "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=", "requires": { "are-we-there-yet": "1.1.4", "console-control-strings": "1.1.0", @@ -10110,8 +10108,7 @@ "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "optional": true + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" }, "pump": { "version": "2.0.1", @@ -13083,7 +13080,7 @@ "wide-align": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz", - "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", + "integrity": "sha1-Vx4PGwYEY268DfwhsDObvjE0FxA=", "requires": { "string-width": "1.0.2" } diff --git a/packages/rocketchat-apps/client/admin/appManage.html b/packages/rocketchat-apps/client/admin/appManage.html index b27c8a2df044..2896c48d5c46 100644 --- a/packages/rocketchat-apps/client/admin/appManage.html +++ b/packages/rocketchat-apps/client/admin/appManage.html @@ -139,14 +139,56 @@
{{/if}}
+ {{else if $eq type 'relativeUrl'}} +
+ + {{# if i18nDescription}} +
{{{parseDescription i18nDescription}}}
+ {{/if}} + {{# if i18nAlert}} +
+
+ {{> icon block="rc-input__error-icon" icon="warning" classes="rc-input__error-icon-svg"}} +
+
{{_ "i18nAlert"}}
+
+ {{/if}} +
+ {{else if $eq type 'font'}} +
+ + {{# if i18nDescription}} +
{{{parseDescription i18nDescription}}}
+ {{/if}} + {{# if i18nAlert}} +
+
+ {{> icon block="rc-input__error-icon" icon="warning" classes="rc-input__error-icon-svg"}} +
+
{{_ "i18nAlert"}}
+
+ {{/if}} +
{{else}}
- {{#if $eq type 'relativeUrl'}} - - {{/if}} - {{#if $eq type 'select'}}
@@ -196,10 +238,6 @@
Variable name: {{getColorVariable id}}
{{/if}} - {{#if $eq type 'font'}} - - {{/if}} - {{#if $eq type 'code'}} {{#if isDisabled.disabled}} {{> CodeMirror name=id options=(getEditorOptions true) code=(i18nDefaultValue) }} From e94c296bb857e370bb9f46584e9a733db953b4f1 Mon Sep 17 00:00:00 2001 From: Guilherme Gazzo Date: Mon, 9 Apr 2018 18:44:42 -0300 Subject: [PATCH 4/7] merge --- .../client/admin/appManage.html | 290 +++++++++++------- .../rocketchat-apps/client/admin/appManage.js | 70 ++++- .../client/imports/forms/input.css | 4 + .../client/imports/forms/select.css | 6 + .../rocketchat-ui-master/public/icons.svg | 5 + .../client/views/app/directory.html | 6 +- .../client/views/app/directory.js | 8 + 7 files changed, 275 insertions(+), 114 deletions(-) diff --git a/packages/rocketchat-apps/client/admin/appManage.html b/packages/rocketchat-apps/client/admin/appManage.html index 2896c48d5c46..0a2e61996a18 100644 --- a/packages/rocketchat-apps/client/admin/appManage.html +++ b/packages/rocketchat-apps/client/admin/appManage.html @@ -55,31 +55,31 @@
{{#if $eq type 'string'}} -
- - {{# if i18nDescription}} -
{{{parseDescription i18nDescription}}}
- {{/if}} - {{# if i18nAlert}} -
-
- {{> icon block="rc-input__error-icon" icon="warning" classes="rc-input__error-icon-svg"}} +
+ + {{# if i18nDescription}} +
{{{parseDescription i18nDescription}}}
+ {{/if}} + {{# if i18nAlert}} +
+
+ {{> icon block="rc-input__error-icon" icon="warning" classes="rc-input__error-icon-svg"}} +
+
{{_ "i18nAlert"}}
-
{{_ "i18nAlert"}}
+ {{/if}}
- {{/if}} -
{{else if $eq type 'boolean'}} -
+
{{{parseDescription i18nDescription}}}
- {{else if $eq type 'int'}} + {{else if $eq type 'int'}}
{{/if}}
- {{else if $eq type 'password'}} + {{else if $eq type 'password'}}
{{/if}}
- {{else}} -
- -
- {{#if $eq type 'select'}} -
- -
- + {{else if $eq type 'code'}} +
+ + {{# if i18nDescription}} +
{{{parseDescription i18nDescription}}}
{{/if}} - - {{#if $eq type 'language'}} -
- + {{# if i18nAlert}} +
+
+ {{> icon block="rc-input__error-icon" icon="warning" classes="rc-input__error-icon-svg"}} +
+
{{_ "i18nAlert"}}
- {{/if}} +
- {{#if $eq type 'color'}} -
- {{#if $eq editor 'color'}} -
- - -
- {{/if}} - {{#if $eq editor 'expression'}} -
- -
- {{/if}} -
-
- -
- + {{#each values}} + {{/each}} + {{> icon block="rc-select__arrow" icon="arrow-down" }}
+ + {{# if i18nDescription}} +
{{{parseDescription i18nDescription}}}
+ {{/if}} + {{# if i18nAlert}} +
+
+ {{> icon block="rc-input__error-icon" icon="warning" classes="rc-input__error-icon-svg"}} +
+
{{_ "i18nAlert"}}
-
Variable name: {{getColorVariable id}}
{{/if}} +
- {{#if $eq type 'code'}} - {{#if isDisabled.disabled}} - {{> CodeMirror name=id options=(getEditorOptions true) code=(i18nDefaultValue) }} - {{else}} -
-
- {{label}} + {{else if $eq type 'color'}} + +
+