import { useEffect, useState } from 'react' import { api, json, read } from '../api.ts' import { useAction } from './useAction.ts' type Mode = 'private' | 'people' | 'public' /** Who can read this conversation, and its link. */ export function ShareControl({ skey, ownerDid }: { skey: string; ownerDid: string }) { const [open, setOpen] = useState(false) const [mode, setMode] = useState('private') const [members, setMembers] = useState('') const { error, run } = useAction() const link = `${location.origin}/s/${ownerDid}/${skey}` useEffect(() => { if (!open) return run(async () => { const settings = await read( api.sharing.conversations[':skey'].sharing.$get({ param: { skey } }), ) setMode(settings.mode) setMembers(settings.members.map((m) => m.handle ?? m.did).join(', ')) }) }, [open, skey, run]) const save = async () => { const list = members .split(',') .map((m) => m.trim()) .filter(Boolean) await read( api.sharing.conversations[':skey'].sharing.$put( { param: { skey } }, json({ mode, members: list }), ), ) } if (!open) { return ( ) } return (
Sharing {mode === 'people' && ( setMembers(e.target.value)} /> )} {mode !== 'private' && } {error &&

{error}

}
) }