react-activity-feed
Version:
React components to create activity and notification feeds
46 lines • 2.67 kB
JavaScript
import { __assign } from "tslib";
import React, { useMemo } from 'react';
import classNames from 'classnames';
import ReactTextareaAutocomplete from '@webscopeio/react-textarea-autocomplete';
import { LoadingIndicator } from 'react-file-utils';
// @ts-expect-error
import EmojiIndex from 'emoji-mart/dist/utils/emoji-index/nimble-emoji-index';
import defaultEmojiData from '../utils/emojiData';
var emojiTrigger = function (emojiData) {
var emojiIndex = new EmojiIndex(emojiData);
return {
':': {
output: function (item) { return ({ key: item.id, text: item.native, caretPosition: 'next' }); },
dataProvider: function (token) {
// condition extracted from emoji-mart to circumvent the bug in the emoji-mart package
if (['-', '-1'].includes(token)) {
return [emojiIndex.emojis['-1']];
}
return (emojiIndex.search(token) || []).slice(0, 10);
},
component: function AutocompleteItem(_a) {
var _b = _a.entity, id = _b.id, native = _b.native;
return (React.createElement("div", null,
native,
" ",
id));
},
},
};
};
export var Textarea = function (_a) {
var _b = _a.emojiData, emojiData = _b === void 0 ? defaultEmojiData : _b, innerRef = _a.innerRef, maxLength = _a.maxLength, onChange = _a.onChange, onPaste = _a.onPaste, _c = _a.placeholder, placeholder = _c === void 0 ? 'Share your opinion' : _c, _d = _a.rows, rows = _d === void 0 ? 3 : _d, _e = _a.trigger, trigger = _e === void 0 ? {} : _e, value = _a.value, className = _a.className, style = _a.style;
var emoji = useMemo(function () { return emojiTrigger(emojiData); }, []);
return (React.createElement(ReactTextareaAutocomplete, { loadingComponent: LoadingIndicator,
// @ts-expect-error
trigger: __assign(__assign({}, emoji), trigger), innerRef: innerRef &&
(function (el) {
if (typeof innerRef === 'function') {
innerRef(el);
}
else if (innerRef !== null) {
innerRef.current = el;
}
}), rows: rows, maxLength: maxLength, className: classNames('raf-textarea__textarea', className), style: style, containerClassName: "raf-textarea", dropdownClassName: "raf-emojisearch", listClassName: "raf-emojisearch__list", itemClassName: "raf-emojisearch__item", placeholder: placeholder, onChange: onChange, onSelect: onChange, onPaste: onPaste, value: value }));
};
//# sourceMappingURL=Textarea.js.map