From 1e7a10870eee816359fc2ddc70c5a539962742ff Mon Sep 17 00:00:00 2001 From: konard Date: Wed, 10 Sep 2025 21:20:22 +0300 Subject: [PATCH 1/3] Initial commit with task details for issue #52 Adding CLAUDE.md with task information for AI processing. This file will be removed when the task is complete. Issue: https://github.com/deep-assistant/GPTutor/issues/52 --- CLAUDE.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..b8cf9c7a --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,5 @@ +Issue to solve: https://github.com/deep-assistant/GPTutor/issues/52 +Your prepared branch: issue-52-8d0799e3 +Your prepared working directory: /tmp/gh-issue-solver-1757528399528 + +Proceed. \ No newline at end of file From 5659efd6bab7a0dc331e74f93e56a56f4ba085d1 Mon Sep 17 00:00:00 2001 From: konard Date: Wed, 10 Sep 2025 21:20:39 +0300 Subject: [PATCH 2/3] Remove CLAUDE.md - PR created successfully --- CLAUDE.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index b8cf9c7a..00000000 --- a/CLAUDE.md +++ /dev/null @@ -1,5 +0,0 @@ -Issue to solve: https://github.com/deep-assistant/GPTutor/issues/52 -Your prepared branch: issue-52-8d0799e3 -Your prepared working directory: /tmp/gh-issue-solver-1757528399528 - -Proceed. \ No newline at end of file From bf9737476e71edd4f2b98e0b77e039d9d72ffeba Mon Sep 17 00:00:00 2001 From: konard Date: Wed, 10 Sep 2025 21:30:53 +0300 Subject: [PATCH 3/3] =?UTF-8?q?#52=20:=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D1=82=D1=8C=20=D0=BF=D0=B5=D1=80=D0=B5=D1=81=D1=8B?= =?UTF-8?q?=D0=BB=D0=BA=D1=83=20=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлен метод forwardMessage в ShareService для пересылки сообщений - Добавлена кнопка пересылки (иконка share) в каждое сообщение - Реализована интеграция с VK Bridge для отображения окна публикации на стене - Форматирование пересылаемого сообщения с указанием отправителя и источника - Поддержка пересылки как сообщений от GPT, так и от пользователя 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude close #52 --- .../MessengerList/Message/Message.tsx | 15 ++++++- GPTutor-Frontend/src/services/ShareService.ts | 17 +++++++ examples/test-forward-functionality.md | 45 +++++++++++++++++++ 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 examples/test-forward-functionality.md diff --git a/GPTutor-Frontend/src/components/Messenger/MessengerList/Message/Message.tsx b/GPTutor-Frontend/src/components/Messenger/MessengerList/Message/Message.tsx index fa77bc3e..23afc1d0 100644 --- a/GPTutor-Frontend/src/components/Messenger/MessengerList/Message/Message.tsx +++ b/GPTutor-Frontend/src/components/Messenger/MessengerList/Message/Message.tsx @@ -8,7 +8,7 @@ import { Text, Title, } from "@vkontakte/vkui"; -import { Icon24CheckCircleOutline } from "@vkontakte/icons"; +import { Icon24CheckCircleOutline, Icon24Share } from "@vkontakte/icons"; import { GptMessage } from "$/entity/GPT"; @@ -23,6 +23,7 @@ import classes from "./Message.module.css"; import { Copy } from "$/components/Copy"; import { ChatGptTemplate } from "$/entity/GPT/ChatGptTemplate"; import { appService } from "$/services/AppService"; +import { shareService } from "$/services/ShareService"; interface IProps { chatGpt: ChatGptTemplate; @@ -45,6 +46,15 @@ function Message({ chatGpt, message }: IProps) { message.toggleSelected(); }; + const onForwardMessage = (e: any) => { + e.stopPropagation(); + const senderName = message.role === "assistant" + ? appService.getGPTName() + : vkUser?.first_name || "Пользователь"; + + shareService.forwardMessage(message.content$.get(), senderName); + }; + return (
)} + + + { + console.log("Message forwarded successfully:", data); + return data; + }) + .catch((error) => { + console.error("Error forwarding message:", error); + throw error; + }); + } } export const shareService = new ShareService(); diff --git a/examples/test-forward-functionality.md b/examples/test-forward-functionality.md new file mode 100644 index 00000000..cf70e1a5 --- /dev/null +++ b/examples/test-forward-functionality.md @@ -0,0 +1,45 @@ +# Testing Message Forwarding Functionality + +## Changes Made + +1. **ShareService.ts** - Added `forwardMessage` method + - Takes message content and sender name + - Creates formatted message with source attribution + - Uses VK Bridge to show wall post box + - Returns promise for proper error handling + +2. **Message.tsx** - Added forward button + - Added `Icon24Share` import from VK icons + - Added `shareService` import + - Created `onForwardMessage` handler + - Added IconButton with share icon in the icons block + +## Expected Behavior + +When user clicks the forward (share) icon on any message: +1. The `onForwardMessage` handler is triggered +2. It extracts the sender name (GPT name for assistant or user's first name) +3. Creates formatted forwarding text including: + - Original sender identification + - Complete message content + - Attribution to GPTutor app +4. Opens VK wall post box with the formatted message +5. User can share to their wall or send to friends + +## Integration Points + +- Uses existing VK Bridge integration +- Follows existing UI patterns (same icon styling as copy/select buttons) +- Maintains existing message structure and styling +- Compatible with existing message selection system + +## Files Modified + +- `/src/services/ShareService.ts` - Added forwardMessage method +- `/src/components/Messenger/MessengerList/Message/Message.tsx` - Added forward button and handler + +## Russian Context + +The forwarding message is formatted in Russian: +- "Сообщение от [Sender Name]:" - "Message from [Sender Name]:" +- "Передано через GPTutor:" - "Forwarded via GPTutor:" \ No newline at end of file