keycloak-scim/js/libs/ui-shared/src/controls/TextAreaControl.tsx
Erik Jan de Wit f2cc4cbce0
convert to ui-shared (#27708)
* convert to ui-shared

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* review comments

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* added default value for variant

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* remove class

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

* spread rest of the properties

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>

---------

Signed-off-by: Erik Jan de Wit <erikjan.dewit@gmail.com>
2024-03-12 11:50:34 +01:00

57 lines
1.3 KiB
TypeScript

import { TextAreaProps, ValidatedOptions } from "@patternfly/react-core";
import {
FieldPath,
FieldValues,
PathValue,
useController,
UseControllerProps,
} from "react-hook-form";
import { FormLabel } from "./FormLabel";
import { KeycloakTextArea } from "./keycloak-text-area/KeycloakTextArea";
export type TextAreaControlProps<
T extends FieldValues,
P extends FieldPath<T> = FieldPath<T>,
> = UseControllerProps<T, P> &
TextAreaProps & {
label: string;
labelIcon?: string;
isDisabled?: boolean;
};
export const TextAreaControl = <
T extends FieldValues,
P extends FieldPath<T> = FieldPath<T>,
>(
props: TextAreaControlProps<T, P>,
) => {
const required = !!props.rules?.required;
const defaultValue = props.defaultValue ?? ("" as PathValue<T, P>);
const { field, fieldState } = useController({
...props,
defaultValue,
});
return (
<FormLabel
isRequired={required}
label={props.label}
labelIcon={props.labelIcon}
name={props.name}
error={fieldState.error}
>
<KeycloakTextArea
isRequired={required}
id={props.name}
data-testid={props.name}
validated={
fieldState.error ? ValidatedOptions.error : ValidatedOptions.default
}
isDisabled={props.isDisabled}
{...field}
/>
</FormLabel>
);
};