mirror of
https://github.com/Unleash/unleash.git
synced 2025-01-01 00:08:27 +01:00
4167a60588
Follows up on https://github.com/Unleash/unleash/pull/4853 to add Biome to the frontend as well. ![image](https://github.com/Unleash/unleash/assets/14320932/1906faf1-fc29-4172-a4d4-b2716d72cd65) Added a few `biome-ignore` to speed up the process but we may want to check and fix them in the future.
60 lines
1.5 KiB
TypeScript
60 lines
1.5 KiB
TypeScript
import { useState, useCallback } from 'react';
|
|
import produce from 'immer';
|
|
|
|
export interface IFormErrors {
|
|
// Get the error message for a field name, if any.
|
|
getFormError(field: string): string | undefined;
|
|
|
|
// Set an error message for a field name.
|
|
setFormError(field: string, message: string): void;
|
|
|
|
// Remove an existing error for a field name.
|
|
removeFormError(field: string): void;
|
|
|
|
// Check if there are any errors.
|
|
hasFormErrors(): boolean;
|
|
}
|
|
|
|
export const useFormErrors = (): IFormErrors => {
|
|
const [errors, setErrors] = useState<Record<string, string>>({});
|
|
|
|
const getFormError = useCallback(
|
|
(field: string): string | undefined => errors[field],
|
|
[errors],
|
|
);
|
|
|
|
const setFormError = useCallback(
|
|
(field: string, message: string): void => {
|
|
setErrors(
|
|
produce((draft) => {
|
|
draft[field] = message;
|
|
}),
|
|
);
|
|
},
|
|
[setErrors],
|
|
);
|
|
|
|
const removeFormError = useCallback(
|
|
(field: string): void => {
|
|
setErrors(
|
|
produce((draft) => {
|
|
delete draft[field];
|
|
}),
|
|
);
|
|
},
|
|
[setErrors],
|
|
);
|
|
|
|
const hasFormErrors = useCallback(
|
|
(): boolean => Object.values(errors).some(Boolean),
|
|
[errors],
|
|
);
|
|
|
|
return {
|
|
getFormError,
|
|
setFormError,
|
|
removeFormError,
|
|
hasFormErrors,
|
|
};
|
|
};
|