Skip to content

Commit

Permalink
Support EnvFrom in the Env Editors
Browse files Browse the repository at this point in the history
Review updates
  • Loading branch information
cdcabrera committed Sep 27, 2017
1 parent 3177113 commit 1ba99ba
Show file tree
Hide file tree
Showing 6 changed files with 164 additions and 142 deletions.
84 changes: 50 additions & 34 deletions app/scripts/directives/editEnvironmentFrom.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,31 @@
controller: [
'$attrs',
'$filter',
'$routeParams',
'keyValueEditorUtils',
EditEnvironmentFrom
],
bindings: {
addRowLink: '@',
entries: '=',
envFromSelectorOptions: '<',
selectorPlaceholder: '@'
addRowLink: '@', // creates a link to "add row" and sets its text label
entries: '=', // an array of objects containing configmaps and secrets
envFromSelectorOptions: '<', // dropdown selector options, an array of objects
selectorPlaceholder: '@' // placeholder copy for dropdown selector
},
templateUrl: 'views/directives/edit-environment-from.html'
});

function EditEnvironmentFrom($attrs,
$filter,
$routeParams,
utils) {
var ctrl = this;

var canI = $filter('canI');
var humanizeKind = $filter('humanizeKind');
var namespace = $routeParams.project;
var uniqueId = _.uniqueId();

ctrl.$id = _.uniqueId();
ctrl.setFocusClass = 'edit-environment-from-set-focus-' + ctrl.$id;
ctrl.setFocusClass = 'edit-environment-from-set-focus-' + uniqueId;

var addEntry = function(entries, entry) {
entries && entries.push(entry || {});
Expand Down Expand Up @@ -61,6 +64,16 @@
return humanizeKind(object.kind);
};

//ctrl.uniqueForValue = utils.uniqueForValue;
ctrl.dragControlListeners = {
accept: function (sourceItemHandleScope, destSortableScope) {
return sourceItemHandleScope.itemScope.sortableScope.$id === destSortableScope.$id;
},
orderChanged: function() {
ctrl.editEnvironmentFromForm.$setDirty();
}
};

ctrl.envFromObjectSelected = function(index, entry, selected) {
var newEnvFrom = {};

Expand Down Expand Up @@ -89,7 +102,7 @@
});
};

