UNPKG

joywok-material-components

Version:

<h1 align="center"> Joywok Material Components </h1>

567 lines (529 loc) 29 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _reactDom = require('react-dom'); var _reactDom2 = _interopRequireDefault(_reactDom); var _constants = require('../constants'); var _core = require('@material-ui/core'); var _Close = require('@material-ui/icons/Close'); var _Close2 = _interopRequireDefault(_Close); var _request = require('./../utils/request'); var _request2 = _interopRequireDefault(_request); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /* 用法: 参数说明: data的数据结构:{zh:'',en:'',language:''},其中 language若是不传显示的是多语言组的第一个 langArr:是所有的语种,若是不传,默认只显示中文和English type:传area就是textarea的,否则是input showLength:input下是否显示输入的字数true显示,false不显示 max:限制的输入的字符的个数 img:字典图标或者别的图标的url inpNoSearch:true,//input框输入不会调接口获取字典数据,true不会调接口,false会调接口 不传默认为false, dialogNoSearch:true,//input的类型在中英文弹框中输入信息是否调字典库的接口 true不会调接口,false会调接口 不传默认为false, 1.input类型 <MultilingualCompt data={this.state.obj} url="api/translate/getlist" max="30" onChange={this.handelChange.bind(this)}/> 2.textarea类型 <MultilingualCompt type="area" data={this.state.obj} url="api/translate/getlist" onChange={this.handelChangeText.bind(this)}/> */ require('./style/index.css'); var TextArea = _core.Input.TextArea; var styles = { paper: { color: 'red', overflowY: 'visible' }, scrollBody: { overflowY: 'visible' } }; var defaultLangArr = [{ lang: 'zh', name: '中文' }, { lang: 'en', name: 'English' }]; var MultilingualCompt = function (_React$Component) { _inherits(MultilingualCompt, _React$Component); function MultilingualCompt(props) { _classCallCheck(this, MultilingualCompt); var _this = _possibleConstructorReturn(this, (MultilingualCompt.__proto__ || Object.getPrototypeOf(MultilingualCompt)).call(this, props)); var langArr = _this.props.langArr || defaultLangArr; _this.state = { lang: _this.props.data && _this.props.data.language || langArr[0].lang, curValue: _this.props.data || {}, langArr: langArr, max: _this.props.max || 200, showModal: false, showLength: _this.props.showLength || false, //控制是否显示输入的字符的个数 showList: false, showListAll: false, dataList: [] }; return _this; } _createClass(MultilingualCompt, [{ key: 'componentWillReceiveProps', value: function componentWillReceiveProps(newP) { var langArr = newP.langArr || defaultLangArr; this.setState({ lang: newP.data && newP.data.language || langArr[0].lang, curValue: newP.data || {}, langArr: langArr, max: newP.max || 200 }); } }, { key: 'handelInput', value: function handelInput(e, lang, type) { var _state = this.state, langArr = _state.langArr, max = _state.max, curValue = _state.curValue, modalCurValue = _state.modalCurValue; var curObj = type == 'all' ? modalCurValue : curValue; var value = e.target.value.replace(/^(\s|\u00A0)+/, ''); // this.props.type == 'area' ? "" : this.getData(value, lang); if (this.props.type != 'area') { if (type == 'all' && !this.props.dialogNoSearch) { this.getData(value, lang); } else if (type != 'all' && !this.props.inpNoSearch) { this.getData(value, lang); } } if (!this.isOnComposition) { if ((0, _constants.DataLength)(value) <= max) { curObj[lang] = value; } else if (!this.isOnComposition) { curObj[lang] = (0, _constants.jwSubStr)(value, max); } } else { curObj[lang] = value; } if (type == 'all') { this.setState({ modalCurValue: curObj }); } else { curObj.language = lang; this.setState({ curValue: curObj }); this.props.onChange && this.props.onChange(curObj); } } }, { key: 'handelCompositionEnd', value: function handelCompositionEnd(e, lang, type) { this.isOnComposition = false; this.handelInput(e, lang, type); } }, { key: 'getData', value: function getData(val, lang) { clearTimeout(this.time); var self = this; var obj = {}; obj[lang] = val; obj.pagesize = 20; obj.restype = 0; if (val == '' || !val) { this.setState({ dataList: [] }); return; } this.time = setTimeout(function () { (0, _request2.default)(self.props.url, { method: 'GET', body: obj }).then(function (resp) { var newtempDict = resp['data']['JMTranslate']; if (val == '') { newtempDict = _.filter(newtempDict, function (i) { return i[lang] != ''; }); } self.setState({ dataList: newtempDict || [] }); }); }, 500); } }, { key: 'handelBlur', value: function handelBlur() { var self = this; var _state2 = this.state, curValue = _state2.curValue, lang = _state2.lang, langArr = _state2.langArr; var curLang = lang; curValue[curLang] = curValue[curLang] ? curValue[curLang].replace(/(\s|\u00A0)+$/, '') : ''; this.setState({ curValue: curValue }); setTimeout(function () { self.setState({ showList: false }); }, 0); } }, { key: 'handelItem', value: function handelItem(item, lang, type) { var _state3 = this.state, curValue = _state3.curValue, modalCurValue = _state3.modalCurValue, langArr = _state3.langArr; var curObj = type == 'all' ? modalCurValue : curValue; _.each(langArr, function (jItem) { var keyLang = jItem['id']; if (lang == keyLang) { curObj[lang] = item[keyLang]; } else { curObj[keyLang] = curObj[keyLang] ? curObj[keyLang] : item[keyLang]; } }); if (type == 'all') { this.setState({ modalCurValue: curObj, showListAll: false }); } else { curObj.language = lang; this.setState({ curValue: curObj, showList: false }); this.props.onChange && this.props.onChange(curObj); } } }, { key: 'render', value: function render() { var _this2 = this; var self = this; var _state4 = this.state, inpNoSearch = _state4.inpNoSearch, lang = _state4.lang, curValue = _state4.curValue, langArr = _state4.langArr, max = _state4.max, showModal = _state4.showModal, modalCurValue = _state4.modalCurValue, showLength = _state4.showLength, dataList = _state4.dataList, showList = _state4.showList; if (this.props.type == 'area') { return _react2.default.createElement( 'div', null, this.initTextArea() ); } else { return _react2.default.createElement( 'div', { className: 'jw-multilingual' }, _react2.default.createElement( _core.Select, { className: 'remark-item-lang', value: lang, onChange: function onChange(e) { _this2.setState({ lang: e.target.value, dataList: [] }); curValue.language = e.target.value; _this2.props.onChange && _this2.props.onChange(curValue); } }, _.map(langArr, function (item) { return _react2.default.createElement( _core.MenuItem, { key: item.lang, value: item.lang }, item.name ); }) ), _react2.default.createElement( _core.FormControl, { className: 'remark-item-input' }, _react2.default.createElement(_core.Input, { placeholder: this.props.placeholder || i18n('label.console.mode.menu.url.placehoder'), value: curValue[lang] ? curValue[lang] : "", onFocus: function onFocus() { inpNoSearch ? _this2.setState({ showList: true }) : ""; }, onChange: function onChange(e) { return _this2.handelInput(e, lang); }, onCompositionStart: function onCompositionStart(e) { _this2.isOnComposition = false; }, onCompositionUpdate: function onCompositionUpdate(e) { _this2.isOnComposition = true; }, onCompositionEnd: function onCompositionEnd(e) { return _this2.handelCompositionEnd(e, lang); }, onBlur: function onBlur(e) { return _this2.handelBlur(); }, endAdornment: _react2.default.createElement( _core.InputAdornment, { position: 'end' }, _react2.default.createElement('img', { onClick: function onClick() { return _this2.setState({ showModal: true, modalCurValue: _extends({}, curValue) }); }, src: self.props.img || imagePath + '/images/subscribe/input-after.png' }) ), 'aria-describedby': 'standard-weight-helper-text', inputProps: { 'aria-label': 'weight' } }), showLength ? _react2.default.createElement( _core.FormHelperText, { id: 'standard-weight-helper-text' }, i18n('label.console.application.limit') + ' ' + (lang ? (0, _constants.DataLength)(curValue[lang]) : (0, _constants.DataLength)(curValue[langArr[0].lang])) + '/' + max ) : "", showList && !!dataList.length ? _react2.default.createElement( _core.Paper, { className: 'jw-data-list', style: { zIndex: 1000 } }, _react2.default.createElement( _core.MenuList, null, _.map(dataList, function (item, i) { return _react2.default.createElement( _core.MenuItem, { key: item.lang, onClick: function onClick() { return self.handelItem(item, lang); } }, item[lang] ); }) ) ) : "" ), showModal ? this.initDialog() : "" ); } } }, { key: 'initTextArea', value: function initTextArea() { var _this3 = this; var self = this; var _state5 = this.state, langArr = _state5.langArr, curValue = _state5.curValue, lang = _state5.lang; return _react2.default.createElement( 'div', { className: 'jw-mulitingArea' }, _react2.default.createElement( 'div', { className: 'jw-mulitingArea-header' }, _react2.default.createElement( _core.Select, { className: 'remark-item-lang', value: lang, onChange: function onChange(e) { _this3.setState({ lang: e.target.value, dataList: [] }); curValue.language = e.target.value; _this3.props.onChange && _this3.props.onChange(curValue); } }, _.map(langArr, function (item) { return _react2.default.createElement( _core.MenuItem, { key: item.lang, value: item.lang }, item.name ); }) ) ), _react2.default.createElement( 'div', { className: 'jw-multi-content' }, _react2.default.createElement(_core.TextField, { className: 'jw-textarea', value: curValue[lang] ? curValue[lang] : "", multiline: true, onChange: function onChange(e) { return _this3.handelInput(e, lang); }, onCompositionStart: function onCompositionStart(e) { _this3.isOnComposition = false; }, onCompositionUpdate: function onCompositionUpdate(e) { _this3.isOnComposition = true; }, onCompositionEnd: function onCompositionEnd(e) { return _this3.handelCompositionEnd(e, lang); }, onBlur: function onBlur(e) { return _this3.handelBlur(); } }), _react2.default.createElement( 'span', null, (0, _constants.DataLength)(curValue[lang]), '/', this.state.max ) ) ); } }, { key: 'initDialog', value: function initDialog() { var _this4 = this; var self = this; var classes = this.props.classes; var _state6 = this.state, showModal = _state6.showModal, curValue = _state6.curValue, lang = _state6.lang, modalCurValue = _state6.modalCurValue, langArr = _state6.langArr, max = _state6.max, showListAll = _state6.showListAll, dataList = _state6.dataList; return _react2.default.createElement( _core.Dialog, { classes: classes, open: showModal, onClose: function onClose() { return _this4.setState({ showModal: false }); }, fullWidth: true, maxWidth: 'sm', className: 'multi-modal', 'aria-labelledby': 'form-dialog-title' }, _react2.default.createElement( _core.DialogTitle, { className: 'setting-modal-title no-line', id: 'form-dialog-title' }, this.props.title || i18n('label.console.application.edit.name'), _react2.default.createElement(_Close2.default, { onClick: function onClick() { return _this4.setState({ showModal: false }); } }) ), _react2.default.createElement( _core.DialogContent, { className: 'setting-modal-body' }, _react2.default.createElement( 'div', { className: 'text-edit text-edit-title' }, _react2.default.createElement( 'div', { className: 'text-edit-label' }, i18n('label.console.application.lang') ), _react2.default.createElement( 'div', { className: 'text-edit-value' }, i18n('label.otis.showtitle') + ' ', '(', i18n('label.console.application.limit'), ' ', max, ')' ) ), _.map(langArr, function (item, i) { return _react2.default.createElement( 'div', { className: 'text-edit' }, _react2.default.createElement( 'div', { className: 'text-edit-label' }, item.name ), _react2.default.createElement( 'div', { className: 'text-edit-value' }, _react2.default.createElement(_core.TextField, { className: 'text-edit-input', fullWidth: true, placeholder: self.props.placeholder || i18n('label.console.mode.menu.url.placehoder'), value: modalCurValue[item.lang], onFocus: function onFocus() { self.setState({ showListAll: item.lang }); }, onChange: function onChange(e) { return self.handelInput(e, item.lang, 'all'); }, onCompositionStart: function onCompositionStart(e) { self.isOnComposition = false; }, onCompositionUpdate: function onCompositionUpdate(e) { self.isOnComposition = true; }, onCompositionEnd: function onCompositionEnd(e) { return self.handelCompositionEnd(e, item.lang, 'all'); }, onBlur: function onBlur(e) { modalCurValue[item.lang] = modalCurValue[item.lang] ? modalCurValue[item.lang].replace(/(\s|\u00A0)+$/, '') : ''; self.setState({ modalCurValue: modalCurValue, showListAll: false }); } }), showListAll && showListAll == item.lang && !!dataList.length ? _react2.default.createElement( _core.Paper, { className: 'jw-data-list', style: { zIndex: 1000 } }, _react2.default.createElement( _core.MenuList, null, _.map(dataList, function (jItem, i) { return _react2.default.createElement( _core.MenuItem, { key: jItem.lang, onClick: function onClick() { return self.handelItem(jItem, item.lang, 'all'); } }, jItem[item.lang], '11111' ); }) ) ) : "" ) ); }) ), _react2.default.createElement( _core.DialogActions, { className: 'setting-madel-footer' }, _react2.default.createElement( _core.Button, _defineProperty({ onClick: function onClick() { return _this4.setState({ showModal: false }); }, color: 'primary', variant: 'contained', className: 'save-button' }, 'onClick', function onClick() { var data = _extends({}, curValue, modalCurValue); _this4.setState({ curValue: data, showModal: false }); _this4.props.onChange && _this4.props.onChange(data); }), i18n('label.console.base.save') ) ) ); } }]); return MultilingualCompt; }(_react2.default.Component); exports.default = (0, _core.withStyles)(styles)(MultilingualCompt);