import { createSignal, Show } from "solid-js" import type { ResharingSession } from "../../models" import PubkeyInput from "../PubkeyInput" import { validateMessagingRelays } from "../../lib/relays" import { useAutoThreshold } from "../../hooks" export function ProposeResharing(props: { quorumPubkey: string; onClose: () => void }) { const [newMembers, setNewMembers] = createSignal([]) const [newThreshold, setNewThreshold] = useAutoThreshold(newMembers) const [error, setError] = createSignal("") const [submitting, setSubmitting] = createSignal(false) async function handleSubmit(e: Event) { e.preventDefault() setError("") const members = newMembers() if (members.length === 0) { setError("Add at least one member.") return } const t = newThreshold() if (t < 1 || t > members.length) { setError("Threshold must be between 1 and the number of new members.") return } setSubmitting(true) const relayError = await validateMessagingRelays(members) setSubmitting(false) if (relayError) { setError(relayError) return } console.log("ProposeResharing", { quorumPubkey: props.quorumPubkey, newMembers: members, newThreshold: t, }) props.onClose() } return (

Propose Key Rotation

Current members will contribute their shares to bootstrap the new quorum.

setNewThreshold(Number(e.currentTarget.value))} class="w-full px-3 py-2 text-sm border border-gray-200 dark:border-neutral-600 rounded-lg bg-white dark:bg-neutral-800 text-gray-900 dark:text-white focus:outline-none focus:ring-2 focus:ring-blue-500" />

{newMembers().length > 0 ? `${newThreshold()} of ${newMembers().length} signatures required` : "Add members first"}

{error()}

) } export function ResharingInviteResponse(props: { session: ResharingSession; onClose: () => void }) { const truncated = props.session.quorumPubkey.slice(0, 8) + "..." + props.session.quorumPubkey.slice(-8) function handleParticipate() { console.log("ResharingInviteResponse: participate", props.session.proposalId) props.onClose() } function handleDecline() { console.log("ResharingInviteResponse: decline", props.session.proposalId) props.onClose() } return (

Resharing Proposal

Quorum: {truncated}
New member count: {props.session.newMembers.length}
New threshold: {props.session.newThreshold}
) }