Skip to content

Commit bb1385a

Browse files
committed
update modal wrapper type
1 parent 6a40b97 commit bb1385a

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

examples/src/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ import React from 'react';
22
import { render } from 'react-dom';
33
import { useModal } from '../../dist';
44

5-
const modalStyle: React.CSSProperties= {
5+
const modalStyle: React.CSSProperties = {
66
backgroundColor: '#fff',
77
padding: '60px 100px',
88
borderRadius: '10px',
99
};
1010

1111
const App = () => {
12-
const [Modal, open, close, isOpen] = useModal('root',{
12+
const [Modal, open, close, isOpen] = useModal('root', {
1313
preventScroll: true,
1414
});
1515
return (

src/index.tsx

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,24 @@ import React, { useCallback, useState } from 'react';
22
import { createPortal } from 'react-dom';
33
import disableScroll from 'disable-scroll';
44

5-
export interface Props {
5+
export interface ModalProps {
66
children: React.ReactNode;
77
isOpen: boolean;
88
close: () => void;
99
elementId: 'root' | string;
1010
};
1111

12-
export interface Options {
12+
export interface ModalOptions {
1313
preventScroll?: boolean;
1414
};
1515

16+
export type UseModal = (elementId: string, options: ModalOptions) => [
17+
ModalWrapper: React.FC<{children: React.ReactNode}>,
18+
open: () => void,
19+
close: () => void,
20+
isOpen: boolean
21+
];
22+
1623
const wrapperStyle: React.CSSProperties = {
1724
position: 'fixed',
1825
top: 0,
@@ -40,7 +47,7 @@ const containerStyle: React.CSSProperties = {
4047
zIndex: 100001
4148
};
4249

43-
const Modal: React.FC<Props> = ({ children, isOpen = false, close, elementId = 'root' }) => {
50+
const Modal: React.FC<ModalProps> = ({ children, isOpen = false, close, elementId = 'root' }) => {
4451
if (isOpen === false) {
4552
return null;
4653
}
@@ -53,7 +60,7 @@ const Modal: React.FC<Props> = ({ children, isOpen = false, close, elementId = '
5360
);
5461
};
5562

56-
export const useModal = (elementId = 'root', options: Options = {}): [ModalWrapper: (children: any) => React.ReactElement, open: () => void, close: () => void, isOpen: boolean] => {
63+
export const useModal: UseModal = (elementId = 'root', options = {}) => {
5764
const { preventScroll = false } = options;
5865
const [isOpen, setOpen] = useState<boolean>(false);
5966
const open = useCallback(() => {
@@ -69,13 +76,13 @@ export const useModal = (elementId = 'root', options: Options = {}): [ModalWrapp
6976
}
7077
}, [setOpen, preventScroll]);
7178

72-
const ModalWrapper = useCallback(({ children }) => {
79+
const ModalWrapper = React.memo(({ children }) => {
7380
return (
7481
<Modal isOpen={isOpen} close={close} elementId={elementId}>
7582
{children}
7683
</Modal>
7784
)
78-
}, [isOpen, close, elementId]);
85+
});
7986

8087
return [ModalWrapper, open, close, isOpen];
8188
};

0 commit comments

Comments
 (0)