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.

187 lines (186 loc) 6.61 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 _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } 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