From d77675108e2d2f247cdd7e09c0522a409caee660 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sedat=20=C3=96ZT=C3=9CRK?= <76204082+iamsedatozturk@users.noreply.github.com> Date: Mon, 13 Oct 2025 15:52:26 +0300 Subject: [PATCH] =?UTF-8?q?Activity=20ve=20ActivityItem=20entityleri=20d?= =?UTF-8?q?=C3=BCzenlendi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui/src/proxy/formActivity/models.ts | 22 +--- .../form/FormActivityPanel/ActivityList.tsx | 9 +- .../form/FormActivityPanel/useFormActivity.ts | 106 +++++++++--------- 3 files changed, 59 insertions(+), 78 deletions(-) diff --git a/ui/src/proxy/formActivity/models.ts b/ui/src/proxy/formActivity/models.ts index 01be436d..7f0415b2 100644 --- a/ui/src/proxy/formActivity/models.ts +++ b/ui/src/proxy/formActivity/models.ts @@ -1,4 +1,4 @@ -export interface ActivityItem { +export interface Activity { id: string type: 'note' | 'message' subject: string @@ -6,13 +6,16 @@ export interface ActivityItem { recipientUserName?: string creatorId: string creationTime: Date - data?: NoteData | MessageData + data?: ActivityItem } -export interface NoteData { +export interface ActivityItem { id?: string + type: 'note' | 'message' entityName: string entityId: string + recipientUserId?: string + recipientUserName?: string subject: string content: string creatorId?: string @@ -30,17 +33,4 @@ export interface FileData { filePath: string creatorId?: string creationTime?: Date -} - -export interface MessageData { - id?: string - entityName: string - entityId: string - recipientUserId: string - recipientUserName: string - subject: string - content: string - creatorId?: string - creationTime?: Date - isRead?: boolean } \ No newline at end of file diff --git a/ui/src/views/form/FormActivityPanel/ActivityList.tsx b/ui/src/views/form/FormActivityPanel/ActivityList.tsx index 1fbb0bd6..23fb5d66 100644 --- a/ui/src/views/form/FormActivityPanel/ActivityList.tsx +++ b/ui/src/views/form/FormActivityPanel/ActivityList.tsx @@ -9,10 +9,10 @@ import { FaClock, } from 'react-icons/fa' import { Button } from '@/components/ui' -import { ActivityItem } from '@/proxy/formActivity/models' +import { Activity } from '@/proxy/formActivity/models' interface ActivityListProps { - activities: ActivityItem[] + activities: Activity[] onDeleteNote?: (noteId: string) => void onDeleteFile?: (fileId: string) => void onDeleteMessage?: (messageId: string) => void @@ -47,7 +47,7 @@ export const ActivityList: React.FC = ({ } } - const handleDelete = (activity: ActivityItem) => { + const handleDelete = (activity: Activity) => { switch (activity.type) { case 'note': onDeleteNote?.(activity.id) @@ -106,8 +106,6 @@ export const ActivityList: React.FC = ({ {/* Note tipinde dosyaları göster */} {activity.type === 'note' && activity.data && (activity.data as any).attachedFiles?.length > 0 && (
-

Ekli Dosyalar:

-
{((activity.data as any).attachedFiles || []).map((file: any, index: number) => (
@@ -126,7 +124,6 @@ export const ActivityList: React.FC = ({
))} -
)} diff --git a/ui/src/views/form/FormActivityPanel/useFormActivity.ts b/ui/src/views/form/FormActivityPanel/useFormActivity.ts index 062fd753..00b0b000 100644 --- a/ui/src/views/form/FormActivityPanel/useFormActivity.ts +++ b/ui/src/views/form/FormActivityPanel/useFormActivity.ts @@ -1,13 +1,12 @@ -import { NoteData, FileData, MessageData, ActivityItem } from '@/proxy/formActivity/models' +import { ActivityItem, FileData, Activity } from '@/proxy/formActivity/models' import { useState, useEffect } from 'react' const STORAGE_PREFIX = 'form_activity_' export const useFormActivity = (entityName: string, entityId: string) => { - const [notes, setNotes] = useState([]) + const [activityItems, setActivityItems] = useState([]) const [files, setFiles] = useState([]) - const [messages, setMessages] = useState([]) - const [activities, setActivities] = useState([]) + const [activities, setActivities] = useState([]) const storageKey = `${STORAGE_PREFIX}${entityName}_${entityId}` @@ -19,9 +18,15 @@ export const useFormActivity = (entityName: string, entityId: string) => { if (savedData) { try { const parsed = JSON.parse(savedData) - setNotes(parsed.notes || []) + // Eski veriyi yeni yapıya dönüştür + const oldNotes = parsed.notes || [] + const oldMessages = parsed.messages || [] + const combinedActivityItems: ActivityItem[] = [ + ...oldNotes.map((note: any) => ({ ...note, type: 'note' as const })), + ...oldMessages.map((message: any) => ({ ...message, type: 'message' as const })) + ] + setActivityItems(parsed.activityItems || combinedActivityItems || []) setFiles(parsed.files || []) - setMessages(parsed.messages || []) } catch (error) { console.error('Failed to load activity data:', error) } @@ -30,55 +35,42 @@ export const useFormActivity = (entityName: string, entityId: string) => { // Update activities when data changes useEffect(() => { - const allActivities: ActivityItem[] = [] + const allActivities: Activity[] = [] - // Add notes as activities (notes can contain files now) - notes.forEach(note => { + // Convert all activity items to activities + activityItems.forEach(item => { allActivities.push({ - id: note.id || `note_${Date.now()}`, - type: 'note', - subject: note.subject || '', - content: note.content, - creationTime: note.creationTime || new Date(), - creatorId: note.creatorId || 'Bilinmeyen', - data: note - }) - }) - - // Add messages as activities - messages.forEach(message => { - allActivities.push({ - id: message.id || `message_${Date.now()}`, - type: 'message', - subject: message.subject || '', - recipientUserName: message.recipientUserName, - content: message.content, - creationTime: message.creationTime || new Date(), - creatorId: message.creatorId || 'Bilinmeyen', - data: message + id: item.id || `${item.type}_${Date.now()}`, + type: item.type, + subject: item.subject || '', + content: item.content, + recipientUserName: item.recipientUserName, + creationTime: item.creationTime || new Date(), + creatorId: item.creatorId || 'Bilinmeyen', + data: item }) }) // Sort by timestamp (newest first) allActivities.sort((a, b) => new Date(b.creationTime).getTime() - new Date(a.creationTime).getTime()) setActivities(allActivities) - }, [notes, files, messages]) + }, [activityItems, files]) // Save to localStorage whenever data changes useEffect(() => { if (!entityName || !entityId) return const dataToSave = { - notes, - files, - messages + activityItems, + files } localStorage.setItem(storageKey, JSON.stringify(dataToSave)) - }, [notes, files, messages, storageKey]) + }, [activityItems, files, storageKey]) const addNote = (subject: string, content: string) => { - const newNote: NoteData = { + const newActivityItem: ActivityItem = { id: `note_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`, + type: 'note', entityName, entityId, subject, @@ -86,8 +78,8 @@ export const useFormActivity = (entityName: string, entityId: string) => { creatorId: 'Mevcut Kullanıcı', // Bu gerçek implementasyonda authentication'dan gelecek creationTime: new Date() } - setNotes(prev => [...prev, newNote]) - return newNote + setActivityItems(prev => [...prev, newActivityItem]) + return newActivityItem } const addContent = async (subject: string, content: string, files: File[]) => { @@ -95,8 +87,9 @@ export const useFormActivity = (entityName: string, entityId: string) => { const baseId = `content_${timestamp.getTime()}_${Math.random().toString(36).substr(2, 9)}` // Hem not hem de dosya varsa veya sadece biri varsa tek bir note aktivitesi oluştur - const newNote: NoteData = { + const newActivityItem: ActivityItem = { id: baseId, + type: 'note', entityName, entityId, subject, @@ -136,17 +129,17 @@ export const useFormActivity = (entityName: string, entityId: string) => { } // Note'a dosyaları ekle - newNote.attachedFiles = uploadedFiles + newActivityItem.attachedFiles = uploadedFiles - // Note'u kaydet - setNotes(prev => [...prev, newNote]) + // Activity Item'ı kaydet + setActivityItems(prev => [...prev, newActivityItem]) // Dosyaları ayrı ayrı da kaydet (eski sistem uyumluluğu için) if (uploadedFiles.length > 0) { setFiles(prev => [...prev, ...uploadedFiles]) } - return newNote + return newActivityItem } const addFile = (file: File) => { @@ -174,35 +167,36 @@ export const useFormActivity = (entityName: string, entityId: string) => { } const sendMessage = (recipients: Array<{ value: string, label: string, email?: string }>, subject: string, content: string) => { - const newMessages: MessageData[] = recipients.map(recipient => ({ + const newMessageItems: ActivityItem[] = recipients.map(recipient => ({ id: `message_${Date.now()}_${Math.random().toString(36).substr(2, 9)}_${recipient.value}`, + type: 'message' as const, entityName, entityId, recipientUserId: recipient.value, recipientUserName: recipient.label, subject, content, - sentBy: 'Mevcut Kullanıcı', - sentAt: new Date(), - isRead: false + creatorId: 'Mevcut Kullanıcı', + creationTime: new Date() })) - setMessages(prev => [...prev, ...newMessages]) - return newMessages + setActivityItems(prev => [...prev, ...newMessageItems]) + return newMessageItems } - const deleteNote = (noteId: string) => { - setNotes(prev => prev.filter(note => note.id !== noteId)) + const deleteActivityItem = (itemId: string) => { + setActivityItems(prev => prev.filter(item => item.id !== itemId)) } const deleteFile = (fileId: string) => { setFiles(prev => prev.filter(file => file.id !== fileId)) } - const deleteMessage = (messageId: string) => { - setMessages(prev => prev.filter(message => message.id !== messageId)) - } + // Geriye dönük uyumluluk için + const notes = activityItems.filter(item => item.type === 'note') + const messages = activityItems.filter(item => item.type === 'message') return { + activityItems, notes, files, messages, @@ -211,8 +205,8 @@ export const useFormActivity = (entityName: string, entityId: string) => { addFile, addContent, sendMessage, - deleteNote, + deleteNote: deleteActivityItem, // Not silme için deleteFile, - deleteMessage + deleteMessage: deleteActivityItem // Mesaj silme için } } \ No newline at end of file