diff --git a/src/config.json b/src/config.json index cd08dd2e36..15c990f40f 100644 --- a/src/config.json +++ b/src/config.json @@ -588,7 +588,7 @@ "author": "dsj" }, { - "version": "2.0.0", + "version": "3.0.0", "name": "Radio", "type": "component", "cName": "单选按钮", @@ -599,7 +599,7 @@ "author": "oasis" }, { - "version": "2.0.0", + "version": "3.0.0", "name": "RadioGroup", "type": "component", "cName": "单选按钮组", diff --git a/src/packages/radio/demos/taro/demo8.tsx b/src/packages/radio/demos/taro/demo8.tsx index 1bcf60671b..9b4d6fe3ac 100644 --- a/src/packages/radio/demos/taro/demo8.tsx +++ b/src/packages/radio/demos/taro/demo8.tsx @@ -4,10 +4,7 @@ import { Checklist } from '@nutui/icons-react-taro' const Demo8 = () => { return ( - } - activeIcon={} - > + } activeIcon={}> 自定义图标 ) diff --git a/src/packages/radio/demos/taro/demo9.tsx b/src/packages/radio/demos/taro/demo9.tsx index 412a38ac0d..a120f08bea 100644 --- a/src/packages/radio/demos/taro/demo9.tsx +++ b/src/packages/radio/demos/taro/demo9.tsx @@ -11,14 +11,14 @@ const Demo9 = () => { > } - activeIcon={} + activeIcon={} value="1" > 自定义图标 } - activeIcon={} + activeIcon={} value="2" > 自定义图标 diff --git a/src/packages/radio/index.taro.ts b/src/packages/radio/index.taro.ts index a82245aa4e..744d5f7744 100644 --- a/src/packages/radio/index.taro.ts +++ b/src/packages/radio/index.taro.ts @@ -1,6 +1,16 @@ -import { Radio } from './radio.taro' +import React from 'react' +import { Radio, RadioProps } from './radio.taro' +import { RadioGroup } from '../radiogroup/radiogroup.taro' export type { RadioProps } from './radio.taro' export type { RadioShape, RadioPosition } from './types' -export default Radio +type CompoundedComponent = React.FC< + Partial & Omit, 'onChange'> +> & { + Group: typeof RadioGroup +} +const InnerRadio = Radio as CompoundedComponent +InnerRadio.Group = RadioGroup + +export default InnerRadio diff --git a/src/packages/radio/index.ts b/src/packages/radio/index.ts index da9759b3d3..5ae30955c1 100644 --- a/src/packages/radio/index.ts +++ b/src/packages/radio/index.ts @@ -1,5 +1,15 @@ -import { Radio } from './radio' +import React from 'react' +import { Radio, RadioProps } from './radio' +import { RadioGroup } from '../radiogroup/radiogroup' export type { RadioProps } from './radio' export type { RadioShape, RadioPosition } from './types' -export default Radio +type CompoundedComponent = React.FC< + Partial & Omit, 'onChange'> +> & { + Group: typeof RadioGroup +} +const InnerRadio = Radio as CompoundedComponent +InnerRadio.Group = RadioGroup + +export default InnerRadio diff --git a/src/packages/radio/radio.scss b/src/packages/radio/radio.scss index 24d07ddb51..ebd765a7dd 100644 --- a/src/packages/radio/radio.scss +++ b/src/packages/radio/radio.scss @@ -79,6 +79,7 @@ border: 1px solid $color-text-disabled; } } + [dir='rtl'] .nut-radio, .nut-rtl .nut-radio { &:last-child { diff --git a/src/packages/radio/radio.taro.tsx b/src/packages/radio/radio.taro.tsx index aa59792546..e494b0feb5 100644 --- a/src/packages/radio/radio.taro.tsx +++ b/src/packages/radio/radio.taro.tsx @@ -1,11 +1,11 @@ -import React, { FunctionComponent, useContext } from 'react' +import React, { FC, useContext } from 'react' import { CheckChecked, - CheckNormal, CheckDisabled, + CheckNormal, } from '@nutui/icons-react-taro' -import classNames from 'classnames' -import { View, ITouchEvent } from '@tarojs/components' +import classNames, { Mapping } from 'classnames' +import { ITouchEvent, View } from '@tarojs/components' import RadioContext from '../radiogroup/context' import RadioGroup from '@/packages/radiogroup/index.taro' import { BasicComponent, ComponentDefaults } from '@/utils/typings' @@ -34,9 +34,9 @@ const defaultProps = { activeIcon: null, onChange: (checked: boolean) => {}, } as RadioProps -export const Radio: FunctionComponent< +export const Radio: FC< Partial & Omit, 'onChange'> -> & { Group: typeof RadioGroup } = (props) => { +> = (props) => { const classPrefix = 'nut-radio' const { children, @@ -80,7 +80,7 @@ export const Radio: FunctionComponent< } } } - const color = () => { + const color = (): Mapping => { return { [`${classPrefix}-icon-disabled`]: disabled, [`${classPrefix}-icon`]: !checkedStatement, @@ -118,7 +118,7 @@ export const Radio: FunctionComponent< return ( <> {renderIcon()} -
{children}
+ {children} ) } @@ -127,7 +127,7 @@ export const Radio: FunctionComponent< [`${classPrefix}-button-active`]: checkedStatement, [`${classPrefix}-button-disabled`]: disabled, }) - return
{children}
+ return {children} } const renderByShape = (shape: RadioShape) => { return shape === 'button' ? renderButton() : renderLabel() @@ -149,12 +149,7 @@ export const Radio: FunctionComponent< className ) return ( - + {renderRadioItem()} ) diff --git a/src/packages/radio/radio.tsx b/src/packages/radio/radio.tsx index 1ec85467c6..e4ceb2cfd1 100644 --- a/src/packages/radio/radio.tsx +++ b/src/packages/radio/radio.tsx @@ -31,7 +31,7 @@ const defaultProps = { } as RadioProps export const Radio: FunctionComponent< Partial & Omit, 'onChange'> -> & { Group: typeof RadioGroup } = (props) => { +> = (props) => { const classPrefix = 'nut-radio' const { children, diff --git a/src/packages/radiogroup/radiogroup.taro.tsx b/src/packages/radiogroup/radiogroup.taro.tsx index bce96a7f12..ceabc69275 100644 --- a/src/packages/radiogroup/radiogroup.taro.tsx +++ b/src/packages/radiogroup/radiogroup.taro.tsx @@ -1,5 +1,6 @@ import React, { useCallback } from 'react' import classNames from 'classnames' +import { View } from '@tarojs/components' import { RadioGroupDirection, RadioGroupOption, @@ -53,7 +54,7 @@ export const RadioGroup = React.forwardRef( const cls = classNames( classPrefix, { - [`${classPrefix}-${props.direction}`]: props.direction, + [`${classPrefix}-${direction}`]: direction, }, className ) @@ -97,9 +98,9 @@ export const RadioGroup = React.forwardRef( }, }} > -
+ {options?.length ? renderOptionsChildren() : children} -
+
) } diff --git a/src/packages/radiogroup/radiogroup.tsx b/src/packages/radiogroup/radiogroup.tsx index 1bc6fa82a6..44526e7d53 100644 --- a/src/packages/radiogroup/radiogroup.tsx +++ b/src/packages/radiogroup/radiogroup.tsx @@ -53,7 +53,7 @@ export const RadioGroup = React.forwardRef( const cls = classNames( classPrefix, { - [`${classPrefix}-${props.direction}`]: props.direction, + [`${classPrefix}-${direction}`]: direction, }, className )