Merge pull request #977 from hashicorp/chore-add-host-route

chore: 🤖 add read-only host route for dynamic hosts
This commit is contained in:
Randall Morey authored and GitHub committed 2022-02-23 12:56:19 -05:00
commit 920971ee98
13 files changed
+194 -82

No files matched your search

@@ -0,0 +1,13 @@
import Controller from '@ember/controller';
export default class ScopesScopeHostCatalogsHostCatalogHostSetsHostSetHostsHostController extends Controller {
// =attributes
/**
* A role breadcrumb
* @type {string}
*/
get breadCrumb() {
return this.model.displayName;
}
}
+3 -1
View File
@@ -91,7 +91,9 @@ Router.map(function () {
this.route('host-sets', function () {
this.route('new');
this.route('host-set', { path: ':host_set_id' }, function () {
this.route('hosts');
this.route('hosts', function () {
this.route('host', { path: ':host_id' }, function () {});
});
this.route('add-hosts');
this.route('create-and-add-host');
});
@@ -0,0 +1,3 @@
import Route from '@ember/routing/route';
export default class ScopesScopeHostCatalogsHostCatalogHostSetsHostSetHostsHostRoute extends Route {}
@@ -0,0 +1,3 @@
import Route from '@ember/routing/route';
export default class ScopesScopeHostCatalogsHostCatalogHostSetsHostSetHostsHostIndexRoute extends Route {}
@@ -0,0 +1,3 @@
import Route from '@ember/routing/route';
export default class ScopesScopeHostCatalogsHostCatalogHostSetsHostSetHostsIndexRoute extends Route {}
@@ -1,83 +1,3 @@
{{page-title (t 'resources.host.title_plural')}}
{{#if @model.hosts}}
<Rose::Table as |table|>
<table.header as |header|>
<header.row as |row|>
<row.headerCell>{{t 'form.name.label'}}</row.headerCell>
<row.headerCell>{{t 'form.type.label'}}</row.headerCell>
<row.headerCell>{{t 'form.id.label'}}</row.headerCell>
{{#if @model.isStatic}}
<row.headerCell>{{t 'titles.actions'}}</row.headerCell>
{{/if}}
</header.row>
</table.header>
<table.body as |body|>
{{#each @model.hosts as |host|}}
<body.row as |row|>
<row.headerCell>
<LinkTo
@route='scopes.scope.host-catalogs.host-catalog.hosts.host'
@model={{host.id}}
>
{{host.displayName}}
</LinkTo>
<p>{{host.description}}</p>
</row.headerCell>
<row.cell>
<HostCatalogTypeBadge @model={{host}} />
</row.cell>
<row.cell>
<Copyable
@text={{host.id}}
@buttonText={{t 'actions.copy-to-clipboard'}}
@acknowledgeText={{t 'states.copied'}}
>
<code>{{host.id}}</code>
</Copyable>
</row.cell>
<row.cell>
{{#if (can 'removeHosts hostSet' @model.hostSet)}}
<Rose::Dropdown
@icon='flight-icons/svg/more-horizontal-16'
@iconOnly={{true}}
@showCaret={{false}}
@dropdownRight={{true}}
@text='{{t 'actions.manage'}}'
as |dropdown|
>
<dropdown.button
@style='danger'
{{on 'click' (route-action 'removeHost' @model.hostSet host)}}
>
{{t 'actions.remove'}}
</dropdown.button>
</Rose::Dropdown>
{{/if}}
</row.cell>
</body.row>
{{/each}}
</table.body>
</Rose::Table>
{{/if}}
{{#unless @model.hosts}}
<Rose::Layout::Centered>
<Rose::Message
@title={{t 'resources.host-set.host.messages.none.title'}}
as |message|
>
<message.description>
{{t 'resources.host-set.host.messages.none.description'}}
</message.description>
{{!--
<message.link @route="scopes.scope.host-catalogs.host-catalog.host-sets.host-set.create-and-add-host">
<Rose::Icon @name="flight-icons/svg/plus-circle-16" />
{{t "resources.host-set.actions.create-and-add-host"}}
</message.link>
--}}
</Rose::Message>
</Rose::Layout::Centered>
{{/unless}}
{{outlet}}
@@ -0,0 +1,3 @@
{{page-title @model.displayName}}
{{outlet}}
@@ -0,0 +1,9 @@
<Form::Host @model={{@model}} />
{{!--
<Form::Host
@model={{@model}}
@submit={{route-action 'save' @model}}
@cancel={{route-action 'cancel' @model}}
/>
--}}
@@ -0,0 +1,91 @@
{{#if @model.hosts}}
<Rose::Table as |table|>
<table.header as |header|>
<header.row as |row|>
<row.headerCell>{{t 'form.name.label'}}</row.headerCell>
<row.headerCell>{{t 'form.type.label'}}</row.headerCell>
<row.headerCell>{{t 'form.id.label'}}</row.headerCell>
{{#if @model.isStatic}}
<row.headerCell>{{t 'titles.actions'}}</row.headerCell>
{{/if}}
</header.row>
</table.header>
<table.body as |body|>
{{#each @model.hosts as |host|}}
<body.row as |row|>
<row.headerCell>
{{#if host.isStatic}}
<LinkTo
@route='scopes.scope.host-catalogs.host-catalog.hosts.host'
@model={{host.id}}
>
{{host.displayName}}
</LinkTo>
{{else}}
{{! Link to a different subroute for dynamic/plugin hosts }}
<LinkTo
@route='scopes.scope.host-catalogs.host-catalog.host-sets.host-set.hosts.host'
@model={{host.id}}
>
{{host.displayName}}
</LinkTo>
{{/if}}
<p>{{host.description}}</p>
</row.headerCell>
<row.cell>
<HostCatalogTypeBadge @model={{host}} />
</row.cell>
<row.cell>
<Copyable
@text={{host.id}}
@buttonText={{t 'actions.copy-to-clipboard'}}
@acknowledgeText={{t 'states.copied'}}
>
<code>{{host.id}}</code>
</Copyable>
</row.cell>
<row.cell>
{{#if (can 'removeHosts hostSet' @model.hostSet)}}
<Rose::Dropdown
@icon='flight-icons/svg/more-horizontal-16'
@iconOnly={{true}}
@showCaret={{false}}
@dropdownRight={{true}}
@text='{{t 'actions.manage'}}'
as |dropdown|
>
<dropdown.button
@style='danger'
{{on 'click' (route-action 'removeHost' @model.hostSet host)}}
>
{{t 'actions.remove'}}
</dropdown.button>
</Rose::Dropdown>
{{/if}}
</row.cell>
</body.row>
{{/each}}
</table.body>
</Rose::Table>
{{/if}}
{{#unless @model.hosts}}
<Rose::Layout::Centered>
<Rose::Message
@title={{t 'resources.host-set.host.messages.none.title'}}
as |message|
>
<message.description>
{{t 'resources.host-set.host.messages.none.description'}}
</message.description>
{{!--
<message.link @route="scopes.scope.host-catalogs.host-catalog.host-sets.host-set.create-and-add-host">
<Rose::Icon @name="flight-icons/svg/plus-circle-16" />
{{t "resources.host-set.actions.create-and-add-host"}}
</message.link>
--}}
</Rose::Message>
</Rose::Layout::Centered>
{{/unless}}
@@ -0,0 +1,17 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module(
'Unit | Controller | scopes/scope/host-catalogs/host-catalog/host-sets/host-set/hosts/host',
function (hooks) {
setupTest(hooks);
// TODO: Replace this with your real tests.
test('it exists', function (assert) {
let controller = this.owner.lookup(
'controller:scopes/scope/host-catalogs/host-catalog/host-sets/host-set/hosts/host'
);
assert.ok(controller);
});
}
);
@@ -0,0 +1,16 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module(
'Unit | Route | scopes/scope/host-catalogs/host-catalog/host-sets/host-set/hosts/host',
function (hooks) {
setupTest(hooks);
test('it exists', function (assert) {
let route = this.owner.lookup(
'route:scopes/scope/host-catalogs/host-catalog/host-sets/host-set/hosts/host'
);
assert.ok(route);
});
}
);
@@ -0,0 +1,16 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module(
'Unit | Route | scopes/scope/host-catalogs/host-catalog/host-sets/host-set/hosts/host/index',
function (hooks) {
setupTest(hooks);
test('it exists', function (assert) {
let route = this.owner.lookup(
'route:scopes/scope/host-catalogs/host-catalog/host-sets/host-set/hosts/host/index'
);
assert.ok(route);
});
}
);
@@ -0,0 +1,16 @@
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
module(
'Unit | Route | scopes/scope/host-catalogs/host-catalog/host-sets/host-set/hosts/index',
function (hooks) {
setupTest(hooks);
test('it exists', function (assert) {
let route = this.owner.lookup(
'route:scopes/scope/host-catalogs/host-catalog/host-sets/host-set/hosts/index'
);
assert.ok(route);
});
}
);