VeridaDatastoreExample = () => {
const contactSchema =
"https://common.schemas.verida.io/social/contact/v0.1.0/schema.json"
const [currentMessage, setCurrentMessage] = useState(undefined)
const [veridaContext, setVeridaContext] = useState(undefined)
this.CONTEXT_NAME = "Verida Tutorial"
React.useEffect(async () => {
if (!veridaContext) {
if (hasSession(this.CONTEXT_NAME)) {
let ctx = await globalLoginFunction(this.CONTEXT_NAME);
setVeridaContext(ctx);
}
}
}, []);
let contact = {
firstName: "John",
lastName: "Smith",
email: "",
}
processSaveResult = function (result, errors) {
if (result) {
setCurrentMessage("Successfully saved")
} else {
let errorMessage = []
errorMessage.push(<div>Failed to save!</div>)
errorMessage.push(
errors.map((error, idx) => (
<div key={idx}>Error is: {error.message}</div>
))
)
setCurrentMessage(errorMessage)
}
}
saveBadContact = async function () {
let contactsDS = await veridaContext.openDatastore(contactSchema)
contact.email = "john_smith.example.com"
setCurrentMessage("saving with email address " + contact.email)
let result = await contactsDS.save(contact)
processSaveResult(result, contactsDS.errors)
}
saveGoodContact = async function () {
let contactsDS = await veridaContext.openDatastore(contactSchema)
contact.email = "john_smith@example.com"
setCurrentMessage("saving with email address " + contact.email)
let result = await contactsDS.save(contact)
processSaveResult(result, contactsDS.errors)
}
showContacts = async function () {
let contactsDS = await veridaContext.openDatastore(contactSchema)
contacts = await contactsDS.getMany(null, null)
msg = []
msg.push(
contacts.map((contact, index) => (
<div key={index}>
{contact.firstName} {contact.lastName}: {contact.email}
</div>
))
)
setCurrentMessage(msg)
}
if (veridaContext) {
return (
<div>
<button onClick={this.saveBadContact}>
Attempt to save an invalid contact
</button>
<br />
<button onClick={this.saveGoodContact}>
Attempt to save an valid contact
</button>
<br />
<button onClick={this.showContacts}>Show contacts</button>
<div>{currentMessage}</div>
</div>
)
} else {
return (
<div className="admonition admonition-danger alert alert--danger">
<h2>
Please login <a href="/docs/tutorial/SSO#runcode">here</a>
</h2>
</div>
)
}
}