consul/ui-v2/app/utils
John Cowen 604de8758b
ui: Fix using 'ui-like' KVs when using an empty default nspace (#7734)
When using namespaces, the 'default' namespace is a little special in
that we wanted the option for all our URLs to stay the same when using
namespaces if you are using the default namespace, with the option of
also being able to explicitly specify `~default` as a namespace.

In other words both `ui/services/service-name` and
`ui/~default/services/service-name` show the same thing.

This means that if you switch between OSS and Enterprise, all of your
URLs stay the same, but you can still specifically link to the default
namespace itself.

Our routing configuration is duplicated in order to achieve this:

```
- :dc
  - :service
  - :kv
    - :edit
- :nspace
  - :dc
    - :service
    - :kv
      - :edit
```

Secondly, ember routing resolves/matches routes in the order that you specify
them, unless, its seems, when using wildcard routes, like we do in the
KV area.

When not using the wildcard routes the above routing configuration
resolves/matches a `/dc-1/kv/service` to the `dc.kv.edit` route correctly
(dc:dc-1, kv:services), that route having been configured in a higher
priority than the nspace routes.

However when configured with wildcards (required in the KV area), note
the asterisk below:

```
- :dc
    :service
  - :kv
    - *edit
- :nspace
  - :dc
    - :service
    - :kv
      - *edit
```

Given something like `/dc-1/kv/services` the router instead matches the
`nspace.dc.service` (nspace:dc-1, dc:kv, service:services) route first even
though the `dc.kv.edit` route should still match first.
Changing the `dc.kv.edit` route back to use a non-wildcard route
(:edit instead of *edit), returns the router to match the routes in the
correct order.

In order to work around this, we catch any incorrectly matched routes
(those being directed to the nspace Route but not having a `~`
character in the nspace parameter), and then recalculate the correct
route name and parameters. Lastly we use this recalculated route to
direct the user/app to the correct route.

This route recalcation requires walking up the route to gather up all of
the required route parameters, and although this feels like something
that could already exist in ember, it doesn't seem to. We had already
done a lot of this work a while ago when implementing our `href-mut`
helper. This commit therefore repurposes that work slighlty and externalizes
it outside of the helper itself into a more usable util so we can import
it where we need it. Tests have been added before refactoring it down
to make the code easier to follow.
2020-04-30 09:28:20 +01:00
..
components/discovery-chain ui: Discovery chain improvements (#7222) 2020-02-06 12:06:47 +00:00
computed ui: UI Release Merge (ui-staging merge) (#6527) 2019-09-30 14:47:49 +01:00
dom ui: Improve configuration/env/feature flag usage (also add build time year detection) (#7072) 2020-01-21 17:52:40 +00:00
editor ui: Adds multi syntax linting to the code editor (#4814) 2018-10-19 17:36:38 +01:00
form ui: UI Release Merge (ui-staging merge) (#6527) 2019-09-30 14:47:49 +01:00
helpers UI: Reduce in-development deprecations (also use toLocaleString) (#4677) 2018-10-01 13:42:42 +01:00
http ui: Namespace Support (#6639) 2019-12-18 12:26:47 +00:00
model Tie up real endpoints 2018-06-25 12:25:15 -07:00
routing ui: Fix using 'ui-like' KVs when using an empty default nspace (#7734) 2020-04-30 09:28:20 +01:00
search ui: Search improvements (#5540) 2019-05-01 18:22:36 +00:00
storage UI: New ACLs (#4789) 2018-10-19 08:45:05 -07:00
ticker ui: Discovery Chain (#6746) 2019-12-18 12:26:47 +00:00
acls-status.js ui: Adds better error passthrough, disable/unauthorize properly on error (#5041) 2019-05-01 18:21:53 +00:00
ascend.js UI V2 (#4086) 2018-05-10 19:52:53 +01:00
atob.js ui: Adds ember-auto-import and replaces the 3 places where we used npm: (#5952) 2019-09-04 08:35:00 +00:00
btoa.js ui: Adds ember-auto-import and replaces the 3 places where we used npm: (#5952) 2019-09-04 08:35:00 +00:00
callable-type.js More detailed error messages for duplicate intentions 2018-06-25 12:25:15 -07:00
create-fingerprinter.js Ensure ember-data ids are created correct taking into account the nspace (#6974) 2019-12-20 14:30:19 +00:00
createURL.js ui: UI Release Merge (ui-staging merge) (#6527) 2019-09-30 14:47:49 +01:00
distance.js ui: Some trivial test additions, support env var passing of port numbers (#4728) 2018-10-26 17:50:43 +01:00
get-environment.js ui: Lazily detect HTTP protocol (#7644) 2020-04-15 14:42:55 +01:00
get-form-name-property.js UI: New ACLs (#4789) 2018-10-19 08:45:05 -07:00
get-object-pool.js ui: Adds XHR connection management to HTTP/1.1 installs (#5083) 2019-05-01 18:22:02 +00:00
hasStatus.js UI V2 (#4086) 2018-05-10 19:52:53 +01:00
isFolder.js UI V2 (#4086) 2018-05-10 19:52:53 +01:00
keyToArray.js UI V2 (#4086) 2018-05-10 19:52:53 +01:00
left-trim.js Adds filtering to the KV listing page 2018-06-12 11:24:35 +01:00
minimizeModel.js UI: ACL Roles (#5635) 2019-05-01 18:22:37 +00:00
non-empty-set.js ui: Acceptance test improvements to prepare for more NS tests (#6980) 2020-01-24 12:26:28 +00:00
promisedTimeout.js UI: Tooltips and feedback-dialogs are the same thing - merge (#4678) 2018-09-21 11:13:21 +01:00
remove-null.js Don't clone prev, there's no need 2018-07-06 13:09:23 +01:00
right-trim.js Adds filtering to the KV listing page 2018-06-12 11:24:35 +01:00
sumOfUnhealthy.js UI V2 (#4086) 2018-05-10 19:52:53 +01:00
templatize.js UI: New ACLs (#4789) 2018-10-19 08:45:05 -07:00
tomography.js ui: Fixes RTT display, by ensuring use of ember proxies in tomography (#5666) 2019-05-01 18:22:33 +00:00
ucfirst.js UI V2 (#4086) 2018-05-10 19:52:53 +01:00
update-array-object.js ui: UI Release Merge (ui-staging merge) (#6527) 2019-09-30 14:47:49 +01:00