import React, { useState } from 'react' import AvatarImage from './AvatarImage.jsx' import Avatar from './Avatar.jsx' export default function RecordList({ title, records, apiConfig, showTitle = true, user = null, agent = null, onRecordDeleted = null }) { const [expandedRecords, setExpandedRecords] = useState(new Set()) const [deletingRecords, setDeletingRecords] = useState(new Set()) const toggleJsonView = (index) => { const newExpanded = new Set(expandedRecords) if (newExpanded.has(index)) { newExpanded.delete(index) } else { newExpanded.add(index) } setExpandedRecords(newExpanded) } const handleDelete = async (record, index) => { if (!user || !agent || !record.uri) return const confirmed = window.confirm('このレコードを削除しますか?') if (!confirmed) return setDeletingRecords(prev => new Set([...prev, index])) try { // Extract repo, collection, rkey from URI const uriParts = record.uri.split('/') const repo = uriParts[2] const collection = uriParts[3] const rkey = uriParts[4] await agent.com.atproto.repo.deleteRecord({ repo: repo, collection: collection, rkey: rkey }) if (onRecordDeleted) { onRecordDeleted() } } catch (error) { alert(`削除に失敗しました: ${error.message}`) } finally { setDeletingRecords(prev => { const newSet = new Set(prev) newSet.delete(index) return newSet }) } } const canDelete = (record) => { return user && agent && record.uri && record.value.author?.did === user.did } if (!records || records.length === 0) { return (
{showTitle &&

{title} (0)

}

レコードがありません

) } return (
{showTitle &&

{title} ({records.length})

} {records.map((record, i) => (
{record.value.author?.displayName || record.value.author?.handle}
{new Date(record.value.createdAt).toLocaleString()}
{canDelete(record) && ( )}
{expandedRecords.has(i) && (
json data
                {JSON.stringify(record, null, 2)}
              
)}
{record.value.text || record.value.content}
{record.value.post?.url && ( {record.value.post.url} )}
))}
) }