From e05eb63ddb4b15b1adc7a4529ef1298b4598a5fe Mon Sep 17 00:00:00 2001 From: Shawn Jackson Date: Sat, 8 Aug 2026 16:07:55 -0700 Subject: [PATCH 1/4] RG-T117 Chatbot fixes --- src/app/(app)/chatbot.tsx | 39 +------------------ src/components/chat/message-actions-sheet.tsx | 4 +- 2 files changed, 4 insertions(+), 39 deletions(-) diff --git a/src/app/(app)/chatbot.tsx b/src/app/(app)/chatbot.tsx index 1905466..c547317 100644 --- a/src/app/(app)/chatbot.tsx +++ b/src/app/(app)/chatbot.tsx @@ -8,9 +8,7 @@ import { copyToClipboard } from '@/components/chat/chat-utils'; import { MessageActionsSheet } from '@/components/chat/message-actions-sheet'; import { MessageBubble } from '@/components/chat/message-bubble'; import { TypingDots } from '@/components/chat/typing-indicator'; -import { Actionsheet, ActionsheetBackdrop, ActionsheetContent, ActionsheetDragIndicator, ActionsheetDragIndicatorWrapper } from '@/components/ui/actionsheet'; import { Box } from '@/components/ui/box'; -import { Button, ButtonText } from '@/components/ui/button'; import { Center } from '@/components/ui/center'; import { FlatList } from '@/components/ui/flat-list'; import { FocusAwareStatusBar } from '@/components/ui/focus-aware-status-bar'; @@ -20,7 +18,6 @@ import { KeyboardAvoidingView } from '@/components/ui/keyboard-avoiding-view'; import { Pressable } from '@/components/ui/pressable'; import { Spinner } from '@/components/ui/spinner'; import { Text } from '@/components/ui/text'; -import { Textarea, TextareaInput } from '@/components/ui/textarea'; import { VStack } from '@/components/ui/vstack'; import { type ChatMessageResultData } from '@/models/v4/chat'; import useAuthStore from '@/stores/auth/store'; @@ -40,8 +37,6 @@ export default function ChatbotScreen() { const isModerator = !!securityStore((s) => s.rights)?.IsAdmin; const [text, setText] = useState(''); const [actionsMessage, setActionsMessage] = useState(null); - const [editMessage, setEditMessage] = useState(null); - const [editText, setEditText] = useState(''); useFocusEffect( useCallback(() => { @@ -150,7 +145,7 @@ export default function ChatbotScreen() { - {/* Restricted actions for assistant messages: copy, edit own, pin (moderator), flag. */} + {/* Restricted actions for assistant messages: copy, pin (moderator), flag. */} { - setEditMessage(m); - setEditText(m.Body ?? ''); - }} + onEdit={() => undefined} onDelete={() => undefined} onFlag={(m, reason) => useChatStore.getState().flagMessage(m.ChatMessageId, reason)} onTogglePin={(m, pinned) => chatbotChannelId && useChatStore.getState().togglePin(m.ChatMessageId, chatbotChannelId, pinned)} onModeratorDelete={() => undefined} /> - - {/* Edit own message */} - setEditMessage(null)}> - - - - - - - {t('chat.edit_message')} - - - - - ); } diff --git a/src/components/chat/message-actions-sheet.tsx b/src/components/chat/message-actions-sheet.tsx index 1bc66c2..c6ee317 100644 --- a/src/components/chat/message-actions-sheet.tsx +++ b/src/components/chat/message-actions-sheet.tsx @@ -16,7 +16,7 @@ interface MessageActionsSheetProps { onClose: () => void; isOwn: boolean; isModerator: boolean; - /** Assistant conversations: no reactions, threads or deletes — copy, edit own, pin and flag stay. */ + /** Assistant conversations: no reactions, threads, deletes or edits — copy, pin and flag stay. */ assistant?: boolean; onReact: (message: ChatMessageResultData, emoji: string) => void; onReply: (message: ChatMessageResultData) => void; @@ -118,7 +118,7 @@ export function MessageActionsSheet({ message, isOpen, onClose, isOwn, isModerat ) : null} - {isOwn && isText && !isDeleted ? ( + {isOwn && isText && !isDeleted && !assistant ? ( { onEdit(message); From dbc2a8b0e52f616c5a36e856bd07d4babf9b1733 Mon Sep 17 00:00:00 2001 From: Shawn Jackson Date: Sun, 9 Aug 2026 19:23:19 -0700 Subject: [PATCH 2/4] RG-T117 Chat fixes --- src/app/(app)/chatbot.tsx | 13 +- src/app/_layout.tsx | 8 +- src/app/chat/[channelId].tsx | 12 +- src/app/chat/thread/[messageId].tsx | 17 +- src/components/chat/chat-utils.ts | 47 ++++- src/components/chat/message-bubble.tsx | 19 +- .../chat/new-conversation-sheet.tsx | 3 +- src/services/signalr.service.ts | 33 ++-- .../chat/__tests__/hub-invoke-args.test.ts | 176 ++++++++++++++++++ src/stores/chat/store.ts | 57 ++++-- src/stores/signalr/signalr-store.ts | 7 +- 11 files changed, 338 insertions(+), 54 deletions(-) create mode 100644 src/stores/chat/__tests__/hub-invoke-args.test.ts diff --git a/src/app/(app)/chatbot.tsx b/src/app/(app)/chatbot.tsx index c547317..51b2183 100644 --- a/src/app/(app)/chatbot.tsx +++ b/src/app/(app)/chatbot.tsx @@ -67,7 +67,14 @@ export default function ChatbotScreen() { const renderItem = useCallback( ({ item }: { item: ChatMessageResultData }) => ( - undefined} /> + undefined} + /> ), [currentUserId] ); @@ -117,7 +124,9 @@ export default function ChatbotScreen() { ) : (