1 | import * as React from 'react';
|
2 | import * as PropTypes from 'prop-types';
|
3 | import ReakitPopover from 'reakit/Popover';
|
4 |
|
5 | export type PopoverContainerRenderProps = {
|
6 | isVisible: boolean;
|
7 | hide(): void;
|
8 | show(): void;
|
9 | toggle(): void;
|
10 | };
|
11 | export type LocalPopoverContainerProps = {
|
12 | children: ({ isVisible, hide, show, toggle, ...args }: PopoverContainerRenderProps) => React.ReactNode;
|
13 | defaultVisible?: boolean;
|
14 | initialState?: {};
|
15 | };
|
16 | export type PopoverContainerProps = LocalPopoverContainerProps;
|
17 |
|
18 | export const PopoverContainer: React.FunctionComponent<LocalPopoverContainerProps> = ({
|
19 | children,
|
20 | defaultVisible,
|
21 | initialState,
|
22 | ...props
|
23 | }) => (
|
24 | <ReakitPopover.Container initialState={{ visible: defaultVisible, ...initialState }} {...props}>
|
25 | {({ visible, ...rest }: { visible: boolean }) => children({ isVisible: visible, ...rest } as any)}
|
26 | </ReakitPopover.Container>
|
27 | );
|
28 |
|
29 | export const popoverContainerPropTypes = {
|
30 | children: PropTypes.func.isRequired,
|
31 | defaultVisible: PropTypes.bool,
|
32 | initialState: PropTypes.object
|
33 | };
|
34 | PopoverContainer.propTypes = popoverContainerPropTypes;
|
35 |
|
36 | export const popoverContainerDefaultProps = {
|
37 | defaultVisible: false,
|
38 | initialState: {}
|
39 | };
|
40 | PopoverContainer.defaultProps = popoverContainerDefaultProps;
|
41 |
|
42 | export default PopoverContainer;
|