choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
367 lines (305 loc) • 11.4 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = exports.Radio = void 0;
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _get3 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _tslib = require("tslib");
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _mobx = require("mobx");
var _mobxReact = require("mobx-react");
var _noop = _interopRequireDefault(require("lodash/noop"));
var _FormField2 = require("../field/FormField");
var _autobind = _interopRequireDefault(require("../_util/autobind"));
var _enum = require("./enum");
var _localeContext = require("../locale-context");
var _enum2 = require("../form/enum");
var _enum3 = require("../core/enum");
var _util = _interopRequireDefault(require("../overflow-tip/util"));
var _singleton = require("../tooltip/singleton");
function _createSuper(Derived) {
function isNativeReflectConstruct() {
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
if (Reflect.construct.sham) return false;
if (typeof Proxy === "function") return true;
try {
Date.prototype.toString.call(Reflect.construct(Date, [], function () {}));
return true;
} catch (e) {
return false;
}
}
return function () {
var Super = (0, _getPrototypeOf2["default"])(Derived),
result;
if (isNativeReflectConstruct()) {
var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor;
result = Reflect.construct(Super, arguments, NewTarget);
} else {
result = Super.apply(this, arguments);
}
return (0, _possibleConstructorReturn2["default"])(this, result);
};
}
var Radio =
/*#__PURE__*/
function (_FormField) {
(0, _inherits2["default"])(Radio, _FormField);
var _super = _createSuper(Radio);
function Radio() {
var _this;
(0, _classCallCheck2["default"])(this, Radio);
_this = _super.apply(this, arguments);
_this.type = 'radio';
return _this;
}
(0, _createClass2["default"])(Radio, [{
key: "saveLabelRef",
value: function saveLabelRef(node) {
this.labelRef = node;
}
}, {
key: "getControlled",
value: function getControlled(props) {
return props.checked !== undefined;
}
}, {
key: "getOmitPropsKeys",
value: function getOmitPropsKeys() {
return (0, _get3["default"])((0, _getPrototypeOf2["default"])(Radio.prototype), "getOmitPropsKeys", this).call(this).concat(['value', 'readOnly', 'mode']);
}
}, {
key: "getOtherProps",
value: function getOtherProps() {
var otherProps = (0, _get3["default"])((0, _getPrototypeOf2["default"])(Radio.prototype), "getOtherProps", this).call(this);
otherProps.type = this.type;
otherProps.onMouseDown = this.handleMouseDown;
otherProps.onClick = otherProps.onChange;
otherProps.onChange = _noop["default"];
return otherProps;
}
}, {
key: "showTooltip",
value: function showTooltip(e) {
if ((0, _get3["default"])((0, _getPrototypeOf2["default"])(Radio.prototype), "showTooltip", this).call(this, e)) {
return true;
}
var labelTooltip = this.labelTooltip,
labelRef = this.labelRef;
if (labelRef && (labelTooltip === _enum3.Tooltip.always || labelTooltip === _enum3.Tooltip.overflow && (0, _util["default"])(labelRef))) {
var labelText = this.getLabelText();
if (labelText) {
var _this$context = this.context,
getTooltipTheme = _this$context.getTooltipTheme,
getTooltipPlacement = _this$context.getTooltipPlacement;
(0, _singleton.show)(labelRef, {
title: labelText,
theme: getTooltipTheme('label'),
placement: getTooltipPlacement('label')
});
return true;
}
}
return false;
}
}, {
key: "renderWrapper",
value: function renderWrapper() {
var checked = this.isChecked();
var floatLabel = (0, _get3["default"])((0, _getPrototypeOf2["default"])(Radio.prototype), "hasFloatLabel", this) ? this.renderSwitchFloatLabel() : undefined;
return _react["default"].createElement(_react["default"].Fragment, null, _react["default"].createElement("label", (0, _extends2["default"])({
key: "wrapper"
}, this.getWrapperProps()), _react["default"].createElement("input", (0, _extends2["default"])({}, this.getOtherProps(), {
checked: checked,
value: this.checkedValue
})), this.renderInner(), this.getTextNode(), this.renderFloatLabel()), floatLabel);
}
/**
* 解决form 在float的时候没有表头的问题
* 也可以在需要不在组件内部展现label的时候使用
*/
}, {
key: "renderSwitchFloatLabel",
value: function renderSwitchFloatLabel() {
return undefined;
}
}, {
key: "renderInner",
value: function renderInner() {
return _react["default"].createElement("span", {
className: "".concat(this.prefixCls, "-inner")
});
}
/**
* 当使用label代替children时,不需要展示float label
*
* @readonly
* @memberof Radio
*/
}, {
key: "getLabelChildren",
/**
* 没有children时,使用label替代children
*
* @returns {ReactNode} label
* @memberof Radio
*/
value: function getLabelChildren() {
var labelLayout = this.labelLayout;
return labelLayout && ![_enum2.LabelLayout.horizontal, _enum2.LabelLayout.vertical, _enum2.LabelLayout.none].includes(labelLayout) && this.getLabel();
}
}, {
key: "getChildrenText",
value: function getChildrenText() {
return (0, _mobx.toJS)(this.props.children);
}
}, {
key: "getLabelText",
value: function getLabelText() {
return this.getChildrenText() || this.getLabelChildren();
}
}, {
key: "getTextNode",
value: function getTextNode() {
var prefixCls = this.prefixCls;
var text = this.getLabelText();
if (text) {
return _react["default"].createElement("span", {
ref: this.saveLabelRef,
className: "".concat(prefixCls, "-label")
}, text);
}
}
}, {
key: "getWrapperClassNames",
value: function getWrapperClassNames() {
var _get2;
var prefixCls = this.prefixCls,
mode = this.props.mode;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return (_get2 = (0, _get3["default"])((0, _getPrototypeOf2["default"])(Radio.prototype), "getWrapperClassNames", this)).call.apply(_get2, [this, (0, _defineProperty2["default"])({}, "".concat(prefixCls, "-button"), mode === _enum.ViewMode.button)].concat(args));
}
}, {
key: "isChecked",
value: function isChecked() {
var checked = this.props.checked;
var name = this.name,
dataSet = this.dataSet,
checkedValue = this.checkedValue;
if (dataSet && name) {
return this.getDataSetValue() === checkedValue;
}
return checked;
}
}, {
key: "handleMouseDown",
value: function handleMouseDown(e) {
// e.stopPropagation();
var onMouseDown = this.props.onMouseDown;
if (typeof onMouseDown === 'function') {
onMouseDown(e);
}
}
}, {
key: "handleChange",
value: function handleChange(e) {
var _this$props$onClick = this.props.onClick,
onClick = _this$props$onClick === void 0 ? _noop["default"] : _this$props$onClick;
var checked = e.target.checked;
onClick(e);
this.setChecked(checked);
}
}, {
key: "setChecked",
value: function setChecked(checked) {
if (checked) {
this.setValue(this.checkedValue);
}
}
}, {
key: "getOldValue",
value: function getOldValue() {
return this.isChecked() ? this.checkedValue : undefined;
}
}, {
key: "defaultValidationMessages",
get: function get() {
var label = this.getProp('label');
return {
valueMissing: (0, _localeContext.$l)('Radio', label ? 'value_missing' : 'value_missing_no_label', {
label: label
})
};
}
}, {
key: "checkedValue",
get: function get() {
var _this$props$value = this.props.value,
value = _this$props$value === void 0 ? 'on' : _this$props$value;
return value;
}
}, {
key: "hasFloatLabel",
get: function get() {
return this.getLabelChildren() ? false : (0, _get3["default"])((0, _getPrototypeOf2["default"])(Radio.prototype), "hasFloatLabel", this);
}
}]);
return Radio;
}(_FormField2.FormField);
exports.Radio = Radio;
Radio.displayName = 'Radio';
Radio.propTypes = (0, _objectSpread2["default"])({
/**
* <受控>是否选中
*/
checked: _propTypes["default"].bool,
/**
* 初始是否选中
*/
defaultChecked: _propTypes["default"].bool,
/**
* 显示模式
* 可选值: button | box
* @default box
*/
mode: _propTypes["default"].oneOf([_enum.ViewMode.button, _enum.ViewMode.box])
}, _FormField2.FormField.propTypes);
Radio.defaultProps = (0, _objectSpread2["default"])({}, _FormField2.FormField.defaultProps, {
suffixCls: 'radio'
}); // eslint-disable-next-line camelcase
Radio.__PRO_RADIO = true; // eslint-disable-next-line camelcase
Radio.__IS_IN_CELL_EDITOR = true;
(0, _tslib.__decorate)([_autobind["default"]], Radio.prototype, "saveLabelRef", null);
(0, _tslib.__decorate)([_autobind["default"]], Radio.prototype, "handleMouseDown", null);
(0, _tslib.__decorate)([_autobind["default"]], Radio.prototype, "handleChange", null);
(0, _tslib.__decorate)([_mobx.action], Radio.prototype, "setChecked", null);
var ObserverRadio =
/*#__PURE__*/
function (_Radio) {
(0, _inherits2["default"])(ObserverRadio, _Radio);
var _super2 = _createSuper(ObserverRadio);
function ObserverRadio() {
(0, _classCallCheck2["default"])(this, ObserverRadio);
return _super2.apply(this, arguments);
}
return ObserverRadio;
}(Radio);
ObserverRadio.defaultProps = Radio.defaultProps; // eslint-disable-next-line camelcase
ObserverRadio.__PRO_RADIO = true; // eslint-disable-next-line camelcase
ObserverRadio.__IS_IN_CELL_EDITOR = true;
ObserverRadio = (0, _tslib.__decorate)([_mobxReact.observer], ObserverRadio);
var _default = ObserverRadio;
exports["default"] = _default;
//# sourceMappingURL=Radio.js.map