choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
314 lines (260 loc) • 10.2 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
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 _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
var _tslib = require("tslib");
var _react = _interopRequireDefault(require("react"));
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");
var Radio = /*#__PURE__*/function (_FormField) {
(0, _inherits2["default"])(Radio, _FormField);
var _super = (0, _createSuper2["default"])(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: "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: "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 /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("label", (0, _extends2["default"])({
key: "wrapper"
}, this.getWrapperProps()), /*#__PURE__*/_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 /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(this.prefixCls, "-inner")
});
}
/**
* 当使用label代替children时,不需要展示float label
*
* @readonly
* @memberof Radio
*/
}, {
key: "hasFloatLabel",
get: function get() {
return this.getLabelChildren() ? false : (0, _get3["default"])((0, _getPrototypeOf2["default"])(Radio.prototype), "hasFloatLabel", this);
}
/**
* 没有children时,使用label替代children
*
* @returns {ReactNode} label
* @memberof Radio
*/
}, {
key: "getLabelChildren",
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 /*#__PURE__*/_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;
}
}]);
return Radio;
}(_FormField2.FormField);
exports.Radio = Radio;
Radio.displayName = 'Radio';
Radio.defaultProps = (0, _objectSpread2["default"])((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 = (0, _createSuper2["default"])(ObserverRadio);
function ObserverRadio() {
(0, _classCallCheck2["default"])(this, ObserverRadio);
return _super2.apply(this, arguments);
}
return (0, _createClass2["default"])(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