diff --git a/.eslintrc b/.eslintrc index f3894d70..3bc082b1 100644 --- a/.eslintrc +++ b/.eslintrc @@ -14,6 +14,8 @@ "rules": { "no-unused-vars": "off", "no-redeclare": "off", + "no-use-before-define": "off", + "no-dupe-class-members": "off", "@typescript-eslint/no-unused-vars": "error", "no-shadow": "off", "@typescript-eslint/no-shadow": ["error"], diff --git a/examples/browser/src/basic.ts b/examples/browser/src/basic.ts index 813da998..944a75b4 100644 --- a/examples/browser/src/basic.ts +++ b/examples/browser/src/basic.ts @@ -1,6 +1,6 @@ import { providers, utils } from 'ethers'; -import { ColonyNetwork, Tokens } from '../../../dist/esm'; +import { ColonyNetwork, Tokens } from '../../../src'; const { formatEther, isAddress } = utils; diff --git a/examples/browser/src/events.ts b/examples/browser/src/events.ts new file mode 100644 index 00000000..f7acd495 --- /dev/null +++ b/examples/browser/src/events.ts @@ -0,0 +1,68 @@ +import { providers, utils } from 'ethers'; + +import { ColonyEvents } from '../../../src'; +import type { ColonyEvent } from '../../../src'; + +const provider = new providers.JsonRpcProvider('https://xdai.colony.io/rpc2/'); +const { isAddress } = utils; + +// This event listener will only list for the `DomainAdded` event in the Colony of the user's choice. Run this and then create a Team in that Colony, to see it being picked up here +const setupEventListener = ( + colonyAddress: string, + callback: (events: ColonyEvent[]) => void, +) => { + const colonyEvents = new ColonyEvents(provider); + + const domainAdded = colonyEvents.createMultiFilter( + colonyEvents.eventSources.Colony, + 'DomainAdded(address,uint256)', + colonyAddress, + ); + + let i = 0; + + colonyEvents.provider.on('block', async (no) => { + i += 1; + // Only get events every 5 blocks to debounce this a little bit + if (i === 4) { + const events = await colonyEvents.getMultiEvents([domainAdded], { + fromBlock: no - i, + toBlock: no, + }); + if (events.length) callback(events); + i = 0; + } + }); +}; + +// Just some basic setup to display the UI +const addressInput: HTMLInputElement = document.querySelector('#address'); +const button = document.querySelector('#button'); +const errElm: HTMLParagraphElement = document.querySelector('#error'); +const resultElm: HTMLParagraphElement = document.querySelector('#result'); + +const panik = (err: string) => { + errElm.innerText = err; +}; +const kalm = () => { + errElm.innerText = ''; +}; +const speak = (msg: string) => { + resultElm.innerText = msg; +}; + +button.addEventListener('click', async () => { + kalm(); + const colonyAddress = addressInput.value; + if (!isAddress(colonyAddress)) { + return panik('This is not a valid address'); + } + addressInput.value = ''; + setupEventListener(colonyAddress, (events) => { + speak( + `A domain with id ${events[0].data.domainId} was created on Colony ${events[0].address}`, + ); + }); + speak(`Set up event listener for Colony ${colonyAddress}`); + return null; +}); diff --git a/examples/browser/web/events.html b/examples/browser/web/events.html new file mode 100644 index 00000000..3ae7ac13 --- /dev/null +++ b/examples/browser/web/events.html @@ -0,0 +1,13 @@ + + +
+Listen to Colony Events as they unfold...
+ + + + + + + diff --git a/examples/browser/web/index.html b/examples/browser/web/index.html index 48c987ca..6c7f02f3 100644 --- a/examples/browser/web/index.html +++ b/examples/browser/web/index.html @@ -15,6 +15,9 @@