import TextField from "@mui/material/TextField";
import {
DeepKeys,
ReactFormExtendedApi,
Validator,
} from "@tanstack/react-form";
import { DeepValue } from "@tanstack/react-form";
type IsDeepValueString<T, K extends DeepKeys<T>> = DeepValue<
T,
K
> extends string
? K
: never;
type StringDeepKeys<T> = {
[P in DeepKeys<T>]: IsDeepValueString<T, P>;
}[DeepKeys<T>];
export default function GenericTextField<
TFormData,
TFormValidator extends Validator<TFormData, unknown> | undefined,
Form extends ReactFormExtendedApi<TFormData, TFormValidator>,
// Name extends DeepKeys<TFormData>,
Name extends DeepKeys<TFormData> & StringDeepKeys<Form>
>({
name,
label,
form: { Field },
}: {
name: Name;
label?: string;
form: Form;
}): JSX.Element {
return (
<Field name={name}>
{({ handleChange, handleBlur, state }) => (
<TextField
label={label}
name={String(name)}
onChange={(e) => {
handleChange(e.target.value);
}}
onBlur={handleBlur}
value={state.value}
/>
)}
</Field>
);
}
import TextField from "@mui/material/TextField";
import {
DeepKeys,
ReactFormExtendedApi,
Validator,
} from "@tanstack/react-form";
import { DeepValue } from "@tanstack/react-form";
type IsDeepValueString<T, K extends DeepKeys<T>> = DeepValue<
T,
K
> extends string
? K
: never;
type StringDeepKeys<T> = {
[P in DeepKeys<T>]: IsDeepValueString<T, P>;
}[DeepKeys<T>];
export default function GenericTextField<
TFormData,
TFormValidator extends Validator<TFormData, unknown> | undefined,
Form extends ReactFormExtendedApi<TFormData, TFormValidator>,
// Name extends DeepKeys<TFormData>,
Name extends DeepKeys<TFormData> & StringDeepKeys<Form>
>({
name,
label,
form: { Field },
}: {
name: Name;
label?: string;
form: Form;
}): JSX.Element {
return (
<Field name={name}>
{({ handleChange, handleBlur, state }) => (
<TextField
label={label}
name={String(name)}
onChange={(e) => {
handleChange(e.target.value);
}}
onBlur={handleBlur}
value={state.value}
/>
)}
</Field>
);
}