mirror of
https://github.com/hashicorp/vault.git
synced 2025-08-22 15:11:07 +02:00
63 lines
1.8 KiB
TypeScript
63 lines
1.8 KiB
TypeScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: BUSL-1.1
|
|
*/
|
|
|
|
import Component from '@glimmer/component';
|
|
import { action } from '@ember/object';
|
|
import { tracked } from '@glimmer/tracking';
|
|
|
|
import type { UnauthMountsByType } from 'vault/vault/auth/form';
|
|
import type { HTMLElementEvent } from 'vault/forms';
|
|
|
|
interface Args {
|
|
authTabData: UnauthMountsByType;
|
|
handleTabClick: CallableFunction;
|
|
selectedAuthMethod: string;
|
|
}
|
|
|
|
export default class AuthTabs extends Component<Args> {
|
|
@tracked selectedMountPath = '';
|
|
|
|
constructor(owner: unknown, args: Args) {
|
|
super(owner, args);
|
|
this.setSelectedMountPath();
|
|
}
|
|
|
|
get mountDescription() {
|
|
const selectedAuth = this.args.selectedAuthMethod;
|
|
const mounts = this.args.authTabData[selectedAuth];
|
|
const mount = mounts?.find((m) => m.path === this.selectedMountPath);
|
|
return mount?.description ?? '';
|
|
}
|
|
|
|
get tabTypes() {
|
|
return this.args.authTabData ? Object.keys(this.args.authTabData) : [];
|
|
}
|
|
|
|
get selectedTabIndex() {
|
|
const index = this.tabTypes.indexOf(this.args.selectedAuthMethod);
|
|
// negative index means the selected method isn't a tab, default to first tab
|
|
return index < 0 ? 0 : index;
|
|
}
|
|
|
|
@action
|
|
onClickTab(_event: HTMLElementEvent<HTMLInputElement>, idx: number) {
|
|
const newMethod = this.tabTypes[idx];
|
|
this.args.handleTabClick(newMethod);
|
|
// Reset selected mount path when tab changes
|
|
this.setSelectedMountPath();
|
|
}
|
|
|
|
@action
|
|
setMount(event: HTMLElementEvent<HTMLInputElement>) {
|
|
this.selectedMountPath = event.target.value;
|
|
}
|
|
|
|
private setSelectedMountPath() {
|
|
const mounts = this.args.authTabData[this.args.selectedAuthMethod];
|
|
const firstMount = mounts?.length ? mounts[0] : null;
|
|
this.selectedMountPath = firstMount?.path ?? '';
|
|
}
|
|
}
|