@antmjs/vantui
Version:
一套适用于Taro3及React的vantui组件库
144 lines • 6.4 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/defineProperty";
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
var _excluded = ["name", "disabled", "checkedColor", "labelPosition", "labelDisabled", "shape", "iconSize", "renderIcon", "style", "className", "children"];
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
import { View } from '@tarojs/components';
import { useState, useEffect, useCallback, useContext } from 'react';
import * as utils from '../wxs/utils';
import VanIcon from '../icon/index';
// import { canIUseModel } from '../common/version'
import RadioGroupContext from '../radio-group/context';
import { isEmptyObject } from '../utils/type';
import { get } from '../default-props';
import * as computed from './wxs';
import { jsx as _jsx } from "react/jsx-runtime";
import { jsxs as _jsxs } from "react/jsx-runtime";
export function Radio(props) {
var _useState = useState(get().Radio),
_useState2 = _slicedToArray(_useState, 1),
d = _useState2[0];
var _useState3 = useState({
value: '',
direction: '',
parentDisabled: false
}),
_useState4 = _slicedToArray(_useState3, 2),
state = _useState4[0],
setState = _useState4[1];
var _d$props = _objectSpread(_objectSpread({}, d), props),
name = _d$props.name,
_d$props$disabled = _d$props.disabled,
disabled = _d$props$disabled === void 0 ? false : _d$props$disabled,
checkedColor = _d$props.checkedColor,
_d$props$labelPositio = _d$props.labelPosition,
labelPosition = _d$props$labelPositio === void 0 ? 'right' : _d$props$labelPositio,
_d$props$labelDisable = _d$props.labelDisabled,
labelDisabled = _d$props$labelDisable === void 0 ? false : _d$props$labelDisable,
_d$props$shape = _d$props.shape,
shape = _d$props$shape === void 0 ? 'round' : _d$props$shape,
_d$props$iconSize = _d$props.iconSize,
iconSize = _d$props$iconSize === void 0 ? '20px' : _d$props$iconSize,
renderIcon = _d$props.renderIcon,
style = _d$props.style,
className = _d$props.className,
children = _d$props.children,
others = _objectWithoutProperties(_d$props, _excluded);
var parentData = useContext(RadioGroupContext);
var onChange = useCallback(function (event) {
var _props$onChange;
if (parentData.onChange) {
parentData.onChange(event);
return;
}
props === null || props === void 0 ? void 0 : (_props$onChange = props.onChange) === null || _props$onChange === void 0 ? void 0 : _props$onChange.call(props, event);
},
// eslint-disable-next-line
[parentData.onChange, props.onChange]);
useEffect(function () {
setState(function (state) {
return _objectSpread(_objectSpread({}, state), {}, {
value: props.value
});
});
}, [props.value]);
useEffect(function () {
if (!isEmptyObject(parentData)) {
var value = parentData.value,
direction = parentData.direction,
_disabled = parentData.disabled;
setState(function (state) {
return _objectSpread(_objectSpread({}, state), {}, {
value: value,
direction: direction,
parentDisabled: _disabled
});
});
}
}, [props.value, parentData]);
var emitChange = useCallback(function (event) {
onChange === null || onChange === void 0 ? void 0 : onChange(event);
setState(function (state) {
return _objectSpread(_objectSpread({}, state), {}, {
value: event.detail
});
});
}, [onChange]);
var onClick = useCallback(function (event) {
if (!disabled && !state.parentDisabled) {
Object.defineProperty(event, 'detail', {
value: name,
writable: true
});
emitChange(event);
}
}, [disabled, emitChange, name, state.parentDisabled]);
var onClickLabel = useCallback(function (event) {
if (!(disabled || state.parentDisabled) && !labelDisabled) {
Object.defineProperty(event, 'detail', {
value: name,
writable: true
});
emitChange(event);
}
}, [disabled, emitChange, labelDisabled, name, state.parentDisabled]);
return /*#__PURE__*/_jsxs(View, _objectSpread(_objectSpread({
className: utils.bem('radio', [state.direction]) + " ".concat(className),
style: style
}, others), {}, {
children: [labelPosition === 'left' && /*#__PURE__*/_jsx(View, {
className: utils.bem('radio__label', [labelPosition, {
disabled: disabled || state.parentDisabled
}]) + ' label-class',
onClick: onClickLabel,
children: children
}), /*#__PURE__*/_jsx(View, {
className: "van-radio__icon-wrap",
style: 'font-size: ' + utils.addUnit(iconSize),
onClick: onClick,
children: renderIcon || /*#__PURE__*/_jsx(VanIcon, {
name: "success",
className: utils.bem('radio__icon', [shape, {
disabled: disabled || state.parentDisabled,
checked: state.value === name
}]) + ' icon-class',
style: computed.iconStyle({
iconSize: iconSize,
checkedColor: checkedColor,
disabled: disabled,
parentDisabled: state.parentDisabled,
value: state.value,
name: name
})
})
}), labelPosition === 'right' && /*#__PURE__*/_jsx(View, {
className: 'label-class ' + utils.bem('radio__label', [labelPosition, {
disabled: disabled || state.parentDisabled
}]),
onClick: onClickLabel,
children: children
})]
}));
}
export default Radio;