UNPKG

@sendbird/uikit-react-native

Version:

Sendbird UIKit for React Native: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.

186 lines (185 loc) 6.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _uikitReactNativeFoundation = require("@sendbird/uikit-react-native-foundation"); var _uikitUtils = require("@sendbird/uikit-utils"); var _useContext = require("../../../hooks/useContext"); var _useKeyboardStatus = _interopRequireDefault(require("../../../hooks/useKeyboardStatus")); var _useMentionSuggestion = _interopRequireDefault(require("../../../hooks/useMentionSuggestion")); var _moduleContext = require("../module/moduleContext"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } 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 (const 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); } const GroupChannelThreadSuggestedMentionList = ({ text, selection, inputHeight, bottomInset, onPressToMention, mentionedUsers, showUserId = true }) => { const { width: screenWidth, height: screenHeight } = (0, _reactNative.useWindowDimensions)(); const { channel } = (0, _react.useContext)(_moduleContext.GroupChannelThreadContexts.Fragment); const { sdk, mentionManager } = (0, _useContext.useSendbirdChat)(); const { STRINGS } = (0, _useContext.useLocalization)(); const { colors } = (0, _uikitReactNativeFoundation.useUIKitTheme)(); const { topInset } = (0, _uikitReactNativeFoundation.useHeaderStyle)(); const safeArea = (0, _uikitUtils.useSafeAreaPadding)(['left', 'right']); const keyboard = (0, _useKeyboardStatus.default)(); const { members, reset, searchStringRange, searchLimited } = (0, _useMentionSuggestion.default)({ sdk, text, selection, channel, mentionedUsers }); const isLandscape = screenWidth > screenHeight; const isShortened = isLandscape && keyboard.visible; const canRenderMembers = members.length > 0; const maxHeight = isShortened ? screenHeight - (topInset + inputHeight + keyboard.height) : styles.suggestion.height; const renderLimitGuide = () => { return /*#__PURE__*/_react.default.createElement(_reactNative.View, { style: [styles.searchLimited, { borderTopColor: colors.onBackground04 }] }, /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Icon, { icon: 'info', size: 20, containerStyle: { marginEnd: 4 }, color: colors.onBackground02 }), /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Text, { body3: true, color: colors.onBackground02 }, STRINGS.GROUP_CHANNEL_THREAD.MENTION_LIMITED(mentionManager.config.mentionLimit))); }; const renderMembers = () => { return /*#__PURE__*/_react.default.createElement(_reactNative.View, null, members.map(member => { return /*#__PURE__*/_react.default.createElement(_reactNative.Pressable, { onPress: () => { onPressToMention(member, searchStringRange); reset(); }, key: member.userId, style: styles.userContainer }, /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Avatar, { size: 28, uri: member.profileUrl, containerStyle: styles.userAvatar }), /*#__PURE__*/_react.default.createElement(_reactNative.View, { style: styles.userInfo }, /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Text, { body2: true, color: colors.onBackground01, numberOfLines: 1, style: styles.userNickname }, member.nickname || STRINGS.LABELS.USER_NO_NAME), !!showUserId && /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Text, { body3: true, color: colors.onBackground03, numberOfLines: 1, style: styles.userId }, member.userId), /*#__PURE__*/_react.default.createElement(_uikitReactNativeFoundation.Divider, { style: { position: 'absolute', bottom: 0 } }))); })); }; return /*#__PURE__*/_react.default.createElement(_reactNative.Pressable, { onPress: reset, pointerEvents: canRenderMembers ? 'auto' : 'none', style: [styles.container, { bottom: inputHeight + bottomInset }] }, /*#__PURE__*/_react.default.createElement(_reactNative.ScrollView, { bounces: false, keyboardDismissMode: 'none', keyboardShouldPersistTaps: 'always', style: [styles.scrollView, { maxHeight, backgroundColor: colors.background, bottom: keyboard.bottomSpace }, canRenderMembers && { borderTopWidth: 1, borderTopColor: colors.onBackground04 }], contentContainerStyle: safeArea }, (0, _uikitUtils.conditionChaining)([searchLimited, canRenderMembers], [renderLimitGuide(), renderMembers(), null]))); }; const styles = (0, _uikitReactNativeFoundation.createStyleSheet)({ suggestion: { height: 196 }, container: { position: 'absolute', top: 0, start: 0, end: 0 }, scrollView: { position: 'absolute', start: 0, end: 0 }, userContainer: { paddingStart: 16, flexDirection: 'row', height: 44, alignItems: 'center', justifyContent: 'center' }, userAvatar: { marginEnd: 16 }, userInfo: { flexDirection: 'row', flex: 1 }, userNickname: { flexShrink: 1, lineHeight: 44, textAlignVertical: 'center', marginEnd: 6 }, userId: { lineHeight: 44, textAlignVertical: 'center', minWidth: 32, flexShrink: 1, marginEnd: 16 }, searchLimited: { borderTopWidth: 1, paddingHorizontal: 16, height: 44, flexDirection: 'row', alignItems: 'center' } }); var _default = exports.default = GroupChannelThreadSuggestedMentionList; //# sourceMappingURL=GroupChannelThreadSuggestedMentionList.js.map