Contacts React
React components for working with contacts data.
Contacts Data
These components assume contacts in the form of:
{
"uuid": "a58bca0d-a38f-42a1-8b33-bcd53027881c",
"label": "Main ETH account",
"notes": "💰",
"createdAt": "2021-05-26T16:03:03Z",
"modifiedAt": "2021-05-26T16:03:03Z",
"address": {
"accountAddress": "0xab16a96d359ec26a11e2c2b3d8f8b8942d5bfcdb",
"chainId": "eip155:1"
}
}
You can find the JSON schema in the repo from the contacts app, which is live at contacts.fission.app. In the app you can view and manage your contacts. By default it assumes the contacts data in the private/Documents/Contacts/
directory.
Components
To illustrate how easy it is to work with the webnative filesystem, we're making a few React components to easily render contacts in your React app.
import { List } from '@fission-suite/contacts-react'
webnative.initialise({ ... }).then(state => {
if (state.fs) {
return <List fileSystem={state.fs} />
}
})
List
component properties:
{
blockchainNetworksPath,
emptyStateComponent,
fileSystem,
itemComponent,
libraryPath,
listElement,
loadingComponent,
}
Contact
component properties:
{
blockchainNetworks,
contact
}
The default Contact
and loading components are unstyled, so most likely you'll want to provide styled components instead.
import { isBlockchainAddress, lookUpBlockchainNetwork } from '@fission-suite/contacts-react/Contact'
<List
fileSystem={state.fs}
listElement="ol"
emptyStateComponent={
<div>Nothing here yet.</div>
}
loadingComponent={() =>
<div>Loading …</div>
}
itemComponent={({ blockchainNetworks, contact }) => {
if (isBlockchainAddress(contact.address)) {
const network = lookUpBlockchainNetwork(contact.address, blockchainNetworks)
return <li>
{contact.address.accountAddress}
{network.label}
</li>
}
return <></>
}}
/>
Example
There is an example in the example directory, which is also available at contacts-react.fission.app. That also serves as an example for the React components from the Fission UI Kit.