All files / components/Form/InlineInput InlineInput.js

100% Statements 6/6
100% Branches 7/7
100% Functions 1/1
100% Lines 6/6

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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55            13x         13x                 13x                     13x             2x                         13x      
import React from 'react';
import { bool, node } from 'prop-types';
import styled from 'styled-components';
import { rem } from '../../Typography';
import StyledInlineInput from './StyledInlineInput';
 
const Wrapper = styled.div`
  position: relative;
  display: inline-block;
`;
 
const SpinnerWrapper = styled.div`
  position: absolute;
  right: ${rem(8)};
  top: 0;
  bottom: 0;
  display: flex;
  align-items: center;
`;
 
const propTypes = {
  /** submitting flag that shows a component passed to renderSpinner prop */
  submitting: bool,
  /** disabled flag */
  disabled: bool,
  /** invalid flag */
  invalid: bool,
  /** spinner component shown when submitting flag is true */
  renderSpinner: node,
};
 
const InlineInput = ({
  submitting = false,
  disabled = false,
  invalid = false,
  renderSpinner,
  ...rest
}) => (
  <div>
    <Wrapper>
      <StyledInlineInput
        submitting={submitting}
        disabled={submitting || disabled}
        invalid={invalid}
        {...rest}
      />
      {submitting && <SpinnerWrapper>{renderSpinner}</SpinnerWrapper>}
    </Wrapper>
  </div>
);
 
InlineInput.propTypes = propTypes;
 
export default InlineInput;