import React, { useEffect, useState } from "react" import { CirclePlus, Trash, Send } from "lucide-react" import { useNavigate } from "react-router-dom" import { ss58Decode } from "@polkadot-labs/hdkd-helpers" import { Accordion, AccordionContent, AccordionItem, AccordionTrigger, } from "../components/ui/accordion" import { Input } from "../components/ui/input" import { Button } from "../components/ui/button" type AddressBookRecord = { name: string address: string } interface AddressRecordProps { name: string address: string removeRecord: ({ name }: { name: string}) => void openTransfer: ({ address }: { address: string}) => void } const AddressRecord: React.FC = ({ name, address, removeRecord, openTransfer }) => { return (
{name}
) } export const AddressBook = () => { const navigate = useNavigate() const [name, setName] = useState("") const [address, setAddress] = useState("") const [error, setError] = useState(undefined) const [addressBook, setAddressBook] = useState( JSON.parse(localStorage.getItem('addressBook') ?? '[]') || [] ) useEffect(() => { localStorage.setItem('addressBook', JSON.stringify(addressBook)) setAddress("") setName("") setError(undefined) }, [addressBook]) const addRecord = ({ name, address }: AddressBookRecord) => { if (addressBook.find(record => record.name === name)) { setError("Name already exist in the address book") return } if (addressBook.find(record => record.address === address)) { setError("Address already exist in the address book") return } try { const [, prefix] = ss58Decode(address) if (prefix !== 1995 && prefix !== 1996) { throw new Error("bad prefix") } } catch (e) { setError("Incorrect Ghost or Casper address provided") return } const newRecord = { name, address } setAddressBook([...addressBook, newRecord]) } const removeRecord = ({ name }: { name: string }) => { const updatedAddressBook = addressBook.filter((record: AddressBookRecord) => record.name !== name ) setAddressBook(updatedAddressBook) } const openTransfer = ({ address }: { address: string }) => { const queryString = new URLSearchParams({ address }).toString() navigate(`/transactions?${queryString}`) } return ( {addressBook.map(({ name, address }: AddressBookRecord, idx: number) => ( ))}
setName(e.target.value)} aria-label="New Name" type="text" className="w-full sm:text-base text-xs sm:placeholder:text-base placeholder:text-xs" placeholder="Contact Name" /> setAddress(e.target.value)} aria-label="New Address" type="text" className="w-full sm:text-base text-xs sm:placeholder:text-base placeholder:text-xs" placeholder="Contact Address" />
{error && (
{error}
)}
) }