mirror of https://github.com/portainer/portainer
64 lines
2.1 KiB
TypeScript
64 lines
2.1 KiB
TypeScript
import { object, string, boolean, array, number, SchemaOf } from 'yup';
|
|
|
|
import { IngressControllerClassMap } from '../../ingressClass/types';
|
|
|
|
import { ConfigureFormValues } from './types';
|
|
|
|
// Define Yup schema for AccessMode
|
|
const accessModeSchema = object().shape({
|
|
Description: string().required(),
|
|
Name: string().required(),
|
|
selected: boolean().required(),
|
|
});
|
|
|
|
// Define Yup schema for StorageClassFormValues
|
|
const storageClassFormValuesSchema = array()
|
|
.of(
|
|
object().shape({
|
|
Name: string().required(),
|
|
AccessModes: array().of(accessModeSchema).required(),
|
|
Provisioner: string().required(),
|
|
AllowVolumeExpansion: boolean().required(),
|
|
selected: boolean().required(),
|
|
})
|
|
)
|
|
.test(
|
|
// invalid if any storage class is not selected or
|
|
// if it's selected and at least one access mode is selected
|
|
'accessModes',
|
|
'Shared access policy configuration required.',
|
|
(storageClasses) => {
|
|
const isValid = storageClasses?.every(
|
|
(value) =>
|
|
!value.selected ||
|
|
(value.AccessModes && value.AccessModes?.length > 0)
|
|
);
|
|
return isValid || false;
|
|
}
|
|
);
|
|
|
|
// Define Yup schema for IngressControllerClassMap
|
|
const ingressControllerClassMapSchema: SchemaOf<IngressControllerClassMap> =
|
|
object().shape({
|
|
Name: string().required(),
|
|
ClassName: string().required(),
|
|
Type: string().required(),
|
|
Availability: boolean().required(),
|
|
New: boolean().required(),
|
|
Used: boolean().required(),
|
|
});
|
|
|
|
// Define Yup schema for ConfigureFormValues
|
|
export const configureValidationSchema: SchemaOf<ConfigureFormValues> = object({
|
|
useLoadBalancer: boolean().required(),
|
|
useServerMetrics: boolean().required(),
|
|
enableResourceOverCommit: boolean().required(),
|
|
resourceOverCommitPercentage: number().required(),
|
|
restrictDefaultNamespace: boolean().required(),
|
|
restrictStandardUserIngressW: boolean().required(),
|
|
ingressAvailabilityPerNamespace: boolean().required(),
|
|
allowNoneIngressClass: boolean().required(),
|
|
storageClasses: storageClassFormValuesSchema.required(),
|
|
ingressClasses: array().of(ingressControllerClassMapSchema).required(),
|
|
});
|