ming-demo3
Version:
mdf metaui web
460 lines (404 loc) • 15 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _baseui = require("@mdf/baseui");
var _classnames = _interopRequireDefault(require("classnames"));
var _row = _interopRequireDefault(require("./row"));
var _col = _interopRequireDefault(require("./col"));
var _label = _interopRequireDefault(require("./label"));
var _text = _interopRequireDefault(require("./text"));
var _button = _interopRequireDefault(require("./button"));
var _refer = _interopRequireDefault(require("../refer"));
var _SvgIcon = _interopRequireDefault(require("@mdf/metaui-web/lib/components/common/SvgIcon"));
var _env = _interopRequireDefault(require("../../helpers/env"));
var ReferControl = function (_React$Component) {
(0, _inherits2["default"])(ReferControl, _React$Component);
function ReferControl(props) {
var _this;
(0, _classCallCheck2["default"])(this, ReferControl);
_this = (0, _possibleConstructorReturn2["default"])(this, (0, _getPrototypeOf2["default"])(ReferControl).call(this, props));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleInputChange", function (e) {
if (!e.target.value) {
var model = _this.getModel();
if (model) model.setValue(null, true);
}
_this.setState({
value: e.target.value
});
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "emitEmpty", function () {
var model = _this.getModel();
if (model) model.setValue(null, true);
_this.refs.inputSearch.refs.input.focus();
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleBodyClick", function (e) {
if (!_this.refs.inputSearch) return;
if (e.target === _this.refs.inputSearch.refs.input || e.target.classList.contains('anticon-canzhao') || e.target.classList.contains('anticon-close-circle') || cb.dom(e.target).parents('.has-related').length || e.target.classList.contains('ant-input-affix-wrapper')) return;
document.body.removeEventListener('click', _this.handleBodyClick);
_this.setState({
focused: false
});
var model = _this.getModel();
if (model) model.execute('blur');
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleFocus", function (e) {
var model = _this.getModel();
if (!model && _this.props.cRefType) {
_this.model = new cb.models.ReferModel({
cRefType: _this.props.cRefType,
multiple: _this.props.multiple,
isList: _this.props.isList ? true : false,
value: _this.props.value
});
_this.model.addListener((0, _assertThisInitialized2["default"])(_this));
model = _this.getModel();
}
if (model) model.browse(false, function (vm) {
_this.vm = vm;
});
_this.setState({
focused: true,
showClear: true
});
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "resetEnterMode", function () {
_this.isEnterMode = false;
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onMouseEnter", function () {
_this.setState({
showClear: true
});
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onMouseLeave", function () {
_this.setState({
showClear: false
});
});
_this.state = {
touch: _env["default"].INTERACTIVE_MODE === 'touch',
bIsNull: props.bIsNull,
visible: !props.bHidden,
focus: false,
modalVisible: false,
value: _this.props.value,
referType: '',
disabled: _this.props.disabled || false,
width: 600,
title: '参照',
err: '',
msg: '',
showClear: false,
focused: false
};
_this.onClick = _this.onClick.bind((0, _assertThisInitialized2["default"])(_this));
_this.close = _this.close.bind((0, _assertThisInitialized2["default"])(_this));
_this.handleBodyClick = _this.handleBodyClick.bind((0, _assertThisInitialized2["default"])(_this));
return _this;
}
(0, _createClass2["default"])(ReferControl, [{
key: "getModel",
value: function getModel() {
return this.props.model || this.model;
}
}, {
key: "componentDidMount",
value: function componentDidMount() {
if (this.props.model) this.props.model.addListener(this);
if (this.props.focus) this.refs.inputSearch.refs.input.focus();
document.body.addEventListener('click', this.handleBodyClick);
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate() {
if (this.props.model) this.props.model.addListener(this);
}
}, {
key: "componentWillReceiveProps",
value: function componentWillReceiveProps(nextProps) {
if (!this.props.model && nextProps.model) nextProps.model.addListener(this);
if (nextProps.value === this.props.value) return;
this.setState({
value: nextProps.value
});
if (typeof this.props.valueChange == 'function') this.props.valueChange(nextProps.value);
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
document.body.removeEventListener('click', this.handleBodyClick);
var model = this.getModel();
if (model) model.removeListener(this);
}
}, {
key: "open",
value: function open(e) {
document.body.removeEventListener('click', this.handleBodyClick);
this.setState({
referType: e.referType,
vm: e.vm,
modalVisible: true
});
}
}, {
key: "close",
value: function close() {
this.setState({
modalVisible: false,
focused: false
});
var model = this.getModel();
if (model) model.execute('blur');
}
}, {
key: "setValue",
value: function setValue(value) {
document.body.removeEventListener('click', this.handleBodyClick);
this.setState({
modalVisible: false,
value: value
});
if (!this.isEnterMode) return;
this.isEnterMode = false;
var model = this.getModel();
if (model) model.execute('blur');
}
}, {
key: "onClick",
value: function onClick() {
var model = this.getModel();
if (!model && this.props.cRefType) {
this.model = new cb.models.ReferModel({
cRefType: this.props.cRefType,
multiple: this.props.multiple,
isList: this.props.isList ? true : false,
value: this.props.value
});
this.model.addListener(this);
model = this.getModel();
}
if (model) model.browse();
}
}, {
key: "handleJointQuery",
value: function handleJointQuery() {
var model = this.getModel();
if (!model && this.props.cRefType) {
this.model = new cb.models.ReferModel({
cRefType: this.props.cRefType,
multiple: this.props.multiple,
isList: this.props.isList ? true : false,
value: this.props.value
});
this.model.addListener(this);
}
model = this.getModel();
if (model) model.fireEvent('jointQuery');
}
}, {
key: "handleOnPressEnter",
value: function handleOnPressEnter(e) {
if (this.isEnterMode) return;
this.isEnterMode = true;
var errCallBack = function errCallBack() {
e.nativeEvent.stopImmediatePropagation();
e.nativeEvent.stopPropagation();
};
var model = this.getModel();
if (model) {
model.fireEvent('pressEnter', this.state.value);
model.setState('text', this.state.value);
}
this.vm && this.vm.fireEvent('pressEnter', {
value: this.state.value,
model: model,
callback: this.resetEnterMode,
errCallBack: errCallBack
});
}
}, {
key: "handleInputBlur",
value: function handleInputBlur(e) {
var value = e.target.value === '' ? null : e.target.value;
if (this.props.model) this.props.model.setState('text', value);
this.setState({
focused: false,
showClear: false
});
}
}, {
key: "setDisabled",
value: function setDisabled(val) {
this.setState({
disabled: val
});
}
}, {
key: "validate",
value: function validate(val) {
this.setState({
err: 'has-' + val.type,
msg: val.message
});
}
}, {
key: "baseControl",
value: function baseControl() {
var _this2 = this;
var baseControl;
if (this.state.readOnly) {
baseControl = (0, _text["default"])(this.state.value);
} else {
var _this$props = this.props,
style = _this$props.style,
size = _this$props.size,
placeholder = _this$props.placeholder;
var referTitle = '';
if (this.props.title) {
referTitle = _react["default"].createElement(_col["default"], {
span: 6
}, this.props.title);
}
var btnCls = (0, _classnames["default"])({
'ant-search-btn': true
});
var searchCls = (0, _classnames["default"])({
'ant-search-input': true,
'ant-search-input-focus': this.state.focus
});
var suffix;
if (!this.state.disabled) {
var suffixItems = [];
if (!cb.utils.isEmpty(this.state.value) && (this.state.showClear || this.state.touch || this.state.focused || this.props.inTable)) suffixItems.push(_react["default"].createElement(_baseui.Icon, {
type: "close-circle",
onClick: this.emitEmpty
}));
suffixItems.push(_react["default"].createElement(_baseui.Icon, {
type: "canzhao",
onClick: this.onClick
}));
suffix = _react["default"].createElement("div", null, suffixItems);
}
baseControl = _react["default"].createElement(_row["default"], {
className: this.state.err
}, _react["default"].createElement(_col["default"], {
span: "line"
}, _react["default"].createElement("div", {
className: "ant-search-input-wrapper",
onMouseEnter: this.onMouseEnter,
onMouseLeave: this.onMouseLeave,
style: style
}, _react["default"].createElement(_baseui.Input, {
readOnly: this.state.touch,
ref: "inputSearch",
disabled: this.state.disabled,
placeholder: placeholder,
value: this.state.value,
onFocus: this.handleFocus,
onChange: function onChange(e) {
return _this2.handleInputChange(e);
},
suffix: suffix,
onPressEnter: function onPressEnter(e) {
return _this2.handleOnPressEnter(e);
},
onBlur: function onBlur(e) {
return _this2.handleInputBlur(e);
},
onClick: this.state.touch ? this.onClick : null
}), _react["default"].createElement(_refer["default"], {
visible: this.state.modalVisible,
close: this.close,
title: this.props.cShowCaption ? this.props.cShowCaption : this.props.title,
model: this.state.vm,
afterOkClick: this.props.afterOkClick,
referType: this.state.referType
}))));
}
return baseControl;
}
}, {
key: "isHideRelatedControl",
value: function isHideRelatedControl() {
var obj = true;
var arr = this.getModel() && this.getModel().getCache("relatedState");
if (arr && arr.length > 0) {
arr.forEach(function (ele) {
if (ele.visible !== false) obj = false;
});
} else {
obj = false;
}
return obj;
}
}, {
key: "relatedControl",
value: function relatedControl() {
var control = this.baseControl();
var relatedControl = this.props.relatedControl;
if (!relatedControl) {
return control;
} else {
var style = {};
if (this.isHideRelatedControl() == true) style.display = "none";
return _react["default"].createElement("div", {
className: "has-related"
}, _react["default"].createElement("div", {
className: "viewCell"
}, control), _react["default"].createElement("div", {
className: "related-show",
style: style
}, relatedControl));
}
}
}, {
key: "getControl",
value: function getControl() {
var _this3 = this;
var _this$props2 = this.props,
bJointQuery = _this$props2.bJointQuery,
cShowCaption = _this$props2.cShowCaption;
var title = bJointQuery ? _react["default"].createElement("a", {
onClick: function onClick(e) {
return _this3.handleJointQuery(e);
}
}, cShowCaption) : cShowCaption;
title = !this.state.readOnly && this.state.bIsNull === false && cShowCaption ? _react["default"].createElement("label", null, _react["default"].createElement(_baseui.Icon, {
type: "star"
}), title) : _react["default"].createElement("label", null, title);
var control = cShowCaption ? _react["default"].createElement(_label["default"], {
control: this.relatedControl(),
title: title
}) : this.relatedControl();
return control;
}
}, {
key: "render",
value: function render() {
var control = this.getControl();
var style = this.state.visible ? {} : {
display: "none"
};
var errClass = 'has-feedback ' + this.state.err;
return _react["default"].createElement("div", {
style: style,
className: errClass
}, control, _react["default"].createElement("div", {
className: "ant-form-explain"
}, this.state.msg));
}
}]);
return ReferControl;
}(_react["default"].Component);
exports["default"] = ReferControl;
//# sourceMappingURL=refer.js.map