@kaspernj/api-maker 1.0.330 → 1.0.331

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 CHANGED
@@ -16,7 +16,7 @@
16
16
  ]
17
17
  },
18
18
  "name": "@kaspernj/api-maker",
19
- "version": "1.0.330",
19
+ "version": "1.0.331",
20
20
  "type": "module",
21
21
  "description": "",
22
22
  "main": "index.js",
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
@@ -1,10 +1,50 @@
1
- import {useCallback, useEffect, useState} from "react"
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
+
13
+ s.meta.scope = scope
14
+ s.meta.scopeName = useMemo(() => `current${camelize(s.m.scope)}`, [scope])
15
+
16
+ const loadCurrentUserFromRequest = useCallback(async () => {
17
+ const {scope, scopeName} = s.m.scope
18
+ const result = await Services.current().sendRequest("Devise::Current", {scope})
19
+ const current = digg(result, "current")
20
+
21
+ currentUserData[scope] = current
22
+
23
+ s.setStates[scopeName](current)
24
+ }, [])
25
+
26
+ const defaultCurrentUser = useCallback(() => {
27
+ const {scope, scopeName} = s.m
28
+
29
+ if (scope in currentUserData) {
30
+ return currentUserData[scope]
31
+ } else if (Devise.current().hasCurrentScope(scope)) {
32
+ currentUserData[scope] = Devise[scopeName]()
33
+
34
+ return currentUserData[scope]
35
+ }
36
+ }, [])
37
+
38
+ s.useStates({currentUser: defaultCurrentUser()})
3
39
 
4
- const useCurrentUser = () => {
5
- const [currentUser, setCurrentUser] = useState(Devise.currentUser())
6
40
  const updateCurrentUser = useCallback(() => {
7
- setCurrentUser(Devise.currentUser())
41
+ s.set({currentUser: Devise[s.m.scopeName]()})
42
+ }, [])
43
+
44
+ useEffect(() => {
45
+ if (!(s.m.scope in currentUserData)) {
46
+ loadCurrentUserFromRequest()
47
+ }
8
48
  }, [])
9
49
 
10
50
  useEffect(() => {
@@ -13,7 +53,7 @@ const useCurrentUser = () => {
13
53
  return () => {
14
54
  Devise.events().removeListener("onDeviseSignIn", updateCurrentUser)
15
55
  }
16
- })
56
+ }, [])
17
57
 
18
58
  useEffect(() => {
19
59
  Devise.events().addListener("onDeviseSignOut", updateCurrentUser)
@@ -21,9 +61,9 @@ const useCurrentUser = () => {
21
61
  return () => {
22
62
  Devise.events().removeListener("onDeviseSignOut", updateCurrentUser)
23
63
  }
24
- })
64
+ }, [])
25
65
 
26
- return currentUser
66
+ return s.s.currentUser
27
67
  }
28
68
 
29
69
  export default useCurrentUser