diff --git a/package.json b/package.json index 09b128fe..23af425c 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "rc-util": "^5.6.1" }, "devDependencies": { + "@types/classnames": "^2.2.11", "@types/enzyme": "^3.10.7", "@types/jest": "^26.0.14", "@types/react": "^16.9.2", diff --git a/src/Dialog/index.tsx b/src/Dialog/index.tsx index 738661f3..0230ba02 100644 --- a/src/Dialog/index.tsx +++ b/src/Dialog/index.tsx @@ -32,6 +32,7 @@ export default function Dialog(props: IDialogChildProps) { wrapClassName, wrapProps, onClose, + afterOpen, afterClose, // Dialog @@ -68,6 +69,7 @@ export default function Dialog(props: IDialogChildProps) { lastOutSideActiveElementRef.current = document.activeElement as HTMLElement; contentRef.current?.focus(); } + afterOpen?.(); } else { // Clean up scroll bar & focus back setAnimatedVisible(false); diff --git a/src/IDialogPropTypes.tsx b/src/IDialogPropTypes.tsx index a698719b..60e6d853 100644 --- a/src/IDialogPropTypes.tsx +++ b/src/IDialogPropTypes.tsx @@ -8,6 +8,7 @@ export type IDialogPropTypes = { mask?: boolean; children?: any; afterClose?: () => any; + afterOpen?: () => any; onClose?: (e: SyntheticEvent) => any; closable?: boolean; maskClosable?: boolean; @@ -41,4 +42,4 @@ export type IDialogPropTypes = { // https://github.com/ant-design/ant-design/issues/19771 // https://github.com/react-component/dialog/issues/95 focusTriggerAfterClose?: boolean; -} +}; diff --git a/tests/index.spec.tsx b/tests/index.spec.tsx index 2f1c3d5b..a490e13e 100644 --- a/tests/index.spec.tsx +++ b/tests/index.spec.tsx @@ -385,6 +385,20 @@ describe('dialog', () => { }); }); + describe('afterOpen', () => { + it('should trigger afterOpen when set visible to true', () => { + const afterOpen = jest.fn(); + + const wrapper = mount(); + jest.runAllTimers(); + + wrapper.setProps({ visible: true }); + jest.runAllTimers(); + + expect(afterOpen).toHaveBeenCalledTimes(1); + }); + }); + describe('afterClose', () => { it('should trigger afterClose when set visible to false', () => { const afterClose = jest.fn();