UNPKG

@bnorth/components

Version:

bnorth, components, react

632 lines (554 loc) 21.2 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime-corejs2/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault"); var _Object$defineProperty2 = require("@babel/runtime-corejs2/core-js/object/define-property"); _Object$defineProperty2(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperties = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/define-properties")); var _getOwnPropertyDescriptors = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptors")); var _getOwnPropertyDescriptor = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/get-own-property-descriptor")); var _getOwnPropertySymbols = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/get-own-property-symbols")); var _keys = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/keys")); require("core-js/modules/es6.regexp.constructor"); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty")); require("core-js/modules/es7.array.includes"); require("core-js/modules/es6.string.includes"); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits")); var _defineProperty3 = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/define-property")); var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/extends")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/objectWithoutProperties")); var _react = _interopRequireDefault(require("react")); var _BaseComponent10 = _interopRequireWildcard(require("./BaseComponent")); var _Panel = _interopRequireWildcard(require("./Panel")); var _Icon = _interopRequireDefault(require("./Icon")); function ownKeys(object, enumerableOnly) { var keys = (0, _keys.default)(object); if (_getOwnPropertySymbols.default) { var symbols = (0, _getOwnPropertySymbols.default)(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return (0, _getOwnPropertyDescriptor.default)(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (_getOwnPropertyDescriptors.default) { (0, _defineProperties.default)(target, (0, _getOwnPropertyDescriptors.default)(source)); } else { ownKeys(source).forEach(function (key) { (0, _defineProperty3.default)(target, key, (0, _getOwnPropertyDescriptor.default)(source, key)); }); } } return target; } /** * 表单控件组件,是对 input 的包装,除 Field 属性外支持 input 标准属性 * @component * @augments BaseComponent * @exportdefault */ var _Field = function Field(aprops) { var _BaseComponent = (0, _BaseComponent10.default)(aprops, _Field), types = _BaseComponent.types, before = _BaseComponent.before, after = _BaseComponent.after, label = _BaseComponent.label, beforeProps = _BaseComponent.beforeProps, afterProps = _BaseComponent.afterProps, containerProps = _BaseComponent.containerProps, props = (0, _objectWithoutProperties2.default)(_BaseComponent, ["types", "before", "after", "label", "beforeProps", "afterProps", "containerProps"]); if (props.hasOwnProperty('value') && props.value === undefined) props.value = ''; var ComponentField = types[aprops.type] || types.text; if (!ComponentField) return null; if (before || after) { props['b-style'] = 'plain'; props['panelItemSelected'] = true; } var component = _react.default.createElement(ComponentField, props); if (!before && !after) return component; return _react.default.createElement(_Panel.PanelContainer, (0, _extends2.default)({ component: label && 'label', ctype: "primary" }, containerProps), before ? _react.default.createElement(_Panel.default, beforeProps, before) : null, component, after ? _react.default.createElement(_Panel.default, afterProps, after) : null); }; _Field.defaultProps = {}; /** * 设置控件组件的类型,支持 html input type 以及自定义的类型,参见 Field 的成员,默认使用 text 对应的类型 * @attribute module:Field.Field.type * @type {string} */ /** * 设置前置内容,将开启组模式,在容器中显示前置后置内容和表单控件组件 * @attribute module:Field.Field.before * @type {component|element|string|number} */ /** * 设置后置内容,将开启组模式,在容器中显示前置后置内容和表单控件组件 * @attribute module:Field.Field.after * @type {component|element|string|number} */ /** * 设置容器为 label 元素 * @attribute module:Field.Field.label * @type {boolean} */ /** * 设置前置内容的组件的属性 * @attribute module:Field.Field.beforeProps * @type {object} */ /** * 设置后置内容的组件的属性 * @attribute module:Field.Field.afterProps * @type {object} */ /** * 设置容器组件的属性 * @attribute module:Field.Field.containerProps * @type {object} */ (0, _defineProperty3.default)(_Field, "Field", { get: function get() { return _Field; }, set: function set(val) { _Field = val; } }); _Field.isBnorth = true; _Field.defaultProps['b-precast'] = {}; var _default = _Field; /** * 表单控件的一般类型组件 * @component * @mount Field.Normal * @augments module:BaseComponent.BaseComponent * @augments module:Panel.Panel * @augments input * @private */ exports.default = _default; var _Normal = /*#__PURE__*/ function (_React$Component) { (0, _inherits2.default)(Normal, _React$Component); function Normal() { (0, _classCallCheck2.default)(this, Normal); return (0, _possibleConstructorReturn2.default)(this, (0, _getPrototypeOf2.default)(Normal).apply(this, arguments)); } (0, _createClass2.default)(Normal, [{ key: "componentDidMount", value: function componentDidMount() { this.input = (0, _BaseComponent10.domFindNode)(this); this.input.value = this.props.value || ''; } }, { key: "componentDidUpdate", value: function componentDidUpdate(prevProps, prevState) { if (this.props.value !== this.input.value) this.input.value = this.props.value || ''; } }, { key: "render", value: function render() { var _BaseComponent2 = (0, _BaseComponent10.default)(this.props, _Normal), type = _BaseComponent2.type, value = _BaseComponent2.value, typesToElement = _BaseComponent2.typesToElement, onChange = _BaseComponent2.onChange, pattern = _BaseComponent2.pattern, patterns = _BaseComponent2.patterns, patternName = _BaseComponent2.patternName, onEnterPress = _BaseComponent2.onEnterPress, _onKeyPress = _BaseComponent2.onKeyPress, _BaseComponent2$compo = _BaseComponent2.component, component = _BaseComponent2$compo === void 0 ? "input" : _BaseComponent2$compo, classNamePre = _BaseComponent2.classNamePre, children = _BaseComponent2.children, props = (0, _objectWithoutProperties2.default)(_BaseComponent2, ["type", "value", "typesToElement", "onChange", "pattern", "patterns", "patternName", "onEnterPress", "onKeyPress", "component", "classNamePre", "children"]); if (typesToElement.includes(type)) { component = type; type = null; } else { children = undefined; } if (patternName) pattern = patterns[patternName]; classNamePre = _objectSpread({ 'field transition outline-none appearance-none line-height-1 font-smoothing-antialiased vertical-align-middle': true, 'bg-none- border-none-a-': !this.props['b-style'] }, classNamePre); return _react.default.createElement(_Panel.default, (0, _extends2.default)({ type: type, onChange: this.props.hasOwnProperty('value') && onChange && pattern && function (e) { if (!RegExp(pattern).test(e.target.value)) e.target.value = value; onChange(e); } || onChange, onKeyPress: function onKeyPress(e) { if (onEnterPress && e.charCode === 13) { e.stopPropagation(); e.preventDefault(); onEnterPress(e.target.value); } else { _onKeyPress && _onKeyPress(e); } }, component: component, classNamePre: classNamePre }, props), children); } }]); return Normal; }(_react.default.Component); _Normal.defaultProps = {}; /** * 当控件在焦点情况下输入回车时触发 * @attribute module:Field~Normal.onEnterPress * @type {function} */ /** * 映射数组,数组内的 input type 直接映射为对应元素,例如: * <Field type="textarea" /> => <textarea></textarea> */ _Normal.defaultProps.typesToElement = ['progress', 'select', 'textarea']; _Normal.defaultProps.patterns = { number: "^\\d*$", float: '^\\d*(.\\d*)?$', float2: '/^\\d*(.\\d{0,2})?$/' }; /* eslint-disable no-useless-escape */ (0, _defineProperty3.default)(_Field, "Normal", { get: function get() { return _Normal; }, set: function set(val) { _Normal = val; } }); _Normal.isBnorth = true; _Normal.defaultProps['b-precast'] = {}; /** * 表单控件的显示静态文本的组件,用于与其他表单组件达到一致样式 * @component * @mount Field.Static * @augments module:BaseComponent.BaseComponent * @augments module:Panel.Panel * @augments input * @private */ var _Static = function Static(aprops) { var _BaseComponent3 = (0, _BaseComponent10.default)(aprops, _Static), type = _BaseComponent3.type, value = _BaseComponent3.value, classNamePre = _BaseComponent3.classNamePre, children = _BaseComponent3.children, props = (0, _objectWithoutProperties2.default)(_BaseComponent3, ["type", "value", "classNamePre", "children"]); classNamePre = _objectSpread({ 'line-height-1 vertical-align-middle': true }, classNamePre); return _react.default.createElement(_Panel.default, (0, _extends2.default)({ component: "span", classNamePre: classNamePre }, props), value || children || _react.default.createElement("pre", { className: "margin-a-0 padding-a-0" }, " ")); }; _Static.defaultProps = {}; (0, _defineProperty3.default)(_Field, "Static", { get: function get() { return _Static; }, set: function set(val) { _Static = val; } }); _Static.isBnorth = true; _Static.defaultProps['b-precast'] = {}; /** * 表单控件的隐藏组件,使用 label 组件套住该组件,用于改变默认组件的样式 * @component * @mount Field.HiddenInput * @augments BaseComponent * @private */ var _HiddenInput = function HiddenInput(aprops) { var _BaseComponent4 = (0, _BaseComponent10.default)(aprops, _HiddenInput), classNamePre = _BaseComponent4.classNamePre, props = (0, _objectWithoutProperties2.default)(_BaseComponent4, ["classNamePre"]); classNamePre = _objectSpread({ 'visibility-hide display-none': true }, classNamePre); return _react.default.createElement(_Panel.default, (0, _extends2.default)({ component: "input", classNamePre: classNamePre }, props)); }; _HiddenInput.defaultProps = {}; (0, _defineProperty3.default)(_Field, "HiddenInput", { get: function get() { return _HiddenInput; }, set: function set(val) { _HiddenInput = val; } }); _HiddenInput.isBnorth = true; _HiddenInput.defaultProps['b-precast'] = {}; /** * 表单控件组件的文件选择控件实现的组件 * @component * @mount Field.File * @augments BaseComponent * @private */ var _File = function File(aprops) { var _BaseComponent5 = (0, _BaseComponent10.default)(aprops, _File), type = _BaseComponent5.type, value = _BaseComponent5.value, inputProps = _BaseComponent5.inputProps, disabled = _BaseComponent5.disabled, onClick = _BaseComponent5.onClick, onChange = _BaseComponent5.onChange, classNamePre = _BaseComponent5.classNamePre, children = _BaseComponent5.children, props = (0, _objectWithoutProperties2.default)(_BaseComponent5, ["type", "value", "inputProps", "disabled", "onClick", "onChange", "classNamePre", "children"]); classNamePre = _objectSpread({ 'line-height-1 vertical-align-middle': true }, classNamePre); return _react.default.createElement(_Panel.default, (0, _extends2.default)({ disabled: disabled, component: "label", classNamePre: classNamePre }, props), _react.default.createElement(_HiddenInput, (0, _extends2.default)({ type: type, value: value, disabled: disabled, onClick: onClick, onChange: onChange }, inputProps)), children); }; _File.defaultProps = {}; /** * 设置隐藏的 input 的容器的属性 * @attribute module:Field~File.inputProps * @type {object} */ (0, _defineProperty3.default)(_Field, "File", { get: function get() { return _File; }, set: function set(val) { _File = val; } }); _Field.isBnorth = true; _Field.defaultProps['b-precast'] = {}; /** * 表单控件的2态组件,用于实现 checkbox 等具有 checked 属性类型的组件,实现了2种状态切换的功能 * * 对该组件设置的其他属性,将设置到 content 组件上 * @component * @mount Field.CheckState * @augments BaseComponent * @private */ var _CheckState = function CheckState(aprops) { var _BaseComponent6 = (0, _BaseComponent10.default)(aprops, _CheckState), type = _BaseComponent6.type, value = _BaseComponent6.value, defaultValue = _BaseComponent6.defaultValue, domValue = _BaseComponent6.domValue, disabled = _BaseComponent6.disabled, onClick = _BaseComponent6.onClick, onChange = _BaseComponent6.onChange, inputProps = _BaseComponent6.inputProps, innerProps = _BaseComponent6.innerProps, statusProps = _BaseComponent6.statusProps, statusCheckedProps = _BaseComponent6.statusCheckedProps, statusUncheckedProps = _BaseComponent6.statusUncheckedProps, classNamePre = _BaseComponent6.classNamePre, children = _BaseComponent6.children, props = (0, _objectWithoutProperties2.default)(_BaseComponent6, ["type", "value", "defaultValue", "domValue", "disabled", "onClick", "onChange", "inputProps", "innerProps", "statusProps", "statusCheckedProps", "statusUncheckedProps", "classNamePre", "children"]); classNamePre = _objectSpread({ 'check-status line-height-0 display-inlineblock vertical-align-middle': true }, classNamePre); var classNamePreInner = { 'check-status-inner position-relative line-height-0 display-inlineblock': true }; return _react.default.createElement(_Panel.default, (0, _extends2.default)({ component: "label", classNamePre: classNamePre }, props), _react.default.createElement(_HiddenInput, (0, _extends2.default)({ type: type, checked: value, defaultChecked: defaultValue, value: domValue, disabled: disabled, onChange: onChange }, inputProps)), _react.default.createElement(_Panel.default, (0, _extends2.default)({ component: "span", classNamePre: classNamePreInner }, innerProps), _react.default.createElement(_Panel.default, (0, _extends2.default)({ type: type, disabled: disabled, classNameExt: "check-status-checked" }, statusProps, statusCheckedProps)), _react.default.createElement(_Panel.default, (0, _extends2.default)({ type: type, disabled: disabled, classNameExt: "check-status-unchecked" }, statusProps, statusUncheckedProps))), children); }; _CheckState.defaultProps = {}; /** * * @attribute module:Field~CheckState.value * @type {boolean} */ /** * * @attribute module:Field~CheckState.defaultValue * @type {boolean} */ /** * 设置 input dom 的 value 属性 * @attribute module:Field~CheckState.domValue * @type {string} */ /** * 设置隐藏的 input 的容器的属性 * @attribute module:Field~CheckState.inputProps * @type {object} */ /** * 设置2态内容的容器的属性 * @attribute module:Field~CheckState.innerProps * @type {object} */ (0, _defineProperty3.default)(_Field, "CheckState", { get: function get() { return _CheckState; }, set: function set(val) { _CheckState = val; } }); _CheckState.isBnorth = true; _CheckState.defaultProps['b-precast'] = {}; /** * 表单控件的对应的 checkbox 组件,基于2态组件实现 * @component * @mount Field.Checkbox * @augments BaseComponent * @private */ var _Checkbox = function Checkbox(aprops) { var _BaseComponent7 = (0, _BaseComponent10.default)(aprops, _Checkbox), disabled = _BaseComponent7.disabled, props = (0, _objectWithoutProperties2.default)(_BaseComponent7, ["disabled"]); return _react.default.createElement(_CheckState, (0, _extends2.default)({ "b-style": "hollow", "bg-color-component": disabled, "bp-status-component": _Icon.default, "bp-statusChecked-name": "check:X", "bp-statusUnchecked-name": " ", disabled: disabled }, props)); }; _Checkbox.defaultProps = {}; (0, _defineProperty3.default)(_Field, "Checkbox", { get: function get() { return _Checkbox; }, set: function set(val) { _Checkbox = val; } }); _Checkbox.isBnorth = true; _Checkbox.defaultProps['b-precast'] = {}; /** * 表单控件的对应的 radio 组件,基于2态组件实现 * @component * @mount Field.Radio * @augments BaseComponent * @private */ var _Radio = function Radio(aprops) { var _BaseComponent8 = (0, _BaseComponent10.default)(aprops, _Radio), disabled = _BaseComponent8.disabled, props = (0, _objectWithoutProperties2.default)(_BaseComponent8, ["disabled"]); return _react.default.createElement(_CheckState, (0, _extends2.default)({ "b-style": "hollow", "bg-color-component": disabled, "bc-border-radius-rounded": true, "bp-status-component": _Icon.default, "bp-statusChecked-name": "check:X", "bp-statusUnchecked-name": " ", disabled: disabled }, props)); }; _Radio.defaultProps = {}; (0, _defineProperty3.default)(_Field, "Radio", { get: function get() { return _Radio; }, set: function set(val) { _Radio = val; } }); _Radio.isBnorth = true; _Radio.defaultProps['b-precast'] = {}; /** * 表单控件的开关组件,基于2态组件实现 * @component * @mount Field.Switch * @augments BaseComponent * @private */ var _Switch = function Switch(aprops) { var _BaseComponent9 = (0, _BaseComponent10.default)(aprops, _Switch), disabled = _BaseComponent9.disabled, _BaseComponent9$bThe = _BaseComponent9['b-theme'], bTheme = _BaseComponent9$bThe === void 0 ? 'component' : _BaseComponent9$bThe, props = (0, _objectWithoutProperties2.default)(_BaseComponent9, ["disabled", "b-theme"]); var classNamePreItem = { 'border-radius-rounded width-1em height-1em': true }; return _react.default.createElement(_CheckState, (0, _extends2.default)({ "b-style": "hollow", "bg-color-component": disabled, "bc-border-radius-rounded": true, "bp-statusChecked-children": _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_Panel.default, { inline: true, "b-style": "solid", "b-theme": bTheme, classNamePre: classNamePreItem, "bs-zIndex": "10" }), _react.default.createElement(_Panel.default, { inline: true, "b-style": "solid", "b-theme": "white", classNamePre: classNamePreItem, "bs-marginLeft": "-0.3em" })), "bp-statusUnchecked-children": _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_Panel.default, { inline: true, "b-style": "solid", "b-theme": "white", classNamePre: classNamePreItem }), _react.default.createElement(_Panel.default, { inline: true, "b-style": "solid", "b-theme": "component", classNamePre: classNamePreItem, "bs-marginLeft": "-0.3em" })), disabled: disabled }, props, { type: "checkbox" })); }; _Switch.defaultProps = {}; (0, _defineProperty3.default)(_Field, "Switch", { get: function get() { return _Switch; }, set: function set(val) { _Switch = val; } }); _Switch.isBnorth = true; _Switch.defaultProps['b-precast'] = {}; _Field.defaultProps.types = { text: _Normal, static: _Static, file: _File, checkbox: _Checkbox, radio: _Radio, switch: _Switch };