@ermis-network/ermis-chat-react 1.0.8 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ermis-network/ermis-chat-react",
3
- "version": "1.0.8",
3
+ "version": "1.0.9",
4
4
  "description": "React UI components for Ermis Chat",
5
5
  "author": "Ermis",
6
6
  "homepage": "https://ermis.network/",
@@ -20,7 +20,7 @@
20
20
  "/src"
21
21
  ],
22
22
  "dependencies": {
23
- "@ermis-network/ermis-chat-sdk": "1.0.8",
23
+ "@ermis-network/ermis-chat-sdk": "1.0.9",
24
24
  "virtua": "^0.48.8"
25
25
  },
26
26
  "peerDependencies": {
@@ -16,6 +16,7 @@ import { buildUserMap, replaceMentionsForPreview, moveCaretToEnd } from '../util
16
16
  import { getMentionHtml } from '../hooks/useMentions';
17
17
  import { useChannelCapabilities } from '../hooks/useChannelCapabilities';
18
18
  import { CHANNEL_ROLES } from '../channelRoleUtils';
19
+ import { isTopicChannel } from '../channelTypeUtils';
19
20
  import type { MentionMember, MessageInputProps, FilePreviewItem } from '../types';
20
21
 
21
22
  export type { MessageInputProps, SendButtonProps, AttachButtonProps, EmojiPickerProps, EmojiButtonProps } from '../types';
@@ -54,6 +55,7 @@ export const MessageInput: React.FC<MessageInputProps> = React.memo(({
54
55
  const [hasContent, setHasContent] = useState(false);
55
56
 
56
57
  const { role, isGroupChannel: isTeamChannel, hasCapability } = useChannelCapabilities();
58
+ const isTopic = isTopicChannel(activeChannel);
57
59
  const isClosedTopic = activeChannel?.data?.is_closed_topic === true;
58
60
 
59
61
  // Slow Mode Logic
@@ -242,9 +244,9 @@ export const MessageInput: React.FC<MessageInputProps> = React.memo(({
242
244
  toggleEmojiPicker,
243
245
  } = useEmojiPicker({ editableRef, setHasContent });
244
246
 
245
- // Build member list from channel state (only for team channels)
247
+ // Build member list from channel state (only for team channels and topics)
246
248
  const members = useMemo<MentionMember[]>(() => {
247
- if (!isTeamChannel) return [];
249
+ if (!(isTeamChannel || isTopic)) return [];
248
250
  const list: MentionMember[] = [];
249
251
  const stateMembers = activeChannel?.state?.members as Record<string, unknown> | undefined;
250
252
  if (stateMembers && typeof stateMembers === 'object') {
@@ -258,7 +260,7 @@ export const MessageInput: React.FC<MessageInputProps> = React.memo(({
258
260
  }
259
261
  }
260
262
  return list;
261
- }, [activeChannel, isTeamChannel]);
263
+ }, [activeChannel, isTeamChannel, isTopic]);
262
264
 
263
265
  const {
264
266
  showSuggestions, filteredMembers, highlightIndex,
@@ -289,7 +291,7 @@ export const MessageInput: React.FC<MessageInputProps> = React.memo(({
289
291
  setFiles,
290
292
  hasContent,
291
293
  setHasContent,
292
- isTeamChannel,
294
+ isTeamChannel: isTeamChannel || isTopic,
293
295
  buildPayload,
294
296
  reset,
295
297
  syncMessages,
@@ -324,12 +326,12 @@ export const MessageInput: React.FC<MessageInputProps> = React.memo(({
324
326
  const content = el?.textContent?.trim() ?? '';
325
327
  setHasContent(content.length > 0 || files.length > 0);
326
328
  setKeywordError(null); // clear keyword error if user modifies input
327
- if (isTeamChannel && !disableMentions) {
329
+ if ((isTeamChannel || isTopic) && !disableMentions) {
328
330
  mentionHandleInput();
329
331
  }
330
332
  // Send typing indicator (SDK throttles to 1 event per 2s)
331
333
  activeChannel?.keystroke();
332
- }, [isTeamChannel, disableMentions, mentionHandleInput, files.length, activeChannel]);
334
+ }, [isTeamChannel, isTopic, disableMentions, mentionHandleInput, files.length, activeChannel]);
333
335
 
334
336
  const handleKeyDown = useCallback(
335
337
  (e: React.KeyboardEvent) => {
@@ -346,7 +348,7 @@ export const MessageInput: React.FC<MessageInputProps> = React.memo(({
346
348
  return;
347
349
  }
348
350
  }
349
- if (isTeamChannel && !disableMentions) {
351
+ if ((isTeamChannel || isTopic) && !disableMentions) {
350
352
  const consumed = mentionHandleKeyDown(e);
351
353
  if (consumed) return;
352
354
  }
@@ -357,7 +359,7 @@ export const MessageInput: React.FC<MessageInputProps> = React.memo(({
357
359
  }
358
360
  }
359
361
  },
360
- [isTeamChannel, disableMentions, mentionHandleKeyDown, handleSend, editingMessage, quotedMessage, setEditingMessage, setQuotedMessage, reset],
362
+ [isTeamChannel, isTopic, disableMentions, mentionHandleKeyDown, handleSend, editingMessage, quotedMessage, setEditingMessage, setQuotedMessage, reset],
361
363
  );
362
364
 
363
365
  const handlePaste = useCallback((e: React.ClipboardEvent) => {
@@ -469,7 +471,7 @@ export const MessageInput: React.FC<MessageInputProps> = React.memo(({
469
471
  {/* Text input + send row */}
470
472
  <div className={`ermis-message-input__row${(!canSendMessage || isSlowModeBlocked || keywordError) ? ' ermis-message-input__row--banners-active' : ''}`}>
471
473
  <div className="ermis-message-input__editable-wrapper">
472
- {canSendMessage && isTeamChannel && !disableMentions && showSuggestions && (
474
+ {canSendMessage && (isTeamChannel || isTopic) && !disableMentions && showSuggestions && (
473
475
  <MentionSuggestionsComponent
474
476
  members={filteredMembers}
475
477
  highlightIndex={highlightIndex}