2023-04-10 15:36:59 +00:00
|
|
|
/**
|
|
|
|
* Copyright (c) HashiCorp, Inc.
|
|
|
|
* SPDX-License-Identifier: MPL-2.0
|
|
|
|
*/
|
|
|
|
|
2018-07-25 17:35:03 +00:00
|
|
|
import Component from '@ember/component';
|
2020-06-10 13:49:16 +00:00
|
|
|
import classic from 'ember-classic-decorator';
|
2020-12-07 14:33:49 +00:00
|
|
|
import { inject as service } from '@ember/service';
|
2022-03-08 17:28:36 +00:00
|
|
|
import { attributeBindings } from '@ember-decorators/component';
|
2023-02-02 21:29:04 +00:00
|
|
|
import { htmlSafe } from '@ember/template';
|
2018-07-25 17:35:03 +00:00
|
|
|
|
2020-06-10 13:49:16 +00:00
|
|
|
@classic
|
2022-03-08 17:28:36 +00:00
|
|
|
@attributeBindings('data-test-global-header')
|
2020-06-10 13:49:16 +00:00
|
|
|
export default class GlobalHeader extends Component {
|
2020-12-07 14:33:49 +00:00
|
|
|
@service config;
|
ui: Change global search to use fuzzy search API (#10412)
This updates the UI to use the new fuzzy search API. It’s a drop-in
replacement so the / shortcut to jump to search is preserved, and
results can be cycled through and chosen via arrow keys and the
enter key.
It doesn’t use everything returned by the API:
* deployments and evaluations: these match by id, doesn’t seem like
people would know those or benefit from quick navigation to them
* namespaces: doesn’t seem useful as they currently function
* scaling policies
* tasks: the response doesn’t include an allocation id, which means they
can’t be navigated to in the UI without an additional query
* CSI volumes: aren’t actually returned by the API
Since there’s no API to check the server configuration and know whether
the feature has been disabled, this adds another query in
route:application#beforeModel that acts as feature detection: if the
attempt to query fails (500), the global search field is hidden.
Upon having added another query on load, I realised that beforeModel was
being triggered any time service:router#transitionTo was being called,
which happens upon navigating to a search result, for instance, because
of refreshModel being present on the region query parameter. This PR
adds a check for transition.queryParamsOnly and skips rerunning the
onload queries (token permissions check, license check, fuzzy search
feature detection).
Implementation notes:
* there are changes to unrelated tests to ignore the on-load feature
detection query
* some lifecycle-related guards against undefined were required to
address failures when navigating to an allocation
* the minimum search length of 2 characters is hard-coded as there’s
currently no way to determine min_term_length in the UI
2021-04-28 18:31:05 +00:00
|
|
|
@service system;
|
2020-12-07 14:33:49 +00:00
|
|
|
|
2020-06-10 13:49:16 +00:00
|
|
|
'data-test-global-header' = true;
|
|
|
|
onHamburgerClick() {}
|
2022-11-28 15:44:52 +00:00
|
|
|
|
|
|
|
// Show sign-in if:
|
|
|
|
// - User can't load agent config (meaning ACLs are enabled but they're not signed in)
|
|
|
|
// - User can load agent config in and ACLs are enabled (meaning ACLs are enabled and they're signed in)
|
|
|
|
// The excluded case here is if there is both an agent config and ACLs are disabled
|
|
|
|
get shouldShowProfileNav() {
|
|
|
|
return (
|
|
|
|
!this.system.agent?.get('config') ||
|
|
|
|
this.system.agent?.get('config.ACL.Enabled') === true
|
|
|
|
);
|
|
|
|
}
|
2023-02-02 21:29:04 +00:00
|
|
|
|
|
|
|
get labelStyles() {
|
|
|
|
return htmlSafe(
|
|
|
|
`
|
|
|
|
color: ${this.system.agent.get('config')?.UI?.Label?.TextColor};
|
|
|
|
background-color: ${
|
|
|
|
this.system.agent.get('config')?.UI?.Label?.BackgroundColor
|
|
|
|
};
|
|
|
|
`
|
|
|
|
);
|
|
|
|
}
|
2020-06-10 13:49:16 +00:00
|
|
|
}
|