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 | 8x 456x | import * as React from 'react';
import {
useDialogState,
DialogStateReturn as ReakitDialogStateReturn,
DialogInitialState as ReakitDialogInitialState
} from 'reakit';
import { isFunction } from '../utils';
export type ModalStateReturn = ReakitDialogStateReturn;
export type ModalInitialState = ReakitDialogInitialState;
export const ModalContext = React.createContext({ modal: {} });
export function useModalState(initialState?: ModalInitialState) {
return useDialogState(initialState);
}
export function ModalState(
props: {
children?: React.ReactNode | ((state: ModalStateReturn) => React.ReactElement<any>);
} & ModalInitialState
) {
const { children, ...restProps } = props;
const modal = useModalState(restProps);
const contextValue = React.useMemo(() => ({ modal }), [modal]);
return (
<ModalContext.Provider value={contextValue}>
{isFunction(props.children) ? props.children(modal) : props.children}
</ModalContext.Provider>
);
}
|