mirror of
https://github.com/hashicorp/vault.git
synced 2025-11-12 06:11:10 +01:00
* updates auth method options route to use form and api client * updates auth method config and section routes to use api client and open api form * updates display attrs for auth method configs * fixes plugin identity util fields tests * fixes js lint error * updates enable-tune-form tests * hides specific form field for jwt/oidc auth config types * Revert "updates display attrs for auth method configs" This reverts commit 5d382f79276f56b3fdbe64fcbc9c8365c5f4b421. * Revert "fixes plugin identity util fields tests" This reverts commit 6d4acbe3228c796745f2dea6279c1540bb053c62. * fixes config section test * bumps api client version * updates auth config form options component to use proper endpoint * fixes enable tune form tests * fixes auth config form options tests * fixes type errors in snapshot-manage component * updates recover_source_path arg to undefined so it is not included in the query params * fixes remaining test failures related to user_lockout_config --------- Co-authored-by: Vault Automation <github-team-secure-vault-core@hashicorp.com>
58 lines
2.4 KiB
TypeScript
58 lines
2.4 KiB
TypeScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: BUSL-1.1
|
|
*/
|
|
|
|
import Form from 'vault/forms/form';
|
|
import FormField from 'vault/utils/forms/field';
|
|
import FormFieldGroup from 'vault/utils/forms/field-group';
|
|
import { propsForSchema } from 'vault/utils/openapi-helpers';
|
|
|
|
import type { OpenApiHelpResponse } from 'vault/utils/openapi-helpers';
|
|
|
|
export default class OpenApiForm<T extends object> extends Form<T> {
|
|
declare formFieldGroups: FormFieldGroup[];
|
|
|
|
constructor(helpResponse: OpenApiHelpResponse, ...formArgs: ConstructorParameters<typeof Form>) {
|
|
super(...formArgs);
|
|
// create formFieldGroups from the OpenAPI properties
|
|
const props = propsForSchema(helpResponse);
|
|
const groups: { [groupName: string]: FormField[] } = {};
|
|
// iterate over the properties and organize them into groups
|
|
for (const [name, prop] of Object.entries(props)) {
|
|
// disabling lint rule since we need to ignore certain options returned from expandOpenApiProps util
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
const { fieldGroup, fieldValue, type, defaultValue, ...options } = prop;
|
|
// groupName from groupsMap takes precedence over fieldGroup from the property
|
|
const group = fieldGroup || 'default';
|
|
// organize the form fields so we can create formFieldGroups later
|
|
if (!(group in groups)) {
|
|
groups[group] = [];
|
|
}
|
|
// create a new FormField for the property and associate it with the appropriate fieldGroup
|
|
// props marked as `identifier` are primary fields that should be rendered first in the form
|
|
const arrMethod = options.identifier ? 'unshift' : 'push';
|
|
groups[group]?.[arrMethod](new FormField(name, type, options));
|
|
// set the default value on the data object
|
|
if (defaultValue && this.data[name as keyof typeof this.data] === undefined) {
|
|
this.data = { ...this.data, [name]: defaultValue };
|
|
}
|
|
}
|
|
|
|
// ensure default group is the first item in the formFieldGroups
|
|
|
|
// create formFieldGroups from the expanded groups
|
|
this.formFieldGroups = Object.entries(groups).reduce<FormFieldGroup[]>(
|
|
(formFieldGroups, [groupName, fields]) => {
|
|
const group = new FormFieldGroup(groupName, fields);
|
|
// ensure the default group is the first group to render
|
|
if (groupName === 'default') {
|
|
return [group, ...formFieldGroups];
|
|
}
|
|
return [...formFieldGroups, group];
|
|
},
|
|
[]
|
|
);
|
|
}
|
|
}
|