1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-31 03:09:44 +02:00

feat(namespace): migrate create ns to react [EE-2226] (#10377)

This commit is contained in:
Ali 2023-10-11 20:32:02 +01:00 committed by GitHub
parent 31bcba96c6
commit 7218eb0892
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
83 changed files with 1869 additions and 358 deletions

View file

@ -0,0 +1,56 @@
import _ from 'lodash';
import { AnySchema, TestContext, TypeOf, ValidationError } from 'yup';
import Lazy from 'yup/lib/Lazy';
import { AnyObject } from 'yup/lib/types';
/**
* Builds a uniqueness test for yup.
* @param errorMessage The error message to display for duplicates.
* @param path The path to the value to test for uniqueness (if the list item is an object).
* @returns A function that can be passed to yup's `test` method.
*/
export function buildUniquenessTest<
T extends AnySchema | Lazy<AnySchema, AnySchema>,
>(errorMessage: (errorIndex: number) => string, path = '') {
return (
list: Array<TypeOf<T>> | undefined,
testContext: TestContext<AnyObject>
) => {
if (!list) {
return true;
}
const values = list.map(mapper);
// check for duplicates, adding the index of each duplicate to an array
const seen = new Set<TypeOf<T>>();
const duplicates: number[] = [];
values.forEach((value, i) => {
if (seen.has(value)) {
duplicates.push(i);
} else {
seen.add(value);
}
});
// create an array of yup validation errors for each duplicate
const errors = duplicates.map((i) => {
const error = new ValidationError(
errorMessage(i),
list[i],
`${testContext.path}[${i}]${path}`
);
return error;
});
if (errors.length > 0) {
throw new ValidationError(errors);
}
return true;
};
function mapper(a: TypeOf<T>) {
return path ? _.get(a, path) : a;
}
}