From 048a6e28a3c4974b955e7a75ec5c00efb35bf2b5 Mon Sep 17 00:00:00 2001 From: Teng YANG Date: Fri, 31 Jan 2020 21:25:34 +0800 Subject: [PATCH] fix: #21134 checkbox can't receive context update from checkbox group (#21146) * fix checkbox can't receive context update issue * add test case for checkbox handling context update --- components/checkbox/Checkbox.tsx | 7 +--- components/checkbox/Group.tsx | 38 +++++++++---------- components/checkbox/__tests__/group.test.js | 41 +++++++++++++++++++++ 3 files changed, 61 insertions(+), 25 deletions(-) diff --git a/components/checkbox/Checkbox.tsx b/components/checkbox/Checkbox.tsx index f00a79c310..32ca84ea9f 100644 --- a/components/checkbox/Checkbox.tsx +++ b/components/checkbox/Checkbox.tsx @@ -1,9 +1,8 @@ import * as React from 'react'; -import * as PropTypes from 'prop-types'; import classNames from 'classnames'; import RcCheckbox from 'rc-checkbox'; import shallowEqual from 'shallowequal'; -import CheckboxGroup, { CheckboxGroupContext } from './Group'; +import CheckboxGroup, { CheckboxGroupContext, GroupContext } from './Group'; import { ConfigConsumer, ConfigConsumerProps } from '../config-provider'; import warning from '../_util/warning'; @@ -52,9 +51,7 @@ class Checkbox extends React.Component { indeterminate: false, }; - static contextTypes = { - checkboxGroup: PropTypes.any, - }; + static contextType = GroupContext; context: any; diff --git a/components/checkbox/Group.tsx b/components/checkbox/Group.tsx index 99f9819fd5..423fdc9720 100644 --- a/components/checkbox/Group.tsx +++ b/components/checkbox/Group.tsx @@ -43,6 +43,10 @@ export interface CheckboxGroupContext { }; } +export const GroupContext = React.createContext<{ checkboxGroup: any }>({ + checkboxGroup: undefined, +}); + class CheckboxGroup extends React.Component { static defaultProps = { options: [], @@ -55,10 +59,6 @@ class CheckboxGroup extends React.Component - {children} + {children} ); }; diff --git a/components/checkbox/__tests__/group.test.js b/components/checkbox/__tests__/group.test.js index f0c5036efb..88f30e8e93 100644 --- a/components/checkbox/__tests__/group.test.js +++ b/components/checkbox/__tests__/group.test.js @@ -1,5 +1,6 @@ import React from 'react'; import { mount, render } from 'enzyme'; +import Collapse from '../../collapse'; import Checkbox from '../index'; import mountTest from '../../../tests/shared/mountTest'; import rtlTest from '../../../tests/shared/rtlTest'; @@ -181,4 +182,44 @@ describe('CheckboxGroup', () => { .simulate('change'); expect(onChange).toHaveBeenCalledWith([1, 2]); }); + + // https://github.com/ant-design/ant-design/issues/21134 + it('should work when checkbox is wrapped by other components', () => { + const wrapper = mount( + + + +
+ item +
+
+
+
, + ); + wrapper + .find('.ant-collapse-item') + .at(0) + .find('.ant-collapse-header') + .simulate('click'); + wrapper + .find('.ant-checkbox-input') + .at(0) + .simulate('change'); + expect( + wrapper + .find(Checkbox.Group) + .at(0) + .state('value'), + ).toEqual(['1']); + wrapper + .find('.ant-checkbox-input') + .at(0) + .simulate('change'); + expect( + wrapper + .find(Checkbox.Group) + .at(0) + .state('value'), + ).toEqual([]); + }); });