diff --git a/assets/javascripts/admin/controllers/admin-plugins-chat-provider.js.es6 b/assets/javascripts/admin/controllers/admin-plugins-chat-provider.js.es6 index 74cfcf3..09d3a34 100644 --- a/assets/javascripts/admin/controllers/admin-plugins-chat-provider.js.es6 +++ b/assets/javascripts/admin/controllers/admin-plugins-chat-provider.js.es6 @@ -9,13 +9,15 @@ export default Ember.Controller.extend({ modalShowing: false, actions:{ - create(provider){ + create(){ this.set('modalShowing', true); - showModal('admin-plugins-chat-edit-rule', { model: this.store.createRecord('rule',{provider: provider}), admin: true }); + var model = {rule: this.store.createRecord('rule',{provider: this.get('model.provider').id}), provider:this.get('model.provider')}; + showModal('admin-plugins-chat-edit-rule', { model: model, admin: true }); }, edit(rule){ this.set('modalShowing', true); - showModal('admin-plugins-chat-edit-rule', { model: rule, admin: true }); + var model = {rule: rule, provider:this.get('model.provider')}; + showModal('admin-plugins-chat-edit-rule', { model: model, admin: true }); }, delete(rule){ const self = this; diff --git a/assets/javascripts/admin/controllers/modals/admin-plugins-chat-edit-rule.js.es6 b/assets/javascripts/admin/controllers/modals/admin-plugins-chat-edit-rule.js.es6 index 77eb0b3..2093a03 100644 --- a/assets/javascripts/admin/controllers/modals/admin-plugins-chat-edit-rule.js.es6 +++ b/assets/javascripts/admin/controllers/modals/admin-plugins-chat-edit-rule.js.es6 @@ -2,11 +2,45 @@ import Rule from 'discourse/plugins/discourse-chat-integration/admin/models/rule import ModalFunctionality from 'discourse/mixins/modal-functionality'; import { ajax } from 'discourse/lib/ajax'; import { extractError } from 'discourse/lib/ajax-error'; +import InputValidation from 'discourse/models/input-validation'; export default Ember.Controller.extend(ModalFunctionality, { model: Rule.create({}), + channelValidation: function(){ + + var regString = this.get('model.provider.channel_regex'); + var regex = new RegExp(regString); + var val = this.get('model.rule.channel'); + + if(val == ""){ // Fail silently if field blank + return InputValidation.create({ + failed: true, + }); + }else if(!regString){ // Pass silently if no regex available for provider + return InputValidation.create({ + ok: true, + }); + }else if(regex.test(val)){ // Test against regex + return InputValidation.create({ + ok: true, + reason: I18n.t('chat_integration.edit_rule_modal.channel_validation.ok') + }); + }else{ // Failed regex + return InputValidation.create({ + failed: true, + reason: I18n.t('chat_integration.edit_rule_modal.channel_validation.fail') + }); + } + }.property('model.rule.channel'), + + saveDisabled: function(){ + if(this.get('channelValidation.failed')){ return true } + + return false; + }.property('channelValidation.failed'), + actions: { cancel: function(){ this.send('closeModal'); @@ -16,7 +50,7 @@ export default Ember.Controller.extend(ModalFunctionality, { const self = this; - this.get('model').update().then(function(result) { + this.get('model.rule').update().then(function(result) { self.send('closeModal'); }).catch(function(error) { self.flash(extractError(error), 'error'); diff --git a/assets/javascripts/admin/routes/admin-plugins-chat-provider.js.es6 b/assets/javascripts/admin/routes/admin-plugins-chat-provider.js.es6 index 7b9a5e1..07b7b0a 100644 --- a/assets/javascripts/admin/routes/admin-plugins-chat-provider.js.es6 +++ b/assets/javascripts/admin/routes/admin-plugins-chat-provider.js.es6 @@ -6,12 +6,12 @@ export default Discourse.Route.extend({ model(params, transition) { return Ember.RSVP.hash({ rules: this.store.find('rule', {provider: params.provider}), - provider: params.provider + provider: this.modelFor("admin-plugins-chat").findBy('id',params.provider) }); }, serialize: function(model, params) { - return { provider: model['provider']}; + return { provider: model['provider'].get('id')}; }, actions: { diff --git a/assets/javascripts/admin/routes/admin-plugins-chat.js.es6 b/assets/javascripts/admin/routes/admin-plugins-chat.js.es6 index d1913f9..98aab8d 100644 --- a/assets/javascripts/admin/routes/admin-plugins-chat.js.es6 +++ b/assets/javascripts/admin/routes/admin-plugins-chat.js.es6 @@ -1,7 +1,7 @@ import AdminPluginsChatProvider from 'discourse/plugins/discourse-chat-integration/admin/routes/admin-plugins-chat-provider' export default Discourse.Route.extend({ - model(params, transition) { + model(params, transition) { return this.store.findAll('provider'); }, diff --git a/assets/javascripts/admin/templates/modal/admin-plugins-chat-edit-rule.hbs b/assets/javascripts/admin/templates/modal/admin-plugins-chat-edit-rule.hbs index 40a1726..673a220 100644 --- a/assets/javascripts/admin/templates/modal/admin-plugins-chat-edit-rule.hbs +++ b/assets/javascripts/admin/templates/modal/admin-plugins-chat-edit-rule.hbs @@ -6,7 +6,7 @@ - {{i18n (concat 'chat_integration.provider.' model.provider '.title')}} + {{i18n (concat 'chat_integration.provider.' model.rule.provider '.title')}} @@ -19,20 +19,22 @@ {{text-field name="channel" - value=model.channel + value=model.rule.channel autofocus="autofocus" id="channel-field"}} + +  {{input-tip validation=channelValidation}} - + - {{combo-box name="filter" content=model.available_filters value=model.filter}} + {{combo-box name="filter" content=model.rule.available_filters value=model.rule.filter}} @@ -45,7 +47,7 @@ {{category-chooser name="category" - value=model.category_id + value=model.rule.category_id rootNoneLabel="chat_integration.all_categories" rootNone=true overrideWidths=false @@ -61,7 +63,7 @@ - {{tag-chooser placeholderKey="chat_integration.all_tags" name="tags" tags=model.tags}} + {{tag-chooser placeholderKey="chat_integration.all_tags" name="tags" tags=model.rule.tags}} @@ -77,7 +79,8 @@ {{/d-modal-body}}