Skip to content

Commit 181456b

Browse files
committed
Initial commit for the open-sourced version of Orbis groups
1 parent 0f263b7 commit 181456b

File tree

118 files changed

+26432
-1665
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

118 files changed

+26432
-1665
lines changed

components/Channel.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import Link from 'next/link'
2+
import { getChannelIcon } from "../utils"
3+
4+
/** Global component to display a channel, returns the channel icon and channel name */
5+
export function Channel({id, group_id, details, isLink}) {
6+
if(isLink) {
7+
return(
8+
<div className="channel-container pointer">
9+
<div className="channel-icon-container">
10+
<img src={getChannelIcon({content: details}, true)} className="pfp" />
11+
</div>
12+
13+
<div className="channel-name">
14+
<Link href={"/group/" + group_id + "/" + id}>{details.name}</Link>
15+
</div>
16+
</div>
17+
)
18+
} else {
19+
return(
20+
<div className="channel-container">
21+
<div className="channel-icon-container">
22+
<img src={getChannelIcon({content: details}, true)} className="pfp" />
23+
</div>
24+
<div className="channel-name">{details.name}</div>
25+
</div>
26+
)
27+
}
28+
}

components/ConnectButton.js

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
import React, { useState, useEffect, useRef, useContext } from 'react';
2+
import { sleep } from "../utils";
3+
4+
/** Import Context */
5+
import { GlobalContext } from "../contexts/GlobalContext";
6+
7+
/** Manage WalletConnect */
8+
import WalletConnectProvider from "@walletconnect/web3-provider";
9+
10+
/** Render a connect button that can be used to connect to Ceramic using the Orbis SDK */
11+
export function ConnectButton() {
12+
const { user, setUser, groups, setGroups, orbis } = useContext(GlobalContext);
13+
const [status, setStatus] = useState(0);
14+
15+
/** Returns a valid provider to use to connect the user's wallet */
16+
async function getProvider() {
17+
let provider = null;
18+
19+
if(window.ethereum) {
20+
provider = window.ethereum;
21+
22+
/** Return provider to use */
23+
return provider;
24+
} else {
25+
/** Create WalletConnect Provider */
26+
provider = new WalletConnectProvider({
27+
infuraId: "9bf71860bc6c4560904d84cd241ab0a0",
28+
});
29+
30+
/** Enable session (triggers QR Code modal) */
31+
await provider.enable();
32+
33+
/** Return provider to use */
34+
return provider;
35+
}
36+
}
37+
38+
/** Call the Orbis SDK to connect to Ceramic */
39+
async function connect() {
40+
/** Show loading state */
41+
setStatus(1);
42+
43+
/** Connect using an Ethereum provider */
44+
let provider = await getProvider();
45+
let res = await orbis.connect(provider);
46+
47+
/** Parse result and update status */
48+
switch (res.status) {
49+
case 200:
50+
setStatus(2);
51+
52+
/** Save user details returned by the connect function in state */
53+
console.log("Connected to Ceramic: ", res);
54+
setUser(res.details);
55+
56+
break;
57+
default:
58+
console.log("Couldn't connect to Ceramic: ", res.error.message);
59+
setStatus(3);
60+
61+
/** Wait for 2 seconds before resetting the button */
62+
await sleep(2000);
63+
setStatus(0);
64+
}
65+
66+
}
67+
68+
/** Load user details from indexer */
69+
async function getUserDetails(did) {
70+
let { data, error, status } = await orbis.getProfile(did);
71+
72+
/** Returns error if any */
73+
if(error) {
74+
return {
75+
status: 300,
76+
result: "Error retrieving user details.",
77+
error: error
78+
}
79+
}
80+
81+
/** Returns user details */
82+
return {
83+
status: 200,
84+
result: data
85+
}
86+
}
87+
88+
/** Display button according to its status */
89+
switch (status) {
90+
case 0:
91+
return <button className="btn md purple pointer" onClick={() => connect()}>Connect</button>;
92+
case 1:
93+
return <button className="btn md transparent-dashed">Loading...</button>;
94+
case 2:
95+
return <button className="btn md green">Success</button>;
96+
case 3:
97+
return <button className="btn md red">Error</button>
98+
99+
}
100+
}

0 commit comments

Comments
 (0)