Merge pull request #449 from hashicorp/show-info-message-when-empty

[WIP] feat: Show info messages when resources are empty
This commit is contained in:
Randall Morey authored and GitHub committed 2021-02-12 10:01:25 -05:00
commit 69933d04fa
5 files changed
+191 -154

No files matched your search

@@ -95,6 +95,9 @@ host:
none:
title: No Hosts
description: No hosts available in this scope.
none-friendly:
title: No Hosts Available
description: No hosts available to display yet.
actions:
add: Add Host
create: New Host
@@ -110,6 +113,12 @@ session:
none:
title: No Sessions
description: There are no active sessions within the current scope.
none-friendly:
title: No Sessions Available
description: No sessions available to display yet.
none-active-friendly:
title: No Active Sessions Available
description: No active sessions available to display yet.
actions:
connect: Connect
org:
@@ -195,6 +204,9 @@ target:
messages:
welcome:
title: Welcome to Targets
none:
title: No Targets Available
description: No Targets to display yet. Contact your Boundary admin if you don't see a Target you expect access to.
actions:
create: New Target
delete: Delete Target
@@ -83,9 +83,9 @@
{{else}}
<Rose::Layout::Centered>
<Rose::Message @title={{t "resources.session.messages.none.title"}} as |message|>
<Rose::Message @title={{t "resources.session.messages.none-friendly.title"}} as |message|>
<message.description>
{{t "resources.session.messages.none.description"}}
{{t "resources.session.messages.none-friendly.description"}}
</message.description>
</Rose::Message>
</Rose::Layout::Centered>
@@ -7,74 +7,86 @@
</page.header>
<page.body>
<Rose::Table as |table|>
<table.header as |header|>
<header.row as |row|>
<row.headerCell>{{t "form.name.label"}}</row.headerCell>
<row.headerCell>{{t "form.id.label"}}</row.headerCell>
<row.headerCell>{{t "form.type.label"}}</row.headerCell>
<row.headerCell>{{t "resources.project.title"}}</row.headerCell>
<row.headerCell />
</header.row>
</table.header>
<table.body as |body|>
{{#each @model as |model|}}
<body.row as |row|>
<row.headerCell>
<LinkTo
@route="scopes.scope.projects.targets.target"
@model={{model.id}}
>
{{model.displayName}}
</LinkTo>
{{#if model.target.description}}
<p>{{model.target.description}}</p>
{{/if}}
{{#if model.target.isActive}}
<Rose::Badge @style="success">
{{t "states.active"}}
</Rose::Badge>
{{/if}}
</row.headerCell>
<row.cell>
<Copyable
@text={{model.id}}
@buttonText={{t "actions.copy-to-clipboard"}}
@acknowledgeText={{t "states.copied"}}
>
<code>{{model.id}}</code>
</Copyable>
</row.cell>
<row.cell>
{{#if model.type}}
<Rose::Badge>
{{t (concat "resources.target.types." model.type)}}
</Rose::Badge>
{{/if}}
</row.cell>
<row.cell>
<div>
{{#if @model}}
<Rose::Table as |table|>
<table.header as |header|>
<header.row as |row|>
<row.headerCell>{{t "form.name.label"}}</row.headerCell>
<row.headerCell>{{t "form.id.label"}}</row.headerCell>
<row.headerCell>{{t "form.type.label"}}</row.headerCell>
<row.headerCell>{{t "resources.project.title"}}</row.headerCell>
<row.headerCell />
</header.row>
</table.header>
<table.body as |body|>
{{#each @model as |model|}}
<body.row as |row|>
<row.headerCell>
<LinkTo
@route="scopes.scope.projects.targets.target"
@model={{model.id}}
>
{{model.displayName}}
</LinkTo>
{{#if model.target.description}}
<p>{{model.target.description}}</p>
{{/if}}
{{#if model.target.isActive}}
<Rose::Badge @style="success">
{{t "states.active"}}
</Rose::Badge>
{{/if}}
</row.headerCell>
<row.cell>
<Copyable
@text={{model.project.id}}
@text={{model.id}}
@buttonText={{t "actions.copy-to-clipboard"}}
@acknowledgeText={{t "states.copied"}}
>
<code>{{model.project.id}}</code>
<code>{{model.id}}</code>
</Copyable>
</div>
<Rose::Badge @style='informational'>
{{model.project.name}}
</Rose::Badge>
</row.cell>
<row.cell>
<Rose::Button @style="secondary" {{on "click" (route-action "connect" model)}}>
{{t "resources.session.actions.connect"}}
</Rose::Button>
</row.cell>
</body.row>
{{/each}}
</table.body>
</Rose::Table>
</row.cell>
<row.cell>
{{#if model.type}}
<Rose::Badge>
{{t (concat "resources.target.types." model.type)}}
</Rose::Badge>
{{/if}}
</row.cell>
<row.cell>
<div>
<Copyable
@text={{model.target.id}}
@buttonText={{t "actions.copy-to-clipboard"}}
@acknowledgeText={{t "states.copied"}}
>
<code>{{model.target.id}}</code>
</Copyable>
</div>
<Rose::Badge @style='informational'>
{{model.project.name}}
</Rose::Badge>
</row.cell>
<row.cell>
<Rose::Button @style="secondary" {{on "click" (route-action "connect" model)}}>
{{t "resources.session.actions.connect"}}
</Rose::Button>
</row.cell>
</body.row>
{{/each}}
</table.body>
</Rose::Table>
{{else}}
<Rose::Layout::Centered>
<Rose::Message @title={{t "resources.target.messages.none.title"}} as |message|>
<message.description>
{{t "resources.target.messages.none.description"}}
</message.description>
</Rose::Message>
</Rose::Layout::Centered>
{{/if}}
</page.body>
</Rose::Layout::Page>
@@ -1,32 +1,46 @@
{{page-title (t "resources.host-set.title_plural")}}
<Rose::Table as |table|>
<table.body as |body|>
{{#each @model.hosts as |host|}}
<body.row as |row|>
<row.cell>
{{host.displayName}}
<p>{{host.description}}</p>
</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>{{host.attributes.address}}</row.cell>
<row.cell>
<Rose::Badge>{{t (concat 'resources.host.types.' host.type)}}</Rose::Badge>
</row.cell>
<row.cell>
<Rose::Button @style="secondary" {{on "click" (route-action "connect" @model.target host)}}>
{{t "resources.session.actions.connect"}}
</Rose::Button>
</row.cell>
</body.row>
{{/each}}
</table.body>
</Rose::Table>
{{#if @model.hosts}}
<Rose::Table as |table|>
<table.body as |body|>
{{#each @model.hosts as |host|}}
<body.row as |row|>
<row.cell>
{{host.displayName}}
<p>{{host.description}}</p>
</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>{{host.attributes.address}}</row.cell>
<row.cell>
<Rose::Badge>{{t (concat 'resources.host.types.' host.type)}}</Rose::Badge>
</row.cell>
<row.cell>
<Rose::Button @style="secondary" {{on "click" (route-action "connect" @model.target host)}}>
{{t "resources.session.actions.connect"}}
</Rose::Button>
</row.cell>
</body.row>
{{/each}}
</table.body>
</Rose::Table>
{{else}}
<Rose::Layout::Centered>
<Rose::Message @title={{t "resources.host.messages.none-friendly.title"}} as |message|>
<message.description>
{{t "resources.host.messages.none-friendly.description"}}
</message.description>
</Rose::Message>
</Rose::Layout::Centered>
{{/if}}
@@ -1,60 +1,59 @@
<Rose::Table as |table|>
<table.body as |body|>
{{#each this.selfActiveSessions as |session|}}
<body.row as |row|>
<row.cell class="nowrap">
<Rose::Icon
class={{concat "session-status-" session.status}}
@name="app-icons/action-session"
@size="medium" />
<Copyable
@text={{session.id}}
@buttonText={{t "actions.copy-to-clipboard"}}
@acknowledgeText={{t "states.copied"}}
>
<code>{{session.id}}</code>
</Copyable>
</row.cell>
<row.cell>
{{!--
Two if's here because:
1) Local proxy info is only relevant if the session is
active or pending (aka isCancelable). Once the session
is canceled or in the process thereof, the local proxy
may no longer be used.
2) The session actually has proxy information associated
with it. It's possible for the user to start sessions
from other devices (or even another tab), in which case we
won't have the local proxy info available here.
--}}
{{#if session.isCancelable}}
{{#if session.proxy}}
<Copyable
@text={{session.proxy}}
@buttonText={{t "actions.copy-to-clipboard"}}
@acknowledgeText={{t "states.copied"}}
>
<code>{{session.proxy}}</code>
</Copyable>
{{#if this.selfActiveSessions}}
<Rose::Table as |table|>
<table.body as |body|>
{{#each this.selfActiveSessions as |session|}}
<body.row as |row|>
<row.cell class="nowrap">
<Rose::Icon
class={{concat "session-status-" session.status}}
@name="app-icons/action-session"
@size="medium" />
<Copyable
@text={{session.id}}
@buttonText={{t "actions.copy-to-clipboard"}}
@acknowledgeText={{t "states.copied"}}
>
<code>{{session.id}}</code>
</Copyable>
</row.cell>
<row.cell>
{{!--
Two if's here because:
1) Local proxy info is only relevant if the session is
active or pending (aka isCancelable). Once the session
is canceled or in the process thereof, the local proxy
may no longer be used.
2) The session actually has proxy information associated
with it. It's possible for the user to start sessions
from other devices (or even another tab), in which case we
won't have the local proxy info available here.
--}}
{{#if session.isCancelable}}
{{#if session.proxy}}
<Copyable
@text={{session.proxy}}
@buttonText={{t "actions.copy-to-clipboard"}}
@acknowledgeText={{t "states.copied"}}
>
<code>{{session.proxy}}</code>
</Copyable>
{{/if}}
{{/if}}
{{/if}}
</row.cell>
<row.cell>
<time datetime={{format-date-iso session.created_time}}>
{{format-date-iso-human session.created_time}}
</time>
</row.cell>
<row.cell>
<Rose::Badge>{{session.status}}</Rose::Badge>
</row.cell>
<row.cell>
{{#if session.isCancelable}}
<Rose::Button @style="secondary" {{on "click" (route-action "cancelSession" session)}}>
{{t "actions.cancel"}}
</Rose::Button>
{{/if}}
</row.cell>
</body.row>
{{/each}}
</table.body>
</Rose::Table>
</row.cell>
</body.row>
{{/each}}
</table.body>
</Rose::Table>
{{else}}
<Rose::Layout::Centered>
<Rose::Message @title={{t "resources.session.messages.none-active-friendly.title"}} as |message|>
<message.description>
{{t "resources.session.messages.none-active-friendly.description"}}
</message.description>
</Rose::Message>
</Rose::Layout::Centered>
{{/if}}