/** @jsx jsx */ import { Fragment, useEffect, useState } from 'react' import { css, jsx } from '@emotion/core' import { connect } from '@aragon/connect' import Main from './Main' import OrgApps from './OrgApps' import OrgInfo from './OrgInfo' import OrgPermissions from './OrgPermissions' import TextButton from './TextButton' import { useCancellableAsync } from './generic-hooks' import { env } from './environment' function useRouting() { const [orgName, setOrgName] = useState('') const openOrg = (orgName: string) => { window.location.hash = `/${orgName}` } const openApp = (appAddress: string) => { window.location.hash = `/${orgName}/${appAddress}` } useEffect(() => { const onChange = () => { const org = window.location.hash.match(/^#\/([^\/]+)/)?.[1] setOrgName(org || '') } onChange() window.addEventListener('hashchange', onChange) return () => { window.removeEventListener('hashchange', onChange) } }, []) return { orgName, openOrg, openApp } } function filterOrgName(name: string): string { name = name.trim() if (!name.includes('.')) { return name + '.aragonid.eth' } return name } export default function App() { const { openOrg, openApp, orgName } = useRouting() const [org = null, loading] = useCancellableAsync( async () => connect(filterOrgName(orgName), 'thegraph', { network: env.chainId }), [orgName] ) return (
{loading && (

Loading org…

)}
Or pick one:  {env.addresses.map((name, index) => ( {index > 0 && , } openOrg(name)}> {name.match(/^[^\.]+/)?.[0]} ))} .
{org && ( )}
) }