choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
261 lines (214 loc) • 11.4 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _react = _interopRequireWildcard(require("react"));
var _mobx = require("mobx");
var _classnames = _interopRequireDefault(require("classnames"));
var _mobxReactLite = require("mobx-react-lite");
var _ConfigContext = _interopRequireDefault(require("../../../lib/config-provider/ConfigContext"));
var _FormContext = _interopRequireDefault(require("./FormContext"));
var _utils = require("./utils");
var _enum = require("./enum");
var _row = _interopRequireDefault(require("../row"));
var _col = _interopRequireDefault(require("../col"));
var _enum2 = require("../core/enum");
var _singleton = require("../tooltip/singleton");
var _util = _interopRequireDefault(require("../overflow-tip/util"));
var _enum3 = require("../field/enum");
var _icon = _interopRequireDefault(require("../icon"));
var _excluded = ["children", "useColon", "requiredMarkAlign"],
_excluded2 = ["className", "fieldClassName"];
var Label = function Label(props) {
var children = props.children,
className = props.className,
tooltip = props.tooltip,
width = props.width,
help = props.help;
var _useContext = (0, _react.useContext)(_ConfigContext["default"]),
getTooltipTheme = _useContext.getTooltipTheme,
getTooltipPlacement = _useContext.getTooltipPlacement;
var tooltipRef = (0, _react.useRef)(false);
var style = (0, _react.useMemo)(function () {
return width ? {
width: width
} : undefined;
}, [width]);
var handleMouseEnter = (0, _react.useCallback)(function (e) {
var currentTarget = e.currentTarget;
if (tooltip === _enum2.Tooltip.always || tooltip === _enum2.Tooltip.overflow && (0, _util["default"])(currentTarget)) {
(0, _singleton.show)(currentTarget, {
title: children,
theme: getTooltipTheme('label'),
placement: getTooltipPlacement('label')
});
tooltipRef.current = true;
} else if ((0, _mobx.isArrayLike)(tooltip)) {
var tooltipType = tooltip[0];
var labelTooltipProps = tooltip[1] || {};
var duration = (labelTooltipProps.mouseEnterDelay || 0.1) * 1000;
if (tooltipType === _enum2.Tooltip.always || tooltipType === _enum2.Tooltip.overflow && (0, _util["default"])(currentTarget)) {
(0, _singleton.show)(currentTarget, (0, _objectSpread2["default"])({
theme: getTooltipTheme('label'),
placement: getTooltipPlacement('label'),
title: labelTooltipProps.title ? labelTooltipProps.title : children
}, labelTooltipProps), duration);
tooltipRef.current = true;
}
}
}, [children, tooltip, tooltipRef]);
var handleMouseLeave = (0, _react.useCallback)(function () {
if (tooltipRef.current) {
(0, _singleton.hide)();
tooltipRef.current = false;
}
}, [tooltipRef]);
(0, _react.useEffect)(function () {
return function () {
if (tooltipRef.current) {
(0, _singleton.hide)();
tooltipRef.current = false;
}
};
}, [tooltipRef]);
return /*#__PURE__*/_react["default"].createElement("label", {
className: className,
onMouseEnter: handleMouseEnter,
onMouseLeave: handleMouseLeave,
style: style
}, children, help);
};
Label.displayName = 'Label';
var LabelHelp = function LabelHelp(props) {
var help = props.help;
var _useContext2 = (0, _react.useContext)(_ConfigContext["default"]),
getTooltipTheme = _useContext2.getTooltipTheme,
getTooltipPlacement = _useContext2.getTooltipPlacement;
var tooltipRef = (0, _react.useRef)(false);
(0, _react.useEffect)(function () {
return function () {
if (tooltipRef.current) {
(0, _singleton.hide)();
tooltipRef.current = false;
}
};
}, []);
var handleHelpMouseEnter = (0, _react.useCallback)(function (e, help) {
var target = e.target;
(0, _singleton.show)(target, {
title: help,
theme: getTooltipTheme('help'),
placement: getTooltipPlacement('help')
});
tooltipRef.current = true;
}, []);
var handleHelpMouseLeave = (0, _react.useCallback)(function () {
(0, _singleton.hide)();
tooltipRef.current = false;
}, []);
if (help) {
return /*#__PURE__*/_react["default"].createElement(_icon["default"], {
type: "help",
onMouseEnter: function onMouseEnter(e) {
return handleHelpMouseEnter(e, help);
},
onMouseLeave: handleHelpMouseLeave
});
}
return null;
};
LabelHelp.displayName = 'LabelHelp';
var Item = (0, _mobxReactLite.observer)(function (props) {
var _useContext3 = (0, _react.useContext)(_FormContext["default"]),
getConfig = _useContext3.getConfig,
dataSet = _useContext3.dataSet,
record = _useContext3.record,
_useContext3$labelLay = _useContext3.labelLayout,
labelLayout = _useContext3$labelLay === void 0 ? getConfig('labelLayout') : _useContext3$labelLay,
labelAlign = _useContext3.labelAlign,
_useContext3$labelWid = _useContext3.labelWidth,
contextLabelWidth = _useContext3$labelWid === void 0 ? _utils.defaultLabelWidth : _useContext3$labelWid,
labelTooltip = _useContext3.labelTooltip,
useColon = _useContext3.useColon,
requiredMarkAlign = _useContext3.requiredMarkAlign,
getProPrefixCls = _useContext3.getProPrefixCls,
showHelp = _useContext3.showHelp;
var children = props.children,
_props$useColon = props.useColon,
fieldUseColon = _props$useColon === void 0 ? useColon : _props$useColon,
_props$requiredMarkAl = props.requiredMarkAlign,
fieldRequiredMarkAlign = _props$requiredMarkAl === void 0 ? requiredMarkAlign : _props$requiredMarkAl,
rest = (0, _objectWithoutProperties2["default"])(props, _excluded);
var child = _react.Children.only(children);
if ( /*#__PURE__*/(0, _react.isValidElement)(child)) {
var _classNames;
var prefixCls = getProPrefixCls(_utils.FIELD_SUFFIX);
var childrenProps = child.props;
var className = childrenProps.className,
fieldClassName = childrenProps.fieldClassName,
otherProps = (0, _objectWithoutProperties2["default"])(childrenProps, _excluded2);
var fieldProps = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, rest), otherProps);
var fieldElementProps = (0, _objectSpread2["default"])({
className: (0, _classnames["default"])(props.className, className, prefixCls)
}, fieldProps);
var intlFieldOutput = child.type.displayName === 'IntlField' && fieldProps.displayOutput;
if ([_enum.LabelLayout.none, _enum.LabelLayout["float"], _enum.LabelLayout.placeholder].includes(labelLayout)) {
return /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-wrapper")
}, /*#__PURE__*/(0, _react.cloneElement)(child, fieldElementProps));
}
var label = (0, _utils.getProperty)(fieldProps, 'label', dataSet, record);
var required = (0, _utils.getPropertyDSFirst)(fieldProps, 'required', dataSet, record);
var readOnly = (0, _utils.getProperty)(fieldProps, 'readOnly', dataSet, record);
var help = (0, _utils.getProperty)(fieldProps, 'help', dataSet, record);
var isLabelShowHelp = (fieldElementProps.showHelp || showHelp || getConfig('showHelp')) === _enum3.ShowHelp.label;
var isOutput = labelLayout === _enum.LabelLayout.horizontal && (child.type.displayName === 'Output' || intlFieldOutput);
var labelClassName = (0, _classnames["default"])("".concat(prefixCls, "-label"), "".concat(prefixCls, "-label-grid"), "".concat(prefixCls, "-label-").concat(labelAlign), fieldClassName, (_classNames = {}, (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-required"), required && !(child.type.displayName === 'Output' || intlFieldOutput)), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-readonly"), readOnly), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-label-vertical"), labelLayout === _enum.LabelLayout.vertical), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-label-output"), isOutput), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-label-useColon"), label && fieldUseColon), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-label-required-mark-").concat((0, _utils.getRequiredMarkAlign)(fieldRequiredMarkAlign)), labelLayout === _enum.LabelLayout.horizontal && required && !(child.type.displayName === 'Output' || intlFieldOutput) && (0, _utils.getRequiredMarkAlign)(fieldRequiredMarkAlign)), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-label-help"), isLabelShowHelp), _classNames));
var wrapperClassName = (0, _classnames["default"])("".concat(prefixCls, "-wrapper"), (0, _defineProperty2["default"])({}, "".concat(prefixCls, "-output"), isOutput));
var tooltip = props.labelTooltip || labelTooltip;
var helpWrap = isLabelShowHelp ? /*#__PURE__*/_react["default"].createElement(LabelHelp, {
help: help
}) : undefined;
if (labelLayout === _enum.LabelLayout.vertical) {
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(Label, {
className: labelClassName,
tooltip: tooltip,
help: helpWrap
}, label), /*#__PURE__*/_react["default"].createElement("div", {
className: wrapperClassName
}, /*#__PURE__*/(0, _react.cloneElement)(child, fieldElementProps)));
}
var fieldLabelWidth = (0, _utils.getProperty)(fieldProps, 'labelWidth', dataSet, record);
var columnLabelWidth = (0, _utils.normalizeLabelWidth)(contextLabelWidth, 1)[0];
var labelWidth = columnLabelWidth === 'auto' ? undefined : Math.max(columnLabelWidth, isNaN(fieldLabelWidth) ? 0 : fieldLabelWidth);
return /*#__PURE__*/_react["default"].createElement(_row["default"], {
className: "".concat(prefixCls, "-row")
}, /*#__PURE__*/_react["default"].createElement(_col["default"], {
className: "".concat(prefixCls, "-col")
}, /*#__PURE__*/_react["default"].createElement(Label, {
className: labelClassName,
width: labelWidth,
tooltip: tooltip,
help: helpWrap
}, /*#__PURE__*/_react["default"].createElement("span", null, label))), /*#__PURE__*/_react["default"].createElement(_col["default"], {
className: "".concat(prefixCls, "-col ").concat(prefixCls, "-col-control")
}, /*#__PURE__*/_react["default"].createElement("div", {
className: wrapperClassName
}, /*#__PURE__*/(0, _react.cloneElement)(child, fieldElementProps))));
}
if (child) {
return child;
}
return null;
});
Item.displayName = 'FormItem';
Item.__PRO_FORM_ITEM = true;
var _default = Item;
exports["default"] = _default;
//# sourceMappingURL=Item.js.map