| /** |
| * Copyright (c) HashiCorp, Inc. |
| * SPDX-License-Identifier: MPL-2.0 |
| */ |
| |
| import { inject as service } from '@ember/service'; |
| import { alias } from '@ember/object/computed'; |
| import Component from '@ember/component'; |
| import { computed } from '@ember/object'; |
| |
| export default Component.extend({ |
| namespaceService: service('namespace'), |
| currentNamespace: alias('namespaceService.path'), |
| |
| tagName: '', |
| //public api |
| targetNamespace: null, |
| showLastSegment: false, |
| // set to true if targetNamespace is passed in unmodified |
| // otherwise, this assumes it is parsed as in namespace-picker |
| unparsed: false, |
| |
| normalizedNamespace: computed('targetNamespace', 'unparsed', function () { |
| const ns = this.targetNamespace || ''; |
| return this.unparsed ? ns : ns.replace(/\.+/g, '/').replace(/☃/g, '.'); |
| }), |
| |
| namespaceDisplay: computed('normalizedNamespace', 'showLastSegment', function () { |
| const ns = this.normalizedNamespace; |
| if (!ns) return 'root'; |
| const showLastSegment = this.showLastSegment; |
| const parts = ns?.split('/'); |
| return showLastSegment ? parts[parts.length - 1] : ns; |
| }), |
| |
| isCurrentNamespace: computed('targetNamespace', 'currentNamespace', function () { |
| return this.currentNamespace === this.targetNamespace; |
| }), |
| |
| get namespaceLink() { |
| const origin = |
| window.location.protocol + |
| '//' + |
| window.location.hostname + |
| (window.location.port ? ':' + window.location.port : ''); |
| |
| if (!this.normalizedNamespace) return `${origin}/ui/vault/secrets`; |
| // The full URL/origin is required so that the page is reloaded. |
| return `${origin}/ui/vault/secrets?namespace=${encodeURIComponent(this.normalizedNamespace)}`; |
| }, |
| }); |