@jannie-shao/components-antd4
Version:
120 lines • 3.81 kB
JavaScript
import "antd/es/popover/style";
import _Popover from "antd/es/popover";
import "antd/es/button/style";
import _Button from "antd/es/button";
import "antd/es/message/style";
import _message from "antd/es/message";
import "antd/es/input/style";
import _Input from "antd/es/input";
import React, { useState } from 'react';
import PropTypes from 'prop-types';
import classnames from 'classnames';
import uniq from 'lodash/uniq';
import IconFont from "../icon-font";
import { rootPrefix } from "../style/config";
import { filterEmptyString } from "../utils";
var TextArea = _Input.TextArea;
var prefix = rootPrefix + "-batch-input";
function BatchInputPopover(_ref) {
var _ref$className = _ref.className,
className = _ref$className === void 0 ? '' : _ref$className,
visible = _ref.visible,
max = _ref.max,
popoverTitle = _ref.popoverTitle,
popoverPlaceholder = _ref.popoverPlaceholder,
value = _ref.value,
onConfirm = _ref.onConfirm,
currentOptions = _ref.currentOptions;
var _useState = useState(false),
popVisible = _useState[0],
setPopVisible = _useState[1];
var _useState2 = useState(''),
batchValue = _useState2[0],
setBatchValue = _useState2[1];
var fillBatchInput = function fillBatchInput(v) {
var labels;
if (currentOptions.length > 0) {
labels = v.map(function (i) {
return currentOptions.find(function (o) {
return o.value === i;
}).label;
});
} else {
labels = v;
}
setBatchValue(labels.join('\n'));
};
var handleConfirmBatchInput = function handleConfirmBatchInput() {
var splited = filterEmptyString(batchValue.split('\n'));
var uniqed = uniq(splited);
if (uniqed.length > max) {
_message.error("Warning: You can only input up to " + max + " values");
} else {
setPopVisible(false);
onConfirm(uniqed);
}
};
var handleCancelBatchInput = function handleCancelBatchInput() {
setPopVisible(false);
};
var handleBatchInputChange = function handleBatchInputChange(e) {
return setBatchValue(e.target.value);
};
var handlePopVisibleChange = function handlePopVisibleChange(v) {
setPopVisible(v);
if (v) {
fillBatchInput(value);
}
};
return /*#__PURE__*/React.createElement("div", {
className: classnames(prefix, className),
style: !visible ? {
display: 'none'
} : {}
}, /*#__PURE__*/React.createElement(_Popover, {
getPopupContainer: function getPopupContainer(n) {
return n.parentNode;
},
content: /*#__PURE__*/React.createElement("div", {
className: prefix + "-popover-card"
}, /*#__PURE__*/React.createElement(TextArea, {
placeholder: popoverPlaceholder,
onChange: handleBatchInputChange,
autoSize: {
minRows: 12,
maxRows: 12
},
value: batchValue
}), /*#__PURE__*/React.createElement(_Button, {
onClick: handleConfirmBatchInput,
type: "primary"
}, "OK"), /*#__PURE__*/React.createElement(_Button, {
onClick: handleCancelBatchInput
}, "Cancel")),
title: popoverTitle,
placement: "topRight",
trigger: "click",
open: popVisible,
onOpenChange: handlePopVisibleChange
}, /*#__PURE__*/React.createElement(IconFont.FileAdd, {
className: prefix + "-icon"
})));
}
BatchInputPopover.propTypes = {
visible: PropTypes.bool,
max: PropTypes.number,
popoverTitle: PropTypes.string,
popoverPlaceholder: PropTypes.string,
value: PropTypes.array.isRequired,
onConfirm: PropTypes.func,
currentOptions: PropTypes.array
};
BatchInputPopover.defaultProps = {
visible: false,
max: 20,
popoverTitle: 'Batch Input',
popoverPlaceholder: 'one each line, up to 20',
onConfirm: function onConfirm() {},
currentOptions: []
};
export default BatchInputPopover;