@kaspernj/api-maker 1.0.330 → 1.0.332
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.
- package/package.json +1 -1
- package/src/devise.mjs +12 -0
- package/src/use-current-user.mjs +58 -7
package/package.json
CHANGED
package/src/devise.mjs
CHANGED
|
@@ -104,7 +104,19 @@ export default class ApiMakerDevise {
|
|
|
104
104
|
return this.currents[scope]
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
+
hasCurrentScope(scope) {
|
|
108
|
+
if (globalThis.apiMakerDeviseCurrent && scope in globalThis.apiMakerDeviseCurrent) {
|
|
109
|
+
return true
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return false
|
|
113
|
+
}
|
|
114
|
+
|
|
107
115
|
loadCurrentScope (scope) {
|
|
116
|
+
if (!this.hasCurrentScope(scope)) {
|
|
117
|
+
return null
|
|
118
|
+
}
|
|
119
|
+
|
|
108
120
|
const scopeData = globalThis.apiMakerDeviseCurrent[scope]
|
|
109
121
|
|
|
110
122
|
if (!scopeData) return null
|
package/src/use-current-user.mjs
CHANGED
|
@@ -1,10 +1,61 @@
|
|
|
1
|
-
import {useCallback, useEffect,
|
|
1
|
+
import {useCallback, useEffect, useMemo} from "react"
|
|
2
|
+
import {camelize} from "inflection"
|
|
2
3
|
import Devise from "./devise.mjs"
|
|
4
|
+
import Services from "./services.mjs"
|
|
5
|
+
import useShape from "set-state-compare/src/use-shape.js"
|
|
6
|
+
|
|
7
|
+
const currentUserData = {}
|
|
8
|
+
|
|
9
|
+
const useCurrentUser = (args) => {
|
|
10
|
+
const s = useShape()
|
|
11
|
+
const scope = args?.scope || "user"
|
|
12
|
+
const scopeName = useMemo(() => `current${camelize(scope)}`, [scope])
|
|
13
|
+
|
|
14
|
+
s.meta.scope = scope
|
|
15
|
+
s.meta.scopeName = scopeName
|
|
16
|
+
|
|
17
|
+
const loadCurrentUserFromRequest = useCallback(async () => {
|
|
18
|
+
const {scope, scopeName} = s.m
|
|
19
|
+
const result = await Services.current().sendRequest("Devise::Current", {scope})
|
|
20
|
+
const current = digg(result, "current")
|
|
21
|
+
|
|
22
|
+
currentUserData[scope] = current
|
|
23
|
+
|
|
24
|
+
if (!(scopeName in s.setStates)) throw new Error(`'${scopeName}' not found in setStates`)
|
|
25
|
+
|
|
26
|
+
s.setStates[scopeName](current)
|
|
27
|
+
}, [])
|
|
28
|
+
|
|
29
|
+
const defaultCurrentUser = useCallback(() => {
|
|
30
|
+
const {scope, scopeName} = s.m
|
|
31
|
+
|
|
32
|
+
if (scope in currentUserData) {
|
|
33
|
+
return currentUserData[scope]
|
|
34
|
+
} else if (Devise.current().hasCurrentScope(scope)) {
|
|
35
|
+
currentUserData[scope] = Devise[scopeName]()
|
|
36
|
+
|
|
37
|
+
return currentUserData[scope]
|
|
38
|
+
}
|
|
39
|
+
}, [])
|
|
40
|
+
|
|
41
|
+
const useStatesArgument = {}
|
|
42
|
+
|
|
43
|
+
useStatesArgument[scopeName] = defaultCurrentUser()
|
|
44
|
+
|
|
45
|
+
s.useStates(useStatesArgument)
|
|
3
46
|
|
|
4
|
-
const useCurrentUser = () => {
|
|
5
|
-
const [currentUser, setCurrentUser] = useState(Devise.currentUser())
|
|
6
47
|
const updateCurrentUser = useCallback(() => {
|
|
7
|
-
|
|
48
|
+
const setStatesArgument = {}
|
|
49
|
+
|
|
50
|
+
setStatesArgument[s.m.scopeName] = Devise[s.m.scopeName]()
|
|
51
|
+
|
|
52
|
+
s.set(setStatesArgument)
|
|
53
|
+
}, [])
|
|
54
|
+
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
if (!(s.m.scope in currentUserData)) {
|
|
57
|
+
loadCurrentUserFromRequest()
|
|
58
|
+
}
|
|
8
59
|
}, [])
|
|
9
60
|
|
|
10
61
|
useEffect(() => {
|
|
@@ -13,7 +64,7 @@ const useCurrentUser = () => {
|
|
|
13
64
|
return () => {
|
|
14
65
|
Devise.events().removeListener("onDeviseSignIn", updateCurrentUser)
|
|
15
66
|
}
|
|
16
|
-
})
|
|
67
|
+
}, [])
|
|
17
68
|
|
|
18
69
|
useEffect(() => {
|
|
19
70
|
Devise.events().addListener("onDeviseSignOut", updateCurrentUser)
|
|
@@ -21,9 +72,9 @@ const useCurrentUser = () => {
|
|
|
21
72
|
return () => {
|
|
22
73
|
Devise.events().removeListener("onDeviseSignOut", updateCurrentUser)
|
|
23
74
|
}
|
|
24
|
-
})
|
|
75
|
+
}, [])
|
|
25
76
|
|
|
26
|
-
return
|
|
77
|
+
return s.s[scopeName]
|
|
27
78
|
}
|
|
28
79
|
|
|
29
80
|
export default useCurrentUser
|