You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2018/08/02 10:20:21 UTC
[1/2] ignite git commit: IGNITE-9151 Web Console: Fixed logic of
removing cluster items: caches, models, igfss.
Repository: ignite
Updated Branches:
refs/heads/master 5fc18e6f1 -> 1cdf7ef99
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/services/Clusters.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/Clusters.js b/modules/web-console/frontend/app/services/Clusters.js
index d76f862..c33c145 100644
--- a/modules/web-console/frontend/app/services/Clusters.js
+++ b/modules/web-console/frontend/app/services/Clusters.js
@@ -57,7 +57,9 @@ export default class Clusters {
messageQueueLimit = this.messageQueueLimit.default,
ackSendThreshold = this.ackSendThreshold.default
) => {
- if (currentValue === this.unacknowledgedMessagesBufferSize.default) return currentValue;
+ if (currentValue === this.unacknowledgedMessagesBufferSize.default)
+ return currentValue;
+
const {validRatio} = this.unacknowledgedMessagesBufferSize;
return Math.max(messageQueueLimit * validRatio, ackSendThreshold * validRatio);
},
@@ -253,7 +255,9 @@ export default class Clusters {
maxSize: {
default: '0.2 * totalMemoryAvailable',
min: (dataRegion) => {
- if (!dataRegion) return;
+ if (!dataRegion)
+ return;
+
return dataRegion.initialSize || this.dataRegion.initialSize.default;
}
},
@@ -267,11 +271,14 @@ export default class Clusters {
default: 100,
min: 11,
max: (cluster, dataRegion) => {
- if (!cluster || !dataRegion || !dataRegion.maxSize) return;
+ if (!cluster || !dataRegion || !dataRegion.maxSize)
+ return;
+
const perThreadLimit = 10; // Took from Ignite
const maxSize = dataRegion.maxSize;
const pageSize = cluster.dataStorageConfiguration.pageSize || this.dataStorageConfiguration.pageSize.default;
const maxPoolSize = Math.floor(maxSize / pageSize / perThreadLimit);
+
return maxPoolSize;
}
},
@@ -293,7 +300,10 @@ export default class Clusters {
addDataRegionConfiguration(cluster) {
const dataRegionConfigurations = get(cluster, 'dataStorageConfiguration.dataRegionConfigurations');
- if (!dataRegionConfigurations) return;
+
+ if (!dataRegionConfigurations)
+ return;
+
return dataRegionConfigurations.push(Object.assign(this.makeBlankDataRegionConfiguration(), {
name: uniqueName('New data region', dataRegionConfigurations.concat(cluster.dataStorageConfiguration.defaultDataRegionConfiguration))
}));
@@ -318,7 +328,10 @@ export default class Clusters {
defaultMemoryPolicyExists: (name, items = []) => {
const def = this.memoryPolicy.name.default;
const normalizedName = (name || def);
- if (normalizedName === def) return true;
+
+ if (normalizedName === def)
+ return true;
+
return items.some((policy) => (policy.name || def) === normalizedName);
},
uniqueMemoryPolicyName: (a, items = []) => {
@@ -330,7 +343,9 @@ export default class Clusters {
default: 100,
min: 11,
max: (cluster, memoryPolicy) => {
- if (!memoryPolicy || !memoryPolicy.maxSize) return;
+ if (!memoryPolicy || !memoryPolicy.maxSize)
+ return;
+
const perThreadLimit = 10; // Took from Ignite
const maxSize = memoryPolicy.maxSize;
const pageSize = cluster.memoryConfiguration.pageSize || this.memoryConfiguration.pageSize.default;
@@ -406,7 +421,10 @@ export default class Clusters {
addMemoryPolicy(cluster) {
const memoryPolicies = get(cluster, 'memoryConfiguration.memoryPolicies');
- if (!memoryPolicies) return;
+
+ if (!memoryPolicies)
+ return;
+
return memoryPolicies.push(Object.assign(this.makeBlankMemoryPolicy(), {
// Blank name for default policy if there are not other policies
name: memoryPolicies.length ? uniqueName('New memory policy', memoryPolicies) : ''
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/services/FormUtils.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/FormUtils.service.js b/modules/web-console/frontend/app/services/FormUtils.service.js
index da6b417..2c81c57 100644
--- a/modules/web-console/frontend/app/services/FormUtils.service.js
+++ b/modules/web-console/frontend/app/services/FormUtils.service.js
@@ -329,12 +329,19 @@ export default ['IgniteFormUtils', ['$window', 'IgniteFocus', '$rootScope', ($wi
function triggerValidation(form) {
const fe = (m) => Object.keys(m.$error)[0];
const em = (e) => (m) => {
- if (!e) return;
+ if (!e)
+ return;
+
const walk = (m) => {
- if (!m.$error[e]) return;
- if (m.$error[e] === true) return m;
+ if (!m.$error[e])
+ return;
+
+ if (m.$error[e] === true)
+ return m;
+
return walk(m.$error[e][0]);
};
+
return walk(m);
};
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/services/IGFSs.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/IGFSs.js b/modules/web-console/frontend/app/services/IGFSs.js
index 87dfd17..de9e43d 100644
--- a/modules/web-console/frontend/app/services/IGFSs.js
+++ b/modules/web-console/frontend/app/services/IGFSs.js
@@ -64,11 +64,15 @@ export default class IGFSs {
secondaryFileSystemEnabled = {
requiredWhenIGFSProxyMode: (igfs) => {
- if (get(igfs, 'defaultMode') === 'PROXY') return get(igfs, 'secondaryFileSystemEnabled') === true;
+ if (get(igfs, 'defaultMode') === 'PROXY')
+ return get(igfs, 'secondaryFileSystemEnabled') === true;
+
return true;
},
requiredWhenPathModeProxyMode: (igfs) => {
- if (get(igfs, 'pathModes', []).some((pm) => pm.mode === 'PROXY')) return get(igfs, 'secondaryFileSystemEnabled') === true;
+ if (get(igfs, 'pathModes', []).some((pm) => pm.mode === 'PROXY'))
+ return get(igfs, 'secondaryFileSystemEnabled') === true;
+
return true;
}
};
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/services/Models.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/Models.js b/modules/web-console/frontend/app/services/Models.js
index 3b714c4..4b360be 100644
--- a/modules/web-console/frontend/app/services/Models.js
+++ b/modules/web-console/frontend/app/services/Models.js
@@ -85,14 +85,19 @@ export default class Models {
* @param {ig.config.model.DomainModel} model
*/
addIndex(model) {
- if (!model) return;
- if (!model.indexes) model.indexes = [];
+ if (!model)
+ return;
+
+ if (!model.indexes)
+ model.indexes = [];
+
model.indexes.push({
_id: ObjectID.generate(),
name: '',
indexType: 'SORTED',
fields: []
});
+
return model.indexes[model.indexes.length - 1];
}
@@ -142,7 +147,9 @@ export default class Models {
*/
indexFieldsHaveUniqueNames: ($value = []) => {
return $value.every((index) => {
- if (!index.fields) return true;
+ if (!index.fields)
+ return true;
+
const uniqueNames = new Set(index.fields.map((ec) => ec.name));
return uniqueNames.size === index.fields.length;
});
@@ -156,7 +163,9 @@ export default class Models {
* @returns {ig.config.model.DomainModel}
*/
removeInvalidFields(model) {
- if (!model) return model;
+ if (!model)
+ return model;
+
const fieldNames = new Set((model.fields || []).map((f) => f.name));
return {
...model,
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/services/exceptionHandler.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/exceptionHandler.js b/modules/web-console/frontend/app/services/exceptionHandler.js
index 0d9cf3d..82a88e1 100644
--- a/modules/web-console/frontend/app/services/exceptionHandler.js
+++ b/modules/web-console/frontend/app/services/exceptionHandler.js
@@ -19,7 +19,9 @@ import {CancellationError} from 'app/errors/CancellationError';
export function $exceptionHandler($log) {
return function(exception, cause) {
- if (exception instanceof CancellationError) return;
+ if (exception instanceof CancellationError)
+ return;
+
$log.error(exception, cause);
};
}
[2/2] ignite git commit: IGNITE-9151 Web Console: Fixed logic of
removing cluster items: caches, models, igfss.
Posted by ak...@apache.org.
IGNITE-9151 Web Console: Fixed logic of removing cluster items: caches, models, igfss.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/1cdf7ef9
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/1cdf7ef9
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/1cdf7ef9
Branch: refs/heads/master
Commit: 1cdf7ef992c36a1b8f52021dd91705c51257d1c1
Parents: 5fc18e6
Author: Alexey Kuznetsov <ak...@apache.org>
Authored: Thu Aug 2 17:18:50 2018 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Thu Aug 2 17:18:50 2018 +0700
----------------------------------------------------------------------
.../form-field/showValidationError.directive.js | 6 +-
.../grid-column-selector/controller.js | 8 +-
.../list-editable-save-on-changes/directives.js | 14 ++-
.../list-editable-transclude/directive.js | 12 +-
.../app/components/list-editable/controller.js | 6 +-
.../components/cluster-edit-form/controller.js | 2 -
.../components/model-edit-form/controller.js | 10 +-
.../page-configure-basic/controller.js | 13 ++-
.../pco-grid-column-categories/directive.js | 4 +-
.../components/formUICanExitGuard.js | 12 +-
.../components/modal-import-models/component.js | 23 ++--
.../tables-action-cell/component.js | 14 ++-
.../modal-preview-project/controller.js | 10 +-
.../components/pc-form-field-size/controller.js | 8 +-
.../components/pc-items-table/controller.js | 26 ++++-
.../components/pc-ui-grid-filters/directive.js | 4 +-
.../components/pc-ui-grid-filters/index.js | 5 +-
.../components/pcIsInCollection.js | 4 +-
.../page-configure/components/pcValidation.js | 8 +-
.../app/components/page-configure/index.js | 14 ++-
.../app/components/page-configure/reducer.js | 90 ++++++++++++++-
.../page-configure/services/ConfigureState.js | 5 +
.../app/components/page-configure/states.js | 88 ++++++++------
.../components/page-configure/store/effects.js | 114 +++++++++++--------
.../page-configure/store/selectors.js | 50 +++++++-
.../transitionHooks/errorState.js | 5 +-
.../frontend/app/components/page-signin/run.js | 5 +-
.../components/panel-collapsible/controller.js | 19 +++-
.../app/components/ui-grid-filters/directive.js | 3 +-
.../app/components/ui-grid-filters/index.js | 4 +-
.../generator/ConfigurationGenerator.js | 3 +-
.../field/bs-select-placeholder.directive.js | 4 +-
.../modules/form/validator/unique.directive.js | 6 +-
.../web-console/frontend/app/services/Caches.js | 10 +-
.../frontend/app/services/Clusters.js | 32 ++++--
.../frontend/app/services/FormUtils.service.js | 13 ++-
.../web-console/frontend/app/services/IGFSs.js | 8 +-
.../web-console/frontend/app/services/Models.js | 17 ++-
.../frontend/app/services/exceptionHandler.js | 4 +-
39 files changed, 509 insertions(+), 174 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/form-field/showValidationError.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/form-field/showValidationError.directive.js b/modules/web-console/frontend/app/components/form-field/showValidationError.directive.js
index 32123cc..8720c56 100644
--- a/modules/web-console/frontend/app/components/form-field/showValidationError.directive.js
+++ b/modules/web-console/frontend/app/components/form-field/showValidationError.directive.js
@@ -24,10 +24,14 @@ export function directive($timeout) {
require: ['ngModel', '?^^bsCollapseTarget', '?^^igniteFormField', '?^^panelCollapsible'],
link(scope, el, attr, [ngModel, bsCollapseTarget, igniteFormField, panelCollapsible]) {
const off = scope.$on('$showValidationError', (e, target) => {
- if (target !== ngModel) return;
+ if (target !== ngModel)
+ return;
+
ngModel.$setTouched();
+
bsCollapseTarget && bsCollapseTarget.open();
panelCollapsible && panelCollapsible.open();
+
$timeout(() => {
if (el[0].scrollIntoViewIfNeeded)
el[0].scrollIntoViewIfNeeded();
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/grid-column-selector/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/grid-column-selector/controller.js b/modules/web-console/frontend/app/components/grid-column-selector/controller.js
index 1f04861..2f5554e 100644
--- a/modules/web-console/frontend/app/components/grid-column-selector/controller.js
+++ b/modules/web-console/frontend/app/components/grid-column-selector/controller.js
@@ -77,9 +77,13 @@ export default class GridColumnSelectorController {
}
findScrollToNext(columns, prevColumns) {
- if (!prevColumns) return;
+ if (!prevColumns)
+ return;
+
const diff = difference(columns, prevColumns);
- if (diff.length === 1 && columns.includes(diff[0])) return diff[0];
+
+ if (diff.length === 1 && columns.includes(diff[0]))
+ return diff[0];
}
setSelectedColumns() {
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/list-editable/components/list-editable-save-on-changes/directives.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/list-editable/components/list-editable-save-on-changes/directives.js b/modules/web-console/frontend/app/components/list-editable/components/list-editable-save-on-changes/directives.js
index 4b6e785..f408647 100644
--- a/modules/web-console/frontend/app/components/list-editable/components/list-editable-save-on-changes/directives.js
+++ b/modules/web-console/frontend/app/components/list-editable/components/list-editable-save-on-changes/directives.js
@@ -30,7 +30,9 @@ export function ngModel() {
* @param {ng.INgModelController} ngModel
*/
link(scope, el, attr, {ngModel, list}) {
- if (!list) return;
+ if (!list)
+ return;
+
ngModel.$viewChangeListeners.push(() => {
el[0].dispatchEvent(new CustomEvent(CUSTOM_EVENT_TYPE, {bubbles: true, cancelable: true}));
});
@@ -54,15 +56,21 @@ export function listEditableTransclude() {
* @param {ListEditableController} list
*/
link(scope, el, attr, {list, transclude}) {
- if (attr.listEditableTransclude !== 'itemEdit') return;
- if (!list) return;
+ if (attr.listEditableTransclude !== 'itemEdit')
+ return;
+
+ if (!list)
+ return;
+
let listener = (e) => {
e.stopPropagation();
scope.$evalAsync(() => {
if (scope.form.$valid) list.save(scope.item, transclude.$index);
});
};
+
el[0].addEventListener(CUSTOM_EVENT_TYPE, listener);
+
scope.$on('$destroy', () => {
el[0].removeEventListener(CUSTOM_EVENT_TYPE, listener);
listener = null;
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/list-editable/components/list-editable-transclude/directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/list-editable/components/list-editable-transclude/directive.js b/modules/web-console/frontend/app/components/list-editable/components/list-editable-transclude/directive.js
index 55b4724..36750ae 100644
--- a/modules/web-console/frontend/app/components/list-editable/components/list-editable-transclude/directive.js
+++ b/modules/web-console/frontend/app/components/list-editable/components/list-editable-transclude/directive.js
@@ -63,7 +63,9 @@ export class ListEditableTransclude {
[itemName]: {
get: () => {
// Scope might get destroyed
- if (!this.$scope) return;
+ if (!this.$scope)
+ return;
+
return this.$scope.item;
},
set: (value) => {
@@ -80,7 +82,9 @@ export class ListEditableTransclude {
$form: {
get: () => {
// Scope might get destroyed
- if (!this.$scope) return;
+ if (!this.$scope)
+ return;
+
return this.$scope.form;
},
// Allows to delete property later
@@ -98,7 +102,9 @@ export class ListEditableTransclude {
* @returns {number}
*/
get $index() {
- if (!this.$scope) return;
+ if (!this.$scope)
+ return;
+
return this.$scope.$index;
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/list-editable/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/list-editable/controller.js b/modules/web-console/frontend/app/components/list-editable/controller.js
index 586743e..d1b8900 100644
--- a/modules/web-console/frontend/app/components/list-editable/controller.js
+++ b/modules/web-console/frontend/app/components/list-editable/controller.js
@@ -102,10 +102,12 @@ export default class {
// ng-model-option, then it will always save. Be careful and pay extra attention to validation
// when doing so, it's an easy way to miss invalid values this way.
- // Dont close if form is invalid and allowInvalid is turned off (which is default value)
- if (!form.$valid && !this.ngModel.$options.getOption('allowInvalid')) return;
+ // Don't close if form is invalid and allowInvalid is turned off (which is default value)
+ if (!form.$valid && !this.ngModel.$options.getOption('allowInvalid'))
+ return;
delete this._cache[idx];
+
this.save(data, idx);
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/controller.js b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/controller.js
index cd8d3e4..881e543 100644
--- a/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/controller.js
+++ b/modules/web-console/frontend/app/components/page-configure-advanced/components/cluster-edit-form/controller.js
@@ -44,8 +44,6 @@ export default class ClusterEditFormController {
$onInit() {
this.available = this.IgniteVersion.available.bind(this.IgniteVersion);
- let __original_value;
-
const rebuildDropdowns = () => {
this.eventStorage = [
{value: 'Memory', label: 'Memory'},
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure-advanced/components/model-edit-form/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure-advanced/components/model-edit-form/controller.js b/modules/web-console/frontend/app/components/page-configure-advanced/components/model-edit-form/controller.js
index 60cb95f..b7d4ebe 100644
--- a/modules/web-console/frontend/app/components/page-configure-advanced/components/model-edit-form/controller.js
+++ b/modules/web-console/frontend/app/components/page-configure-advanced/components/model-edit-form/controller.js
@@ -171,22 +171,30 @@ export default class ModelEditFormController {
if ('caches' in changes)
this.cachesMenu = (changes.caches.currentValue || []).map((c) => ({label: c.name, value: c._id}));
}
+
/**
* @param {ig.config.model.DomainModel} model
*/
onQueryFieldsChange(model) {
this.$scope.backupItem = this.Models.removeInvalidFields(model);
}
+
getValuesToCompare() {
return [this.model, this.$scope.backupItem].map(this.Models.normalize);
}
+
save(download) {
if (this.$scope.ui.inputForm.$invalid)
return this.IgniteFormUtils.triggerValidation(this.$scope.ui.inputForm, this.$scope);
- if (!this.validate(this.$scope.backupItem)) return;
+
+ if (!this.validate(this.$scope.backupItem))
+ return;
+
this.onSave({$event: {model: cloneDeep(this.$scope.backupItem), download}});
}
+
reset = (forReal) => forReal ? this.$scope.backupItem = cloneDeep(this.model) : void 0;
+
confirmAndReset() {
return this.Confirm.confirm('Are you sure you want to undo all changes for current model?').then(() => true)
.then(this.reset)
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure-basic/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure-basic/controller.js b/modules/web-console/frontend/app/components/page-configure-basic/controller.js
index 255bbe5..105765a 100644
--- a/modules/web-console/frontend/app/components/page-configure-basic/controller.js
+++ b/modules/web-console/frontend/app/components/page-configure-basic/controller.js
@@ -81,8 +81,11 @@ export default class PageConfigureBasicController {
}
_uiCanExit($transition$) {
- if ($transition$.options().custom.justIDUpdate) return true;
+ if ($transition$.options().custom.justIDUpdate)
+ return true;
+
$transition$.onSuccess({}, () => this.reset());
+
return Observable.forkJoin(
this.ConfigureState.state$.pluck('edit', 'changes').take(1),
this.clusterID$.switchMap((id) => this.ConfigureState.state$.let(this.ConfigSelectors.selectClusterShortCaches(id))).take(1),
@@ -178,7 +181,9 @@ export default class PageConfigureBasicController {
}
save(download = false) {
- if (this.form.$invalid) return this.IgniteFormUtils.triggerValidation(this.form, this.$scope);
+ if (this.form.$invalid)
+ return this.IgniteFormUtils.triggerValidation(this.form, this.$scope);
+
this.ConfigureState.dispatchAction((download ? basicSaveAndDownload : basicSave)(cloneDeep(this.clonedCluster)));
}
@@ -189,7 +194,7 @@ export default class PageConfigureBasicController {
confirmAndReset() {
return this.Confirm.confirm('Are you sure you want to undo all changes for current cluster?')
- .then(() => this.reset())
- .catch(() => {});
+ .then(() => this.reset())
+ .catch(() => {});
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure-overview/components/pco-grid-column-categories/directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure-overview/components/pco-grid-column-categories/directive.js b/modules/web-console/frontend/app/components/page-configure-overview/components/pco-grid-column-categories/directive.js
index 27d00dc..ff03e7f 100644
--- a/modules/web-console/frontend/app/components/page-configure-overview/components/pco-grid-column-categories/directive.js
+++ b/modules/web-console/frontend/app/components/page-configure-overview/components/pco-grid-column-categories/directive.js
@@ -38,7 +38,9 @@ export default function directive(uiGridConstants) {
require: '^uiGrid',
link: {
pre(scope, el, attr, grid) {
- if (!grid.grid.options.enableColumnCategories) return;
+ if (!grid.grid.options.enableColumnCategories)
+ return;
+
grid.grid.api.core.registerColumnsProcessor((cp) => {
const oldCategories = grid.grid.options.categories;
const newCategories = uniqBy(cp.filter(notSelectionColumn).map(({colDef: cd}) => {
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure/components/formUICanExitGuard.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/components/formUICanExitGuard.js b/modules/web-console/frontend/app/components/page-configure/components/formUICanExitGuard.js
index 0225c5f..c962161 100644
--- a/modules/web-console/frontend/app/components/page-configure/components/formUICanExitGuard.js
+++ b/modules/web-console/frontend/app/components/page-configure/components/formUICanExitGuard.js
@@ -19,6 +19,7 @@ import {default as ConfigChangesGuard} from '../services/ConfigChangesGuard';
class FormUICanExitGuardController {
static $inject = ['$element', ConfigChangesGuard.name];
+
/**
* @param {JQLite} $element
* @param {ConfigChangesGuard} ConfigChangesGuard
@@ -27,23 +28,30 @@ class FormUICanExitGuardController {
this.$element = $element;
this.ConfigChangesGuard = ConfigChangesGuard;
}
+
$onDestroy() {
this.$element = null;
}
+
$onInit() {
const data = this.$element.data();
const controller = Object.keys(data)
.map((key) => data[key])
.find(this._itQuacks);
- if (!controller) return;
+ if (!controller)
+ return;
controller.uiCanExit = ($transition$) => {
- if ($transition$.options().custom.justIDUpdate) return true;
+ if ($transition$.options().custom.justIDUpdate)
+ return true;
+
$transition$.onSuccess({}, controller.reset);
+
return this.ConfigChangesGuard.guard(...controller.getValuesToCompare());
};
}
+
_itQuacks(controller) {
return controller.reset instanceof Function &&
controller.getValuesToCompare instanceof Function &&
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure/components/modal-import-models/component.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/components/modal-import-models/component.js b/modules/web-console/frontend/app/components/page-configure/components/modal-import-models/component.js
index 813c998..1d4ba7c 100644
--- a/modules/web-console/frontend/app/components/page-configure/components/modal-import-models/component.js
+++ b/modules/web-console/frontend/app/components/page-configure/components/modal-import-models/component.js
@@ -123,11 +123,12 @@ export class ModalImportModels {
this.ActivitiesData = ActivitiesData;
Object.assign(this, {Confirm, Focus, Messages, Loading, FormUtils, LegacyUtils});
}
+
loadData() {
return Observable.of(this.clusterID)
- .switchMap((id = 'new') => {
- return this.ConfigureState.state$.let(this.ConfigSelectors.selectClusterToEdit(id, defaultNames.importedCluster));
- })
+ .switchMap((id = 'new') => {
+ return this.ConfigureState.state$.let(this.ConfigSelectors.selectClusterToEdit(id, defaultNames.importedCluster));
+ })
.switchMap((cluster) => {
return (!(cluster.caches || []).length && !(cluster.models || []).length)
? Observable.of({
@@ -154,7 +155,9 @@ export class ModalImportModels {
.take(1);
}
saveBatch(batch) {
- if (!batch.length) return;
+ if (!batch.length)
+ return;
+
this.Loading.start('importDomainFromDb');
this.ConfigureState.dispatchAction({
type: 'ADVANCED_SAVE_COMPLETE_CONFIGURATION',
@@ -212,8 +215,12 @@ export class ModalImportModels {
return this.visibleTables = rows.map((r) => r.entity);
}
onCacheSelect(cacheID) {
- if (cacheID < 0) return;
- if (this.loadedCaches[cacheID]) return;
+ if (cacheID < 0)
+ return;
+
+ if (this.loadedCaches[cacheID])
+ return;
+
return this.onCacheSelectSubcription = Observable.merge(
Observable.timer(0, 1).take(1)
.do(() => this.ConfigureState.dispatchAction({type: 'LOAD_CACHE', cacheID})),
@@ -290,10 +297,10 @@ export class ModalImportModels {
}).subscribe();
// New
-
this.loadedCaches = {
...CACHE_TEMPLATES.reduce((a, c) => ({...a, [c.value]: c.cache}), {})
};
+
this.actions = [
{value: 'connect', label: this.$root.IgniteDemoMode ? 'Description' : 'Connection'},
{value: 'schemas', label: 'Schemas'},
@@ -302,7 +309,6 @@ export class ModalImportModels {
];
// Legacy
-
$scope.ui.invalidKeyFieldsTooltip = 'Found key types without configured key fields<br/>' +
'It may be a result of import tables from database without primary keys<br/>' +
'Key field for such key types should be configured manually';
@@ -591,7 +597,6 @@ export class ModalImportModels {
if ($scope._curDbTable.actionWatch) {
$scope._curDbTable.actionWatch();
-
$scope._curDbTable.actionWatch = null;
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure/components/modal-import-models/tables-action-cell/component.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/components/modal-import-models/tables-action-cell/component.js b/modules/web-console/frontend/app/components/page-configure/components/modal-import-models/tables-action-cell/component.js
index 072a497..7fde5ba 100644
--- a/modules/web-console/frontend/app/components/page-configure/components/modal-import-models/tables-action-cell/component.js
+++ b/modules/web-console/frontend/app/components/page-configure/components/modal-import-models/tables-action-cell/component.js
@@ -22,23 +22,33 @@ const IMPORT_DM_NEW_CACHE = 1;
export class TablesActionCell {
static $inject = ['$element'];
+
constructor($element) {
Object.assign(this, {$element});
}
+
onClick(e) {
e.stopPropagation();
}
+
$postLink() {
this.$element.on('click', this.onClick);
}
+
$onDestroy() {
this.$element.off('click', this.onClick);
this.$element = null;
}
+
tableActionView(table) {
- if (!this.caches) return;
+ if (!this.caches)
+ return;
+
const cache = this.caches.find((c) => c.value === table.cacheOrTemplate);
- if (!cache) return;
+
+ if (!cache)
+ return;
+
const cacheName = cache.label;
if (table.action === IMPORT_DM_NEW_CACHE)
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure/components/modal-preview-project/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/components/modal-preview-project/controller.js b/modules/web-console/frontend/app/components/page-configure/components/modal-preview-project/controller.js
index e67ed25..1480fc1 100644
--- a/modules/web-console/frontend/app/components/page-configure/components/modal-preview-project/controller.js
+++ b/modules/web-console/frontend/app/components/page-configure/components/modal-preview-project/controller.js
@@ -47,9 +47,15 @@ export default class ModalPreviewProjectController {
showPreview(node) {
this.fileText = '';
- if (!node) return;
+
+ if (!node)
+ return;
+
this.fileExt = node.file.name.split('.').reverse()[0].toLowerCase();
- if (node.file.dir) return;
+
+ if (node.file.dir)
+ return;
+
node.file.async('string').then((text) => {
this.fileText = text;
this.$scope.$applyAsync();
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure/components/pc-form-field-size/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/components/pc-form-field-size/controller.js b/modules/web-console/frontend/app/components/page-configure/components/pc-form-field-size/controller.js
index 3253fe4..0d751e8 100644
--- a/modules/web-console/frontend/app/components/page-configure/components/pc-form-field-size/controller.js
+++ b/modules/web-console/frontend/app/components/page-configure/components/pc-form-field-size/controller.js
@@ -115,12 +115,16 @@ export default class PCFormFieldSizeController {
}
_defaultLabel() {
- if (!this.sizesMenu) return;
+ if (!this.sizesMenu)
+ return;
+
return this.sizesMenu[1].label;
}
chooseSizeScale(label = this._defaultLabel()) {
- if (!label) return;
+ if (!label)
+ return;
+
return this.sizesMenu.find((option) => option.label.toLowerCase() === label.toLowerCase());
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure/components/pc-items-table/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/components/pc-items-table/controller.js b/modules/web-console/frontend/app/components/page-configure/components/pc-items-table/controller.js
index f4d1f47..c97e50f 100644
--- a/modules/web-console/frontend/app/components/page-configure/components/pc-items-table/controller.js
+++ b/modules/web-console/frontend/app/components/page-configure/components/pc-items-table/controller.js
@@ -44,23 +44,28 @@ export default class ItemsTableController {
},
onRegisterApi: (api) => {
this.gridAPI = api;
+
api.selection.on.rowSelectionChanged(this.$scope, (row, e) => {
this.onRowsSelectionChange([row], e);
});
+
api.selection.on.rowSelectionChangedBatch(this.$scope, (rows, e) => {
this.onRowsSelectionChange(rows, e);
});
+
api.core.on.rowsVisibleChanged(this.$scope, () => {
const visibleRows = api.core.getVisibleRows();
if (this.onVisibleRowsChange) this.onVisibleRowsChange({$event: visibleRows});
this.adjustHeight(api, visibleRows.length);
this.showFilterNotification = this.grid.data.length && visibleRows.length === 0;
});
+
if (this.onFilterChanged) {
api.core.on.filterChanged(this.$scope, () => {
this.onFilterChanged();
});
}
+
this.$timeout(() => {
if (this.selectedRowId) this.applyIncomingSelection(this.selectedRowId);
});
@@ -73,10 +78,16 @@ export default class ItemsTableController {
oneWaySelection = false;
onRowsSelectionChange = debounce((rows, e = {}) => {
- if (e.ignore) return;
+ if (e.ignore)
+ return;
+
const selected = this.gridAPI.selection.legacyGetSelectedRows();
- if (this.oneWaySelection) rows.forEach((r) => r.isSelected = false);
- if (this.onSelectionChange) this.onSelectionChange({$event: selected});
+
+ if (this.oneWaySelection)
+ rows.forEach((r) => r.isSelected = false);
+
+ if (this.onSelectionChange)
+ this.onSelectionChange({$event: selected});
});
makeActionsMenu(incomingActionsMenu = []) {
@@ -85,17 +96,22 @@ export default class ItemsTableController {
$onChanges(changes) {
const hasChanged = (binding) => binding in changes && changes[binding].currentValue !== changes[binding].previousValue;
+
if (hasChanged('items') && this.grid) {
this.grid.data = changes.items.currentValue;
this.gridAPI.grid.modifyRows(this.grid.data);
this.adjustHeight(this.gridAPI, this.grid.data.length);
+
// Without property existence check non-set selectedRowId binding might cause
// unwanted behavior, like unchecking rows during any items change, even if
// nothing really changed.
- if ('selectedRowId' in this) this.applyIncomingSelection(this.selectedRowId);
+ if ('selectedRowId' in this)
+ this.applyIncomingSelection(this.selectedRowId);
}
+
if (hasChanged('selectedRowId') && this.grid && this.grid.data)
this.applyIncomingSelection(changes.selectedRowId.currentValue);
+
if ('incomingActionsMenu' in changes)
this.actionsMenu = this.makeActionsMenu(changes.incomingActionsMenu.currentValue);
}
@@ -103,9 +119,11 @@ export default class ItemsTableController {
applyIncomingSelection(selected = []) {
this.gridAPI.selection.clearSelectedRows({ignore: true});
const rows = this.grid.data.filter((r) => selected.includes(r[this.rowIdentityKey]));
+
rows.forEach((r) => {
this.gridAPI.selection.selectRow(r, {ignore: true});
});
+
if (rows.length === 1) {
this.$timeout(() => {
this.gridAPI.grid.scrollToIfNecessary(this.gridAPI.grid.getRow(rows[0]), null);
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure/components/pc-ui-grid-filters/directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/components/pc-ui-grid-filters/directive.js b/modules/web-console/frontend/app/components/page-configure/components/pc-ui-grid-filters/directive.js
index ccbdb8d..3d4617c 100644
--- a/modules/web-console/frontend/app/components/page-configure/components/pc-ui-grid-filters/directive.js
+++ b/modules/web-console/frontend/app/components/page-configure/components/pc-ui-grid-filters/directive.js
@@ -23,7 +23,9 @@ export default function pcUiGridFilters(uiGridConstants) {
require: 'uiGrid',
link: {
pre(scope, el, attr, grid) {
- if (!grid.grid.options.enableFiltering) return;
+ if (!grid.grid.options.enableFiltering)
+ return;
+
grid.grid.options.columnDefs.filter((cd) => cd.multiselectFilterOptions).forEach((cd) => {
cd.headerCellTemplate = template;
cd.filter = {
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure/components/pc-ui-grid-filters/index.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/components/pc-ui-grid-filters/index.js b/modules/web-console/frontend/app/components/page-configure/components/pc-ui-grid-filters/index.js
index 4ec96e2..a34a78a 100644
--- a/modules/web-console/frontend/app/components/page-configure/components/pc-ui-grid-filters/index.js
+++ b/modules/web-console/frontend/app/components/page-configure/components/pc-ui-grid-filters/index.js
@@ -27,9 +27,12 @@ export default angular
instance.$referenceElement = el;
instance.destroy = flow(instance.destroy, () => instance.$referenceElement = null);
instance.$applyPlacement = flow(instance.$applyPlacement, () => {
- if (!instance.$element) return;
+ if (!instance.$element)
+ return;
+
const refWidth = instance.$referenceElement[0].getBoundingClientRect().width;
const elWidth = instance.$element[0].getBoundingClientRect().width;
+
if (refWidth > elWidth) {
instance.$element.css({
width: refWidth,
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure/components/pcIsInCollection.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/components/pcIsInCollection.js b/modules/web-console/frontend/app/components/page-configure/components/pcIsInCollection.js
index d2a9ae8..50ea4a4 100644
--- a/modules/web-console/frontend/app/components/page-configure/components/pcIsInCollection.js
+++ b/modules/web-console/frontend/app/components/page-configure/components/pcIsInCollection.js
@@ -18,7 +18,9 @@
class Controller {
$onInit() {
this.ngModel.$validators.isInCollection = (item) => {
- if (!item || !this.items) return true;
+ if (!item || !this.items)
+ return true;
+
return this.items.includes(item);
};
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure/components/pcValidation.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/components/pcValidation.js b/modules/web-console/frontend/app/components/page-configure/components/pcValidation.js
index e4c7314..1702c35 100644
--- a/modules/web-console/frontend/app/components/page-configure/components/pcValidation.js
+++ b/modules/web-console/frontend/app/components/page-configure/components/pcValidation.js
@@ -56,7 +56,9 @@ export default angular.module('ignite-console.page-configure.validation', [])
$onInit() {
this.ngModel.$validators.notInCollection = (item) => {
- if (!this.items) return true;
+ if (!this.items)
+ return true;
+
return !this.items.includes(item);
};
}
@@ -87,7 +89,9 @@ export default angular.module('ignite-console.page-configure.validation', [])
$onInit() {
this.ngModel.$validators.inCollection = (item) => {
- if (!this.items) return false;
+ if (!this.items)
+ return false;
+
const items = this.pluck ? this.items.map((i) => i[this.pluck]) : this.items;
return Array.isArray(item)
? item.every((i) => items.includes(i))
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure/index.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/index.js b/modules/web-console/frontend/app/components/page-configure/index.js
index 0b254a0..9beea7a 100644
--- a/modules/web-console/frontend/app/components/page-configure/index.js
+++ b/modules/web-console/frontend/app/components/page-configure/index.js
@@ -61,6 +61,7 @@ Observable.prototype.debug = function(l) {
import {
editReducer2,
+ shortObjectsReducer,
reducer,
editReducer,
loadingReducer,
@@ -124,16 +125,18 @@ export default angular
});
ConfigureState.actions$
- .filter((e) => e.type !== 'DISPATCH')
- .withLatestFrom(ConfigureState.state$.skip(1))
- .subscribe(([action, state]) => devTools.send(action, state));
+ .filter((e) => e.type !== 'DISPATCH')
+ .withLatestFrom(ConfigureState.state$.skip(1))
+ .subscribe(([action, state]) => devTools.send(action, state));
ConfigureState.addReducer(reduxDevtoolsReducer);
}
+
ConfigureState.addReducer(refsReducer({
models: {at: 'domains', store: 'caches'},
caches: {at: 'caches', store: 'models'}
}));
+
ConfigureState.addReducer((state, action) => Object.assign({}, state, {
clusterConfiguration: editReducer(state.clusterConfiguration, action),
configurationLoading: loadingReducer(state.configurationLoading, action),
@@ -148,14 +151,19 @@ export default angular
shortIgfss: mapCacheReducerFactory(shortIGFSsActionTypes)(state.shortIgfss, action),
edit: editReducer2(state.edit, action)
}));
+
+ ConfigureState.addReducer(shortObjectsReducer);
+
ConfigureState.addReducer((state, action) => {
switch (action.type) {
case 'APPLY_ACTIONS_UNDO':
return action.state;
+
default:
return state;
}
});
+
const la = ConfigureState.actions$.scan((acc, action) => [...acc, action], []);
ConfigureState.actions$
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure/reducer.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/reducer.js b/modules/web-console/frontend/app/components/page-configure/reducer.js
index f959b0a..0f24bfa 100644
--- a/modules/web-console/frontend/app/components/page-configure/reducer.js
+++ b/modules/web-console/frontend/app/components/page-configure/reducer.js
@@ -16,6 +16,7 @@
*/
import difference from 'lodash/difference';
+import capitalize from 'lodash/capitalize';
export const LOAD_LIST = Symbol('LOAD_LIST');
export const ADD_CLUSTER = Symbol('ADD_CLUSTER');
@@ -33,6 +34,7 @@ import {
} from './store/actionTypes';
const defaults = {clusters: new Map(), caches: new Map(), spaces: new Map()};
+
const mapByID = (items) => {
return Array.isArray(items) ? new Map(items.map((item) => [item._id, item])) : new Map(items);
};
@@ -48,21 +50,25 @@ export const reducer = (state = defaults, action) => {
plugins: mapByID(action.list.plugins)
};
}
+
case ADD_CLUSTER: {
return Object.assign({}, state, {
clusters: new Map([...state.clusters.entries(), [action.cluster._id, action.cluster]])
});
}
+
case ADD_CLUSTERS: {
return Object.assign({}, state, {
clusters: new Map([...state.clusters.entries(), ...action.clusters.map((c) => [c._id, c])])
});
}
+
case REMOVE_CLUSTERS: {
return Object.assign({}, state, {
clusters: new Map([...state.clusters.entries()].filter(([id, value]) => !action.clusterIDs.includes(id)))
});
}
+
case UPDATE_CLUSTER: {
const id = action._id || action.cluster._id;
return Object.assign({}, state, {
@@ -74,31 +80,38 @@ export const reducer = (state = defaults, action) => {
}))
});
}
+
case UPSERT_CLUSTERS: {
return action.clusters.reduce((state, cluster) => reducer(state, {
type: state.clusters.has(cluster._id) ? UPDATE_CLUSTER : ADD_CLUSTER,
cluster
}), state);
}
+
case ADD_CACHE: {
return Object.assign({}, state, {
caches: new Map([...state.caches.entries(), [action.cache._id, action.cache]])
});
}
+
case UPDATE_CACHE: {
const id = action.cache._id;
+
return Object.assign({}, state, {
caches: new Map(state.caches).set(id, Object.assign({}, state.caches.get(id), action.cache))
});
}
+
case UPSERT_CACHES: {
return action.caches.reduce((state, cache) => reducer(state, {
type: state.caches.has(cache._id) ? UPDATE_CACHE : ADD_CACHE,
cache
}), state);
}
+
case REMOVE_CACHE:
return state;
+
default:
return state;
}
@@ -119,34 +132,40 @@ export const editReducer = (state = {originalCluster: null}, action) => {
...state,
originalCluster: action.cluster
};
+
case RECEIVE_CACHE_EDIT: {
return {
...state,
originalCache: action.cache
};
}
+
case RECEIVE_IGFSS_EDIT:
return {
...state,
originalIGFSs: action.igfss
};
+
case RECEIVE_IGFS_EDIT: {
return {
...state,
originalIGFS: action.igfs
};
}
+
case RECEIVE_MODELS_EDIT:
return {
...state,
originalModels: action.models
};
+
case RECEIVE_MODEL_EDIT: {
return {
...state,
originalModel: action.model
};
}
+
default:
return state;
}
@@ -160,8 +179,10 @@ export const loadingReducer = (state = loadingDefaults, action) => {
switch (action.type) {
case SHOW_CONFIG_LOADING:
return {...state, isLoading: true, loadingText: action.loadingText};
+
case HIDE_CONFIG_LOADING:
return {...state, isLoading: false};
+
default:
return state;
}
@@ -171,12 +192,16 @@ export const setStoreReducerFactory = (actionTypes) => (state = new Set(), actio
switch (action.type) {
case actionTypes.SET:
return new Set(action.items.map((i) => i._id));
+
case actionTypes.RESET:
return new Set();
+
case actionTypes.UPSERT:
return action.items.reduce((acc, item) => {acc.add(item._id); return acc;}, new Set(state));
+
case actionTypes.REMOVE:
return action.items.reduce((acc, item) => {acc.delete(item); return acc;}, new Set(state));
+
default:
return state;
}
@@ -186,14 +211,22 @@ export const mapStoreReducerFactory = (actionTypes) => (state = new Map(), actio
switch (action.type) {
case actionTypes.SET:
return new Map(action.items.map((i) => [i._id, i]));
+
case actionTypes.RESET:
return new Map();
+
case actionTypes.UPSERT:
- if (!action.items.length) return state;
+ if (!action.items.length)
+ return state;
+
return action.items.reduce((acc, item) => {acc.set(item._id, item); return acc;}, new Map(state));
+
case actionTypes.REMOVE:
- if (!action.ids.length) return state;
+ if (!action.ids.length)
+ return state;
+
return action.ids.reduce((acc, id) => {acc.delete(id); return acc;}, new Map(state));
+
default:
return state;
}
@@ -201,6 +234,7 @@ export const mapStoreReducerFactory = (actionTypes) => (state = new Map(), actio
export const mapCacheReducerFactory = (actionTypes) => {
const mapStoreReducer = mapStoreReducerFactory(actionTypes);
+
return (state = {value: mapStoreReducer(), pristine: true}, action) => {
switch (action.type) {
case actionTypes.SET:
@@ -210,11 +244,13 @@ export const mapCacheReducerFactory = (actionTypes) => {
value: mapStoreReducer(state.value, action),
pristine: false
};
+
case actionTypes.RESET:
return {
value: mapStoreReducer(state.value, action),
pristine: true
};
+
default:
return state;
}
@@ -248,26 +284,31 @@ export const shortIGFSsActionTypes = mapStoreActionTypesFactory('SHORT_IGFSS');
export const itemsEditReducerFactory = (actionTypes) => {
const setStoreReducer = setStoreReducerFactory(actionTypes);
const mapStoreReducer = mapStoreReducerFactory(actionTypes);
+
return (state = {ids: setStoreReducer(), changedItems: mapStoreReducer()}, action) => {
switch (action.type) {
case actionTypes.SET:
return action.state;
+
case actionTypes.LOAD:
return {
...state,
ids: setStoreReducer(state.ids, {...action, type: actionTypes.UPSERT})
};
+
case actionTypes.RESET:
case actionTypes.UPSERT:
return {
ids: setStoreReducer(state.ids, action),
changedItems: mapStoreReducer(state.changedItems, action)
};
+
case actionTypes.REMOVE:
return {
ids: setStoreReducer(state.ids, {type: action.type, items: action.ids}),
changedItems: mapStoreReducer(state.changedItems, action)
};
+
default:
return state;
}
@@ -278,6 +319,7 @@ export const editReducer2 = (state = editReducer2.getDefaults(), action) => {
switch (action.type) {
case 'SET_EDIT':
return action.state;
+
case 'EDIT_CLUSTER': {
return {
...state,
@@ -293,6 +335,7 @@ export const editReducer2 = (state = editReducer2.getDefaults(), action) => {
}
};
}
+
case 'RESET_EDIT_CHANGES': {
return {
...state,
@@ -308,6 +351,7 @@ export const editReducer2 = (state = editReducer2.getDefaults(), action) => {
}
};
}
+
case 'UPSERT_CLUSTER': {
return {
...state,
@@ -317,6 +361,7 @@ export const editReducer2 = (state = editReducer2.getDefaults(), action) => {
}
};
}
+
case 'UPSERT_CLUSTER_ITEM': {
const {itemType, item} = action;
return {
@@ -330,8 +375,10 @@ export const editReducer2 = (state = editReducer2.getDefaults(), action) => {
}
};
}
+
case REMOVE_CLUSTER_ITEMS_CONFIRMED: {
const {itemType, itemIDs} = action;
+
return {
...state,
changes: {
@@ -343,9 +390,11 @@ export const editReducer2 = (state = editReducer2.getDefaults(), action) => {
}
};
}
+
default: return state;
}
};
+
editReducer2.getDefaults = () => ({
changes: ['caches', 'models', 'igfss'].reduce((a, t) => ({...a, [t]: {ids: [], changedItems: []}}), {cluster: null})
});
@@ -356,15 +405,19 @@ export const refsReducer = (refs) => (state, action) => {
const newCluster = action.changedItems.cluster;
const oldCluster = state.clusters.get(newCluster._id) || {};
const val = Object.keys(refs).reduce((state, ref) => {
- if (!state || !state[refs[ref].store].size) return state;
+ if (!state || !state[refs[ref].store].size)
+ return state;
const addedSources = new Set(difference(newCluster[ref], oldCluster[ref] || []));
const removedSources = new Set(difference(oldCluster[ref] || [], newCluster[ref]));
const changedSources = new Map(action.changedItems[ref].map((m) => [m._id, m]));
const targets = new Map();
+
const maybeTarget = (id) => {
- if (!targets.has(id)) targets.set(id, {[refs[ref].at]: {add: new Set(), remove: new Set()}});
+ if (!targets.has(id))
+ targets.set(id, {[refs[ref].at]: {add: new Set(), remove: new Set()}});
+
return targets.get(id);
};
@@ -373,11 +426,13 @@ export const refsReducer = (refs) => (state, action) => {
.filter((sourceID) => removedSources.has(sourceID))
.forEach((sourceID) => maybeTarget(target._id)[refs[ref].at].remove.add(sourceID));
});
+
[...addedSources.values()].forEach((sourceID) => {
(changedSources.get(sourceID)[refs[ref].store] || []).forEach((targetID) => {
maybeTarget(targetID)[refs[ref].at].add.add(sourceID);
});
});
+
action.changedItems[ref].filter((s) => !addedSources.has(s._id)).forEach((source) => {
const newSource = source;
const oldSource = state[ref].get(source._id);
@@ -412,8 +467,35 @@ export const refsReducer = (refs) => (state, action) => {
}
: state;
}, state);
+
return val;
}
+
+ default:
+ return state;
+ }
+};
+
+export const shortObjectsReducer = (state, action) => {
+ switch (action.type) {
+ case REMOVE_CLUSTER_ITEMS_CONFIRMED: {
+ const {itemType, itemIDs} = action;
+
+ const target = 'short' + capitalize(itemType);
+
+ const oldItems = state[target];
+
+ const newItems = {
+ value: itemIDs.reduce((acc, id) => {acc.delete(id); return acc;}, oldItems.value),
+ pristine: oldItems.pristine
+ };
+
+ return {
+ ...state,
+ [target]: newItems
+ };
+ }
+
default:
return state;
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure/services/ConfigureState.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/services/ConfigureState.js b/modules/web-console/frontend/app/components/page-configure/services/ConfigureState.js
index ea7f527..27e227d 100644
--- a/modules/web-console/frontend/app/components/page-configure/services/ConfigureState.js
+++ b/modules/web-console/frontend/app/components/page-configure/services/ConfigureState.js
@@ -32,15 +32,19 @@ export default class ConfigureState {
return this._combinedReducer(state, action);
} catch (e) {
console.error(e);
+
return state;
}
};
+
this.actions$.scan(reducer, {}).do((v) => this.state$.next(v)).subscribe();
}
addReducer(combineFn) {
const old = this._combinedReducer;
+
this._combinedReducer = (state, action) => combineFn(old(state, action), action);
+
return this;
}
@@ -49,6 +53,7 @@ export default class ConfigureState {
return action((a) => this.actions$.next(a), () => this.state$.getValue());
this.actions$.next(action);
+
return action;
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure/states.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/states.js b/modules/web-console/frontend/app/components/page-configure/states.js
index e76b18e..ed43f48 100644
--- a/modules/web-console/frontend/app/components/page-configure/states.js
+++ b/modules/web-console/frontend/app/components/page-configure/states.js
@@ -25,13 +25,15 @@ import {Observable} from 'rxjs/Observable';
const idRegex = `new|[a-z0-9]+`;
const shortCachesResolve = ['ConfigSelectors', 'ConfigureState', 'ConfigEffects', '$transition$', (ConfigSelectors, ConfigureState, {etp}, $transition$) => {
- if ($transition$.params().clusterID === 'new') return Promise.resolve();
+ if ($transition$.params().clusterID === 'new')
+ return Promise.resolve();
+
return Observable.fromPromise($transition$.injector().getAsync('_cluster'))
- .switchMap(() => ConfigureState.state$.let(ConfigSelectors.selectCluster($transition$.params().clusterID)).take(1))
- .switchMap((cluster) => {
- return etp('LOAD_SHORT_CACHES', {ids: cluster.caches, clusterID: cluster._id});
- })
- .toPromise();
+ .switchMap(() => ConfigureState.state$.let(ConfigSelectors.selectCluster($transition$.params().clusterID)).take(1))
+ .switchMap((cluster) => {
+ return etp('LOAD_SHORT_CACHES', {ids: cluster.caches, clusterID: cluster._id});
+ })
+ .toPromise();
}];
function registerStates($stateProvider) {
@@ -134,17 +136,19 @@ function registerStates($stateProvider) {
component: pageConfigureAdvancedCachesComponent.name,
resolve: {
_shortCachesAndModels: ['ConfigSelectors', 'ConfigureState', 'ConfigEffects', '$transition$', (ConfigSelectors, ConfigureState, {etp}, $transition$) => {
- if ($transition$.params().clusterID === 'new') return Promise.resolve();
+ if ($transition$.params().clusterID === 'new')
+ return Promise.resolve();
+
return Observable.fromPromise($transition$.injector().getAsync('_cluster'))
- .switchMap(() => ConfigureState.state$.let(ConfigSelectors.selectCluster($transition$.params().clusterID)).take(1))
- .map((cluster) => {
- return Promise.all([
- etp('LOAD_SHORT_CACHES', {ids: cluster.caches, clusterID: cluster._id}),
- etp('LOAD_SHORT_MODELS', {ids: cluster.models, clusterID: cluster._id}),
- etp('LOAD_SHORT_IGFSS', {ids: cluster.igfss, clusterID: cluster._id})
- ]);
- })
- .toPromise();
+ .switchMap(() => ConfigureState.state$.let(ConfigSelectors.selectCluster($transition$.params().clusterID)).take(1))
+ .map((cluster) => {
+ return Promise.all([
+ etp('LOAD_SHORT_CACHES', {ids: cluster.caches, clusterID: cluster._id}),
+ etp('LOAD_SHORT_MODELS', {ids: cluster.models, clusterID: cluster._id}),
+ etp('LOAD_SHORT_IGFSS', {ids: cluster.igfss, clusterID: cluster._id})
+ ]);
+ })
+ .toPromise();
}]
},
resolvePolicy: {
@@ -160,7 +164,9 @@ function registerStates($stateProvider) {
resolve: {
_cache: ['ConfigEffects', '$transition$', ({etp}, $transition$) => {
const {clusterID, cacheID} = $transition$.params();
- if (cacheID === 'new') return Promise.resolve();
+ if (cacheID === 'new')
+ return Promise.resolve();
+
return etp('LOAD_CACHE', {cacheID});
}]
},
@@ -180,16 +186,18 @@ function registerStates($stateProvider) {
permission: 'configuration',
resolve: {
_shortCachesAndModels: ['ConfigSelectors', 'ConfigureState', 'ConfigEffects', '$transition$', (ConfigSelectors, ConfigureState, {etp}, $transition$) => {
- if ($transition$.params().clusterID === 'new') return Promise.resolve();
+ if ($transition$.params().clusterID === 'new')
+ return Promise.resolve();
+
return Observable.fromPromise($transition$.injector().getAsync('_cluster'))
- .switchMap(() => ConfigureState.state$.let(ConfigSelectors.selectCluster($transition$.params().clusterID)).take(1))
- .map((cluster) => {
- return Promise.all([
- etp('LOAD_SHORT_CACHES', {ids: cluster.caches, clusterID: cluster._id}),
- etp('LOAD_SHORT_MODELS', {ids: cluster.models, clusterID: cluster._id})
- ]);
- })
- .toPromise();
+ .switchMap(() => ConfigureState.state$.let(ConfigSelectors.selectCluster($transition$.params().clusterID)).take(1))
+ .map((cluster) => {
+ return Promise.all([
+ etp('LOAD_SHORT_CACHES', {ids: cluster.caches, clusterID: cluster._id}),
+ etp('LOAD_SHORT_MODELS', {ids: cluster.models, clusterID: cluster._id})
+ ]);
+ })
+ .toPromise();
}]
},
resolvePolicy: {
@@ -204,7 +212,10 @@ function registerStates($stateProvider) {
resolve: {
_cache: ['ConfigEffects', '$transition$', ({etp}, $transition$) => {
const {clusterID, modelID} = $transition$.params();
- if (modelID === 'new') return Promise.resolve();
+
+ if (modelID === 'new')
+ return Promise.resolve();
+
return etp('LOAD_MODEL', {modelID});
}]
},
@@ -222,15 +233,17 @@ function registerStates($stateProvider) {
permission: 'configuration',
resolve: {
_shortIGFSs: ['ConfigSelectors', 'ConfigureState', 'ConfigEffects', '$transition$', (ConfigSelectors, ConfigureState, {etp}, $transition$) => {
- if ($transition$.params().clusterID === 'new') return Promise.resolve();
+ if ($transition$.params().clusterID === 'new')
+ return Promise.resolve();
+
return Observable.fromPromise($transition$.injector().getAsync('_cluster'))
- .switchMap(() => ConfigureState.state$.let(ConfigSelectors.selectCluster($transition$.params().clusterID)).take(1))
- .map((cluster) => {
- return Promise.all([
- etp('LOAD_SHORT_IGFSS', {ids: cluster.igfss, clusterID: cluster._id})
- ]);
- })
- .toPromise();
+ .switchMap(() => ConfigureState.state$.let(ConfigSelectors.selectCluster($transition$.params().clusterID)).take(1))
+ .map((cluster) => {
+ return Promise.all([
+ etp('LOAD_SHORT_IGFSS', {ids: cluster.igfss, clusterID: cluster._id})
+ ]);
+ })
+ .toPromise();
}]
},
resolvePolicy: {
@@ -246,7 +259,10 @@ function registerStates($stateProvider) {
resolve: {
_igfs: ['ConfigEffects', '$transition$', ({etp}, $transition$) => {
const {clusterID, igfsID} = $transition$.params();
- if (igfsID === 'new') return Promise.resolve();
+
+ if (igfsID === 'new')
+ return Promise.resolve();
+
return etp('LOAD_IGFS', {igfsID});
}]
},
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure/store/effects.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/store/effects.js b/modules/web-console/frontend/app/components/page-configure/store/effects.js
index 42c4023..072701a 100644
--- a/modules/web-console/frontend/app/components/page-configure/store/effects.js
+++ b/modules/web-console/frontend/app/components/page-configure/store/effects.js
@@ -26,41 +26,39 @@ import {fromPromise} from 'rxjs/observable/fromPromise';
import uniq from 'lodash/uniq';
import {
- clustersActionTypes,
cachesActionTypes,
- shortClustersActionTypes,
+ clustersActionTypes,
+ igfssActionTypes,
+ modelsActionTypes,
shortCachesActionTypes,
- shortModelsActionTypes,
+ shortClustersActionTypes,
shortIGFSsActionTypes,
- modelsActionTypes,
- igfssActionTypes
+ shortModelsActionTypes
} from '../reducer';
import {
- REMOVE_CLUSTER_ITEMS,
- REMOVE_CLUSTER_ITEMS_CONFIRMED,
- CONFIRM_CLUSTERS_REMOVAL,
- CONFIRM_CLUSTERS_REMOVAL_OK,
- COMPLETE_CONFIGURATION,
- ADVANCED_SAVE_COMPLETE_CONFIGURATION,
- ADVANCED_SAVE_CLUSTER,
ADVANCED_SAVE_CACHE,
+ ADVANCED_SAVE_CLUSTER,
+ ADVANCED_SAVE_COMPLETE_CONFIGURATION,
ADVANCED_SAVE_IGFS,
ADVANCED_SAVE_MODEL,
BASIC_SAVE,
BASIC_SAVE_AND_DOWNLOAD,
- BASIC_SAVE_OK
+ BASIC_SAVE_OK,
+ COMPLETE_CONFIGURATION,
+ CONFIRM_CLUSTERS_REMOVAL,
+ CONFIRM_CLUSTERS_REMOVAL_OK,
+ REMOVE_CLUSTER_ITEMS,
+ REMOVE_CLUSTER_ITEMS_CONFIRMED
} from './actionTypes';
import {
- removeClusterItemsConfirmed,
advancedSaveCompleteConfiguration,
- confirmClustersRemoval,
- confirmClustersRemovalOK,
- completeConfiguration,
- basicSave,
+ basicSaveErr,
basicSaveOK,
- basicSaveErr
+ completeConfiguration,
+ confirmClustersRemovalOK,
+ removeClusterItemsConfirmed
} from './actionCreators';
import ConfigureState from 'app/components/page-configure/services/ConfigureState';
@@ -267,12 +265,14 @@ export default class ConfigEffects {
.exhaustMap((a) => {
return this.ConfigureState.state$.let(this.ConfigSelectors.selectCache(a.cacheID)).take(1)
.switchMap((cache) => {
- if (cache) return of({type: `${a.type}_OK`, cache});
+ if (cache)
+ return of({type: `${a.type}_OK`, cache});
+
return fromPromise(this.Caches.getCache(a.cacheID))
- .switchMap(({data}) => of(
- {type: 'CACHE', cache: data},
- {type: `${a.type}_OK`, cache: data}
- ));
+ .switchMap(({data}) => of(
+ {type: 'CACHE', cache: data},
+ {type: `${a.type}_OK`, cache: data}
+ ));
})
.catch((error) => of({
type: `${a.type}_ERR`,
@@ -289,7 +289,9 @@ export default class ConfigEffects {
this.loadShortCachesEffect$ = ConfigureState.actions$
.let(ofType('LOAD_SHORT_CACHES'))
.exhaustMap((a) => {
- if (!(a.ids || []).length) return of({type: `${a.type}_OK`});
+ if (!(a.ids || []).length)
+ return of({type: `${a.type}_OK`});
+
return this.ConfigureState.state$.let(this.ConfigSelectors.selectShortCaches()).take(1)
.switchMap((items) => {
if (!items.pristine && a.ids && a.ids.every((_id) => items.value.has(_id)))
@@ -315,12 +317,14 @@ export default class ConfigEffects {
.exhaustMap((a) => {
return this.ConfigureState.state$.let(this.ConfigSelectors.selectIGFS(a.igfsID)).take(1)
.switchMap((igfs) => {
- if (igfs) return of({type: `${a.type}_OK`, igfs});
+ if (igfs)
+ return of({type: `${a.type}_OK`, igfs});
+
return fromPromise(this.IGFSs.getIGFS(a.igfsID))
- .switchMap(({data}) => of(
- {type: 'IGFS', igfs: data},
- {type: `${a.type}_OK`, igfs: data}
- ));
+ .switchMap(({data}) => of(
+ {type: 'IGFS', igfs: data},
+ {type: `${a.type}_OK`, igfs: data}
+ ));
})
.catch((error) => of({
type: `${a.type}_ERR`,
@@ -368,12 +372,14 @@ export default class ConfigEffects {
.exhaustMap((a) => {
return this.ConfigureState.state$.let(this.ConfigSelectors.selectModel(a.modelID)).take(1)
.switchMap((model) => {
- if (model) return of({type: `${a.type}_OK`, model});
+ if (model)
+ return of({type: `${a.type}_OK`, model});
+
return fromPromise(this.Models.getModel(a.modelID))
- .switchMap(({data}) => of(
- {type: 'MODEL', model: data},
- {type: `${a.type}_OK`, model: data}
- ));
+ .switchMap(({data}) => of(
+ {type: 'MODEL', model: data},
+ {type: `${a.type}_OK`, model: data}
+ ));
})
.catch((error) => of({
type: `${a.type}_ERR`,
@@ -454,39 +460,48 @@ export default class ConfigEffects {
const go = (state, params = {}) => this.$state.go(
state, {...params, clusterID: cluster._id}, {location: 'replace', custom: {justIDUpdate: true}}
);
+
switch (type) {
case 'models': {
const state = 'base.configuration.edit.advanced.models.model';
this.IgniteMessages.showInfo(`Model "${value.valueType}" saved`);
- if (
- this.$state.is(state) && this.$state.params.modelID !== value._id
- ) return go(state, {modelID: value._id});
+
+ if (this.$state.is(state) && this.$state.params.modelID !== value._id)
+ return go(state, {modelID: value._id});
+
break;
}
+
case 'caches': {
const state = 'base.configuration.edit.advanced.caches.cache';
this.IgniteMessages.showInfo(`Cache "${value.name}" saved`);
- if (
- this.$state.is(state) && this.$state.params.cacheID !== value._id
- ) return go(state, {cacheID: value._id});
+
+ if (this.$state.is(state) && this.$state.params.cacheID !== value._id)
+ return go(state, {cacheID: value._id});
+
break;
}
+
case 'igfss': {
const state = 'base.configuration.edit.advanced.igfs.igfs';
this.IgniteMessages.showInfo(`IGFS "${value.name}" saved`);
- if (
- this.$state.is(state) && this.$state.params.igfsID !== value._id
- ) return go(state, {igfsID: value._id});
+
+ if (this.$state.is(state) && this.$state.params.igfsID !== value._id)
+ return go(state, {igfsID: value._id});
+
break;
}
+
case 'cluster': {
const state = 'base.configuration.edit.advanced.cluster';
this.IgniteMessages.showInfo(`Cluster "${value.name}" saved`);
- if (
- this.$state.is(state) && this.$state.params.clusterID !== value._id
- ) return go(state);
+
+ if (this.$state.is(state) && this.$state.params.clusterID !== value._id)
+ return go(state);
+
break;
}
+
default: break;
}
})
@@ -497,7 +512,7 @@ export default class ConfigEffects {
.exhaustMap((a) => {
return a.confirm
// TODO: list items to remove in confirmation
- ? fromPromise(this.Confirm.confirm('Are you sure want to remove these items?'))
+ ? fromPromise(this.Confirm.confirm('Are you sure you want to remove these items?'))
.mapTo(a)
.catch(() => empty())
: of(a);
@@ -522,7 +537,7 @@ export default class ConfigEffects {
.switchMap((ids) => this.ConfigureState.state$.let(this.ConfigSelectors.selectClusterNames(ids)).take(1))
.exhaustMap((names) => {
return fromPromise(this.Confirm.confirm(`
- <p>Are you sure want to remove these clusters?</p>
+ <p>Are you sure you want to remove these clusters?</p>
<ul>${names.map((name) => `<li>${name}</li>`).join('')}</ul>
`))
.map(confirmClustersRemovalOK)
@@ -656,6 +671,7 @@ export default class ConfigEffects {
const err = `${action.type}_ERR`;
setTimeout(() => this.ConfigureState.dispatchAction(action));
+
return this.ConfigureState.actions$
.filter((a) => a.type === ok || a.type === err)
.take(1)
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure/store/selectors.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/store/selectors.js b/modules/web-console/frontend/app/components/page-configure/store/selectors.js
index 0f60214..4996ba9 100644
--- a/modules/web-console/frontend/app/components/page-configure/store/selectors.js
+++ b/modules/web-console/frontend/app/components/page-configure/store/selectors.js
@@ -30,23 +30,37 @@ import {default as IGFSs} from 'app/services/IGFSs';
import {default as Models} from 'app/services/Models';
const isDefined = (s) => s.filter((v) => v);
+
const selectItems = (path) => (s) => s.filter((s) => s).pluck(path).filter((v) => v);
+
const selectValues = (s) => s.map((v) => v && [...v.value.values()]);
+
export const selectMapItem = (mapPath, key) => (s) => s.pluck(mapPath).map((v) => v && v.get(key));
+
const selectMapItems = (mapPath, keys) => (s) => s.pluck(mapPath).map((v) => v && keys.map((key) => v.get(key)));
+
const selectItemToEdit = ({items, itemFactory, defaultName = '', itemID}) => (s) => s.switchMap((item) => {
- if (item) return of(Object.assign(itemFactory(), item));
- if (itemID === 'new') return items.take(1).map((items) => Object.assign(itemFactory(), {name: uniqueName(defaultName, items)}));
- if (!itemID) return of(null);
+ if (item)
+ return of(Object.assign(itemFactory(), item));
+
+ if (itemID === 'new')
+ return items.take(1).map((items) => Object.assign(itemFactory(), {name: uniqueName(defaultName, items)}));
+
+ if (!itemID)
+ return of(null);
+
return empty();
});
+
const currentShortItems = ({changesKey, shortKey}) => (state$) => {
return Observable.combineLatest(
state$.pluck('edit', 'changes', changesKey).let(isDefined).distinctUntilChanged(),
state$.pluck(shortKey, 'value').let(isDefined).distinctUntilChanged()
)
.map(([{ids = [], changedItems}, shortItems]) => {
- if (!ids.length || !shortItems) return [];
+ if (!ids.length || !shortItems)
+ return [];
+
return ids.map((id) => changedItems.find(({_id}) => _id === id) || shortItems.get(id));
})
.map((v) => v.filter((v) => v));
@@ -58,6 +72,7 @@ const selectNames = (itemIDs, nameAt = 'name') => (items) => items
export default class ConfigSelectors {
static $inject = ['Caches', 'Clusters', 'IGFSs', 'Models'];
+
/**
* @param {Caches} Caches
* @param {Clusters} Clusters
@@ -91,15 +106,25 @@ export default class ConfigSelectors {
.let(this.selectShortClusters())
.let(selectNames(clusterIDs));
}
+
selectCluster = (id) => selectMapItem('clusters', id);
+
selectShortClusters = () => selectItems('shortClusters');
+
selectCache = (id) => selectMapItem('caches', id);
+
selectIGFS = (id) => selectMapItem('igfss', id);
+
selectShortCaches = () => selectItems('shortCaches');
+
selectShortCachesValue = () => (state$) => state$.let(this.selectShortCaches()).let(selectValues);
+
selectShortIGFSs = () => selectItems('shortIgfss');
+
selectShortIGFSsValue = () => (state$) => state$.let(this.selectShortIGFSs()).let(selectValues);
+
selectShortModelsValue = () => (state$) => state$.let(this.selectShortModels()).let(selectValues);
+
selectCacheToEdit = (cacheID) => (state$) => state$
.let(this.selectCache(cacheID))
.distinctUntilChanged()
@@ -109,6 +134,7 @@ export default class ConfigSelectors {
defaultName: defaultNames.cache,
itemID: cacheID
}));
+
selectIGFSToEdit = (itemID) => (state$) => state$
.let(this.selectIGFS(itemID))
.distinctUntilChanged()
@@ -118,6 +144,7 @@ export default class ConfigSelectors {
defaultName: defaultNames.igfs,
itemID
}));
+
selectModelToEdit = (itemID) => (state$) => state$
.let(this.selectModel(itemID))
.distinctUntilChanged()
@@ -126,6 +153,7 @@ export default class ConfigSelectors {
itemFactory: () => this.Models.getBlankModel(),
itemID
}));
+
selectClusterToEdit = (clusterID, defaultName = defaultNames.cluster) => (state$) => state$
.let(this.selectCluster(clusterID))
.distinctUntilChanged()
@@ -135,23 +163,33 @@ export default class ConfigSelectors {
defaultName,
itemID: clusterID
}));
+
selectCurrentShortCaches = currentShortItems({changesKey: 'caches', shortKey: 'shortCaches'});
+
selectCurrentShortIGFSs = currentShortItems({changesKey: 'igfss', shortKey: 'shortIgfss'});
+
selectCurrentShortModels = currentShortItems({changesKey: 'models', shortKey: 'shortModels'});
+
selectClusterShortCaches = (clusterID) => (state$) => {
- if (clusterID === 'new') return of([]);
+ if (clusterID === 'new')
+ return of([]);
+
return combineLatest(
state$.let(this.selectCluster(clusterID)).pluck('caches'),
state$.let(this.selectShortCaches()).pluck('value'),
(ids, items) => ids.map((id) => items.get(id))
);
};
+
selectCompleteClusterConfiguration = ({clusterID, isDemo}) => (state$) => {
const hasValues = (array) => !array.some((v) => !v);
return state$.let(this.selectCluster(clusterID))
.exhaustMap((cluster) => {
- if (!cluster) return of({__isComplete: false});
+ if (!cluster)
+ return of({__isComplete: false});
+
const withSpace = (array) => array.map((c) => ({...c, space: cluster.space}));
+
return Observable.forkJoin(
state$.let(selectMapItems('caches', cluster.caches || [])).take(1),
state$.let(selectMapItems('models', cluster.models || [])).take(1),
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-configure/transitionHooks/errorState.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-configure/transitionHooks/errorState.js b/modules/web-console/frontend/app/components/page-configure/transitionHooks/errorState.js
index f36a931..fd9ca9b 100644
--- a/modules/web-console/frontend/app/components/page-configure/transitionHooks/errorState.js
+++ b/modules/web-console/frontend/app/components/page-configure/transitionHooks/errorState.js
@@ -44,9 +44,12 @@ const getResolvePromises = ($transition) => $transition.getResolveTokens()
*/
export const errorState = ($uiRouter) => {
$uiRouter.transitionService.onError(match, ($transition) => {
- if ($transition.error().type !== RejectType.ERROR) return;
+ if ($transition.error().type !== RejectType.ERROR)
+ return;
+
go($transition);
});
+
$uiRouter.transitionService.onStart(match, ($transition) => {
Promise.all(getResolvePromises($transition)).catch((e) => go($transition));
});
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/page-signin/run.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/page-signin/run.js b/modules/web-console/frontend/app/components/page-signin/run.js
index 7ac3bf8..457e488 100644
--- a/modules/web-console/frontend/app/components/page-signin/run.js
+++ b/modules/web-console/frontend/app/components/page-signin/run.js
@@ -27,7 +27,10 @@ export function registerState($uiRouter) {
unsaved: true,
redirectTo: (trans) => {
const skipStates = new Set(['signup', 'forgotPassword', 'landing']);
- if (skipStates.has(trans.from().name)) return;
+
+ if (skipStates.has(trans.from().name))
+ return;
+
return trans.injector().get('User').read()
.then(() => {
try {
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/panel-collapsible/controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/panel-collapsible/controller.js b/modules/web-console/frontend/app/components/panel-collapsible/controller.js
index 0b8b4da..65ec06a 100644
--- a/modules/web-console/frontend/app/components/panel-collapsible/controller.js
+++ b/modules/web-console/frontend/app/components/panel-collapsible/controller.js
@@ -33,20 +33,31 @@ export default class PanelCollapsible {
constructor($transclude) {
this.$transclude = $transclude;
}
+
toggle() {
if (this.opened)
this.close();
else
this.open();
}
+
open() {
- if (this.disabled) return;
+ if (this.disabled)
+ return;
+
this.opened = true;
- if (this.onOpen && this.opened) this.onOpen({});
+
+ if (this.onOpen && this.opened)
+ this.onOpen({});
}
+
close() {
- if (this.disabled) return;
+ if (this.disabled)
+ return;
+
this.opened = false;
- if (this.onClose && !this.opened) this.onClose({});
+
+ if (this.onClose && !this.opened)
+ this.onClose({});
}
}
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/ui-grid-filters/directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/ui-grid-filters/directive.js b/modules/web-console/frontend/app/components/ui-grid-filters/directive.js
index 6602c11..c9b84af 100644
--- a/modules/web-console/frontend/app/components/ui-grid-filters/directive.js
+++ b/modules/web-console/frontend/app/components/ui-grid-filters/directive.js
@@ -23,7 +23,8 @@ export default function uiGridFilters(uiGridConstants) {
require: 'uiGrid',
link: {
pre(scope, el, attr, gridApi) {
- if (!gridApi.grid.options.enableFiltering) return;
+ if (!gridApi.grid.options.enableFiltering)
+ return;
const applyMultiselectFilter = (cd) => {
cd.headerCellTemplate = template;
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/components/ui-grid-filters/index.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/components/ui-grid-filters/index.js b/modules/web-console/frontend/app/components/ui-grid-filters/index.js
index 0f05b77..2c60d89 100644
--- a/modules/web-console/frontend/app/components/ui-grid-filters/index.js
+++ b/modules/web-console/frontend/app/components/ui-grid-filters/index.js
@@ -27,7 +27,9 @@ export default angular
instance.$referenceElement = el;
instance.destroy = flow(instance.destroy, () => instance.$referenceElement = null);
instance.$applyPlacement = flow(instance.$applyPlacement, () => {
- if (!instance.$element) return;
+ if (!instance.$element)
+ return;
+
const refWidth = instance.$referenceElement[0].getBoundingClientRect().width;
const elWidth = instance.$element[0].getBoundingClientRect().width;
if (refWidth > elWidth) {
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js b/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
index 95b7ce4..c3efea5 100644
--- a/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
+++ b/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js
@@ -1394,7 +1394,8 @@ export default class IgniteConfigurationGenerator {
.longProperty('rateTimeInterval');
}
- if (plcBean.isEmpty()) return;
+ if (plcBean.isEmpty())
+ return;
policies.push(plcBean);
});
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/modules/form/field/bs-select-placeholder.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/form/field/bs-select-placeholder.directive.js b/modules/web-console/frontend/app/modules/form/field/bs-select-placeholder.directive.js
index 56aa82a..cecb49c 100644
--- a/modules/web-console/frontend/app/modules/form/field/bs-select-placeholder.directive.js
+++ b/modules/web-console/frontend/app/modules/form/field/bs-select-placeholder.directive.js
@@ -24,7 +24,9 @@ export default ['bsSelect', [() => {
const $render = ngModel.$render;
ngModel.$render = () => {
- if (scope.$destroyed) return;
+ if (scope.$destroyed)
+ return;
+
scope.$applyAsync(() => {
$render();
const value = ngModel.$viewValue;
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/modules/form/validator/unique.directive.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/modules/form/validator/unique.directive.js b/modules/web-console/frontend/app/modules/form/validator/unique.directive.js
index d32c565..318b8b6 100644
--- a/modules/web-console/frontend/app/modules/form/validator/unique.directive.js
+++ b/modules/web-console/frontend/app/modules/form/validator/unique.directive.js
@@ -42,12 +42,14 @@ class Controller {
if (!this.skip) {
// Return true in case if array not exist, array empty.
- if (!this.items || !this.items.length) return true;
+ if (!this.items || !this.items.length)
+ return true;
const idx = this.items.findIndex(matches);
// In case of new element check all items.
- if (isNew) return idx < 0;
+ if (isNew)
+ return idx < 0;
// Case for new component list editable.
const $index = this.listEditableTransclude
http://git-wip-us.apache.org/repos/asf/ignite/blob/1cdf7ef9/modules/web-console/frontend/app/services/Caches.js
----------------------------------------------------------------------
diff --git a/modules/web-console/frontend/app/services/Caches.js b/modules/web-console/frontend/app/services/Caches.js
index add63f8..7df4bb6 100644
--- a/modules/web-console/frontend/app/services/Caches.js
+++ b/modules/web-console/frontend/app/services/Caches.js
@@ -165,7 +165,10 @@ export default class Caches {
maxMemorySize: {
min: (evictionPolicy) => {
const policy = evictionPolicy[evictionPolicy.kind];
- if (!policy) return true;
+
+ if (!policy)
+ return true;
+
const maxSize = policy.maxSize === null || policy.maxSize === void 0
? this.evictionPolicy.maxSize.default
: policy.maxSize;
@@ -177,7 +180,10 @@ export default class Caches {
maxSize: {
min: (evictionPolicy) => {
const policy = evictionPolicy[evictionPolicy.kind];
- if (!policy) return true;
+
+ if (!policy)
+ return true;
+
const maxMemorySize = policy.maxMemorySize === null || policy.maxMemorySize === void 0
? this.evictionPolicy.maxMemorySize.default
: policy.maxMemorySize;