Skip to content

Commit 888a686

Browse files
committed
Adjust radio buttons to drop down selector
1 parent 2d9fec8 commit 888a686

File tree

5 files changed

+102
-57
lines changed

5 files changed

+102
-57
lines changed

Diff for: app/scripts/controllers/createPersistentVolumeClaim.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ angular.module('openshiftConsole')
9595
_.set(pvc, 'spec.selector.matchLabels', selectorLabel);
9696
}
9797
}
98-
if ($scope.claim.storageClass ) {
98+
if ($scope.claim.storageClass && $scope.claim.storageClass.metadata.name !== "No Storage Class") {
9999
//we can only have one storage class per claim
100100
pvc.metadata.annotations["volume.beta.kubernetes.io/storage-class"] = $scope.claim.storageClass.metadata.name;
101101
}

Diff for: app/scripts/directives/oscPersistentVolumeClaim.js

+23-3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ angular.module("openshiftConsole")
1818
var usageValue = $filter('usageValue');
1919

2020
scope.storageClasses = [];
21+
scope.defaultStorageClass = "";
2122
scope.claim.unit = 'Gi';
2223
scope.units = [{
2324
value: "Mi",
@@ -81,9 +82,28 @@ angular.module("openshiftConsole")
8182
scope.persistentVolumeClaimForm.capacity.$setValidity('limitRangeMax', maxValid);
8283
};
8384

84-
DataService.list({group: 'storage.k8s.io', resource: 'storageclasses'}, {}, function(storageClasses) {
85-
scope.storageClasses = storageClasses.by('metadata.name');
86-
}, {errorNotification: false});
85+
DataService.list({group: 'storage.k8s.io', resource: 'storageclasses'}, {}, function(storageClassData) {
86+
var storageClasses = storageClassData.by('metadata.name');
87+
scope.storageClasses = _.sortBy(storageClasses, 'metadata.name');
88+
var annotation = $filter('annotation');
89+
scope.defaultStorageClass = _.find(scope.storageClasses, function(storageClass) {
90+
return annotation(storageClass, 'storageclass.beta.kubernetes.io/is-default-class') === 'true';
91+
});
92+
if (!scope.defaultStorageClass) { //if there is no default, set a no storage class option
93+
var noclass = {
94+
metadata: {
95+
name: "No Storage Class",
96+
labels: {},
97+
annotations: {
98+
description: "No storage class will be assigned"
99+
}
100+
}
101+
};
102+
scope.storageClasses.unshift(noclass);
103+
} else {
104+
scope.claim.storageClass = scope.defaultStorageClass;
105+
}
106+
}, {errorNotification: false});
87107

88108
DataService.list('limitranges', { namespace: scope.projectName }, function(limitRangeData) {
89109
var limitRanges = limitRangeData.by('metadata.name');

Diff for: app/views/directives/osc-persistent-volume-claim.html

+33-27
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,43 @@
22
<fieldset ng-disabled="claimDisabled">
33
<div ng-show="storageClasses | hashSize" class="form-group">
44
<!--storage class-->
5-
<label class="required">Storage Classes</label>
6-
<div id="claim-storage-class-help" class="help-block mar-bottom-lg">
5+
<label>Storage Class</label>
6+
<div>
7+
<ui-select
8+
ng-if="storageClasses"
9+
ng-model="claim.storageClass"
10+
theme="bootstrap"
11+
search-enabled="true"
12+
title="Select a storage class"
13+
class="select-role">
14+
<ui-select-match placeholder="Select a storage class">
15+
<span>
16+
{{$select.selected.metadata.name}}
17+
</span>
18+
</ui-select-match>
19+
<ui-select-choices
20+
repeat="sclass as sclass in storageClasses | toArray | filter : { metadata: { name: $select.search } } ">
21+
<div>
22+
<span ng-bind-html="sclass.metadata.name | highlight : $select.search"></span>
23+
<span ng-if="sclass | annotation : 'description'" class="text-muted">
24+
<small>&ndash;
25+
<span ng-if="sclass.parameters.type">Type: {{sclass.parameters.type}} | </span>
26+
<span ng-if="sclass.parameters.zone">Zone: {{sclass.parameters.zone}} | </span>
27+
{{sclass | annotation : 'description'}}
28+
</small>
29+
</span>
30+
</div>
31+
</ui-select-choices>
32+
</ui-select>
33+
</div>
34+
<div id="claim-storage-class-help" class="help-block">
735
Storage classes are set by the administrator to define types of storage the users can select.
36+
<span ng-if="defaultStorageClass"> If another storage class is not chosen, the default storage class <var>{{defaultStorageClass.metadata.name}}</var> will be used.</span>
837
<div class="learn-more-block">
9-
<a ng-href="{{'storage_classes' | helpLink}}" target="_blank">Learn More&nbsp;<i class="fa fa-external-link" aria-hidden="true"></i></a>
10-
</div>
11-
</div>
12-
<div ng-repeat="sclass in storageClasses track by (sclass | uid)" id="storageclass-{{sclass.metadata.name}}">
13-
<div class="radio">
14-
<label>
15-
<input type="radio"
16-
name="storageClass"
17-
ng-value="sclass"
18-
ng-model="claim.storageClass">
19-
{{sclass.metadata.name}}
20-
</label>
21-
</div>
22-
<div class="help-block">
23-
Type: {{sclass.parameters.type}} | Zone: {{sclass.parameters.zone}}
24-
<span ng-if="sclass.metadata.annotations.description"> | {{sclass.metadata.annotations.description}}</span>
38+
<a ng-href="{{'storage_classes' | helpLink}}" target="_blank">Learn More&nbsp;<i class="fa fa-external-link" aria-hidden="true"> </i></a>
2539
</div>
2640
</div>
27-
<div class="radio">
28-
<label>
29-
<input type="radio"
30-
name="storageClass"
31-
ng-model="claim.storageClass">
32-
No Storage Class
33-
<div class="help-block">No storage class will be assigned unless a default class has been assigned by the system administrator.</div>
34-
</label>
35-
</div>
41+
3642
</div>
3743

3844
<!-- Name -->

Diff for: dist/scripts/scripts.js

+20-4
Original file line numberDiff line numberDiff line change
@@ -8882,7 +8882,7 @@ if (a.spec.resources.requests.storage = c.claim.amount + b, c.claim.selectedLabe
88828882
var d = j.mapEntries(j.compactEntries(c.claim.selectedLabels));
88838883
_.isEmpty(d) || _.set(a, "spec.selector.matchLabels", d);
88848884
}
8885-
return c.claim.storageClass && (a.metadata.annotations["volume.beta.kubernetes.io/storage-class"] = c.claim.storageClass.metadata.name), a;
8885+
return c.claim.storageClass && "No Storage Class" !== c.claim.storageClass.metadata.name && (a.metadata.annotations["volume.beta.kubernetes.io/storage-class"] = c.claim.storageClass.metadata.name), a;
88868886
}
88878887
return c.project = e, c.breadcrumbs[0].title = a("displayName")(e), f.canI("persistentvolumeclaims", "create", b.project) ? void (c.createPersistentVolumeClaim = function() {
88888888
if (c.createPersistentVolumeClaimForm.$valid) {
@@ -10073,7 +10073,7 @@ projectName:"="
1007310073
templateUrl:"views/directives/osc-persistent-volume-claim.html",
1007410074
link:function(e) {
1007510075
var f = a("amountAndUnit"), g = a("usageValue");
10076-
e.storageClasses = [], e.claim.unit = "Gi", e.units = [ {
10076+
e.storageClasses = [], e.defaultStorageClass = "", e.claim.unit = "Gi", e.units = [ {
1007710077
value:"Mi",
1007810078
label:"MiB"
1007910079
}, {
@@ -10114,8 +10114,24 @@ a && b && (d = a >= b), a && c && (f = a <= c), e.persistentVolumeClaimForm.capa
1011410114
b.list({
1011510115
group:"storage.k8s.io",
1011610116
resource:"storageclasses"
10117-
}, {}, function(a) {
10118-
e.storageClasses = a.by("metadata.name");
10117+
}, {}, function(b) {
10118+
var c = b.by("metadata.name");
10119+
e.storageClasses = _.sortBy(c, "metadata.name");
10120+
var d = a("annotation");
10121+
if (e.defaultStorageClass = _.find(e.storageClasses, function(a) {
10122+
return "true" === d(a, "storageclass.beta.kubernetes.io/is-default-class");
10123+
}), e.defaultStorageClass) e.claim.storageClass = e.defaultStorageClass; else {
10124+
var f = {
10125+
metadata:{
10126+
name:"No Storage Class",
10127+
labels:{},
10128+
annotations:{
10129+
description:"No storage class will be assigned"
10130+
}
10131+
}
10132+
};
10133+
e.storageClasses.unshift(f);
10134+
}
1011910135
}, {
1012010136
errorNotification:!1
1012110137
}), b.list("limitranges", {

Diff for: dist/scripts/templates.js

+25-22
Original file line numberDiff line numberDiff line change
@@ -7504,31 +7504,34 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
75047504
"<fieldset ng-disabled=\"claimDisabled\">\n" +
75057505
"<div ng-show=\"storageClasses | hashSize\" class=\"form-group\">\n" +
75067506
"\n" +
7507-
"<label class=\"required\">Storage Classes</label>\n" +
7508-
"<div id=\"claim-storage-class-help\" class=\"help-block mar-bottom-lg\">\n" +
7509-
"Storage classes are set by the administrator to define types of storage the users can select.\n" +
7510-
"<div class=\"learn-more-block\">\n" +
7511-
"<a ng-href=\"{{'storage_classes' | helpLink}}\" target=\"_blank\">Learn More&nbsp;<i class=\"fa fa-external-link\" aria-hidden=\"true\"></i></a>\n" +
7512-
"</div>\n" +
7513-
"</div>\n" +
7514-
"<div ng-repeat=\"sclass in storageClasses track by (sclass | uid)\" id=\"storageclass-{{sclass.metadata.name}}\">\n" +
7515-
"<div class=\"radio\">\n" +
7516-
"<label>\n" +
7517-
"<input type=\"radio\" name=\"storageClass\" ng-value=\"sclass\" ng-model=\"claim.storageClass\">\n" +
7518-
"{{sclass.metadata.name}}\n" +
7519-
"</label>\n" +
7507+
"<label>Storage Class</label>\n" +
7508+
"<div>\n" +
7509+
"<ui-select ng-if=\"storageClasses\" ng-model=\"claim.storageClass\" theme=\"bootstrap\" search-enabled=\"true\" title=\"Select a storage class\" class=\"select-role\">\n" +
7510+
"<ui-select-match placeholder=\"Select a storage class\">\n" +
7511+
"<span>\n" +
7512+
"{{$select.selected.metadata.name}}\n" +
7513+
"</span>\n" +
7514+
"</ui-select-match>\n" +
7515+
"<ui-select-choices repeat=\"sclass as sclass in storageClasses | toArray | filter : { metadata: { name: $select.search } } \">\n" +
7516+
"<div>\n" +
7517+
"<span ng-bind-html=\"sclass.metadata.name | highlight : $select.search\"></span>\n" +
7518+
"<span ng-if=\"sclass | annotation : 'description'\" class=\"text-muted\">\n" +
7519+
"<small>&ndash;\n" +
7520+
"<span ng-if=\"sclass.parameters.type\">Type: {{sclass.parameters.type}} | </span>\n" +
7521+
"<span ng-if=\"sclass.parameters.zone\">Zone: {{sclass.parameters.zone}} | </span>\n" +
7522+
"{{sclass | annotation : 'description'}}\n" +
7523+
"</small>\n" +
7524+
"</span>\n" +
75207525
"</div>\n" +
7521-
"<div class=\"help-block\">\n" +
7522-
"Type: {{sclass.parameters.type}} | Zone: {{sclass.parameters.zone}}\n" +
7523-
"<span ng-if=\"sclass.metadata.annotations.description\"> | {{sclass.metadata.annotations.description}}</span>\n" +
7526+
"</ui-select-choices>\n" +
7527+
"</ui-select>\n" +
75247528
"</div>\n" +
7529+
"<div id=\"claim-storage-class-help\" class=\"help-block\">\n" +
7530+
"Storage classes are set by the administrator to define types of storage the users can select.\n" +
7531+
"<span ng-if=\"defaultStorageClass\"> If another storage class is not chosen, the default storage class <var>{{defaultStorageClass.metadata.name}}</var> will be used.</span>\n" +
7532+
"<div class=\"learn-more-block\">\n" +
7533+
"<a ng-href=\"{{'storage_classes' | helpLink}}\" target=\"_blank\">Learn More&nbsp;<i class=\"fa fa-external-link\" aria-hidden=\"true\"> </i></a>\n" +
75257534
"</div>\n" +
7526-
"<div class=\"radio\">\n" +
7527-
"<label>\n" +
7528-
"<input type=\"radio\" name=\"storageClass\" ng-model=\"claim.storageClass\">\n" +
7529-
"No Storage Class\n" +
7530-
"<div class=\"help-block\">No storage class will be assigned unless a default class has been assigned by the system administrator.</div>\n" +
7531-
"</label>\n" +
75327535
"</div>\n" +
75337536
"</div>\n" +
75347537
"\n" +

0 commit comments

Comments
 (0)