mirror of https://github.com/portainer/portainer
63 lines
2.1 KiB
TypeScript
63 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?.some((accessMode) => accessMode.selected)
|
||
|
);
|
||
|
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(),
|
||
|
});
|