Files
vault/ui/lib/core/addon/helpers/transition-to.js
claire bontempo 7774261c15 UI: Ember upgrade: Handle deprecation router service from host (#28603)
* use alias for router injection

* update @router declarations in engine files

* fix remaining pki router imports

* dynamically set router based on owner

* address replication routers

* update markdown docs

* use non-deprecated import for getOwner

* revert out of scope changes

* add transition-to test
2024-10-08 09:01:46 -07:00

32 lines
1.2 KiB
JavaScript

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
import Helper from '@ember/component/helper';
import { getOwner } from '@ember/owner';
/*
template helper that replaces ember-router-helpers https://github.com/rwjblue/ember-router-helpers
example:
<MyForm @onSave={{transition-to "vault.cluster.some.route.item" "item-id"}} />
<MyForm @onSave={{transition-to "vault.cluster.some.external.route" external=true}} />
*/
export default class TransitionTo extends Helper {
// We don't import the router service here because Ember Engine's use the alias 'app-router'
// Since this helper is shared across engines, we look up the router dynamically using getOwner instead.
// This way we avoid throwing an error by looking up a service that doesn't exist.
// https://guides.emberjs.com/release/services/#toc_accessing-services
get router() {
const owner = getOwner(this);
return owner.lookup('service:router') || owner.lookup('service:app-router');
}
compute(routeParams, { external = false }) {
if (external) {
return () => this.router.transitionToExternal(...routeParams);
}
return () => this.router.transitionTo(...routeParams);
}
}