-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmainReact.tsx
90 lines (72 loc) · 2.08 KB
/
mainReact.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import React from 'react'
import { Provider, useQuery, useMutation } from 'urql';
import ReactDOM from 'react-dom'
import { client } from "./main"
import {
AuthBug,
LoginBug,
LogoutBug,
Auth,
Login,
Logout,
requestPolicy
} from "./queries";
const CompBug = () => {
const [result, reexecuteQuery] = useQuery({
query: AuthBug,
});
const [_loginResult, login] = useMutation(LoginBug)
const [_logoutResult, logout] = useMutation(LogoutBug)
const doLogin = () => login()
const doLogout = () => logout()
const { data, fetching, error } = result;
if (fetching) return <p>Loading...</p>;
if (error) return <p>Oh no... {error.message}</p>;
const dataJSON = JSON.stringify(data)
return (
<div>
Viewer: {dataJSON}
<button onClick={doLogin}>Login</button>
<button onClick={doLogout}>Logout</button>
</div>
);
}
const createComp = (title, authQuery, loginMut, logoutMut) => {
return () => {
const [result, reexecuteQuery] = useQuery({
query: authQuery,
requestPolicy
});
const [_loginResult, login] = useMutation(loginMut)
const [_logoutResult, logout] = useMutation(logoutMut)
const doLogin = () => login()
const doLogout = () => logout()
const { data, fetching, error } = result;
if (fetching) return <p>Loading...</p>;
if (error) return <p>Oh no... {error.message}</p>;
const dataJSON = title === 'Without bug'
? result.data?.app?.viewer?.username
: result.data?.viewer?.username
return (
<div>
<h2>{title}</h2>
Viewer: {dataJSON}
<button onClick={doLogin}>Login</button>
<button onClick={doLogout}>Logout</button>
</div>
);
}
}
const CompWithoutBug = createComp('Without bug', Auth, Login, Logout)
const CompWithBug = createComp('With bug', AuthBug, LoginBug, LogoutBug)
const App = () => (
<Provider value={client}>
<CompWithBug />
<CompWithoutBug />
</Provider>
);
document.addEventListener('DOMContentLoaded', () => {
const el = document.getElementById('react-app')
console.log(el)
ReactDOM.render(<App />, el)
})