@rpcbase/client 0.78.0 → 0.80.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,6 +2,7 @@
2
2
  import assert from "assert"
3
3
  import {useState, useEffect} from "react"
4
4
  import {ActivityIndicator} from "react-native"
5
+ import Alert from "react-bootstrap/Alert"
5
6
  import page from "page"
6
7
 
7
8
  import post from "../../helpers/post"
@@ -22,14 +23,15 @@ const SignOut = ({
22
23
 
23
24
  const [isSignedOut, setIsSignedOut] = useState(false)
24
25
 
25
- const [accounts, setAccounts] = useState([])
26
+ const [accounts, setAccounts] = useState()
27
+ const [selectedAccounts, setSelectedAccounts] = useState([])
28
+
26
29
 
27
30
  useEffect(() => {
28
31
  const load = async() => {
29
32
  const res = await post("/api/v1/auth/get_accounts")
30
33
  assert(res.status === "ok")
31
34
  setAccounts(res.accounts)
32
- console.log("ACCOUNTS", res.accounts)
33
35
  }
34
36
 
35
37
  load()
@@ -44,7 +46,6 @@ const SignOut = ({
44
46
  localStorage.clear()
45
47
 
46
48
  // TODO: clear DB
47
-
48
49
  setIsSignedOut(true)
49
50
  onSuccess()
50
51
  } else {
@@ -53,49 +54,73 @@ const SignOut = ({
53
54
  }
54
55
 
55
56
 
56
- const onClickAccount = () => {
57
- console.log("clicked account")
58
- }
59
-
60
-
61
57
  const onSubmit = () => {
62
58
  signOut()
59
+ console.log("SEL", selectedAccounts)
63
60
  }
64
61
 
65
62
  return (
66
63
  <div id="sign-out-wrapper">
67
- {isSignedOut && <div>signed out successfully</div>}
68
- {accounts?.length > 0 && (<><div className="form-signout text-center px-4 py-4 shadow-lg">
69
- <div>
64
+
65
+ {isSignedOut && (
66
+ <Alert variant="light" data-bs-theme="dark" style={{maxWidth: 260, position: "absolute"}} onClose={() => setIsSignedOut(false)} dismissible>
67
+ Signed out successfully
68
+ </Alert>
69
+ )}
70
+
71
+ {accounts ? (<div className="form-signout text-center px-4 py-4 shadow-lg">
72
+
70
73
  <h1 className="h4 mt-3 mb-3 fw-normal">Sign Out</h1>
71
- <p className="text-start text-muted">
72
- Select accounts to sign out of:
73
- </p>
74
-
75
- <ul className="list-group text-start">
76
- {accounts.map((acc, index) => {
77
- const id = `acc-${acc.user_id}-${index}`
78
- return (
79
- <li key={id} className="list-group-item">
80
- <input className="form-check-input me-3" type="checkbox" value="" id={id} />
81
- <label className="form-check-label stretched-link" for={id}>
82
- <AccountListItem
83
- account={acc}
84
- onClick={onClickAccount}
85
- />
86
- </label>
87
- </li>
88
- )
89
- })}
90
- </ul>
91
-
92
- <button className="mt-4 mb-3 w-100 btn btn-lg btn-primary" type="submit" onClick={onSubmit}>Sign Out</button>
93
-
94
- </div>
95
- </div>
74
+
75
+ {Array.isArray(accounts) && accounts.length > 0 && (
76
+ <>
77
+ <p className="text-start text-muted">
78
+ Select accounts to sign out of:
79
+ </p>
80
+
81
+ <ul className="list-group text-start">
82
+ {accounts.map((acc, index) => {
83
+ const id = `acc-${acc.user_id}-${index}`
84
+
85
+ const onChange = (e) => {
86
+ if (e.target.checked) {
87
+ setSelectedAccounts((prev) => [...prev, acc.user_id])
88
+ } else {
89
+ setSelectedAccounts((prev) => [...prev.filter((v) => v !== acc.user_id)])
90
+ }
91
+ }
92
+
93
+ const checked = selectedAccounts.includes(acc.user_id)
94
+
95
+ return (
96
+ <li key={id} className="list-group-item">
97
+ <input className="form-check-input me-3" type="checkbox" value="" checked={checked} onChange={onChange} id={id} />
98
+ <label className="form-check-label stretched-link" for={id}>
99
+ <AccountListItem
100
+ account={acc}
101
+ // onClick={onClickAccount}
102
+ />
103
+ </label>
104
+ </li>
105
+ )
106
+ })}
107
+ </ul>
108
+
109
+ <button className="mt-4 mb-3 w-100 btn btn-lg btn-primary" type="submit" onClick={onSubmit}>Sign Out</button>
110
+ </>
111
+ )}
112
+
113
+ {Array.isArray(accounts) && accounts.length === 0 && (
114
+ <p className="text-start text-muted">
115
+ You aren't signed in to any accounts<br />
116
+ Go to: <a href="/signin">/signin</a>
117
+ </p>
118
+ )}
119
+
120
+ </div>) : <div className="h-100"/>}
96
121
 
97
122
  <Footer name={name} />
98
- </>)}
123
+
99
124
  </div>
100
125
  )
101
126
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rpcbase/client",
3
- "version": "0.78.0",
3
+ "version": "0.80.0",
4
4
  "scripts": {
5
5
  "build-firebase": "webpack -c firebase/webpack.config.js",
6
6
  "build": "yarn build-firebase",
@@ -138,7 +138,7 @@ const getUseQuery = (register_query) => (
138
138
 
139
139
  return () => {
140
140
  log && log("useQuery cleanup unsubscribe()")
141
- unsubscribe()
141
+ typeof unsubscribe === "function" && unsubscribe()
142
142
  }
143
143
  }, [JSON.stringify(query), key])
144
144