import React, { useState } from 'react' import { atproto, collections } from '../api/atproto.js' import { env } from '../config/env.js' const ProfileForm = ({ user, agent, apiConfig, onProfilePosted }) => { const [text, setText] = useState('') const [type, setType] = useState('user') const [handle, setHandle] = useState('') const [rkey, setRkey] = useState('') const [posting, setPosting] = useState(false) const [error, setError] = useState('') const handleSubmit = async (e) => { e.preventDefault() if (!text.trim() || !handle.trim() || !rkey.trim()) { setError('すべてのフィールドを入力してください') return } setPosting(true) setError('') try { // Get handle information let authorData try { const handleDid = await atproto.getDid(apiConfig.pds, handle) // Use agent to get profile with authentication const profileResponse = await agent.api.app.bsky.actor.getProfile({ actor: handleDid }) authorData = profileResponse.data } catch (err) { throw new Error('ハンドルが見つかりません') } // Create record using the same pattern as CommentForm const timestamp = new Date().toISOString() const record = { repo: user.did, collection: env.collection, rkey: rkey, record: { $type: env.collection, text: text, type: 'profile', profileType: type, // admin or user author: { did: authorData.did, handle: authorData.handle, displayName: authorData.displayName || authorData.handle, avatar: authorData.avatar || null }, createdAt: timestamp, post: { url: window.location.origin, date: timestamp, slug: '', tags: [], title: 'Profile', language: 'ja' } } } // Post the record using agent like CommentForm await agent.api.com.atproto.repo.putRecord(record) // Invalidate cache and refresh collections.invalidateCache(env.collection) // Reset form setText('') setType('user') setHandle('') setRkey('') if (onProfilePosted) { onProfilePosted() } } catch (err) { console.error('Failed to create profile:', err) setError(err.message || 'プロフィールの作成に失敗しました') } finally { setPosting(false) } } if (!user) { return null } return (

プロフィール投稿

{error && (
{error}
)}
setHandle(e.target.value)} placeholder="例: syui.ai" required />
setRkey(e.target.value)} placeholder="例: syui" required />