1 | import { isValidElement, cloneElement } from 'react';
|
2 | import ReactDOM from 'react-dom';
|
3 |
|
4 | export function cloneAndAddKey(element) {
|
5 | if (element && isValidElement(element)) {
|
6 | var key = element.key || 'error';
|
7 | return cloneElement(element, { key: key });
|
8 | }
|
9 | return element;
|
10 | }
|
11 |
|
12 | export function scrollToFirstError(_ref) {
|
13 | var errorsGroup = _ref.errorsGroup,
|
14 | options = _ref.options,
|
15 | instance = _ref.instance;
|
16 |
|
17 | if (errorsGroup && options.scrollToFirstError) {
|
18 | var firstNode = void 0;
|
19 | var firstTop = void 0;
|
20 | for (var i in errorsGroup) {
|
21 | if (errorsGroup.hasOwnProperty(i)) {
|
22 | var node = ReactDOM.findDOMNode(instance[i]);
|
23 | if (!node) {
|
24 | return;
|
25 | }
|
26 | var top = node.offsetTop;
|
27 | if (firstTop === undefined || firstTop > top) {
|
28 | firstTop = top;
|
29 | firstNode = node;
|
30 | }
|
31 | }
|
32 | }
|
33 |
|
34 | if (firstNode) {
|
35 | if (typeof options.scrollToFirstError === 'number' && window && typeof window.scrollTo === 'function') {
|
36 | var offsetLeft = document && document.body && document.body.offsetLeft ? document.body.offsetLeft : 0;
|
37 | window.scrollTo(offsetLeft, firstTop + options.scrollToFirstError);
|
38 | } else if (firstNode.scrollIntoViewIfNeeded) {
|
39 | firstNode.scrollIntoViewIfNeeded(true);
|
40 | }
|
41 | }
|
42 | }
|
43 | } |
\ | No newline at end of file |