/
Input.tsx
35 lines (31 loc) · 998 Bytes
/
Input.tsx
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
import * as React from 'react';
import { ReactElement } from 'react';
import { TransitionProps } from 'react-transition-group/Transition';
import { InputProps } from '../components/Input';
import { GroupBase } from '../types';
export type InputComponent = <
Option,
IsMulti extends boolean,
Group extends GroupBase<Option>
>(
props: InputProps<Option, IsMulti, Group>
) => ReactElement;
export type AnimatedInputProps<
Option,
IsMulti extends boolean,
Group extends GroupBase<Option>
> = InputProps<Option, IsMulti, Group> & Partial<TransitionProps>;
// strip transition props off before spreading onto select component
const AnimatedInput = (WrappedComponent: InputComponent): InputComponent => {
return <Option, IsMulti extends boolean, Group extends GroupBase<Option>>({
in: inProp,
onExited,
appear,
enter,
exit,
...props
}: AnimatedInputProps<Option, IsMulti, Group>) => (
<WrappedComponent {...props} />
);
};
export default AnimatedInput;