From fc2702ba260b7a8705ee9f2d1f606af8dfa768da Mon Sep 17 00:00:00 2001 From: Koren Lev Date: Wed, 6 Sep 2017 19:47:54 +0300 Subject: ui updates Change-Id: I2d3f87e34a74ce21bbb9e3df989b6527337b7228 Signed-off-by: Koren Lev --- .../ui/components/alarm-icons/alarm-icons.html | 13 ++- .../ui/components/alarm-icons/alarm-icons.js | 31 ++++- .../ui/components/clique-type/clique-type.js | 6 +- .../ui/components/configuration/configuration.html | 31 +++++ .../ui/components/configuration/configuration.js | 114 ++++++++++++++++++ .../ui/components/configuration/configuration.styl | 38 ++++++ ui/imports/ui/components/dashboard/dashboard.js | 18 +-- .../environment-dashboard/environment-dashboard.js | 15 ++- .../ui/components/environment/environment.js | 1 + .../graph-tooltip-window/graph-tooltip-window.html | 4 +- .../graph-tooltip-window/graph-tooltip-window.js | 19 +++ .../graph-tooltip-window/graph-tooltip-window.styl | 11 +- ui/imports/ui/components/index.styl | 1 + .../ui/components/messages-modal/messages-modal.js | 54 ++++----- .../network-graph-manager/network-graph-manager.js | 48 +++++++- .../ui/components/network-graph/network-graph.js | 130 ++++++++++++++------- .../ui/components/scans-list/scans-list.html | 2 - .../components/top-navbar-menu/top-navbar-menu.js | 2 +- 18 files changed, 435 insertions(+), 103 deletions(-) create mode 100644 ui/imports/ui/components/configuration/configuration.html create mode 100644 ui/imports/ui/components/configuration/configuration.js create mode 100644 ui/imports/ui/components/configuration/configuration.styl (limited to 'ui/imports/ui') diff --git a/ui/imports/ui/components/alarm-icons/alarm-icons.html b/ui/imports/ui/components/alarm-icons/alarm-icons.html index d584990..e59414e 100644 --- a/ui/imports/ui/components/alarm-icons/alarm-icons.html +++ b/ui/imports/ui/components/alarm-icons/alarm-icons.html @@ -15,34 +15,37 @@ @@ -69,6 +72,10 @@ Users {{/if }} + + diff --git a/ui/imports/ui/components/alarm-icons/alarm-icons.js b/ui/imports/ui/components/alarm-icons/alarm-icons.js index 5c7af31..e86f8d8 100644 --- a/ui/imports/ui/components/alarm-icons/alarm-icons.js +++ b/ui/imports/ui/components/alarm-icons/alarm-icons.js @@ -13,6 +13,9 @@ import '/imports/ui/components/breadcrumb/breadcrumb'; import { Messages } from '/imports/api/messages/messages'; import { Roles } from 'meteor/alanning:roles'; +import { ReactiveDict } from 'meteor/reactive-dict'; + +import { Configurations } from '/imports/api/configurations/configurations'; import './alarm-icons.html'; @@ -23,10 +26,24 @@ import './alarm-icons.html'; Template.alarmIcons.onCreated(function () { let instance = this; + instance.state = new ReactiveDict(); + instance.state.setDefault({ + msgsViewBackDelta: 1 + }); + instance.autorun(function () { - instance.subscribe('messages/count?level', 'info'); - instance.subscribe('messages/count?level', 'warning'); - instance.subscribe('messages/count?level', 'error'); + instance.subscribe('configurations?user'); + Configurations.find({user_id: Meteor.userId()}).forEach((conf) => { + instance.state.set('msgsViewBackDelta', conf.messages_view_backward_delta); + }); + }); + + instance.autorun(function () { + let msgsViewBackDelta = instance.state.get('msgsViewBackDelta'); + + instance.subscribe('messages/count?backDelta&level', msgsViewBackDelta, 'info'); + instance.subscribe('messages/count?backDelta&level', msgsViewBackDelta, 'warning'); + instance.subscribe('messages/count?backDelta&level', msgsViewBackDelta, 'error'); }); }); @@ -50,4 +67,12 @@ Template.alarmIcons.helpers({ errorsCount: function(){ return Messages.find({level:'error'}).count(); }, + + msgCounterName: function (level) { + let instance = Template.instance(); + let msgsViewBackDelta = instance.state.get('msgsViewBackDelta'); + let counterName = `messages/count?backDelta=${msgsViewBackDelta}&level=${level}`; + + return counterName; + } }); diff --git a/ui/imports/ui/components/clique-type/clique-type.js b/ui/imports/ui/components/clique-type/clique-type.js index ae50b94..9b21442 100644 --- a/ui/imports/ui/components/clique-type/clique-type.js +++ b/ui/imports/ui/components/clique-type/clique-type.js @@ -130,7 +130,7 @@ Template.CliqueType.helpers({ objectTypesList: function () { return R.ifElse(R.isNil, R.always([]), R.prop('data') - )(Constants.findOne({ name: 'object_types_for_links' })); + )(Constants.findOne({ name: 'object_types_for_links' })); }, linkTypesList: function () { @@ -280,7 +280,7 @@ function submitItem( focal_point_type, link_types, name - ) { +) { let action = instance.state.get('action'); @@ -316,7 +316,7 @@ function submitItem( break; default: - // todo + // todo break; } } diff --git a/ui/imports/ui/components/configuration/configuration.html b/ui/imports/ui/components/configuration/configuration.html new file mode 100644 index 0000000..f381453 --- /dev/null +++ b/ui/imports/ui/components/configuration/configuration.html @@ -0,0 +1,31 @@ + diff --git a/ui/imports/ui/components/configuration/configuration.js b/ui/imports/ui/components/configuration/configuration.js new file mode 100644 index 0000000..493cc36 --- /dev/null +++ b/ui/imports/ui/components/configuration/configuration.js @@ -0,0 +1,114 @@ +/* + * Template Component: Configuration + */ + +//import { Meteor } from 'meteor/meteor'; +import { Template } from 'meteor/templating'; +import { ReactiveDict } from 'meteor/reactive-dict'; +//import { SimpleSchema } from 'meteor/aldeed:simple-schema'; +import * as R from 'ramda'; + +import { save } from '/imports/api/configurations/methods'; +import { Configurations } from '/imports/api/configurations/configurations'; + +import './configuration.html'; + +/* + * Lifecycles + */ + +Template.Configuration.onCreated(function() { + let instance = this; + instance.state = new ReactiveDict(); + instance.state.setDefault({ + model: Configurations.schema.clean({}), + actionResult: 'none', + message: null, + }); + + /* + instance.autorun(function () { + let data = Template.currentData(); + + new SimpleSchema({ + }).validate(data); + }); + */ + + instance.autorun(function () { + instance.subscribe('configurations?user'); + Configurations.find({user_id: Meteor.userId()}).forEach((conf) => { + instance.state.set('model', conf); + }); + }); +}); + +/* +Template.Configuration.rendered = function() { +}; +*/ + +/* + * Events + */ + +Template.Configuration.events({ + 'click .js-submit-button': function (event, instance) { + event.preventDefault(); + let msgsViewBackDelta = instance.$('.cl-msgs-view-back-delta')[0].value; + saveForm(instance, msgsViewBackDelta); + } +}); + +/* + * Helpers + */ + +Template.Configuration.helpers({ + getModelField: function (fieldName) { + let instance = Template.instance(); + return R.path([fieldName], instance.state.get('model')); + }, + + getState: function (key) { + let instance = Template.instance(); + return instance.state.get(key); + }, + + isActionError: function () { + let instance = Template.instance(); + return instance.state.get('actionResult') === 'error'; + }, + + isActionSuccess: function () { + let instance = Template.instance(); + return instance.state.get('actionResult') === 'success'; + }, + + durationHumanize: function (duration) { + return moment.duration(duration).humanize(); + } +}); // end: helpers + +function saveForm(instance, msgsViewBackDelta) { + instance.state.set('actionResult', 'none'); + instance.state.set('message', null); + + save.call({ + messages_view_backward_delta: msgsViewBackDelta + }, (error) => { + if (error) { + instance.state.set('actionResult', 'error'); + if (typeof error === 'string') { + instance.state.set('message', error); + } else { + instance.state.set('message', error.message); + } + + return; + } + + instance.state.set('actionResult', 'success'); + instance.state.set('message', 'record has been updated succesfuly'); + }); +} diff --git a/ui/imports/ui/components/configuration/configuration.styl b/ui/imports/ui/components/configuration/configuration.styl new file mode 100644 index 0000000..b8be180 --- /dev/null +++ b/ui/imports/ui/components/configuration/configuration.styl @@ -0,0 +1,38 @@ +/* Set the component style here */ +// "Configuration" +.os-configuration + display: flex; + flex-flow: column nowrap; + margin: 20px; + + .cl-field-group + display: flex; + flex-flow: row nowrap; + align-items: center; + padding: 5px 0; + + .cl-field-label + width: 120px; + margin: 0 5px; + + >.cl-input + display: block; + width: 100%; + min-height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + width: 400px; + margin: 0 5px; + + .cl-field-desc + margin: 0 5px; + + .js-message-panel + margin-top: 20px; diff --git a/ui/imports/ui/components/dashboard/dashboard.js b/ui/imports/ui/components/dashboard/dashboard.js index 85cede8..6fdc184 100644 --- a/ui/imports/ui/components/dashboard/dashboard.js +++ b/ui/imports/ui/components/dashboard/dashboard.js @@ -13,8 +13,8 @@ //import * as R from 'ramda'; import * as _ from 'lodash'; import { Environments } from '/imports/api/environments/environments'; -import { //Messages, - calcIconForMessageLevel, lastMessageTimestamp, calcColorClassForMessagesInfoBox +import { //Messages, + calcIconForMessageLevel, lastMessageTimestamp, calcColorClassForMessagesInfoBox } from '/imports/api/messages/messages'; import { Template } from 'meteor/templating'; import { Inventory } from '/imports/api/inventories/inventories'; @@ -27,7 +27,7 @@ import { setMainAppSelectedEnvironment } from '/imports/ui/actions/main-app.acti import '/imports/ui/components/messages-info-box/messages-info-box'; import '/imports/ui/components/environment-box/environment-box'; -import './dashboard.html'; +import './dashboard.html'; /* * Lifecycle methods @@ -212,10 +212,10 @@ Template.Dashboard.helpers({ icon: calcIconForMessageLevel(boxDef.level), colorClass: calcColorClassForMessagesInfoBox(boxDef.level), onMoreDetailsReq: function () { - $('#messagesModalGlobal').modal('show', { + $('#messagesModalGlobal').modal('show', { dataset: { messageLevel: boxDef.level, - } + } }); } }; @@ -223,10 +223,10 @@ Template.Dashboard.helpers({ argsEnvBox: function ( environmentName, - regionsCount, - regions, - projectsCount, - projects, + regionsCount, + regions, + projectsCount, + projects, instancesCount, vservicesCount, vconnectorsCount, diff --git a/ui/imports/ui/components/environment-dashboard/environment-dashboard.js b/ui/imports/ui/components/environment-dashboard/environment-dashboard.js index 433096e..82fbb52 100644 --- a/ui/imports/ui/components/environment-dashboard/environment-dashboard.js +++ b/ui/imports/ui/components/environment-dashboard/environment-dashboard.js @@ -26,6 +26,7 @@ import { calcIconForMessageLevel, lastMessageTimestamp, calcColorClassForMessage import { Counts } from 'meteor/tmeasday:publish-counts'; import { Roles } from 'meteor/alanning:roles'; //import { idToStr } from '/imports/lib/utilities'; +import { Counter } from 'meteor/natestrauser:publish-performant-counts'; import '/imports/ui/components/data-cubic/data-cubic'; import '/imports/ui/components/icon/icon'; @@ -123,9 +124,10 @@ Template.EnvironmentDashboard.onCreated(function() { instance.subscribe('inventory?env+type', env.name, 'vconnector'); instance.subscribe('inventory?env+type', env.name, 'project'); instance.subscribe('inventory?env+type', env.name, 'region'); - instance.subscribe('messages?env+level', env.name, 'info'); - instance.subscribe('messages?env+level', env.name, 'warning'); - instance.subscribe('messages?env+level', env.name, 'error'); + + instance.subscribe('messages/count?level&env', 'info', env.name); + instance.subscribe('messages/count?level&env', 'warning', env.name); + instance.subscribe('messages/count?level&env', 'error', env.name); let vConnectorCounterName = 'inventory?env+type!counter?env=' + env.name + '&type=' + 'vconnector'; @@ -316,8 +318,11 @@ Template.EnvironmentDashboard.helpers({ }; } - let count = Counts.get('messages?env+level!counter?env=' + - envName + '&level=' + boxDef.level); + let counterName = `messages/count?level=${boxDef.level}&env=${envName}`; + let count = Counter.get(counterName); + + //let count = Counts.get('messages?env+level!counter?env=' + + // envName + '&level=' + boxDef.level); let title = _.capitalize(boxDef.level); diff --git a/ui/imports/ui/components/environment/environment.js b/ui/imports/ui/components/environment/environment.js index 83574f2..1f0e723 100644 --- a/ui/imports/ui/components/environment/environment.js +++ b/ui/imports/ui/components/environment/environment.js @@ -157,6 +157,7 @@ Template.Environment.onCreated(function () { new SimpleSchema({ _id: _idFieldDef, selectedNodeId: R.assoc('optional', true, _idFieldDef), + refresh: { type: String, optional: true }, }).validate(data); store.dispatch(setEnvEnvId(data._id)); diff --git a/ui/imports/ui/components/graph-tooltip-window/graph-tooltip-window.html b/ui/imports/ui/components/graph-tooltip-window/graph-tooltip-window.html index 53537ca..4ce9787 100644 --- a/ui/imports/ui/components/graph-tooltip-window/graph-tooltip-window.html +++ b/ui/imports/ui/components/graph-tooltip-window/graph-tooltip-window.html @@ -9,8 +9,8 @@ ######################################################################################## -->