@diagramers/admin
Version:
Diagramers Admin Template - React starter for admin dashboards.
94 lines (81 loc) • 4.02 kB
JavaScript
import React, { useEffect, useRef, useState } from 'react';
import { Button, Form } from 'react-bootstrap';
import * as Yup from 'yup';
import { useFormik } from 'formik';
const LabelEndTooltip = ({ children }) => {
const refError = useRef(null);
const [left, setLeft] = useState(10);
useEffect(() => {
if (refError.current) {
try {
setLeft(refError.current.parentElement.querySelector('label').clientWidth + 10);
} catch (e) {
// console.log()
}
}
return () => {};
}, []);
return (
<div ref={refError} className="error" style={{ left }}>
{children}
</div>
);
};
const ValidationPositions = () => {
const validationSchema = Yup.object().shape({
labelEnd: Yup.string().required(),
topCenter: Yup.string().required(),
bottomCenter: Yup.string().required(),
topStart: Yup.string().required(),
topEnd: Yup.string().required(),
bottomStart: Yup.string().required(),
bottomEnd: Yup.string().required(),
});
const initialValues = { labelEnd: '', topCenter: '', bottomCenter: '', topStart: '', topEnd: '', bottomStart: '', bottomEnd: '' };
const onSubmit = (values) => console.log('submit form', values);
const formik = useFormik({ initialValues, validationSchema, onSubmit });
const { handleSubmit, handleChange, values, touched, errors } = formik;
return (
<Form onSubmit={handleSubmit} noValidate>
<div className="tooltip-label-end">
<Form.Group className="mb-3 form-group position-relative">
<Form.Label>Label End</Form.Label>
<Form.Control type="text" name="labelEnd" onChange={handleChange} value={values.labelEnd} />
{errors.labelEnd && touched.labelEnd && <LabelEndTooltip>Label End!</LabelEndTooltip>}
</Form.Group>
</div>
<Form.Group className="tooltip-center-top position-relative mb-3">
<Form.Label>Top Center</Form.Label>
<Form.Control type="text" name="topCenter" onChange={handleChange} value={values.topCenter} />
{errors.topCenter && touched.topCenter && <div className="d-block invalid-tooltip">Top Center!</div>}
</Form.Group>
<Form.Group className="tooltip-center-bottom position-relative mb-3">
<Form.Label>Bottom Center</Form.Label>
<Form.Control type="text" name="bottomCenter" onChange={handleChange} value={values.bottomCenter} />
{errors.bottomCenter && touched.bottomCenter && <div className="d-block invalid-tooltip">Bottom Center!</div>}
</Form.Group>
<Form.Group className="tooltip-start-top position-relative mb-3">
<Form.Label>Top Start</Form.Label>
<Form.Control type="text" name="topStart" onChange={handleChange} value={values.topStart} />
{errors.topStart && touched.topStart && <div className="d-block invalid-tooltip">Top Start!</div>}
</Form.Group>
<Form.Group className="tooltip-end-top position-relative mb-3">
<Form.Label>Top End</Form.Label>
<Form.Control type="text" name="topEnd" onChange={handleChange} value={values.topEnd} />
{errors.topEnd && touched.topEnd && <div className="d-block invalid-tooltip">Top End!</div>}
</Form.Group>
<Form.Group className="tooltip-start-bottom position-relative mb-3">
<Form.Label>Bottom Start</Form.Label>
<Form.Control type="text" name="bottomStart" onChange={handleChange} value={values.bottomStart} />
{errors.bottomStart && touched.bottomStart && <div className="d-block invalid-tooltip">Bottom Start!</div>}
</Form.Group>
<Form.Group className="tooltip-end-bottom position-relative mb-3">
<Form.Label>Bottom End</Form.Label>
<Form.Control type="text" name="bottomEnd" onChange={handleChange} value={values.bottomEnd} />
{errors.bottomEnd && touched.bottomEnd && <div className="d-block invalid-tooltip">Bottom End!</div>}
</Form.Group>
<Button type="submit">Submit</Button>
</Form>
);
};
export default ValidationPositions;