feat(frontend): updated `TextField` component

pull/75/head
Samuel Rowe 3 years ago
parent e45e686ac7
commit 225e80b8ac

@ -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>
);

Loading…
Cancel
Save