fix: hook modal not trigger onCancel (#28063)

This commit is contained in:
JuniorTour 2020-11-30 15:25:36 +08:00 committed by GitHub
parent 79123e65cc
commit e063a3a139
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 43 additions and 1 deletions

View File

@ -62,4 +62,42 @@ describe('Modal.hook', () => {
jest.useRealTimers();
});
it('hooks modal should trigger onCancel', () => {
let cancelCount = 0;
const Demo = () => {
const [modal, contextHolder] = Modal.useModal();
const openBrokenModal = React.useCallback(() => {
modal.info({
okType: 'default',
maskClosable: true,
okCancel: true,
onCancel: () => {
cancelCount += 1;
},
content: 'Hello!',
});
}, [modal]);
return (
<div className="App">
{contextHolder}
<div className="open-hook-modal-btn" onClick={openBrokenModal}>
Test hook modal
</div>
</div>
);
};
const wrapper = mount(<Demo />);
wrapper.find('.open-hook-modal-btn').simulate('click');
wrapper.find('.ant-modal-confirm-btns .ant-btn').first().simulate('click');
expect(cancelCount).toEqual(1); // click cancel btn, trigger onCancel
wrapper.find('.open-hook-modal-btn').simulate('click');
wrapper.find('.ant-modal-wrap').simulate('click');
expect(cancelCount).toEqual(2); // click modal wrapper, trigger onCancel
});
});

View File

@ -32,8 +32,12 @@ const HookModal: React.ForwardRefRenderFunction<HookModalRef, HookModalProps> =
const prefixCls = getPrefixCls('modal');
const rootPrefixCls = getPrefixCls();
function close() {
function close(...args: any[]) {
setVisible(false);
const triggerCancel = args.some(param => param && param.triggerCancel);
if (innerConfig.onCancel && triggerCancel) {
innerConfig.onCancel();
}
}
React.useImperativeHandle(ref, () => ({