Activity ve ActivityItem entityleri düzenlendi
This commit is contained in:
parent
1faad17e7c
commit
d77675108e
3 changed files with 59 additions and 78 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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>
|
||||
)}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue