@chatui/core
Version:
The React library for Chatbot UI
58 lines • 2.13 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
var _excluded = ["inputRef", "invisible", "onImageSend"];
import React, { useState, useEffect, useCallback } from 'react';
import clsx from 'clsx';
import { Input } from '../Input';
import { SendConfirm } from '../SendConfirm';
import riseInput from './riseInput';
import parseDataTransfer from '../../utils/parseDataTransfer';
import canUse from '../../utils/canUse';
var canTouch = canUse('touch');
export var ComposerInput = function ComposerInput(_ref) {
var inputRef = _ref.inputRef,
invisible = _ref.invisible,
onImageSend = _ref.onImageSend,
rest = _objectWithoutProperties(_ref, _excluded);
var _useState = useState(null),
_useState2 = _slicedToArray(_useState, 2),
pastedImage = _useState2[0],
setPastedImage = _useState2[1];
var handlePaste = useCallback(function (e) {
parseDataTransfer(e, setPastedImage);
}, []);
var handleImageCancel = useCallback(function () {
setPastedImage(null);
}, []);
var handleImageSend = useCallback(function () {
if (onImageSend && pastedImage) {
Promise.resolve(onImageSend(pastedImage)).then(function () {
setPastedImage(null);
});
}
}, [onImageSend, pastedImage]);
useEffect(function () {
if (canTouch && inputRef.current) {
var $composer = document.querySelector('.Composer');
riseInput(inputRef.current, $composer);
}
}, [inputRef]);
return /*#__PURE__*/React.createElement("div", {
className: clsx({
'S--invisible': invisible
}),
"aria-hidden": invisible
}, /*#__PURE__*/React.createElement(Input, _extends({
className: "Composer-input",
rows: 1,
autoSize: true,
enterKeyHint: "send",
onPaste: onImageSend ? handlePaste : undefined,
ref: inputRef
}, rest)), pastedImage && /*#__PURE__*/React.createElement(SendConfirm, {
file: pastedImage,
onCancel: handleImageCancel,
onSend: handleImageSend
}));
};