1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-01-01 00:08:27 +01:00
unleash.unleash/frontend/src/hooks/useFormErrors.ts
Nuno Góis 4167a60588
feat: biome lint frontend (#4903)
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.
2023-10-02 13:25:46 +01:00

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,
};
};