Merge pull request #3830 from ant-design/fix-popover

Let Checkbox and Radio response hover events
This commit is contained in:
ddcat1115 2016-11-17 22:59:31 +08:00 committed by GitHub
commit 29001ffe4c
6 changed files with 103 additions and 5 deletions

View File

@ -29,8 +29,10 @@ export default class Checkbox extends React.Component<CheckboxProps, any> {
return PureRenderMixin.shouldComponentUpdate.apply(this, args); return PureRenderMixin.shouldComponentUpdate.apply(this, args);
} }
render() { render() {
const [{ prefixCls, style, children, className, indeterminate }, restProps] = splitObject( const [{ prefixCls, style, children, className, indeterminate, onMouseEnter,
this.props, ['prefixCls', 'style', 'children', 'className', 'indeterminate'] onMouseLeave }, restProps] = splitObject(
this.props, ['prefixCls', 'style', 'children', 'className', 'indeterminate',
'onMouseEnter', 'onMouseLeave']
); );
const classString = classNames({ const classString = classNames({
[className]: !!className, [className]: !!className,
@ -40,7 +42,12 @@ export default class Checkbox extends React.Component<CheckboxProps, any> {
[`${prefixCls}-indeterminate`]: indeterminate, [`${prefixCls}-indeterminate`]: indeterminate,
}); });
return ( return (
<label className={classString} style={style}> <label
className={classString}
style={style}
onMouseEnter={onMouseEnter}
onMouseLeave={onMouseLeave}
>
<RcCheckbox <RcCheckbox
{...restProps} {...restProps}
prefixCls={prefixCls} prefixCls={prefixCls}

View File

@ -30,6 +30,8 @@ export interface RadioGroupProps {
size?: 'large' | 'default' | 'small'; size?: 'large' | 'default' | 'small';
style?: React.CSSProperties; style?: React.CSSProperties;
disabled?: boolean; disabled?: boolean;
onMouseEnter?: React.FormEventHandler<any>;
onMouseLeave?: React.FormEventHandler<any>;
} }
export default class RadioGroup extends React.Component<RadioGroupProps, any> { export default class RadioGroup extends React.Component<RadioGroupProps, any> {
@ -99,6 +101,15 @@ export default class RadioGroup extends React.Component<RadioGroupProps, any> {
[`${prefixCls}-${props.size}`]: props.size, [`${prefixCls}-${props.size}`]: props.size,
[className]: className, [className]: className,
}); });
return <div className={classString} style={props.style}>{children}</div>; return (
<div
className={classString}
style={props.style}
onMouseEnter={props.onMouseEnter}
onMouseLeave={props.onMouseLeave}
>
{children}
</div>
);
} }
} }

View File

@ -15,6 +15,8 @@ export interface RadioProps {
disabled?: boolean; disabled?: boolean;
className?: string; className?: string;
onChange?: (e: any) => any; onChange?: (e: any) => any;
onMouseEnter?: React.FormEventHandler<any>;
onMouseLeave?: React.FormEventHandler<any>;
} }
export default class Radio extends React.Component<RadioProps, any> { export default class Radio extends React.Component<RadioProps, any> {
@ -40,8 +42,14 @@ export default class Radio extends React.Component<RadioProps, any> {
[`${prefixCls}-checked`]: checked, [`${prefixCls}-checked`]: checked,
[`${prefixCls}-disabled`]: disabled, [`${prefixCls}-disabled`]: disabled,
}); });
return ( return (
<label className={wrapperClassString} style={style}> <label
className={wrapperClassString}
style={style}
onMouseEnter={this.props.onMouseEnter}
onMouseLeave={this.props.onMouseLeave}
>
<RcRadio {...this.props} className={classString} style={null} children={null} /> <RcRadio {...this.props} className={classString} style={null} children={null} />
{children ? <span>{children}</span> : null} {children ? <span>{children}</span> : null}
</label> </label>

View File

@ -0,0 +1,23 @@
import React from 'react';
import { shallow } from 'enzyme';
import Checkbox from '../../components/checkbox';
describe('Checkbox', () => {
it('responses hover events', () => {
const onMouseEnter = jest.fn();
const onMouseLeave = jest.fn();
const wrapper = shallow(
<Checkbox
onMouseEnter={onMouseEnter}
onMouseLeave={onMouseLeave}
/>
);
wrapper.simulate('mouseenter');
expect(onMouseEnter).toHaveBeenCalled();
wrapper.simulate('mouseleave');
expect(onMouseLeave).toHaveBeenCalled();
});
});

26
tests/radio/group.test.js Normal file
View File

@ -0,0 +1,26 @@
import React from 'react';
import { shallow } from 'enzyme';
import Radio from '../../components/radio';
import RadioGroup from '../../components/radio/group';
describe('Radio', () => {
it('responses hover events', () => {
const onMouseEnter = jest.fn();
const onMouseLeave = jest.fn();
const wrapper = shallow(
<RadioGroup
onMouseEnter={onMouseEnter}
onMouseLeave={onMouseLeave}
>
<Radio/>
</RadioGroup>
);
wrapper.simulate('mouseenter');
expect(onMouseEnter).toHaveBeenCalled();
wrapper.simulate('mouseleave');
expect(onMouseLeave).toHaveBeenCalled();
});
});

23
tests/radio/radio.test.js Normal file
View File

@ -0,0 +1,23 @@
import React from 'react';
import { shallow } from 'enzyme';
import Radio from '../../components/radio';
describe('Radio', () => {
it('responses hover events', () => {
const onMouseEnter = jest.fn();
const onMouseLeave = jest.fn();
const wrapper = shallow(
<Radio
onMouseEnter={onMouseEnter}
onMouseLeave={onMouseLeave}
/>
);
wrapper.simulate('mouseenter');
expect(onMouseEnter).toHaveBeenCalled();
wrapper.simulate('mouseleave');
expect(onMouseLeave).toHaveBeenCalled();
});
});