diff --git a/app/admin-tab/ha/controller.js b/app/admin-tab/ha/controller.js index 9c7c1fecc..e50601259 100644 --- a/app/admin-tab/ha/controller.js +++ b/app/admin-tab/ha/controller.js @@ -8,7 +8,7 @@ export default Ember.Controller.extend({ { translationKey: 'generic.uuid', name: 'uuid', - sort: ['stateSort','address','uuid'], + sort: ['sortState','address','uuid'], }, { translationKey: 'haPage.table.address', diff --git a/app/authenticated/clusters/index/controller.js b/app/authenticated/clusters/index/controller.js index f22393fa0..88a155c1c 100644 --- a/app/authenticated/clusters/index/controller.js +++ b/app/authenticated/clusters/index/controller.js @@ -1,5 +1,52 @@ import Ember from 'ember'; -import { headersWithCluster } from 'ui/components/cluster-box/component'; + +const headers = [ + { + name: 'expand', + sort: false, + searchField: null, + width: 30 + }, + { + name: 'state', + sort: ['stateSort','name','id'], + translationKey: 'generic.state', + width: 125, + }, + { + name: 'name', + sort: ['displayName','id'], + translationKey: 'clustersPage.cluster.label', + }, + { + name: 'hosts', + sort: ['numHosts','name','id'], + translationKey: 'clustersPage.hosts.label', + width: 100, + classNames: 'text-center', + }, + { + name: 'cpu', + sort: ['numGhz','name','id'], + translationKey: 'clustersPage.cpu.label', + width: 100, + classNames: 'text-center', + }, + { + name: 'memory', + sort: ['numMem','name','id'], + translationKey: 'clustersPage.memory.label', + width: 100, + classNames: 'text-center', + }, + { + name: 'storage', + sort: ['numStorage','name','id'], + translationKey: 'clustersPage.storage.label', + width: 100, + classNames: 'text-center', + }, +]; export default Ember.Controller.extend({ queryParams: ['mode'], @@ -11,10 +58,24 @@ export default Ember.Controller.extend({ settings: Ember.inject.service(), application: Ember.inject.controller(), - headers: headersWithCluster, - sortBy: 'cluster', + headers: headers, + sortBy: 'name', searchText: null, + bulkActions: true, - sortClusters: ['name','id'], - arrangedClusters: Ember.computed.sort('model.clusters','sortClusters'), + init() { + this._super(...arguments); + this.set('expandedClusters',[]); + }, + + actions: { + toggleExpand(id) { + let list = this.get('expandedClusters'); + if ( list.includes(id) ) { + list.removeObject(id); + } else { + list.addObject(id); + } + }, + }, }); diff --git a/app/authenticated/clusters/index/route.js b/app/authenticated/clusters/index/route.js new file mode 100644 index 000000000..8e3725ecd --- /dev/null +++ b/app/authenticated/clusters/index/route.js @@ -0,0 +1,18 @@ +import Ember from 'ember'; + +export default Ember.Route.extend({ + actions: { + toggleGrouping() { + let choices = ['list','grouped']; + let cur = this.get('controller.mode'); + let neu = choices[((choices.indexOf(cur)+1) % choices.length)]; + Ember.run.next(() => { + this.set('controller.mode', neu); + }); + }, + }, + + shortcuts: { + 'g': 'toggleGrouping', + } +}); diff --git a/app/authenticated/clusters/index/template.hbs b/app/authenticated/clusters/index/template.hbs index 5c5fdcf40..81615b6b1 100644 --- a/app/authenticated/clusters/index/template.hbs +++ b/app/authenticated/clusters/index/template.hbs @@ -15,6 +15,11 @@ {{t 'clustersPage.newCluster'}} {{/link-to}} + + {{#link-to "authenticated.clusters.new-project" class="btn bg-primary btn-sm icon-btn"}} + + {{t 'clustersPage.newProject'}} + {{/link-to}} @@ -30,25 +35,25 @@ {{/unless}} {{#if (eq mode "grouped")}} - {{#each arrangedClusters as |cluster|}} - {{cluster-box model=cluster}} - {{/each}} -{{else}} {{#sortable-table classNames="grid sortable-table" - body=model.projects + body=model.clusters searchText=searchText sortBy=sortBy - bulkActions=true + bulkActions=false fullRows=true - pagingLabel="pagination.project" + subRows=true + pagingLabel="pagination.cluster" headers=headers as |sortable kind inst dt| }} - {{project-row + {{cluster-row model=inst - showCluster=true fullColspan=sortable.fullColspan + toggle=(action "toggleExpand" inst.id) + expanded=(array-includes expandedClusters inst.id) dt=dt }} {{/sortable-table}} +{{else}} + {{project-table model=model.projects showCluster=true}} {{/if}} diff --git a/app/authenticated/clusters/new-project/route.js b/app/authenticated/clusters/new-project/route.js index 17cc0de06..241cebbd4 100644 --- a/app/authenticated/clusters/new-project/route.js +++ b/app/authenticated/clusters/new-project/route.js @@ -13,7 +13,6 @@ export default Ember.Route.extend({ }).then((hash) => { var project = userStore.createRecord({ type: 'project', - clusterId: params.clusterId, name: '', description: '', }); diff --git a/app/authenticated/project/apikeys/account/controller.js b/app/authenticated/project/apikeys/account/controller.js index 719a1fdf4..2a2462151 100644 --- a/app/authenticated/project/apikeys/account/controller.js +++ b/app/authenticated/project/apikeys/account/controller.js @@ -5,15 +5,6 @@ export default Ember.Controller.extend({ access: Ember.inject.service(), 'tab-session': Ember.inject.service(), - sortBy: 'name', - sorts: { - state: ['stateSort','name','id'], - name: ['name','id'], - description: ['description','name','id'], - publicValue: ['publicValue','id'], - created: ['created','name','id'], - }, - application: Ember.inject.controller(), cookies: Ember.inject.service(), projects: Ember.inject.service(), @@ -23,10 +14,11 @@ export default Ember.Controller.extend({ modalService: Ember.inject.service('modal'), bulkActionHandler: Ember.inject.service(), + sortBy: 'name', headers: [ { name: 'state', - sort: ['stateSort','name','id'], + sort: ['sortState','name','id'], translationKey: 'apiPage.table.state', width: 125, }, diff --git a/app/authenticated/project/hooks/index/controller.js b/app/authenticated/project/hooks/index/controller.js index 85195ec47..2a2b7bec8 100644 --- a/app/authenticated/project/hooks/index/controller.js +++ b/app/authenticated/project/hooks/index/controller.js @@ -8,7 +8,7 @@ export default Ember.Controller.extend({ { translationKey: 'generic.state', name: 'state', - sort: ['stateSort','name','id'], + sort: ['sortState','name','id'], width: '121' }, { diff --git a/app/certificates/index/controller.js b/app/certificates/index/controller.js index 328788124..787adebdc 100644 --- a/app/certificates/index/controller.js +++ b/app/certificates/index/controller.js @@ -5,7 +5,7 @@ export default Ember.Controller.extend({ headers: [ { name: 'state', - sort: ['stateSort','name','id'], + sort: ['sortState','name','id'], translationKey: 'certificatesPage.index.table.header.state', width: 125, }, diff --git a/app/components/cluster-box/template.hbs b/app/components/cluster-box/template.hbs deleted file mode 100644 index 16e5ef8f7..000000000 --- a/app/components/cluster-box/template.hbs +++ /dev/null @@ -1,105 +0,0 @@ -
-

{{t 'generic.cluster'}}: {{model.displayName}}

- {{#unless (eq model.state 'active')}} - {{badge-state model=model}} - {{/unless}} - -
- {{#if model.registrationToken.hostCommand}} - {{#if model.registrationToken.clusterCommand}} - {{#link-to "authenticated.clusters.cluster.import" model.id class="btn btn-sm bg-transparent icon-btn ml-20"}} - {{t 'clusterBox.importCluster'}} - {{/link-to}} - {{/if}} - {{#link-to "authenticated.clusters.cluster.host-templates" model.id (query-params backTo="clusters") class="btn btn-sm bg-primary icon-btn ml-20"}} - - {{t 'clusterBox.addHost'}} - {{/link-to}} - {{/if}} - {{#if model.registrationToken.clusterCommand}} - {{#link-to "authenticated.clusters.cluster.import" model.id class="btn btn-sm bg-primary icon-btn ml-20"}} - - {{t 'clusterBox.importCluster'}} - {{/link-to}} - {{/if}} - {{action-menu model=model showPrimary=false classNames="ml-10 inline-block" size="sm"}} -
-
- -
- -{{#if model.showTransitioningMessage}} -
{{model.transitioningMessage}}
-{{/if}} - -{{#if (eq model.state 'active')}} -
-
- -
- -
- -
- -
- -
- -
- -
- -
-{{/if}} - -
- {{#sortable-table - tableClassNames="bordered" - bulkActions=true - rightActions=true - paging=true - pagingLabel="pagination.project" - search=true - sortBy=sortBy - descending=descending - headers=headers - body=model.projects - fullRows=true - stickyHeader=false - as |sortable kind p dt| - }} - {{#if (eq kind "row")}} - {{project-row model=p dt=dt}} - {{else if (eq kind "nomatch")}} - {{t 'clusterBox.noMatch'}} - {{else if (eq kind "norows")}} - {{t 'clusterBox.noData'}} - {{else if (eq kind "right-actions")}} - {{#link-to "authenticated.clusters.new-project" (query-params clusterId=model.id) class="btn btn-sm bg-link icon-btn"}} - - {{t 'clustersPage.newProject'}} - {{/link-to}} - {{/if}} - {{/sortable-table}} -
diff --git a/app/components/cluster-row/component.js b/app/components/cluster-row/component.js new file mode 100644 index 000000000..0f4bc940b --- /dev/null +++ b/app/components/cluster-row/component.js @@ -0,0 +1,14 @@ +import Ember from 'ember'; + +export default Ember.Component.extend({ + model: null, + tagName: '', + + expanded: null, + + actions: { + toggle() { + this.sendAction('toggle'); + }, + }, +}); diff --git a/app/components/cluster-row/template.hbs b/app/components/cluster-row/template.hbs new file mode 100644 index 000000000..3df042239 --- /dev/null +++ b/app/components/cluster-row/template.hbs @@ -0,0 +1,66 @@ + + + Open accordion + + + {{badge-state model=model}} + + + {{model.displayName}} + + {{#if (eq model.state "inactive")}} + + {{#if (or model.registrationToken.hostCommand model.registrationToken.clusterCommand)}} + {{#if model.registrationToken.hostCommand}} + {{#link-to "authenticated.clusters.cluster.host-templates" model.id (query-params backTo="clusters") class="btn btn-sm bg-primary icon-btn ml-20"}} + + {{t 'clusterRow.addHost'}} + {{/link-to}} + {{/if}} + {{#if model.registrationToken.clusterCommand}} + {{#link-to "authenticated.clusters.cluster.import" model.id class="btn btn-sm bg-primary icon-btn ml-20"}} + + {{t 'clusterRow.importCluster'}} + {{/link-to}} + {{/if}} + {{else}} + {{t 'clusterRow.noHosts'}} + {{/if}} + + {{else}} + + {{model.numHosts}} + + + {{model.numGhz}} GHz + + + {{model.numMem}} GiB + + + {{model.numStorage}} GiB + + {{/if}} + + {{action-menu model=model}} + + + + + {{! expand}} + + {{#if expanded}} + {{project-table + model=model.projects + bulkActions=false + search=false + }} + {{/if}} + + + +{{#if expanded}} + + + +{{/if}} diff --git a/app/components/container-table/component.js b/app/components/container-table/component.js index 0b40c762d..dbb17e9e5 100644 --- a/app/components/container-table/component.js +++ b/app/components/container-table/component.js @@ -3,7 +3,7 @@ import Ember from 'ember'; export const headersAll = [ { name: 'state', - sort: ['stateSort','sortName','id'], + sort: ['sortState','sortName','id'], searchField: 'displayState', translationKey: 'generic.state', width: 150, diff --git a/app/components/env-catalog/template.hbs b/app/components/env-catalog/template.hbs index 18e6ba10c..a04b63afb 100644 --- a/app/components/env-catalog/template.hbs +++ b/app/components/env-catalog/template.hbs @@ -56,7 +56,14 @@   - {{t 'generic.environment'}} + {{new-select + classNames="form-control" + content=kindChoices + optionLabelPath="translationKey" + optionValuePath="value" + localizedLabel=true + value=row.kind + }}   diff --git a/app/components/new-edit-cluster/component.js b/app/components/new-edit-cluster/component.js index a774d92fa..eda7c22dd 100644 --- a/app/components/new-edit-cluster/component.js +++ b/app/components/new-edit-cluster/component.js @@ -2,11 +2,20 @@ import Ember from 'ember'; import NewOrEdit from 'ui/mixins/new-or-edit'; export default Ember.Component.extend(NewOrEdit, { + projects: Ember.inject.service(), + editing: true, primaryResource: Ember.computed.alias('cluster'), cluster: null, + didInsertElement() { + let el = this.$('INPUT')[0]; + if ( el ) { + el.focus(); + } + }, + actions: { done() { this.sendAction('done'); @@ -25,7 +34,13 @@ export default Ember.Component.extend(NewOrEdit, { }, }, - doneSaving: function() { + didSave() { + return this.get('primaryResource').waitForTransition().then(() => { + return this.get('projects').refreshAll(); + }); + }, + + doneSaving() { this.send('cancel'); } }); diff --git a/app/components/project-row/template.hbs b/app/components/project-row/template.hbs index 5bcd97a68..dacd12417 100644 --- a/app/components/project-row/template.hbs +++ b/app/components/project-row/template.hbs @@ -1,6 +1,8 @@ - - {{check-box nodeId=model.id}} - +{{#if bulkActions}} + + {{check-box nodeId=model.id}} + +{{/if}} {{badge-state model=model}} diff --git a/app/components/cluster-box/component.js b/app/components/project-table/component.js similarity index 67% rename from app/components/cluster-box/component.js rename to app/components/project-table/component.js index 3180a9537..3b3243fd7 100644 --- a/app/components/cluster-box/component.js +++ b/app/components/project-table/component.js @@ -1,9 +1,9 @@ import Ember from 'ember'; -export const headersWithCluster = [ +const headersWithCluster = [ { name: 'state', - sort: ['stateSort','name','id'], + sort: ['sortState','name','id'], translationKey: 'generic.state', width: 125, }, @@ -11,11 +11,13 @@ export const headersWithCluster = [ name: 'cluster', sort: ['cluster.displayName','displayName','id'], translationKey: 'clustersPage.cluster.label', + searchField: ['cluster.displayName'], }, { name: 'name', sort: ['displayName','id'], translationKey: 'clustersPage.environment.label', + searchField: ['displayName'], }, { name: 'stacks', @@ -41,17 +43,25 @@ export const headersWithCluster = [ { name: 'default', sort: false, - translationKey: 'clusterBox.loginDefault', + translationKey: 'clusterRow.loginDefault', width: 60, classNames: 'text-center', }, ]; -export const headersWithoutCluster = headersWithCluster.filter(x => x.name !== 'cluster'); +const headersWithoutCluster = headersWithCluster.filter(x => x.name !== 'cluster'); export default Ember.Component.extend({ - classNames: ['box','mt-20','pt-0'], + tagName: '', + showCluster: false, + bulkActions: true, + search: true, - sortBy: 'name', - headers: headersWithoutCluster, + headers: Ember.computed('showCluster', function() { + if ( this.get('showCluster') ) { + return headersWithCluster; + } else { + return headersWithoutCluster; + } + }), }); diff --git a/app/components/project-table/template.hbs b/app/components/project-table/template.hbs new file mode 100644 index 000000000..7d672f7bb --- /dev/null +++ b/app/components/project-table/template.hbs @@ -0,0 +1,22 @@ +{{#sortable-table + tableClassNames="bordered" + bulkActions=bulkActions + paging=true + pagingLabel="pagination.project" + search=search + sortBy=sortBy + descending=descending + headers=headers + body=model + fullRows=true + stickyHeader=false + as |sortable kind p dt| +}} + {{#if (eq kind "row")}} + {{project-row model=p dt=dt showCluster=showCluster search=search bulkActions=bulkActions}} + {{else if (eq kind "nomatch")}} + {{t 'clusterRow.noMatch'}} + {{else if (eq kind "norows")}} + {{t 'clusterRow.noData'}} + {{/if}} +{{/sortable-table}} diff --git a/app/components/view-edit-project/component.js b/app/components/view-edit-project/component.js index 121046f2b..5372692f4 100644 --- a/app/components/view-edit-project/component.js +++ b/app/components/view-edit-project/component.js @@ -41,7 +41,14 @@ export default Ember.Component.extend(NewOrEdit, { width: '40', }, ], + stacks: null, + clusters: null, + + init() { + this._super(...arguments); + this.set('clusters', this.get('userStore').all('cluster')); + }, actions: { cancel() { diff --git a/app/components/view-edit-project/template.hbs b/app/components/view-edit-project/template.hbs index 5a56cc993..b73256f9c 100644 --- a/app/components/view-edit-project/template.hbs +++ b/app/components/view-edit-project/template.hbs @@ -24,6 +24,19 @@ descriptionPlaceholder="viewEditDescription.form.description.placeholder" }} + +
+ + {{new-select + classNames="form-control" + optionValuePath="id" + optionLabelPath="displayName" + content=clusters + value=project.clusterId + prompt="viewEditProject.showEdit.cluster.prompt" + localizedPrompt=true + }} +
{{else if project.description}}
diff --git a/app/container/controller.js b/app/container/controller.js index e3f173c2a..6d60adf04 100644 --- a/app/container/controller.js +++ b/app/container/controller.js @@ -42,7 +42,7 @@ export default Ember.Controller.extend({ storageHeaders: [ { name: 'state', - sort: ['stateSort','displayUri','id'], + sort: ['sortState','displayUri','id'], translationKey: 'hostsPage.hostPage.storageTab.table.header.state', width: 125, }, diff --git a/app/containers/index/controller.js b/app/containers/index/controller.js index 4d2f070ed..0503ad0b6 100644 --- a/app/containers/index/controller.js +++ b/app/containers/index/controller.js @@ -10,7 +10,7 @@ export const headers = [ }, { name: 'state', - sort: ['stateSort','displayName'], + sort: ['sortState','displayName'], searchField: 'displayState', translationKey: 'generic.state', width: 120 diff --git a/app/dns/index/controller.js b/app/dns/index/controller.js index 1ae09a6d1..7c82d5f8b 100644 --- a/app/dns/index/controller.js +++ b/app/dns/index/controller.js @@ -30,7 +30,7 @@ export default Ember.Controller.extend({ }, { name: 'state', - sort: ['stack.isDefault:desc','stack.displayName','stateSort','displayName'], + sort: ['stack.isDefault:desc','stack.displayName','sortState','displayName'], searchField: 'displayState', translationKey: 'generic.state', width: 120 diff --git a/app/host/controller.js b/app/host/controller.js index 45bef8d92..be78486bf 100644 --- a/app/host/controller.js +++ b/app/host/controller.js @@ -16,7 +16,7 @@ export default Ember.Controller.extend(ContainerSparkStats, { storageHeaders: [ { name: 'state', - sort: ['stateSort','displayUri','id'], + sort: ['sortState','displayUri','id'], translationKey: 'hostsPage.hostPage.storageTab.table.header.state', width: 125, }, diff --git a/app/hosts/index/controller.js b/app/hosts/index/controller.js index cbe85bb7f..2446f63c3 100644 --- a/app/hosts/index/controller.js +++ b/app/hosts/index/controller.js @@ -44,7 +44,7 @@ export default Ember.Controller.extend({ }, { name: 'state', - sort: ['stateSort','displayName'], + sort: ['sortState','displayName'], searchField: 'displayState', translationKey: 'generic.state', width: 120 diff --git a/app/mixins/cattle-transitioning-resource.js b/app/mixins/cattle-transitioning-resource.js index 8bfef3ef9..5cc53b18c 100644 --- a/app/mixins/cattle-transitioning-resource.js +++ b/app/mixins/cattle-transitioning-resource.js @@ -112,6 +112,10 @@ export default Ember.Mixin.create({ return this.get('name') || '('+this.get('id')+')'; }.property('name','id'), + sortName: function() { + return Util.sortableNumericSuffix(this.get('displayName')); + }.property('displayName'), + isTransitioning: Ember.computed.equal('transitioning','yes'), isError: Ember.computed.equal('transitioning','error'), isRemoved: Ember.computed('state', () => { return !C.REMOVEDISH_STATES.includes(this.state); }), @@ -214,7 +218,7 @@ export default Ember.Mixin.create({ return this.constructor.defaultStateColor; }.property('relevantState','isError'), - stateSort: function() { + sortState: function() { var color = this.get('stateColor').replace('text-',''); return (stateColorSortMap[color] || stateColorSortMap['other']) + ' ' + this.get('relevantState'); }.property('stateColor','relevantState'), @@ -522,10 +526,10 @@ export default Ember.Mixin.create({ }, 'Wait for state='+state); }, - waitForNotTransitioning: function() { + waitForTransition: function() { return this._waitForTestFn(function() { return this.get('transitioning') !== 'yes'; - }, 'Wait for not transitioning'); + }, 'Wait for transition'); }, waitForAction: function(name) { diff --git a/app/mixins/state-counts.js b/app/mixins/state-counts.js index e4605e523..93d617b62 100644 --- a/app/mixins/state-counts.js +++ b/app/mixins/state-counts.js @@ -16,7 +16,7 @@ export default Ember.Mixin.create({ let good = 0; let notGood = 0; - this.get(inputKey).sortBy('stateSort').forEach((inst) => { + this.get(inputKey).sortBy('sortState').forEach((inst) => { let color = inst.get('stateBackground'); if ( color === 'bg-muted' ) { color = 'bg-success'; diff --git a/app/models/container.js b/app/models/container.js index 71c5c8b45..34c78d8a9 100644 --- a/app/models/container.js +++ b/app/models/container.js @@ -206,10 +206,6 @@ var Container = Instance.extend(EndpointPorts, { return (this.get('labels')||{})[C.LABEL.SCHED_GLOBAL] + '' === 'true'; }.property('labels'), - sortName: function() { - return Util.sortableNumericSuffix(this.get('displayName')); - }.property('displayName'), - isSidekick: function() { return (this.get('labels')||{})[C.LABEL.LAUNCH_CONFIG] + '' !== C.LABEL.LAUNCH_CONFIG_PRIMARY; }.property('labels'), diff --git a/app/models/machinedriver.js b/app/models/machinedriver.js index c78beeaa8..ac1b89be3 100644 --- a/app/models/machinedriver.js +++ b/app/models/machinedriver.js @@ -4,7 +4,7 @@ import PolledResource from 'ui/mixins/cattle-polled-resource'; import C from 'ui/utils/constants'; import { parseExternalId } from 'ui/utils/parse-externalid'; -const builtInUi = ['amazonec2','azure','digitalocean','exoscale','packet','rackspace','vmwarevsphere','aliyunecs']; +export const builtInUi = ['amazonec2','azure','digitalocean','exoscale','packet','rackspace','vmwarevsphere','aliyunecs']; function displayUrl(url) { url = url||''; diff --git a/app/registries/index/controller.js b/app/registries/index/controller.js index 539bb441d..74c6c9241 100644 --- a/app/registries/index/controller.js +++ b/app/registries/index/controller.js @@ -5,7 +5,7 @@ export default Ember.Controller.extend({ headers: [ { name: 'state', - sort: ['stateSort','displayAddress','id'], + sort: ['sortState','displayAddress','id'], translationKey: 'registriesPage.index.table.header.state', width: 125, }, diff --git a/app/secrets/index/controller.js b/app/secrets/index/controller.js index b32a0d38e..d8f608678 100644 --- a/app/secrets/index/controller.js +++ b/app/secrets/index/controller.js @@ -8,8 +8,8 @@ export default Ember.Controller.extend({ headers: [ { - name: 'stateSort', - sort: ['stateSort','name','id'], + name: 'state', + sort: ['sortState','name','id'], type: 'string', searchField: 'displayState', translationKey: 'generic.state', diff --git a/app/stack/index/controller.js b/app/stack/index/controller.js index d17668755..495703581 100644 --- a/app/stack/index/controller.js +++ b/app/stack/index/controller.js @@ -45,7 +45,7 @@ export default Ember.Controller.extend({ }, { name: 'state', - sort: ['stack.isDefault:desc','stack.displayName','stateSort','displayName'], + sort: ['stack.isDefault:desc','stack.displayName','sortState','displayName'], searchField: 'displayState', translationKey: 'generic.state', width: 120 @@ -79,7 +79,7 @@ export default Ember.Controller.extend({ }, { name: 'state', - sort: ['stateSort','displayName'], + sort: ['sortState','displayName'], searchField: 'displayState', translationKey: 'generic.state', width: 120 @@ -115,7 +115,7 @@ export default Ember.Controller.extend({ }, { name: 'state', - sort: ['stateSort','displayName'], + sort: ['sortState','displayName'], searchField: 'displayState', translationKey: 'generic.state', width: 120 diff --git a/app/volumes/index/controller.js b/app/volumes/index/controller.js index eb7a0c556..882da98e2 100644 --- a/app/volumes/index/controller.js +++ b/app/volumes/index/controller.js @@ -30,7 +30,7 @@ export default Ember.Controller.extend({ }, { name: 'state', - sort: ['stateSort','displayName'], + sort: ['sortState','displayName'], searchField: 'displayState', translationKey: 'generic.state', width: 120 diff --git a/translations/en-us.yaml b/translations/en-us.yaml index 360c13565..fbffe869f 100644 --- a/translations/en-us.yaml +++ b/translations/en-us.yaml @@ -471,6 +471,16 @@ clustersPage: label: Cluster Name environment: label: Environment Name + projects: + label: Environments + hosts: + label: Hosts + cpu: + label: CPU + memory: + label: RAM + storage: + label: Disk containerPage: header: 'Container: {name}' @@ -1299,9 +1309,10 @@ catalogSettings: label: Branch placeholder: 'e.g. master' -clusterBox: +clusterRow: noMatch: No environments match the current search noData: This cluster doesn't have any environments yet. + noHosts: External cluster has no hosts addHost: Add Hosts importCluster: Use existing Kubernetes loginDefault: Login @@ -3348,6 +3359,9 @@ viewEditProject: edit: "Edit Environment:" add: Add Environment template: Environment Template + cluster: + label: Cluster + prompt: Select a Cluster... accessControl: Access Control noMembers: Add one or more members who can use this environment. networkPolicy: