UNPKG

stream-chat-react-native-core

Version:

The official React Native and Expo components for Stream Chat, a service for building chat applications

200 lines 7.97 kB
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.MentionSuggestionItem = exports.EmojiSuggestionItem = exports.CommandSuggestionItem = exports.AutoCompleteSuggestionItem = void 0; var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _AutoCompleteSuggestionCommandIcon = require("./AutoCompleteSuggestionCommandIcon"); var _mentionItems = require("./mentionItems"); var _ComponentsContext = require("../../contexts/componentsContext/ComponentsContext"); var _useIsCommandDisabled = require("../../contexts/messageInputContext/hooks/useIsCommandDisabled"); var _useMessageComposer = require("../../contexts/messageInputContext/hooks/useMessageComposer"); var _ThemeContext = require("../../contexts/themeContext/ThemeContext"); var _theme = require("../../theme"); var _jsxRuntime = require("react/jsx-runtime"); var _jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/AutoCompleteInput/AutoCompleteSuggestionItem.tsx"; function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } var MentionSuggestionItem = item => { switch (item.mentionType) { case 'user': return (0, _jsxRuntime.jsx)(_mentionItems.MentionUserItem, { entity: item }); case 'channel': case 'here': return (0, _jsxRuntime.jsx)(_mentionItems.MentionBroadcastItem, { entity: item }); case 'role': return (0, _jsxRuntime.jsx)(_mentionItems.MentionRoleItem, { entity: item }); case 'user_group': return (0, _jsxRuntime.jsx)(_mentionItems.MentionUserGroupItem, { entity: item }); default: return null; } }; exports.MentionSuggestionItem = MentionSuggestionItem; var EmojiSuggestionItem = item => { var native = item.native, name = item.name; var _useTheme = (0, _ThemeContext.useTheme)(), _useTheme$theme$messa = _useTheme.theme.messageComposer.suggestions.emoji, emojiContainer = _useTheme$theme$messa.container, text = _useTheme$theme$messa.text; var styles = useStyles(); return (0, _jsxRuntime.jsxs)(_reactNative.View, { style: [styles.container, emojiContainer], children: [(0, _jsxRuntime.jsx)(_reactNative.Text, { style: [styles.text, text], testID: "emojis-item-unicode", children: native }), (0, _jsxRuntime.jsx)(_reactNative.Text, { style: [styles.text, text], testID: "emojis-item-name", children: ` ${name}` })] }); }; exports.EmojiSuggestionItem = EmojiSuggestionItem; var CommandSuggestionItem = item => { var args = item.args, name = item.name; var _useTheme2 = (0, _ThemeContext.useTheme)(), _useTheme2$theme = _useTheme2.theme, semantics = _useTheme2$theme.semantics, _useTheme2$theme$mess = _useTheme2$theme.messageComposer.suggestions.command, argsStyle = _useTheme2$theme$mess.args, commandContainer = _useTheme2$theme$mess.container, title = _useTheme2$theme$mess.title; var styles = useStyles(); var isDisabled = (0, _useIsCommandDisabled.useIsCommandDisabled)(item); return (0, _jsxRuntime.jsxs)(_reactNative.View, { style: [styles.commandContainer, commandContainer], children: [name ? (0, _jsxRuntime.jsx)(_AutoCompleteSuggestionCommandIcon.AutoCompleteSuggestionCommandIcon, { name: name }) : null, (0, _jsxRuntime.jsx)(_reactNative.Text, { style: [styles.title, { color: isDisabled ? semantics.textTertiary : semantics.textPrimary }, title], testID: "commands-item-title", children: (name || '').replace(/^\w/, char => char.toUpperCase()) }), (0, _jsxRuntime.jsx)(_reactNative.Text, { style: [styles.args, { color: semantics.textTertiary }, argsStyle], testID: "commands-item-args", children: `/${name} ${args}` })] }); }; exports.CommandSuggestionItem = CommandSuggestionItem; var SuggestionItem = ({ item, triggerType }) => { var _useComponentsContext = (0, _ComponentsContext.useComponentsContext)(), MentionSuggestionItem = _useComponentsContext.MentionSuggestionItem; switch (triggerType) { case 'mention': return (0, _jsxRuntime.jsx)(MentionSuggestionItem, { ...item }); case 'emoji': return (0, _jsxRuntime.jsx)(EmojiSuggestionItem, { ...item }); case 'command': return (0, _jsxRuntime.jsx)(CommandSuggestionItem, { ...item }); default: return null; } }; var UnMemoizedAutoCompleteSuggestionItem = ({ itemProps, triggerType }) => { var messageComposer = (0, _useMessageComposer.useMessageComposer)(); var textComposer = messageComposer.textComposer; var _useTheme3 = (0, _ThemeContext.useTheme)(), itemStyle = _useTheme3.theme.messageComposer.suggestions.item; var handlePress = (0, _react.useCallback)((0, _asyncToGenerator2.default)(function* () { yield textComposer.handleSelect(itemProps); }), [itemProps, textComposer]); return (0, _jsxRuntime.jsx)(_reactNative.Pressable, { accessibilityRole: "button", onPress: handlePress, style: ({ pressed }) => [{ opacity: pressed ? 0.8 : 1 }, itemStyle], testID: "suggestion-item", children: (0, _jsxRuntime.jsx)(SuggestionItem, { item: itemProps, triggerType: triggerType }) }); }; var areEqual = (prevProps, nextProps) => { var prevItemProps = prevProps.itemProps, prevType = prevProps.triggerType; var nextItemProps = nextProps.itemProps, nextType = nextProps.triggerType; var itemPropsEqual = prevItemProps === nextItemProps; if (!itemPropsEqual) { return false; } var typeEqual = prevType === nextType; if (!typeEqual) { return false; } return true; }; var MemoizedAutoCompleteSuggestionItem = _react.default.memo(UnMemoizedAutoCompleteSuggestionItem, areEqual); var AutoCompleteSuggestionItem = props => (0, _jsxRuntime.jsx)(MemoizedAutoCompleteSuggestionItem, { ...props }); exports.AutoCompleteSuggestionItem = AutoCompleteSuggestionItem; var useStyles = () => { var _useTheme4 = (0, _ThemeContext.useTheme)(), semantics = _useTheme4.theme.semantics; return (0, _react.useMemo)(() => _reactNative.StyleSheet.create({ args: { fontSize: _theme.primitives.typographyFontSizeMd, color: semantics.textTertiary }, container: { alignItems: 'center', flexDirection: 'row', paddingHorizontal: 16, paddingVertical: 8 }, commandContainer: { alignItems: 'center', flexDirection: 'row', paddingHorizontal: _theme.primitives.spacingSm, paddingVertical: _theme.primitives.spacingXs }, text: { fontSize: _theme.primitives.typographyFontSizeMd, fontWeight: _theme.primitives.typographyFontWeightRegular, color: semantics.textPrimary, lineHeight: _theme.primitives.typographyLineHeightNormal }, title: { fontSize: _theme.primitives.typographyFontSizeMd, fontWeight: _theme.primitives.typographyFontWeightSemiBold, color: semantics.textPrimary, width: 80 } }), [semantics.textPrimary, semantics.textTertiary]); }; //# sourceMappingURL=AutoCompleteSuggestionItem.js.map