Skip to content

Commit 819530a

Browse files
committed
feat(kleros-app): readme
1 parent f9d5d28 commit 819530a

File tree

2 files changed

+113
-24
lines changed

2 files changed

+113
-24
lines changed

kleros-app/README.md

Lines changed: 112 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,112 @@
1-
# kleros-app
1+
# Kelros App
2+
3+
Library for Kleros DApps with reusable abstractions and components.
4+
5+
# Usage
6+
7+
```node
8+
yarn install @kleros/kleros-app
9+
```
10+
11+
## 1. Atlas Interaction
12+
13+
- This library exports utilities to interact with Atlas (Kleros' backend) with minimal code.
14+
15+
- AtlasProvider : Provides functions to interact with Atlas.
16+
17+
> AtlasProvider needs to be wrapped with [<WagmiProvider/>](https://wagmi.sh/react/api/WagmiProvider) and [<QueryClientProvider/>](https://tanstack.com/query/latest/docs/framework/react/reference/QueryClientProvider#queryclientprovider) to work properly.
18+
19+
#### Usage
20+
21+
1. At the root of your app, setup AtlasProvider.
22+
**uri** : Atlas backend uri
23+
**product** : The product / Kleros DApp interacting with Atlas (CourtV2, Curate, etc.)
24+
25+
```typescript
26+
import { WagmiProvider } from 'wagmi'
27+
import { config } from './config'
28+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
29+
import { AtlasProvider, Products } from "@kleros/kleros-app";
30+
31+
const queryClient = new QueryClient()
32+
33+
function App() {
34+
return
35+
<WagmiProvider config={config}>
36+
<QueryClientProvider client={queryClient}>
37+
<AtlasProvider config={{ uri: import.meta.env.REACT_APP_ATLAS_URI, product: Products.CourtV2 }}>
38+
...
39+
</AtlasProvider>
40+
</QueryClientProvider>
41+
</WagmiProvider>
42+
}
43+
```
44+
45+
2. Once Provider is set up, use the functions provided.
46+
47+
```typescript
48+
import React, { useCallback } from "react";
49+
50+
import { useAccount } from "wagmi";
51+
import { useAtlasProvider } from "@kleros/kleros-app";
52+
import { Button } from "@kleros/ui-components-library";
53+
54+
55+
interface IEnsureAuth {
56+
children: React.ReactElement;
57+
className?: string;
58+
}
59+
60+
const EnsureAuth: React.FC<IEnsureAuth> = ({ children, className }) => {
61+
const { address } = useAccount();
62+
const { isVerified, isSigningIn, authoriseUser } = useAtlasProvider();
63+
64+
const handleClick = useCallback(() => {
65+
// authorise a user
66+
authoriseUser()
67+
.then((res) => { console.log(res)})
68+
.catch((err) => {
69+
console.log(err);
70+
});
71+
}, [authoriseUser]);
72+
73+
return isVerified ? (
74+
children
75+
) : (
76+
<Button
77+
text="Sign In"
78+
onClick={handleClick}
79+
disabled={isSigningIn || !address}
80+
isLoading={isSigningIn}
81+
{...{ className }}
82+
/>
83+
);
84+
};
85+
86+
export default EnsureAuth;
87+
88+
```
89+
90+
3. [IAtlasProvider](https://github.com/kleros/kleros-v2/blob/feat/kleros-app/kleros-app/src/lib/atlas/providers/AtlasProvider.tsx)
91+
92+
```typescript
93+
interface IAtlasProvider {
94+
isVerified: boolean;
95+
isSigningIn: boolean;
96+
isAddingUser: boolean;
97+
isFetchingUser: boolean;
98+
isUpdatingUser: boolean;
99+
isUploadingFile: boolean;
100+
user: User | undefined;
101+
userExists: boolean;
102+
authoriseUser: () => Promise<void>;
103+
addUser: (userSettings: AddUserData) => Promise<boolean>;
104+
updateEmail: (userSettings: UpdateEmailData) => Promise<boolean>;
105+
uploadFile: (file: File, role: Roles) => Promise<string | null>;
106+
confirmEmail: (userSettings: ConfirmEmailData) => Promise<
107+
ConfirmEmailResponse & {
108+
isError: boolean;
109+
}
110+
>;
111+
}
112+
```

yarn.lock

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -34850,29 +34850,7 @@ __metadata:
3485034850
languageName: node
3485134851
linkType: hard
3485234852

34853-
"viem@npm:2.x, viem@npm:^2.1.1, viem@npm:^2.21.35, viem@npm:^2.21.37, viem@npm:^2.21.43, viem@npm:^2.21.48":
34854-
version: 2.21.48
34855-
resolution: "viem@npm:2.21.48"
34856-
dependencies:
34857-
"@noble/curves": "npm:1.6.0"
34858-
"@noble/hashes": "npm:1.5.0"
34859-
"@scure/bip32": "npm:1.5.0"
34860-
"@scure/bip39": "npm:1.4.0"
34861-
abitype: "npm:1.0.6"
34862-
isows: "npm:1.0.6"
34863-
ox: "npm:0.1.2"
34864-
webauthn-p256: "npm:0.0.10"
34865-
ws: "npm:8.18.0"
34866-
peerDependencies:
34867-
typescript: ">=5.0.4"
34868-
peerDependenciesMeta:
34869-
typescript:
34870-
optional: true
34871-
checksum: 10/160fcd88585137426402286b35d5be3021e8a74b97199936bd4fdb3d1ac93fd624fede1141c4266896901a4eca45e796b0bc54d71dfcbb1cfc5b26764d3cc951
34872-
languageName: node
34873-
linkType: hard
34874-
34875-
"viem@npm:^2.21.50":
34853+
"viem@npm:2.x, viem@npm:^2.1.1, viem@npm:^2.21.35, viem@npm:^2.21.37, viem@npm:^2.21.43, viem@npm:^2.21.48, viem@npm:^2.21.50":
3487634854
version: 2.21.50
3487734855
resolution: "viem@npm:2.21.50"
3487834856
dependencies:

0 commit comments

Comments
 (0)