|
|
|
|
@ -1,47 +1,48 @@
|
|
|
|
|
import _ from "lodash";
|
|
|
|
|
import lodash from "lodash";
|
|
|
|
|
import { useFormikContext } from "formik";
|
|
|
|
|
import { FunctionComponent, ReactElement } from "react";
|
|
|
|
|
|
|
|
|
|
interface Props {
|
|
|
|
|
export interface ITextFieldProps {
|
|
|
|
|
name: string;
|
|
|
|
|
help?: string;
|
|
|
|
|
[key: string]: any;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const TextField = (props: Props) => {
|
|
|
|
|
const { label, name, help, ...otherProps } = props;
|
|
|
|
|
const TextField: FunctionComponent<ITextFieldProps> = (
|
|
|
|
|
props: ITextFieldProps
|
|
|
|
|
): ReactElement => {
|
|
|
|
|
const { label, name, help, required, ...otherProps } = props;
|
|
|
|
|
const formik = useFormikContext();
|
|
|
|
|
const error = _.get(formik.touched, name) && _.get(formik.errors, name);
|
|
|
|
|
const error =
|
|
|
|
|
lodash.get(formik.touched, name) && lodash.get(formik.errors, name);
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<div className="relative pb-3 flex-auto">
|
|
|
|
|
<div className="grid grid-cols-6 gap-4">
|
|
|
|
|
<div className="col-span-3">
|
|
|
|
|
<label
|
|
|
|
|
htmlFor={name}
|
|
|
|
|
className="block text-xs font-medium text-gray-700"
|
|
|
|
|
>
|
|
|
|
|
{label}
|
|
|
|
|
</label>
|
|
|
|
|
<div className="mt-1">
|
|
|
|
|
<input
|
|
|
|
|
id={name}
|
|
|
|
|
name={name}
|
|
|
|
|
type="text"
|
|
|
|
|
autoComplete="none"
|
|
|
|
|
className="input-util"
|
|
|
|
|
onBlur={formik.handleBlur}
|
|
|
|
|
onChange={formik.handleChange}
|
|
|
|
|
{...otherProps}
|
|
|
|
|
value={_.get(formik.values, name)}
|
|
|
|
|
/>
|
|
|
|
|
{
|
|
|
|
|
<div className="mt-1 text-xs text-red-600">
|
|
|
|
|
{error && <div className="caption">{error}</div>}
|
|
|
|
|
{!error && help}
|
|
|
|
|
</div>
|
|
|
|
|
}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div>
|
|
|
|
|
{label && (
|
|
|
|
|
<label
|
|
|
|
|
htmlFor={name}
|
|
|
|
|
className="block text-xs font-medium text-gray-700"
|
|
|
|
|
>
|
|
|
|
|
{label + (required ? "*" : "")}
|
|
|
|
|
</label>
|
|
|
|
|
)}
|
|
|
|
|
|
|
|
|
|
<input
|
|
|
|
|
id={name}
|
|
|
|
|
name={name}
|
|
|
|
|
type="text"
|
|
|
|
|
autoComplete="none"
|
|
|
|
|
className="input-util mt-1"
|
|
|
|
|
required={required}
|
|
|
|
|
onBlur={formik.handleBlur}
|
|
|
|
|
onChange={formik.handleChange}
|
|
|
|
|
value={lodash.get(formik.values, name)}
|
|
|
|
|
{...otherProps}
|
|
|
|
|
/>
|
|
|
|
|
|
|
|
|
|
<div className="mt-1 text-xs text-red-600">
|
|
|
|
|
{error && <span className="caption">{error}</span>}
|
|
|
|
|
{!error && help}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
|