John Cowen ee0e8bf500
ui: App-ify Lock Sessions (#12482)
This commit moves our in-app LockSessions code into an external 'app', which can theoretically be side-loaded but for now it just makes for good isolation/code hygiene.

Functionally, there is kind of one change here, and that is we only show the 'Lock Session' tab if you have permissions to see them. Currently as our UI authorization endpoint needs to be changed slightly to suit our usecase, you will always have permissions to see Lock Sessions as we hardcode the session:read to true (obvs this is a frontend thing, not a backend thing), so it doesn't really change anything from a user perspective.

Also added very bare docs while I was here.

Small note here, ideally we need to add the each individual tab depending on whether an 'app' is enabled or not instead of just permissions, ideally it would be done totally from The Outside rather than a can based conditional on the inside, just something else to be thinking about for the future.
2022-03-14 16:54:49 +00:00

164 lines
4.7 KiB
Handlebars

<Route
@name={{routeName}}
as |route|>
<DataSource @src={{uri '/${partition}/${nspace}/${dc}/coordinates/for-node/${name}'
(hash
partition=route.params.partition
nspace=route.params.nspace
dc=route.params.dc
name=route.params.name
)
}} as |tomography|>
<DataLoader
@src={{uri '/${partition}/${nspace}/${dc}/node/${name}'
(hash
partition=route.params.partition
nspace=route.params.nspace
dc=route.params.dc
name=route.params.name
)
}}
as |loader|>
<BlockSlot @name="error">
<AppError
@error={{loader.error}}
@login={{route.model.app.login.open}}
/>
</BlockSlot>
<BlockSlot @name="disconnected" as |after|>
{{#if (eq loader.error.status "404")}}
<Notice
{{notification
sticky=true
}}
class="notification-update"
@type="warning"
as |notice|>
<notice.Header>
<strong>Warning!</strong>
</notice.Header>
<notice.Body>
<p>
This node no longer exists in the catalog.
</p>
</notice.Body>
</Notice>
{{else if (eq loader.error.status "403")}}
<Notice
{{notification
sticky=true
}}
class="notification-update"
@type="error"
as |notice|>
<notice.Header>
<strong>Error!</strong>
</notice.Header>
<notice.Body>
<p>
You no longer have access to this node
</p>
</notice.Body>
</Notice>
{{else}}
<Notice
{{notification
sticky=true
}}
class="notification-update"
@type="warning"
as |notice|>
<notice.Header>
<strong>Warning!</strong>
</notice.Header>
<notice.Body>
<p>
An error was returned whilst loading this data, refresh to try again.
</p>
</notice.Body>
</Notice>
{{/if}}
</BlockSlot>
<BlockSlot @name="loaded">
{{#let
loader.data
tomography.data
as |item tomography|}}
<AppView>
<BlockSlot @name="notification" as |status type|>
<Consul::LockSession::Notifications
@type={{type}}
@status={{status}}
/>
</BlockSlot>
<BlockSlot @name="breadcrumbs">
<ol>
<li><a data-test-back href={{href-to 'dc.nodes'}}>All Nodes</a></li>
</ol>
</BlockSlot>
<BlockSlot @name="header">
<h1>
<route.Title @title={{item.Node}} />
</h1>
<label for="toolbar-toggle"></label>
</BlockSlot>
<BlockSlot @name="nav">
<TabNav @items={{
compact
(array
(hash
label=(t 'routes.dc.nodes.show.healthchecks.title')
href=(href-to "dc.nodes.show.healthchecks")
selected=(is-href "dc.nodes.show.healthchecks")
)
(hash
label=(t 'routes.dc.nodes.show.services.title')
href=(href-to "dc.nodes.show.services")
selected=(is-href "dc.nodes.show.services")
)
(if tomography.distances
(hash
label=(t 'routes.dc.nodes.show.rtt.title')
href=(href-to "dc.nodes.show.rtt")
selected=(is-href "dc.nodes.show.rtt")
)
'')
(if (can 'read sessions')
(hash
label=(t 'routes.dc.nodes.show.sessions.title')
href=(href-to "dc.nodes.show.sessions")
selected=(is-href "dc.nodes.show.sessions")
)
'')
(hash
label=(t 'routes.dc.nodes.show.metadata.title')
href=(href-to "dc.nodes.show.metadata")
selected=(is-href "dc.nodes.show.metadata")
)
)
}}/>
</BlockSlot>
<BlockSlot @name="actions">
<CopyButton @value={{item.Address}} @name="Address">{{item.Address}}</CopyButton>
</BlockSlot>
<BlockSlot @name="content">
<Outlet
@name={{routeName}}
@model={{assign
(hash
item=item
tomography=tomography
) route.model
}}
as |o|>
{{outlet}}
</Outlet>
</BlockSlot>
</AppView>
{{/let}}
</BlockSlot>
</DataLoader>
</DataSource>
</Route>