stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
130 lines • 6.28 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Thread = void 0;
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _react = _interopRequireWildcard(require("react"));
var _ThreadFooterComponent = require("./components/ThreadFooterComponent");
var _ChannelContext = require("../../contexts/channelContext/ChannelContext");
var _ChatContext = require("../../contexts/chatContext/ChatContext");
var _ComponentsContext = require("../../contexts/componentsContext/ComponentsContext");
var _ThreadContext = require("../../contexts/threadContext/ThreadContext");
var _MessageFlashList = require("../MessageList/MessageFlashList");
var _notificationTarget = require("../Notifications/notificationTarget");
var _NotificationTargetContext = require("../Notifications/NotificationTargetContext");
var _jsxRuntime = require("react/jsx-runtime");
var _jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/Thread/Thread.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 FlashList;
try {
FlashList = require('@shopify/flash-list').FlashList;
} catch {
FlashList = undefined;
}
var ThreadWithContext = props => {
var additionalMessageComposerProps = props.additionalMessageComposerProps,
additionalMessageListProps = props.additionalMessageListProps,
additionalMessageFlashListProps = props.additionalMessageFlashListProps,
_props$autoFocus = props.autoFocus,
autoFocus = _props$autoFocus === void 0 ? false : _props$autoFocus,
closeThread = props.closeThread,
_props$closeThreadOnD = props.closeThreadOnDismount,
closeThreadOnDismount = _props$closeThreadOnD === void 0 ? true : _props$closeThreadOnD,
disabled = props.disabled,
loadMoreThread = props.loadMoreThread,
onThreadDismount = props.onThreadDismount,
notificationHostIdProp = props.notificationHostId,
_props$parentMessageP = props.parentMessagePreventPress,
parentMessagePreventPress = _props$parentMessageP === void 0 ? true : _props$parentMessageP,
thread = props.thread,
threadInstance = props.threadInstance,
_props$shouldUseFlash = props.shouldUseFlashList,
shouldUseFlashList = _props$shouldUseFlash === void 0 ? false : _props$shouldUseFlash;
var _useComponentsContext = (0, _ComponentsContext.useComponentsContext)(),
MessageList = _useComponentsContext.MessageList,
MessageComposer = _useComponentsContext.ThreadMessageComposer;
(0, _react.useEffect)(() => {
if (threadInstance?.activate) {
threadInstance.activate();
}
var loadMoreThreadAsync = function () {
var _ref = (0, _asyncToGenerator2.default)(function* () {
yield loadMoreThread();
});
return function loadMoreThreadAsync() {
return _ref.apply(this, arguments);
};
}();
if (thread?.id && thread.reply_count) {
loadMoreThreadAsync();
}
return () => {
if (threadInstance?.deactivate) {
threadInstance.deactivate();
}
if (closeThreadOnDismount) {
closeThread();
}
if (onThreadDismount) {
onThreadDismount();
}
};
}, []);
var MemoizedThreadFooterComponent = (0, _react.useCallback)(() => (0, _jsxRuntime.jsx)(_ThreadFooterComponent.ThreadFooterComponent, {
parentMessagePreventPress: parentMessagePreventPress
}), [parentMessagePreventPress]);
var additionalTextInputProps = (0, _react.useMemo)(() => ({
editable: !disabled,
autoFocus
}), [disabled, autoFocus]);
if (!thread?.id) {
return null;
}
var notificationHostId = notificationHostIdProp ?? (0, _notificationTarget.getThreadNotificationHostId)(thread.id);
return (0, _jsxRuntime.jsx)(_react.default.Fragment, {
children: (0, _jsxRuntime.jsxs)(_NotificationTargetContext.NotificationTargetProvider, {
hostId: notificationHostId,
panel: "thread",
children: [FlashList && shouldUseFlashList ? (0, _jsxRuntime.jsx)(_MessageFlashList.MessageFlashList, {
HeaderComponent: MemoizedThreadFooterComponent,
threadList: true,
...additionalMessageFlashListProps
}) : (0, _jsxRuntime.jsx)(MessageList, {
FooterComponent: MemoizedThreadFooterComponent,
threadList: true,
...additionalMessageListProps
}), (0, _jsxRuntime.jsx)(MessageComposer, {
additionalTextInputProps: additionalTextInputProps,
threadList: true,
...additionalMessageComposerProps
})]
})
}, `thread-${thread.id}`);
};
var Thread = props => {
var _useChatContext = (0, _ChatContext.useChatContext)(),
client = _useChatContext.client;
var _useChannelContext = (0, _ChannelContext.useChannelContext)(),
threadList = _useChannelContext.threadList;
var _useThreadContext = (0, _ThreadContext.useThreadContext)(),
closeThread = _useThreadContext.closeThread,
loadMoreThread = _useThreadContext.loadMoreThread,
reloadThread = _useThreadContext.reloadThread,
thread = _useThreadContext.thread,
threadInstance = _useThreadContext.threadInstance;
if (thread?.id && !threadList) {
throw new Error('Please add a threadList prop to your Channel component when rendering a thread list. Check our Channel documentation for more info: https://getstream.io/chat/docs/sdk/reactnative/core-components/channel/#threadlist');
}
return (0, _jsxRuntime.jsx)(ThreadWithContext, {
client,
closeThread,
loadMoreThread,
reloadThread,
thread,
threadInstance,
...props
});
};
exports.Thread = Thread;
//# sourceMappingURL=Thread.js.map