+ {{t 'components.app.skip_to_content'}}
{{!--
In order to add further skip links from within other templates use:
@@ -21,11 +24,13 @@
from within your template
--}}
+
+
diff --git a/ui/packages/consul-ui/app/components/consul/intention/form/index.hbs b/ui/packages/consul-ui/app/components/consul/intention/form/index.hbs
index 193fbf047..096658810 100644
--- a/ui/packages/consul-ui/app/components/consul/intention/form/index.hbs
+++ b/ui/packages/consul-ui/app/components/consul/intention/form/index.hbs
@@ -38,6 +38,9 @@ as |api|>
diff --git a/ui/packages/consul-ui/app/components/empty-state/README.mdx b/ui/packages/consul-ui/app/components/empty-state/README.mdx
new file mode 100644
index 000000000..2e3d9e466
--- /dev/null
+++ b/ui/packages/consul-ui/app/components/empty-state/README.mdx
@@ -0,0 +1,81 @@
+---
+class: ember
+---
+# EmptyState
+
+Consul UIs default 'empty state' used for when we retrive an empty result set,
+whether that set is successful or erroneous. This is mainly used via the
+`ErrorState` component, so also consider using that directly instead of this
+component if dealing with errors.
+
+## Arguments
+
+| Argument | Type | Default | Description |
+| --- | --- | --- | --- |
+| `login` | `Function` | `undefined` | A login action to call when the login button is pressed (if not provided no login button will be shown |
+
+Icons are controlled via a `status-xxx` class. `xxx` should be some sort of
+3 digit error code, special icons are used for `404` and `403`, otherwise a
+generic icon will be used. To add any further special icons please add to the
+component's `skin` file.
+
+If the `@login` attribute is provided, a button will be shown directly
+underneath the body text clicking on which will fire the provided `@login`
+function.
+
+```hbs preview-template
+
+
+
+
+
+```
+
+The component has four slots for specifying header, subheader, body and
+'actions', although the component will show a minimal empty slot if only the
+body slot is specified:
+
+```hbs preview-template
+
+
+
{{/yield-slot}}
diff --git a/ui/packages/consul-ui/app/styles/components/empty-state/index.scss b/ui/packages/consul-ui/app/components/empty-state/index.scss
similarity index 92%
rename from ui/packages/consul-ui/app/styles/components/empty-state/index.scss
rename to ui/packages/consul-ui/app/components/empty-state/index.scss
index fae69d384..04fc9dfee 100644
--- a/ui/packages/consul-ui/app/styles/components/empty-state/index.scss
+++ b/ui/packages/consul-ui/app/components/empty-state/index.scss
@@ -13,6 +13,6 @@
%empty-state > ul > li > label > button {
@extend %empty-state-anchor;
}
-%empty-state label {
+%empty-state div > button {
@extend %primary-button;
}
diff --git a/ui/packages/consul-ui/app/styles/components/empty-state/layout.scss b/ui/packages/consul-ui/app/components/empty-state/layout.scss
similarity index 91%
rename from ui/packages/consul-ui/app/styles/components/empty-state/layout.scss
rename to ui/packages/consul-ui/app/components/empty-state/layout.scss
index d035f9a36..60a8f7f54 100644
--- a/ui/packages/consul-ui/app/styles/components/empty-state/layout.scss
+++ b/ui/packages/consul-ui/app/components/empty-state/layout.scss
@@ -15,8 +15,9 @@
width: 370px;
margin: 0 auto;
}
-%empty-state label {
- margin: 0 auto !important;
+%empty-state button {
+ margin: 0 auto;
+ display: inline;
}
%empty-state-header {
margin-bottom: -3px;
diff --git a/ui/packages/consul-ui/app/styles/components/empty-state/skin.scss b/ui/packages/consul-ui/app/components/empty-state/skin.scss
similarity index 100%
rename from ui/packages/consul-ui/app/styles/components/empty-state/skin.scss
rename to ui/packages/consul-ui/app/components/empty-state/skin.scss
diff --git a/ui/packages/consul-ui/app/components/error-state/README.mdx b/ui/packages/consul-ui/app/components/error-state/README.mdx
new file mode 100644
index 000000000..252b41937
--- /dev/null
+++ b/ui/packages/consul-ui/app/components/error-state/README.mdx
@@ -0,0 +1,34 @@
+# ErrorState
+
+Consul UIs default 'error state' used when an error is returned form the
+backend. This component used `EmptyState` internally, so please refer to that
+for more details.
+
+Using this component for all of our errors means we can show a consistent
+error page for generic errors.
+
+This component show slighltly different visuals and copy depending on the
+`status` of the error (the status is generally a HTTP error code)
+
+## Arguments
+
+| Argument | Type | Default | Description |
+| --- | --- | --- | --- |
+| `login` | `Function` | `undefined` | A login action to call when the login button is pressed (if not provided no login button will be shown |
+| `error` | `Object` | `undefined` | 'Consul UI error shaped' JSON `{status: String, message: String, detail: String}` |
+
+```hbs preview-template
+
+```
+
+As with `EmptyState` you can optionally chose to show a login button using the
+`@login` argument.
+
+```hbs preview-template
+
+```
diff --git a/ui/packages/consul-ui/app/components/error-state/README.stories.mdx b/ui/packages/consul-ui/app/components/error-state/README.stories.mdx
deleted file mode 100644
index 4742d859b..000000000
--- a/ui/packages/consul-ui/app/components/error-state/README.stories.mdx
+++ /dev/null
@@ -1,38 +0,0 @@
-import { Meta, Story, Canvas } from '@storybook/addon-docs/blocks';
-import { hbs } from 'ember-cli-htmlbars';
-
-
-
-# ErrorState
-
-
diff --git a/ui/packages/consul-ui/app/components/error-state/index.hbs b/ui/packages/consul-ui/app/components/error-state/index.hbs
index 039fb4ade..d32ad7c0e 100644
--- a/ui/packages/consul-ui/app/components/error-state/index.hbs
+++ b/ui/packages/consul-ui/app/components/error-state/index.hbs
@@ -1,7 +1,7 @@
{{#if (not-eq @error.status "403")}}
@@ -261,6 +282,14 @@
+
+
+
Logout
@@ -295,7 +324,7 @@
<:main>
{{yield (hash
- modal=this.modal
+ login=(if (env 'CONSUL_ACLS_ENABLED') this.modal (hash open=undefined))
)}}
diff --git a/ui/packages/consul-ui/app/components/hashicorp-consul/pageobject.js b/ui/packages/consul-ui/app/components/hashicorp-consul/pageobject.js
index b5d3075c7..6b650defa 100644
--- a/ui/packages/consul-ui/app/components/hashicorp-consul/pageobject.js
+++ b/ui/packages/consul-ui/app/components/hashicorp-consul/pageobject.js
@@ -42,7 +42,7 @@ export default (collection, clickable, attribute, is, authForm, emptyState) => s
status: attribute('data-test-status', '[data-test-status]'),
},
};
- page.navigation.login = clickable('[data-test-main-nav-auth] label');
+ page.navigation.login = clickable('[data-test-main-nav-auth] button');
page.navigation.dc = clickable('[data-test-datacenter-menu] button');
page.navigation.nspace = clickable('[data-test-nspace-menu] button');
page.navigation.manageNspaces = clickable('[data-test-main-nav-nspaces] a');
diff --git a/ui/packages/consul-ui/app/components/main-nav-horizontal/index.scss b/ui/packages/consul-ui/app/components/main-nav-horizontal/index.scss
index 45fef2c07..a8484febe 100644
--- a/ui/packages/consul-ui/app/components/main-nav-horizontal/index.scss
+++ b/ui/packages/consul-ui/app/components/main-nav-horizontal/index.scss
@@ -4,13 +4,13 @@
/* things that should look like nav buttons */
%main-nav-horizontal > ul > li > a,
%main-nav-horizontal > ul > li > span,
-%main-nav-horizontal > ul > li > label,
+%main-nav-horizontal > ul > li > button,
%main-nav-horizontal > ul > li > .popover-menu > label > button {
@extend %main-nav-horizontal-action;
}
%main-nav-horizontal .popover-menu [type='checkbox']:checked + label > *,
%main-nav-horizontal > ul > li.is-active > a,
-%main-nav-horizontal > ul > li.is-active > label > * {
+%main-nav-horizontal > ul > li.is-active > button {
@extend %main-nav-horizontal-action-active;
}
/* Whilst we want spans to look the same as actions */
diff --git a/ui/packages/consul-ui/app/components/modal-dialog/README.mdx b/ui/packages/consul-ui/app/components/modal-dialog/README.mdx
new file mode 100644
index 000000000..0fbcbde88
--- /dev/null
+++ b/ui/packages/consul-ui/app/components/modal-dialog/README.mdx
@@ -0,0 +1,69 @@
+---
+class: ember
+---
+# ModalDialog
+
+## Arguments
+
+| Argument | Type | Default | Description |
+| --- | --- | --- | --- |
+| `onopen` | `Function` | `undefined` | A function to call when the modal has opened |
+| `onclose` | `Function` | `undefined` | A function to call when the modal has closed |
+| `aria` | `Object` | `undefined` | A `hash` of aria properties used in the component, currently only label is supported |
+
+## Exports
+
+| Name | Type | Description |
+| --- | --- | --- |
+| `open` | `Function` | Opens the modal dialog |
+| `close` | `Function` | Closes the modal dialog |
+
+Works in tandem with `` to render modals. First of all ensure
+you have a modal layer on the page (it doesn't have to be in the same
+template)
+
+```hbs
+
+```
+
+Then all modals will be rendered into the `` for example:
+
+```hbs preview-template
+
+
+
+ {{did-insert (set this 'modal' modal)}}
+
+
+
-
\ No newline at end of file
+
+{{/let}}
\ No newline at end of file
diff --git a/ui/packages/consul-ui/app/components/modal-dialog/index.js b/ui/packages/consul-ui/app/components/modal-dialog/index.js
index de5aed02e..49e93b0d2 100644
--- a/ui/packages/consul-ui/app/components/modal-dialog/index.js
+++ b/ui/packages/consul-ui/app/components/modal-dialog/index.js
@@ -21,8 +21,5 @@ export default Component.extend(Slotted, {
close: function() {
this.dialog.hide();
},
- change: function(e) {
- this.actions.open.call(this);
- },
},
});
diff --git a/ui/packages/consul-ui/app/components/modal-layer/README.mdx b/ui/packages/consul-ui/app/components/modal-layer/README.mdx
new file mode 100644
index 000000000..97e6e2e9f
--- /dev/null
+++ b/ui/packages/consul-ui/app/components/modal-layer/README.mdx
@@ -0,0 +1,8 @@
+# ModalLayer
+
+A component to give you control over where `` components are
+rendered. Please see `` for more details.
+
+```hbs
+
+```
diff --git a/ui/packages/consul-ui/app/components/outlet/README.mdx b/ui/packages/consul-ui/app/components/outlet/README.mdx
new file mode 100644
index 000000000..dcb07ea11
--- /dev/null
+++ b/ui/packages/consul-ui/app/components/outlet/README.mdx
@@ -0,0 +1,43 @@
+# Outlet
+
+The `Outlet` component should be used to wrap *every* ember `{{outlet}}`. It
+provides/will provide functionality (along with the `` component)
+for setting and announcing the title of the page, passing data down through
+the route/template hierarchy, automatic orchestration of nested routing and
+visual animating/transitioning between routes.
+
+## Arguments
+
+| Argument | Type | Default | Description |
+| --- | --- | --- | --- |
+| `name` | `String` | `undefined` | The name of the route in ember routeName format e.g. `dc.services.index`. This is generally the `routeName` variable that is available to you in all Consul UI route/page level templates.|
+| `model` | `Object` | `undefined` | Arbitrary hash of data to pass down to the child route (available in the `` export). |
+
+
+```hbs
+
+ {{outlet}}
+
+```
+
+Currently, using the `` component means that every single page/route
+template is wrapped in a HTML `` element. This `` element
+has various data attributes attached to indiciate the loading state of the
+outlet. These can be used to specifically target every individual outlet via
+CSS.
+
+## Attributes
+
+| Data Attribute | Description |
+| --- | --- |
+| `data-outlet` | The name of this outlet in ember routeName format e.g. `dc.services.index` |
+| `data-route` | The name of the current child route of this outlet in ember routeName format e.g. `dc.services.show` |
+| `data-state` | The current state of this outlet, `idle` or `loading` |
+| `data-transition` | A combination of `idle` and `loading` states |
diff --git a/ui/packages/consul-ui/app/components/policy-form/index.hbs b/ui/packages/consul-ui/app/components/policy-form/index.hbs
index dee068eb0..d66bf40dc 100644
--- a/ui/packages/consul-ui/app/components/policy-form/index.hbs
+++ b/ui/packages/consul-ui/app/components/policy-form/index.hbs
@@ -1,5 +1,6 @@
{{yield}}
diff --git a/ui/packages/consul-ui/app/templates/dc/acls/policies/-form.hbs b/ui/packages/consul-ui/app/templates/dc/acls/policies/-form.hbs
index 21a2f790c..83031102f 100644
--- a/ui/packages/consul-ui/app/templates/dc/acls/policies/-form.hbs
+++ b/ui/packages/consul-ui/app/templates/dc/acls/policies/-form.hbs
@@ -26,6 +26,9 @@
- {{#if (gt items.length 0)}}
- No policies found
- {{else}}
- Welcome to Policies
- {{/if}}
-
-
-
-
- {{#if (gt items.length 0)}}
- No policies where found matching that search, or you may not have access to view the policies you are searching for.
- {{else}}
- There don't seem to be any policies, or you may not have access to view policies yet.
- {{/if}}
-
+ {{#if (gt items.length 0)}}
+ No policies found
+ {{else}}
+ Welcome to Policies
+ {{/if}}
+
+
+
+
+ {{#if (gt items.length 0)}}
+ No policies where found matching that search, or you may not have access to view the policies you are searching for.
+ {{else}}
+ There don't seem to be any policies, or you may not have access to view policies yet.
+ {{/if}}
+
+
+
+
+
+
+
-{{/let}}
\ No newline at end of file
+ {{/let}}
+
\ No newline at end of file
diff --git a/ui/packages/consul-ui/app/templates/dc/acls/roles/-form.hbs b/ui/packages/consul-ui/app/templates/dc/acls/roles/-form.hbs
index 886153552..6079e5d8e 100644
--- a/ui/packages/consul-ui/app/templates/dc/acls/roles/-form.hbs
+++ b/ui/packages/consul-ui/app/templates/dc/acls/roles/-form.hbs
@@ -24,7 +24,12 @@
{{#if (gt items.length 0)}}
-
+
- {{#if (gt items.length 0)}}
- No roles found
- {{else}}
- Welcome to Roles
- {{/if}}
-
-
-
-
- {{#if (gt items.length 0)}}
- No roles where found matching that search, or you may not have access to view the roles you are searching for.
- {{else}}
- There don't seem to be any roles, or you may not have access to view roles yet.
- {{/if}}
-
-
-
-
-
-
-
-{{/let}}
\ No newline at end of file
+ @sort={{sort}}
+
+ @filter={{filters}}
+ />
+ {{/if}}
+
+
+
+
+
+
+
+
+
+
+ {{#if (gt items.length 0)}}
+ No roles found
+ {{else}}
+ Welcome to Roles
+ {{/if}}
+
+
+
+
+ {{#if (gt items.length 0)}}
+ No roles where found matching that search, or you may not have access to view the roles you are searching for.
+ {{else}}
+ There don't seem to be any roles, or you may not have access to view roles yet.
+ {{/if}}
+
+ We have upgraded our ACL system by allowing you to create reusable policies which you can then apply to tokens. Don't worry, even though this token was written in the old style, it is still valid. However, we do recommend upgrading your old tokens to the new style. Learn how in our documentation.
+
- We have upgraded our ACL system by allowing you to create reusable policies which you can then apply to tokens. Don't worry, even though this token was written in the old style, it is still valid. However, we do recommend upgrading your old tokens to the new style. Learn how in our documentation.
-
We have upgraded our ACL System to allow the creation of reusable policies that can be applied to tokens. Read more about the changes and how to upgrade legacy tokens in our documentation.
-
-
- {{/if}}
-
-
-
-
-
-
-
-
- {{#if (gt items.length 0)}}
- No tokens found
- {{else}}
- Welcome to ACL Tokens
- {{/if}}
-
-
-
-
- {{#if (gt items.length 0)}}
- No tokens where found matching that search, or you may not have access to view the tokens you are searching for.
- {{else}}
- There don't seem to be any tokens, or you may not have access to view tokens yet.
- {{/if}}
-
We have upgraded our ACL System to allow the creation of reusable policies that can be applied to tokens. Read more about the changes and how to upgrade legacy tokens in our documentation.
+
+
+ {{/if}}
+
+
+
+
+
+
+
+
+ {{#if (gt items.length 0)}}
+ No tokens found
+ {{else}}
+ Welcome to ACL Tokens
+ {{/if}}
+
+
+
+
+ {{#if (gt items.length 0)}}
+ No tokens where found matching that search, or you may not have access to view the tokens you are searching for.
+ {{else}}
+ There don't seem to be any tokens, or you may not have access to view tokens yet.
+ {{/if}}
+
- {{#if (gt items.length 0)}}
- No intentions found
- {{else}}
- Welcome to Intentions
- {{/if}}
-
-
-
-
- {{#if (gt items.length 0)}}
- No intentions where found matching that search, or you may not have access to view the intentions you are searching for.
- {{else}}
- There don't seem to be any intentions, or you may not have access to view intentions yet.
- {{/if}}
-
+ {{#if (gt items.length 0)}}
+ No intentions found
+ {{else}}
+ Welcome to Intentions
+ {{/if}}
+
+
+
+
+ {{#if (gt items.length 0)}}
+ No intentions where found matching that search, or you may not have access to view the intentions you are searching for.
+ {{else}}
+ There don't seem to be any intentions, or you may not have access to view intentions yet.
+ {{/if}}
+
-{{#if item.Key}}
- {{left-trim item.Key parent.Key}}
-{{else}}
- New Key / Value
-{{/if}}
-
-
-
- {{! if a KV has a session `Session` will always be populated despite any specific session permissions }}
- {{#if item.Session}}
-
-
-
- Warning. This KV has a lock session. You can edit KV's with lock sessions, but we recommend doing so with care, or not doing so at all. It may negatively impact the active node it's associated with. See below for more details on the Lock Session and see our documentation for more information.
-
+ {{/each}}
{{/if}}
-
- {{! session is slightly different to item.Session as we only have session if you have session:read perms}}
- {{#if session}}
-
+
+
+
+
+ {{#if item.Key}}
+ {{left-trim item.Key parent.Key}}
+ {{else}}
+ New Key / Value
{{/if}}
-
-
\ No newline at end of file
+
+
+
+ {{! if a KV has a session `Session` will always be populated despite any specific session permissions }}
+ {{#if item.Session}}
+
+
+
+ Warning. This KV has a lock session. You can edit KV's with lock sessions, but we recommend doing so with care, or not doing so at all. It may negatively impact the active node it's associated with. See below for more details on the Lock Session and see our documentation for more information.
+
+
+
+ {{/if}}
+
+ {{! session is slightly different to item.Session as we only have session if you have session:read perms}}
+ {{#if session}}
+
+ {{/if}}
+
+
+
\ No newline at end of file
diff --git a/ui/packages/consul-ui/app/templates/dc/kv/index.hbs b/ui/packages/consul-ui/app/templates/dc/kv/index.hbs
index 8124b2528..52b9208b6 100644
--- a/ui/packages/consul-ui/app/templates/dc/kv/index.hbs
+++ b/ui/packages/consul-ui/app/templates/dc/kv/index.hbs
@@ -1,4 +1,7 @@
-{{page-title 'Key/Value'}}
+
{{#let
(hash
@@ -81,7 +84,9 @@ as |sort filters items|}}
/>
-
+
- This node has no service instances{{#if (gt items.length 0)}} matching that search{{/if}}.
-
-
-
-
-
-
-{{/let}}
\ No newline at end of file
+ {{/if}}
+ {{! filter out any sidecar proxies }}
+
+
+
+
+
+
+
+
+ This node has no service instances{{#if (gt items.length 0)}} matching that search{{/if}}.
+
+
+
+
+
+
+ {{/let}}
+
\ No newline at end of file
diff --git a/ui/packages/consul-ui/app/templates/dc/nodes/show/sessions.hbs b/ui/packages/consul-ui/app/templates/dc/nodes/show/sessions.hbs
index a4321d23f..5b78fc669 100644
--- a/ui/packages/consul-ui/app/templates/dc/nodes/show/sessions.hbs
+++ b/ui/packages/consul-ui/app/templates/dc/nodes/show/sessions.hbs
@@ -1,30 +1,36 @@
-
-
-{{#if (gt sessions.length 0)}}
-
-{{else}}
-
-
-
- Welcome to Lock Sessions
-
-
-
-
- Consul provides a session mechanism which can be used to build distributed locks. Sessions act as a binding layer between nodes, health checks, and key/value data. There are currently no lock sessions present, or you may not have permission to view lock sessions.
-
+ Consul provides a session mechanism which can be used to build distributed locks. Sessions act as a binding layer between nodes, health checks, and key/value data. There are currently no lock sessions present, or you may not have permission to view lock sessions.
+
- {{#if (gt items.length 0)}}
- No namespaces found
- {{else}}
- Welcome to Namespaces
- {{/if}}
-
-
-
-
- {{#if (gt items.length 0)}}
- No namespaces where found matching that search, or you may not have access to view the namespaces you are searching for.
- {{else}}
- There don't seem to be any namespaces, or you may not have access to view namespaces yet.
- {{/if}}
-
-
-
-
-
-
-
-{{/let}}
\ No newline at end of file
+ @sort={{sort}}
+
+ @filter={{filters}}
+ />
+ {{/if}}
+
+
+
+
+
+
+
+
+
+
+ {{#if (gt items.length 0)}}
+ No namespaces found
+ {{else}}
+ Welcome to Namespaces
+ {{/if}}
+
+
+
+
+ {{#if (gt items.length 0)}}
+ No namespaces where found matching that search, or you may not have access to view the namespaces you are searching for.
+ {{else}}
+ There don't seem to be any namespaces, or you may not have access to view namespaces yet.
+ {{/if}}
+
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/ui/packages/consul-ui/app/templates/dc/services/instance/addresses.hbs b/ui/packages/consul-ui/app/templates/dc/services/instance/addresses.hbs
index 6e11c73be..10b412226 100644
--- a/ui/packages/consul-ui/app/templates/dc/services/instance/addresses.hbs
+++ b/ui/packages/consul-ui/app/templates/dc/services/instance/addresses.hbs
@@ -1,28 +1,32 @@
-
- {{#if item.Service.TaggedAddresses }}
-
-
-
Tag
-
Address
-
-
- {{#with (object-at 1 taggedAddress) as |address|}}
-
- The following list shows individual HTTP paths exposed through Envoy for external services like Prometheus. Read more about this in our documentation.
-
-
-{{else}}
-
-
-
- There are no individual HTTP paths exposed through Envoy for external services like Prometheus. Read more about this in our documentation.
-
+ The following list shows individual HTTP paths exposed through Envoy for external services like Prometheus. Read more about this in our documentation.
+
+
+ {{else}}
+
+
+
+ There are no individual HTTP paths exposed through Envoy for external services like Prometheus. Read more about this in our documentation.
+
- This service has no upstreams{{#if (gt items.length 0)}} matching that search{{/if}}.
-
-
-
-
-
-{{/let}}
-
\ No newline at end of file
+ {{/if}}
+
+
+
+
+
+
+
+
+ This service has no upstreams{{#if (gt items.length 0)}} matching that search{{/if}}.
+
+
+
+
+
+ {{/let}}
+
+
\ No newline at end of file
diff --git a/ui/packages/consul-ui/app/templates/dc/services/show.hbs b/ui/packages/consul-ui/app/templates/dc/services/show.hbs
index 8bcc10232..2542ec769 100644
--- a/ui/packages/consul-ui/app/templates/dc/services/show.hbs
+++ b/ui/packages/consul-ui/app/templates/dc/services/show.hbs
@@ -1,8 +1,8 @@
+{{#let items.firstObject as |item|}}
- {{#let items.firstObject as |item|}}
- {{page-title item.Service.Service}}
@@ -14,7 +14,10 @@ as |route|>
-
+
@@ -107,6 +110,7 @@ as |route|>
{{outlet}}
@@ -114,5 +118,5 @@ as |route|>
- {{/let}}
-
\ No newline at end of file
+
+{{/let}}
\ No newline at end of file
diff --git a/ui/packages/consul-ui/app/templates/dc/services/show/instances.hbs b/ui/packages/consul-ui/app/templates/dc/services/show/instances.hbs
index d1907e017..b3dc2eb60 100644
--- a/ui/packages/consul-ui/app/templates/dc/services/show/instances.hbs
+++ b/ui/packages/consul-ui/app/templates/dc/services/show/instances.hbs
@@ -1,6 +1,6 @@
+as |route|>
- The following services may receive traffic from external services through this gateway. Learn more about configuring gateways in our
- step-by-step guide.
-
-
-
-
-
-
-
-
-
-
- There are no linked services{{#if (gt items.length 0)}} matching that search{{/if}}.
-
-
-
-
-
-{{/let}}
-
+ @filter={{filters}}
+ />
+ {{/if}}
+
+ The following services may receive traffic from external services through this gateway. Learn more about configuring gateways in our
+ step-by-step guide.
+
+
+
+
+
+
+
+
+
+
+ There are no linked services{{#if (gt items.length 0)}} matching that search{{/if}}.
+
- This service has neither downstreams nor upstreams, which means that no services are configured to connect with it. Add upstreams and intentions to ensure this service is connected with the rest of your service mesh.
-
+ This service has neither downstreams nor upstreams, which means that no services are configured to connect with it. Add upstreams and intentions to ensure this service is connected with the rest of your service mesh.
+
+ Upstreams are services that may receive traffic from this gateway. Learn more about configuring gateways in our documentation.
+
+
+
+
+
+
+
+
+
+
+ There are no upstreams{{#if (gt items.length 0)}} matching that search{{/if}}.
+
+
+
+
+
+ {{/let}}
+
+
diff --git a/ui/packages/consul-ui/app/templates/nspace.hbs b/ui/packages/consul-ui/app/templates/nspace.hbs
index 2929fdf92..a02351727 100644
--- a/ui/packages/consul-ui/app/templates/nspace.hbs
+++ b/ui/packages/consul-ui/app/templates/nspace.hbs
@@ -1,5 +1,10 @@
-
- {{outlet}}
-
\ No newline at end of file
+as |route|>
+
+ {{outlet}}
+
+
diff --git a/ui/packages/consul-ui/tests/acceptance/dc/acls/roles/as-many/add-new.feature b/ui/packages/consul-ui/tests/acceptance/dc/acls/roles/as-many/add-new.feature
index 66dbb0603..7e0746ad2 100644
--- a/ui/packages/consul-ui/tests/acceptance/dc/acls/roles/as-many/add-new.feature
+++ b/ui/packages/consul-ui/tests/acceptance/dc/acls/roles/as-many/add-new.feature
@@ -51,7 +51,7 @@ Feature: dc / acls / roles / as-many / add-new: Add new
And "[data-notification]" has the "notification-update" class
And "[data-notification]" has the "success" class
Scenario: Add Role that has an existing Policy
- And I click "#new-role-toggle + div .ember-power-select-trigger"
+ And I click "#new-role .ember-power-select-trigger"
And I click ".ember-power-select-option:first-child"
And I click submit on the roles.form
Then a PUT request was made to "/v1/acl/role?dc=datacenter" from yaml