miolo-react 3.0.0-beta.207 → 3.0.0-beta.209

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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "miolo-react",
3
- "version": "3.0.0-beta.207",
3
+ "version": "3.0.0-beta.209",
4
4
  "description": "React utils for miolo",
5
5
  "author": "Donato Lorenzo <donato@afialapis.com>",
6
6
  "contributors": [
@@ -30,7 +30,7 @@
30
30
  "prepublishOnly": "npm run lint"
31
31
  },
32
32
  "dependencies": {
33
- "idb-keyval": "^6.2.4",
33
+ "idb-keyval": "^6.2.5",
34
34
  "miolo-cli": "../miolo-cli"
35
35
  },
36
36
  "peerDependencies": {
@@ -11,7 +11,7 @@ const makeSerializable = (obj) => {
11
11
  }
12
12
 
13
13
  const useSsrDataOrReload = (context, miolo, name, options) => {
14
- const { fetcher } = miolo
14
+ const { fetcher, socket, logger } = miolo
15
15
  const {
16
16
  defval = [],
17
17
  loader = undefined,
@@ -47,9 +47,9 @@ const useSsrDataOrReload = (context, miolo, name, options) => {
47
47
  const [ssrData, setSsrData] = useState(
48
48
  parseData(ssrDataFromContext !== undefined ? ssrDataFromContext : defval)
49
49
  )
50
-
51
50
  const [status, setStatus] = useState(ssrDataFromContext !== undefined ? "loaded" : "idle")
52
51
  const [error, setError] = useState(undefined)
52
+ const [socketInited, setSocketInited] = useState(false)
53
53
 
54
54
  const updateSsrData = useCallback(
55
55
  (data) => {
@@ -112,6 +112,20 @@ const useSsrDataOrReload = (context, miolo, name, options) => {
112
112
  setStatus("loaded")
113
113
  }, [status, context, fetcher, loader, url, params, parseData, name, cache])
114
114
 
115
+ const invalidateCache = useCallback((tName, callback = undefined) => {
116
+ if (typeof window !== "undefined") {
117
+ import("idb-keyval").then(({ del }) => {
118
+ del(`ssr-cache-${tName}`)
119
+ .catch(() => {})
120
+ .then(() => {
121
+ if (callback) {
122
+ callback()
123
+ }
124
+ })
125
+ })
126
+ }
127
+ }, [])
128
+
115
129
  useEffect(() => {
116
130
  let mounted = true
117
131
 
@@ -174,19 +188,38 @@ const useSsrDataOrReload = (context, miolo, name, options) => {
174
188
  }
175
189
  }, [ssrDataFromContext, name, cache])
176
190
 
177
- const invalidate = useCallback(() => {
178
- if (typeof window !== "undefined") {
179
- import("idb-keyval").then(({ del }) => {
180
- del(`ssr-cache-${name}`).catch(() => {})
181
- })
191
+ useEffect(() => {
192
+ if (socket === undefined) {
193
+ return
194
+ }
195
+
196
+ if (socketInited) {
197
+ return
182
198
  }
183
- }, [name])
199
+ setSocketInited(true)
200
+
201
+ socket.on("connect", () => {
202
+ logger.verbose("[ssr] Socket connected")
203
+ })
204
+
205
+ socket.on("ssr-invalidate", (data) => {
206
+ logger.info(`[ssr] ssr-invalidate ${data.name}`)
207
+ invalidateCache(data.name)
208
+ })
209
+
210
+ socket.on("ssr-refresh", (data) => {
211
+ logger.info(`[ssr] ssr-refresh ${data.name}`)
212
+ invalidateCache(data.name, () => {
213
+ refreshSsrData()
214
+ })
215
+ })
216
+ }, [socket, socketInited, logger, invalidateCache, refreshSsrData])
184
217
 
185
218
  return {
186
219
  data: ssrData,
187
220
  setData: updateSsrData,
188
221
  refresh: refreshSsrData,
189
- invalidate,
222
+ invalidate: (callback) => invalidateCache(name, callback),
190
223
  error,
191
224
  ok: error === undefined,
192
225
  ready: status === "loaded"