consul/ui/packages/consul-ui/app/components/jwt-source/index.js

52 lines
1.3 KiB
JavaScript

/**
* Copyright (c) HashiCorp, Inc.
* SPDX-License-Identifier: BUSL-1.1
*/
import Component from '@glimmer/component';
import { inject as service } from '@ember/service';
import { fromPromise } from 'consul-ui/utils/dom/event-source';
// TODO: We could probably update this to be a template only component now
// rather than a JS only one.
export default class JWTSource extends Component {
@service('repository/oidc-provider') repo;
@service('dom') dom;
constructor() {
super(...arguments);
if (this.source) {
this.source.close();
}
this._listeners = this.dom.listeners();
// TODO: Could this use once? Double check but I don't think it can
this.source = fromPromise(this.repo.findCodeByURL(this.args.src));
this._listeners.add(this.source, {
message: (e) => this.onchange(e),
error: (e) => this.onerror(e),
});
}
onchange(e) {
if (typeof this.args.onchange === 'function') {
this.args.onchange(...arguments);
}
}
onerror(e) {
if (typeof this.args.onerror === 'function') {
this.args.onerror(...arguments);
}
}
willDestroy() {
super.willDestroy(...arguments);
if (this.source) {
this.source.close();
}
this.repo.close();
this._listeners.remove();
}
}