ctrl.updateEnvFromEntries = function(entries) {
var updateEnvFromEntries = function(entries) {
ctrl.envFromEntries = entries || [];

if(!ctrl.envFromEntries.length) {
Expand All @@ -98,12 +111,12 @@

_.each(ctrl.envFromEntries, function(entry) {
if(entry) {
if (entry.configMapRef) {
entry.isReadonlyValue = !canI('configmaps', 'get');
if(entry.configMapRef && !canI('configmaps', 'get')) {
entry.isReadonlyValue = true;
}

if (entry.secretRef) {
entry.isReadonlyValue = !canI('secrets', 'get');
if(entry.secretRef && !canI('secrets', 'get')) {
entry.isReadonlyValue = true;
}
}
});
Expand All @@ -129,33 +142,36 @@
};

var findReferenceValueForEntries = function(entries, envFromSelectorOptions) {
_.each(envFromSelectorOptions, function(option) {
var referenceValue = getReferenceValue(option);
ctrl.cannotAdd = (ctrl.isReadonlyAny || _.isEmpty(envFromSelectorOptions));

if (referenceValue) {
_.set(referenceValue, 'selectedEnvFrom', option);
}
});
};
if(envFromSelectorOptions) {
_.each(envFromSelectorOptions, function(option) {
var referenceValue = getReferenceValue(option);

angular.extend(ctrl, {
dragControlListeners: {
accept: function (sourceItemHandleScope, destSortableScope) {
return sourceItemHandleScope.itemScope.sortableScope.$id === destSortableScope.$id;
},
orderChanged: function() {
ctrl.editEnvironmentFromForm.$setDirty();
}
if (referenceValue) {
_.set(referenceValue, 'selectedEnvFrom', option);
}
});

} else {
_.each(entries, function(entry) {
var entryKind = (entry.secretRef)? 'Secret' : 'ConfigMap';
var entryName = _.get(entry.configMapRef, 'name') || _.get(entry.secretRef, 'name');

_.set(entry, 'apiObj', {
kind: entryKind,
metadata: {
name: entryName,
namespace: namespace
}
});
});
}
});
};

ctrl.$onInit = function() {
ctrl.updateEnvFromEntries(ctrl.entries);
findReferenceValueForEntries(ctrl.envFromEntries, ctrl.envFromSelectorOptions);

if('cannotAdd' in $attrs) {
ctrl.cannotAdd = true;
}
updateEnvFromEntries(ctrl.entries);
findReferenceValueForEntries(ctrl.entries, ctrl.envFromSelectorOptions);

if('cannotDelete' in $attrs) {
ctrl.cannotDeleteAny = true;
Expand All @@ -180,7 +196,7 @@

ctrl.$onChanges = function(changes) {
if(changes.entries) {
ctrl.updateEnvFromEntries(changes.entries.currentValue);
updateEnvFromEntries(changes.entries.currentValue);
}

if(changes.envFromSelectorOptions) {
Expand Down
44 changes: 21 additions & 23 deletions app/views/directives/edit-environment-from.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,17 @@

<div
class="form-group environment-from-input"
ng-class="{ 'has-error': (forms.editEnvironmentFrom[uniqueForValue(unique, $index)].$invalid && forms.editEnvironmentFrom[uniqueForValue(unique, $index)].$touched) }">
ng-class="{ 'has-error': ($ctrl.editEnvironmentFromForm[uniqueForValue(unique, $index)].$invalid && $ctrl.editEnvironmentFromForm[uniqueForValue(unique, $index)].$touched) }">
<div ng-if="$ctrl.isEnvFromReadonly(entry)" class="faux-input-group">
<div class="faux-form-control readonly">
Set to values in {{entry.selectedEnvFrom.kind | humanizeKind : true | lowercase}}
Set to values in {{entry.apiObj.kind | humanizeKind : true | lowercase}}
<span
ng-if="!('configmaps' | canI : 'get') || !('secrets' | canI : 'get')">
{{entry.configMapRef.name || entry.secretRef.name}}
</span>
<a
ng-if="'configmaps' | canI : 'get'"
ng-href="{{entry.selectedEnvFrom | navigateResourceURL}}">
ng-if="('configmaps' | canI : 'get') || ('secrets' | canI : 'get')"
ng-href="{{entry.apiObj | navigateResourceURL}}">
{{entry.configMapRef.name || entry.secretRef.name}}
</a>
</div>
Expand All @@ -56,37 +56,35 @@
</ui-select>
</div>
</div>

</div>
<div class="environment-from-input">
<span
ng-if="(!$ctrl.cannotSort) && ($ctrl.entries.length > 1)"
class="fa fa-bars sort-row"
role="button"
aria-label="Move row"
aria-grabbed="false"
as-sortable-item-handle></span>
ng-if="!$ctrl.cannotSort && ($ctrl.entries.length > 1)"
class="fa fa-bars sort-row"
role="button"
aria-label="Move row"
aria-grabbed="false"
as-sortable-item-handle></span>
<a
href=""
class="pficon pficon-close delete-row as-sortable-item-delete"
role="button"
aria-label="Delete row"
ng-hide="$ctrl.cannotDeleteAny || $ctrl.isReadonlyAny"
ng-click="$ctrl.deleteEntry($index, 1)"></a>
href=""
class="pficon pficon-close delete-row as-sortable-item-delete"
role="button"
aria-label="Delete row"
ng-hide="$ctrl.cannotDeleteAny"
ng-click="$ctrl.deleteEntry($index, 1)"></a>
<a
ng-href="{{entry.selectedEnvFrom | navigateResourceURL}}"
class="pficon"
ng-show="entry.selectedEnvFrom"
ng-click="$ctrl.viewDetail(entry)">View {{entry.selectedEnvFrom.kind | humanizeKind : true}}</a>
ng-if="!$ctrl.editEnvironmentFromForm.$dirty"
ng-href="{{entry.selectedEnvFrom | navigateResourceURL}}"
class="pficon"
ng-show="entry.selectedEnvFrom">View {{entry.selectedEnvFrom.kind | humanizeKind : true}}</a>
</div>
</div>

<div class="environment-from-entry form-group" ng-if="(!$ctrl.cannotAdd)">
<div class="environment-from-entry form-group" ng-if="!$ctrl.cannotAdd">
<a
href=""
class="add-row-link"
role="button"
aria-label="Add row"
ng-click="$ctrl.onAddRow()">{{ $ctrl.addRowLink }}</a>
</div>
</div>
Expand Down
2 changes: 0 additions & 2 deletions app/views/directives/key-value-editor.html
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,6 @@
href=""
class="add-row-link"
role="button"
aria-label="Add row"
ng-click="onAddRow()">{{ addRowLink }}</a>
<span ng-if="valueFromSelectorOptions.length">
<span
Expand All @@ -236,7 +235,6 @@
href=""
class="add-row-link"
role="button"
aria-label="Add row"
ng-click="onAddRowWithSelectors()">{{ addRowWithSelectorsLink }}</a>
</span>
</div>
Expand Down
99 changes: 53 additions & 46 deletions dist/scripts/scripts.js
Original file line number Diff line number Diff line change
Expand Up @@ -9080,86 +9080,93 @@ n[e.key] = e.value;
};
} ]), function() {
angular.module("openshiftConsole").component("editEnvironmentFrom", {
controller: [ "$attrs", "$filter", "keyValueEditorUtils", function(e, t, n) {
var a = this, r = t("canI"), o = t("humanizeKind");
a.$id = _.uniqueId(), a.setFocusClass = "edit-environment-from-set-focus-" + a.$id;
var i = function(e, t) {
controller: [ "$attrs", "$filter", "$routeParams", "keyValueEditorUtils", function(e, t, n, a) {
var r = this, o = t("canI"), i = t("humanizeKind"), s = n.project, c = _.uniqueId();
r.setFocusClass = "edit-environment-from-set-focus-" + c;
var l = function(e, t) {
e && e.push(t || {});
};
a.onAddRow = function() {
i(a.envFromEntries), n.setFocusOn("." + a.setFocusClass);
}, a.deleteEntry = function(e, t) {
a.entries && !a.entries.length || (a.envFromEntries.splice(e, t), !a.envFromEntries.length && a.addRowLink && i(a.envFromEntries), a.updateEntries(a.envFromEntries), a.editEnvironmentFromForm.$setDirty());
}, a.isEnvFromReadonly = function(e) {
return a.isReadonlyAny || !0 === e.isReadonlyValue || (e.secretRef || e.configMapRef) && !e.selectedEnvFrom || _.isEmpty(a.envFromSelectorOptions);
}, a.groupByKind = function(e) {
return o(e.kind);
}, a.envFromObjectSelected = function(e, t, n) {
var r = {};
r.onAddRow = function() {
l(r.envFromEntries), a.setFocusOn("." + r.setFocusClass);
}, r.deleteEntry = function(e, t) {
r.entries && !r.entries.length || (r.envFromEntries.splice(e, t), !r.envFromEntries.length && r.addRowLink && l(r.envFromEntries), r.updateEntries(r.envFromEntries), r.editEnvironmentFromForm.$setDirty());
}, r.isEnvFromReadonly = function(e) {
return r.isReadonlyAny || !0 === e.isReadonlyValue || (e.secretRef || e.configMapRef) && !e.selectedEnvFrom || _.isEmpty(r.envFromSelectorOptions);
}, r.groupByKind = function(e) {
return i(e.kind);
}, r.dragControlListeners = {
accept: function(e, t) {
return e.itemScope.sortableScope.$id === t.$id;
},
orderChanged: function() {
r.editEnvironmentFromForm.$setDirty();
}
}, r.envFromObjectSelected = function(e, t, n) {
var a = {};
switch (n.kind) {
case "Secret":
r.secretRef = {
a.secretRef = {
name: n.metadata.name
}, delete a.envFromEntries[e].configMapRef;
}, delete r.envFromEntries[e].configMapRef;
break;

case "ConfigMap":
r.configMapRef = {
a.configMapRef = {
name: n.metadata.name
}, delete a.envFromEntries[e].secretRef;
}, delete r.envFromEntries[e].secretRef;
}
_.assign(a.envFromEntries[e], r), a.updateEntries(a.envFromEntries);
}, a.updateEntries = function(e) {
a.entries = _.filter(e, function(e) {
_.assign(r.envFromEntries[e], a), r.updateEntries(r.envFromEntries);
}, r.updateEntries = function(e) {
r.entries = _.filter(e, function(e) {
return e.secretRef || e.configMapRef;
});
}, a.updateEnvFromEntries = function(e) {
a.envFromEntries = e || [], a.envFromEntries.length || i(a.envFromEntries), _.each(a.envFromEntries, function(e) {
e && (e.configMapRef && (e.isReadonlyValue = !r("configmaps", "get")), e.secretRef && (e.isReadonlyValue = !r("secrets", "get")));
});
};
var s = function(e) {
var u = function(e) {
r.envFromEntries = e || [], r.envFromEntries.length || l(r.envFromEntries), _.each(r.envFromEntries, function(e) {
e && (e.configMapRef && !o("configmaps", "get") && (e.isReadonlyValue = !0), e.secretRef && !o("secrets", "get") && (e.isReadonlyValue = !0));
});
}, d = function(e) {
var t;
switch (e.kind) {
case "ConfigMap":
t = _.find(a.envFromEntries, {
t = _.find(r.envFromEntries, {
configMapRef: {
name: e.metadata.name
}
});
break;

case "Secret":
t = _.find(a.envFromEntries, {
t = _.find(r.envFromEntries, {
secretRef: {
name: e.metadata.name
}
});
}
return t;
};
a.checkEntries = function(e) {
return !!s(e);
r.checkEntries = function(e) {
return !!d(e);
};
var c = function(e, t) {
_.each(t, function(e) {
var t = s(e);
var m = function(e, t) {
r.cannotAdd = r.isReadonlyAny || _.isEmpty(t), t ? _.each(t, function(e) {
var t = d(e);
t && _.set(t, "selectedEnvFrom", e);
}) : _.each(e, function(e) {
var t = e.secretRef ? "Secret" : "ConfigMap", n = _.get(e.configMapRef, "name") || _.get(e.secretRef, "name");
_.set(e, "apiObj", {
kind: t,
metadata: {
name: n,
namespace: s
}
});
});
};
angular.extend(a, {
dragControlListeners: {
accept: function(e, t) {
return e.itemScope.sortableScope.$id === t.$id;
},
orderChanged: function() {
a.editEnvironmentFromForm.$setDirty();
}
}
}), a.$onInit = function() {
a.updateEnvFromEntries(a.entries), c(a.envFromEntries, a.envFromSelectorOptions), "cannotAdd" in e && (a.cannotAdd = !0), "cannotDelete" in e && (a.cannotDeleteAny = !0), "cannotSort" in e && (a.cannotSort = !0), "isReadonly" in e && (a.isReadonlyAny = !0), "showHeader" in e && (a.showHeader = !0), a.envFromEntries && !a.envFromEntries.length && i(a.envFromEntries);
}, a.$onChanges = function(e) {
e.entries && a.updateEnvFromEntries(e.entries.currentValue), e.envFromSelectorOptions && c(a.envFromEntries, e.envFromSelectorOptions.currentValue);
r.$onInit = function() {
u(r.entries), m(r.entries, r.envFromSelectorOptions), "cannotDelete" in e && (r.cannotDeleteAny = !0), "cannotSort" in e && (r.cannotSort = !0), "isReadonly" in e && (r.isReadonlyAny = !0), "showHeader" in e && (r.showHeader = !0), r.envFromEntries && !r.envFromEntries.length && l(r.envFromEntries);
}, r.$onChanges = function(e) {
e.entries && u(e.entries.currentValue), e.envFromSelectorOptions && m(r.envFromEntries, e.envFromSelectorOptions.currentValue);
};
} ],
bindings: {
Expand Down
Loading

0 comments on commit 1ba99ba

Please sign in to comment.