Activity ve ActivityItem entityleri düzenlendi

This commit is contained in:
Sedat ÖZTÜRK 2025-10-13 15:52:26 +03:00
parent 1faad17e7c
commit d77675108e
3 changed files with 59 additions and 78 deletions

View file

@ -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
}

View file

@ -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<ActivityListProps> = ({
}
}
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<ActivityListProps> = ({
{/* Note tipinde dosyaları göster */}
{activity.type === 'note' && activity.data && (activity.data as any).attachedFiles?.length > 0 && (
<div className="mt-2 mb-2">
<p className="text-xs font-medium text-gray-600 mb-1">Ekli Dosyalar:</p>
<div className="space-y-1">
{((activity.data as any).attachedFiles || []).map((file: any, index: number) => (
<div key={index} className="flex items-center justify-between p-2 bg-gray-50 rounded border">
<div className="flex items-center gap-2">
@ -126,7 +124,6 @@ export const ActivityList: React.FC<ActivityListProps> = ({
</Button>
</div>
))}
</div>
</div>
)}

View file

@ -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<NoteData[]>([])
const [activityItems, setActivityItems] = useState<ActivityItem[]>([])
const [files, setFiles] = useState<FileData[]>([])
const [messages, setMessages] = useState<MessageData[]>([])
const [activities, setActivities] = useState<ActivityItem[]>([])
const [activities, setActivities] = useState<Activity[]>([])
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
}
}