All files Untabbable.tsx

100% Statements 12/12
100% Branches 4/4
100% Functions 3/3
100% Lines 12/12

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34          1x 8x   8x   8x 8x 13x 11x       8x   8x     13x 11x     2x              
import React, { Children, createRef, FunctionComponent, cloneElement, isValidElement, ReactElement, ReactNode, RefObject } from 'react';
import useUntabbable from './useUntabbable';
 
import type { Options } from './types';
 
const Untabbable: FunctionComponent<Options> = (props) => {
    const { children, disabled, includeContainer } = props;
 
    const childrenAsArray = Children.toArray(children);
 
    const refs: Record<number, RefObject<HTMLElement>> = {};
    childrenAsArray.forEach((child, index) => {
        if (isValidElement(child)) {
            refs[index] = createRef<HTMLElement>();
        }
    });
 
    useUntabbable(Object.values(refs), { disabled, includeContainer });
 
    return (
        <>
            {childrenAsArray.map((child, index) => {
                if (isValidElement(child)) {
                    return cloneElement(child, { ref: refs[index] });
                }
        
                return child;
            })}
        </>
    );
}
 
export default Untabbable;