miolo-react 3.0.0-beta.23 → 3.0.0-beta.231

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.
@@ -1,43 +1,400 @@
1
- import {useState, useCallback, useEffect} from 'react'
2
- import getSsrDataFromContext from './getSsrDataFromContext.mjs'
3
-
4
- const useSsrDataOrReload = (context, miolo, name, defval, loader, modifier) => {
5
-
6
- const _maybeModify = useCallback((value) => {
7
- return modifier==undefined ? value : modifier(value)
8
- }, [modifier])
9
-
10
- const ssrDataFromContext = getSsrDataFromContext(context, name)
11
- const [ssrData, setSsrData] = useState(_maybeModify(
12
- ssrDataFromContext != undefined
13
- ? ssrDataFromContext : defval))
14
- const [needToRefresh, setNeedToRefresh] = useState(ssrDataFromContext == undefined)
15
-
16
- const refreshSsrData = useCallback(() => {
17
- if (loader == undefined) {
1
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react"
2
+ import getSsrDataFromContext from "./getSsrDataFromContext.mjs"
3
+ import patchHistory from "./patchHistory.mjs"
4
+ import useIndexedDb from "./useIndexedDb.mjs"
5
+ import useOnWindowFocus from "./useOnWindowFocus.mjs"
6
+ import usePropsCheck from "./usePropsCheck.mjs"
7
+
8
+ /**
9
+ * @typedef {import('miolo-model').MioloModel} MioloModel
10
+ * @typedef {import('miolo-model').MioloArray} MioloArray
11
+ *
12
+ *
13
+ *
14
+ * @typedef {Object} MioloSSRDataOptions
15
+ * @property {any} [defval] - The default value for the data.
16
+ * @property {Function} [loader] - A function that loads the data remotely. You need either {@link loader} or {@link url}.
17
+ * @property {string} [url] - The URL to load the data from. You need either {@link loader} or {@link url}.
18
+ * @property {Object} [params] - The parameters to pass to the {@link loader}.
19
+ * @property {new (...args: any[]) => MioloModel} [model] - A MioloModel class for the data.
20
+ * @property {Function} [modifier] - A function that modifies the data (after ssr'ed or loaded, and after instantiated {@link model} if any).
21
+ * @property {Function|boolean} [effect] - A function that is called when the data is loaded. The {@link effect} function should return true if the data needs to be reloaded.
22
+ * @property {boolean} [cache] - Whether to cache the data.
23
+ * @property {number} [ttl] - The time to live for the cached data in seconds.
24
+ * @property {boolean} [autoRefresh] - Whether to automatically refresh the data on cache expiration.
25
+ *
26
+ *
27
+ * @typedef {Object} MioloSSRData
28
+ * @property {MioloModel | MioloArray | any} data - The data state. Generaly defined by {@link model} and/or {@link modifier} options.
29
+ * @property {Function} setData - Set the data state directly.
30
+ * @property {Function} refresh - If needed, remotely reload data (by calling {@link loader} or {@link url}).
31
+ * @property {Function} invalidate - Invalidate the data cache (requires {@link cache} to be true).
32
+ * @property {string|undefined} error - The error message if any.
33
+ *
34
+ * @property {boolean} ok - Status of SSR data, true if everything was ssr'ed or remotely loaded ok.
35
+ * @property {boolean} ready - true when {@link data} is loaded (either ssr'ed or remotely).
36
+ */
37
+
38
+ const globalSocketState = {
39
+ rooms: new Map(),
40
+ unsubscribeTimers: new Map(),
41
+ lastSubscribeEmitted: new Map(),
42
+ versionsRequestedAt: 0
43
+ }
44
+
45
+ /**
46
+ * Hook to get some ssr data or reload it if needed.
47
+ *
48
+ * @param {Object} context - The miolo context's state object.
49
+ * @param {Object} miolo - The miolo client object, that is:
50
+ * - @prop {Object} fetcher - The fetcher object.
51
+ * - @prop {Object} socket - The socket object.
52
+ * - @prop {Object} logger - The logger object.
53
+ * @param {string} name - The name of the data.
54
+ * @param {MioloSSRDataOptions} options - The options object:
55
+ * @returns {MioloSSRData}
56
+ */
57
+ const useSsrDataOrReload = (context, miolo, name, options) => {
58
+ const { fetcher, socket, logger } = miolo
59
+ const {
60
+ defval = [],
61
+ loader = undefined,
62
+ url = undefined,
63
+ params = undefined,
64
+ modifier = undefined,
65
+ effect = undefined,
66
+ model = undefined,
67
+ cache = false,
68
+ autoRefresh = true,
69
+ ttl = undefined
70
+ } = options
71
+
72
+ usePropsCheck(loader, effect, modifier, name)
73
+
74
+ const parseData = useCallback(
75
+ (value) => {
76
+ let parsed = value
77
+ if (model !== undefined) {
78
+ parsed = new model(parsed)
79
+ }
80
+ if (modifier !== undefined) {
81
+ parsed = modifier(parsed)
82
+ }
83
+ return parsed
84
+ },
85
+ [modifier, model]
86
+ )
87
+
88
+ const ssrDataFromContext = useMemo(() => {
89
+ return getSsrDataFromContext(context, name)
90
+ }, [context, name])
91
+
92
+ const [ssrData, setSsrData] = useState(
93
+ parseData(ssrDataFromContext !== undefined ? ssrDataFromContext : defval)
94
+ )
95
+ const [status, setStatus] = useState(ssrDataFromContext !== undefined ? "loaded" : "idle")
96
+ const [error, setError] = useState(undefined)
97
+ const pendingLazyRefreshRef = useRef(false)
98
+
99
+ const { cacheInvalidate, cacheSet, cacheGet } = useIndexedDb(name, logger, cache, ttl)
100
+
101
+ const updateSsrData = useCallback(
102
+ (data) => {
103
+ pendingLazyRefreshRef.current = false
104
+ setStatus("loading")
105
+ setSsrData(parseData(data))
106
+ setError(undefined)
107
+ setStatus("loaded")
108
+ /*await*/ cacheSet(data)
109
+ },
110
+ [parseData, cacheSet]
111
+ )
112
+
113
+ const refreshSsrData = useCallback(async () => {
114
+ if (status === "loading") {
18
115
  return
19
116
  }
20
117
 
21
- const {fetcher} = miolo
118
+ pendingLazyRefreshRef.current = false
119
+ setStatus("loading")
120
+ setError(undefined)
121
+
122
+ logger.verbose(`[miolo-react][ssr][${name}] refreshing ssr data`)
123
+
124
+ let newData
125
+
126
+ if (loader !== undefined) {
127
+ newData = await loader(context, fetcher)
128
+ } else {
129
+ if (!url) {
130
+ setError(`No url provided for ${name}`)
131
+ } else {
132
+ const resp = await fetcher.get(url, params)
133
+ if (resp.ok) {
134
+ newData = resp?.data
135
+ } else {
136
+ setError(resp?.error || "Unknown error")
137
+ }
138
+ }
139
+ }
140
+
141
+ if (newData !== undefined) {
142
+ setSsrData(parseData(newData))
143
+ /*await*/ cacheSet(newData)
144
+ }
145
+
146
+ setStatus("loaded")
147
+ }, [status, context, fetcher, loader, url, params, parseData, name, cacheSet, logger])
22
148
 
23
- async function fetchData() {
24
- let nSsrData = await loader(context, fetcher)
25
- setSsrData(_maybeModify(nSsrData))
149
+ const cacheVersionsCheck = useCallback(
150
+ async (versions) => {
151
+ logger.verbose(
152
+ `[miolo-react][ssr][${name}] Backend versions received: ${JSON.stringify(versions)}`
153
+ )
154
+
155
+ const ssrVersions = versions || {}
156
+ if (ssrVersions[name]) {
157
+ const backendVersion = ssrVersions[name]
158
+ logger.verbose(
159
+ `[miolo-react][ssr][${name}] Backend version for ${name} is ${backendVersion}`
160
+ )
161
+
162
+ const [cached, expired, ts] = await cacheGet()
163
+ if (cached) {
164
+ if (expired || ts < backendVersion) {
165
+ logger.info(
166
+ `[miolo-react][ssr][${name}] ssr-versions mismatch for ${name}, invalidating`
167
+ )
168
+ await cacheInvalidate()
169
+ if (autoRefresh === true) {
170
+ await refreshSsrData()
171
+ }
172
+ } else {
173
+ logger.verbose(`[miolo-react][ssr][${name}] ssr-versions match for ${name}`)
174
+ }
175
+ } else {
176
+ logger.warn(`[miolo-react][ssr][${name}] No cached data found for ${name}`)
177
+ }
178
+ }
179
+ },
180
+ [name, logger, cacheGet, cacheInvalidate, refreshSsrData, autoRefresh]
181
+ )
182
+
183
+ useEffect(() => {
184
+ let mounted = true
185
+
186
+ const loadData = async () => {
187
+ if (!mounted) return
188
+
189
+ try {
190
+ if (status === "idle") {
191
+ logger.verbose(`[miolo-react][ssr][${name}] getting data for ${name}...`)
192
+
193
+ const changed =
194
+ effect === undefined ||
195
+ (typeof effect === "function" && effect() === true) ||
196
+ effect === true
197
+
198
+ if (changed === true) {
199
+ const [cached, expired, _ts] = await cacheGet()
200
+
201
+ if (cached) {
202
+ logger.verbose(`[miolo-react][ssr][${name}] read data for ${name} from cache`)
203
+ setSsrData(parseData(cached))
204
+
205
+ if (expired) {
206
+ logger.verbose(`[miolo-react][ssr][${name}] expired cache for ${name}, refreshing`)
207
+ await refreshSsrData()
208
+ } else {
209
+ setStatus("loaded")
210
+ }
211
+ } else {
212
+ logger.verbose(`[miolo-react][ssr][${name}] no cached data for ${name}, refreshing`)
213
+ await refreshSsrData()
214
+ }
215
+ }
216
+ }
217
+ } catch (_) {}
218
+ }
219
+
220
+ loadData()
221
+
222
+ return () => {
223
+ mounted = false
224
+ }
225
+ }, [status, refreshSsrData, effect, name, parseData, cacheGet, logger])
226
+
227
+ useEffect(() => {
228
+ if (ssrDataFromContext !== undefined) {
229
+ /*await*/ cacheSet(ssrDataFromContext)
230
+ }
231
+ }, [ssrDataFromContext, cacheSet])
232
+
233
+ const handlersRef = useRef(/** @type {any} */ ({}))
234
+
235
+ useEffect(() => {
236
+ handlersRef.current = {
237
+ cacheVersionsCheck,
238
+ cacheInvalidate,
239
+ refreshSsrData,
240
+ refreshSsrDataLazy: () => {
241
+ pendingLazyRefreshRef.current = true
242
+ }
26
243
  }
244
+ })
27
245
 
28
- fetchData()
29
- }, [context, miolo, loader, _maybeModify])
30
-
31
246
  useEffect(() => {
32
- try {
33
- if (needToRefresh) {
34
- setNeedToRefresh(false)
247
+ if (cache === true) {
248
+ patchHistory()
249
+ }
250
+
251
+ const onNav = () => {
252
+ if (pendingLazyRefreshRef.current) {
253
+ logger.verbose(
254
+ `[miolo-react][ssr][${name}] navigation detected, doing pending lazy refresh`
255
+ )
256
+ pendingLazyRefreshRef.current = false
35
257
  refreshSsrData()
36
258
  }
37
- } catch(e) {}
38
- }, [needToRefresh, refreshSsrData])
259
+ }
260
+ window.addEventListener("miolo-navigation", onNav)
261
+ return () => {
262
+ window.removeEventListener("miolo-navigation", onNav)
263
+ }
264
+ }, [cache, name, logger, refreshSsrData])
265
+
266
+ useEffect(() => {
267
+ if (!socket || cache !== true) {
268
+ return
269
+ }
270
+
271
+ const currentCount = globalSocketState.rooms.get(name) || 0
272
+ globalSocketState.rooms.set(name, currentCount + 1)
273
+
274
+ const pendingTimer = globalSocketState.unsubscribeTimers.get(name)
275
+ if (pendingTimer) {
276
+ clearTimeout(pendingTimer)
277
+ globalSocketState.unsubscribeTimers.delete(name)
278
+ }
279
+
280
+ const requestSubscribeAndVersions = () => {
281
+ const now = Date.now()
282
+ const lastSub = globalSocketState.lastSubscribeEmitted.get(name) || 0
283
+
284
+ if (now - lastSub > 100) {
285
+ globalSocketState.lastSubscribeEmitted.set(name, now)
286
+ logger.verbose(`[miolo-react][ssr][${name}] Socket connected, subscribing`)
287
+ socket.emit("ssr-subscribe", name)
288
+ }
289
+
290
+ if (now - globalSocketState.versionsRequestedAt > 500) {
291
+ globalSocketState.versionsRequestedAt = now
292
+ logger.verbose(`[miolo-react][ssr][${name}] Asking for ssr-versions`)
293
+ socket.emit("ssr-versions")
294
+ }
295
+ }
296
+
297
+ const onRefresh = async (data) => {
298
+ if (data.name !== name) return
299
+
300
+ logger.verbose(
301
+ `[miolo-react][ssr][${name}] ssr-refresh ${JSON.stringify(data)} - my socket id: ${socket.id}`
302
+ )
303
+ if (data.exclude_socket_id && data.exclude_socket_id === socket.id) {
304
+ logger.verbose(
305
+ `[miolo-react][ssr][${name}] ssr-refresh ${data.name} ignored for socketid ${socket.id}`
306
+ )
307
+ return
308
+ }
309
+ if (data.only_socket_id && data.only_socket_id !== socket.id) {
310
+ logger.verbose(
311
+ `[miolo-react][ssr][${name}] ssr-refresh ${data.name} ignored for socketid ${socket.id} (only_socket_id mismatch)`
312
+ )
313
+ return
314
+ }
315
+
316
+ logger.info(
317
+ `[miolo-react][ssr][${name}] ssr-refresh ${data.name}${data.lazy ? " (lazy)" : ""}`
318
+ )
319
+ await handlersRef.current.cacheInvalidate()
320
+
321
+ if (!data.lazy) {
322
+ await handlersRef.current.refreshSsrData()
323
+ } else {
324
+ if (handlersRef.current.refreshSsrDataLazy) {
325
+ handlersRef.current.refreshSsrDataLazy()
326
+ }
327
+ }
328
+ }
329
+
330
+ const onVersions = (versions) => {
331
+ if (handlersRef.current.cacheVersionsCheck) {
332
+ handlersRef.current.cacheVersionsCheck(versions)
333
+ }
334
+ }
335
+
336
+ logger.verbose(`[miolo-react][ssr][${name}] Attaching ssr/cache socket handlers`)
337
+
338
+ if (socket.connected) {
339
+ requestSubscribeAndVersions()
340
+ }
341
+
342
+ socket.on("connect", requestSubscribeAndVersions)
343
+ socket.on("ssr-versions", onVersions)
344
+ socket.on("ssr-refresh", onRefresh)
345
+
346
+ return () => {
347
+ logger.verbose(`[miolo-react][ssr][${name}] Detaching ssr/cache socket handlers`)
348
+
349
+ const count = globalSocketState.rooms.get(name) || 0
350
+ if (count > 0) {
351
+ globalSocketState.rooms.set(name, count - 1)
352
+ if (count - 1 === 0) {
353
+ const timer = setTimeout(() => {
354
+ if ((globalSocketState.rooms.get(name) || 0) === 0) {
355
+ socket.emit("ssr-unsubscribe", name)
356
+ globalSocketState.lastSubscribeEmitted.set(name, 0)
357
+ }
358
+ globalSocketState.unsubscribeTimers.delete(name)
359
+ }, 100)
360
+ globalSocketState.unsubscribeTimers.set(name, timer)
361
+ }
362
+ }
363
+
364
+ socket.off("connect", requestSubscribeAndVersions)
365
+ socket.off("ssr-versions", onVersions)
366
+ socket.off("ssr-refresh", onRefresh)
367
+ }
368
+ }, [name, cache, socket, logger])
369
+
370
+ useOnWindowFocus(
371
+ useCallback(() => {
372
+ if (cache !== true) {
373
+ return
374
+ }
375
+ if (socket === undefined) {
376
+ return
377
+ }
378
+ logger.verbose(
379
+ `[miolo-react][ssr][${name}] Window focused, checking versions (socket id is ${socket.id})`
380
+ )
381
+ const now = Date.now()
382
+ if (now - globalSocketState.versionsRequestedAt > 500) {
383
+ globalSocketState.versionsRequestedAt = now
384
+ socket.emit("ssr-versions")
385
+ }
386
+ }, [name, cache, logger, socket])
387
+ )
39
388
 
40
- return [ssrData, (data) => setSsrData(_maybeModify(data)), refreshSsrData]
389
+ return {
390
+ data: ssrData,
391
+ setData: updateSsrData,
392
+ refresh: refreshSsrData,
393
+ invalidate: cacheInvalidate,
394
+ error,
395
+ ok: error === undefined,
396
+ ready: status === "loaded"
397
+ }
41
398
  }
42
399
 
43
- export {useSsrDataOrReload}
400
+ export { useSsrDataOrReload }
@@ -1,265 +0,0 @@
1
- /**
2
- * miolo-react v3.0.0-beta.23
3
- *
4
- * https://www.afialapis.com/os/miolo
5
- *
6
- * Copyright (c) Donato Lorenzo <donato@afialapis.com>
7
- *
8
- * This source code is licensed under the MIT license found in the
9
- * LICENSE.md file in the root directory of this source tree.
10
- *
11
- * @license MIT
12
- */
13
- /* eslint-disable */
14
- import React, { useContext, useCallback, useState, useEffect } from 'react';
15
- import { miolo_client } from 'miolo-cli';
16
-
17
- var MioloContext = /*#__PURE__*/React.createContext();
18
-
19
- /* eslint react/display-name:0 */
20
- var withMioloContext = BaseComponent => props => {
21
- var context = useContext(MioloContext);
22
- return /*#__PURE__*/React.createElement(BaseComponent, Object.assign({}, props, context));
23
- };
24
-
25
- var useMioloContext = () => useContext(MioloContext);
26
-
27
- function asyncGeneratorStep(n, t, e, r, o, a, c) {
28
- try {
29
- var i = n[a](c),
30
- u = i.value;
31
- } catch (n) {
32
- return void e(n);
33
- }
34
- i.done ? t(u) : Promise.resolve(u).then(r, o);
35
- }
36
- function _asyncToGenerator(n) {
37
- return function () {
38
- var t = this,
39
- e = arguments;
40
- return new Promise(function (r, o) {
41
- var a = n.apply(t, e);
42
- function _next(n) {
43
- asyncGeneratorStep(a, r, o, _next, _throw, "next", n);
44
- }
45
- function _throw(n) {
46
- asyncGeneratorStep(a, r, o, _next, _throw, "throw", n);
47
- }
48
- _next(void 0);
49
- });
50
- };
51
- }
52
- function _defineProperty(e, r, t) {
53
- return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
54
- value: t,
55
- enumerable: true,
56
- configurable: true,
57
- writable: true
58
- }) : e[r] = t, e;
59
- }
60
- function ownKeys(e, r) {
61
- var t = Object.keys(e);
62
- if (Object.getOwnPropertySymbols) {
63
- var o = Object.getOwnPropertySymbols(e);
64
- r && (o = o.filter(function (r) {
65
- return Object.getOwnPropertyDescriptor(e, r).enumerable;
66
- })), t.push.apply(t, o);
67
- }
68
- return t;
69
- }
70
- function _objectSpread2(e) {
71
- for (var r = 1; r < arguments.length; r++) {
72
- var t = null != arguments[r] ? arguments[r] : {};
73
- r % 2 ? ownKeys(Object(t), true).forEach(function (r) {
74
- _defineProperty(e, r, t[r]);
75
- }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
76
- Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
77
- });
78
- }
79
- return e;
80
- }
81
- function _toPrimitive(t, r) {
82
- if ("object" != typeof t || !t) return t;
83
- var e = t[Symbol.toPrimitive];
84
- if (void 0 !== e) {
85
- var i = e.call(t, r);
86
- if ("object" != typeof i) return i;
87
- throw new TypeError("@@toPrimitive must return a primitive value.");
88
- }
89
- return ("string" === r ? String : Number)(t);
90
- }
91
- function _toPropertyKey(t) {
92
- var i = _toPrimitive(t, "string");
93
- return "symbol" == typeof i ? i : i + "";
94
- }
95
-
96
- var _getDataFromWindow = name => {
97
- try {
98
- if (window != undefined) {
99
- var ssr_data = window.__CONTEXT.ssr_data;
100
- if (ssr_data != undefined) {
101
- if (ssr_data[name] != undefined) {
102
- return ssr_data[name];
103
- }
104
- }
105
- }
106
- } catch (e) {}
107
- return undefined;
108
- };
109
- var getSsrDataFromContext = (context, name) => {
110
- var data = undefined;
111
- if ((context === null || context === void 0 ? void 0 : context.ssr_data) != undefined && (context === null || context === void 0 ? void 0 : context.ssr_data[name]) != undefined) {
112
- data = context.ssr_data[name];
113
- } else {
114
- var wdata = _getDataFromWindow(name);
115
- if (wdata != undefined) {
116
- data = wdata;
117
- }
118
- }
119
- return data;
120
- };
121
-
122
- var useSsrDataOrReload = (context, miolo, name, defval, loader, modifier) => {
123
- var _maybeModify = useCallback(value => {
124
- return modifier == undefined ? value : modifier(value);
125
- }, [modifier]);
126
- var ssrDataFromContext = getSsrDataFromContext(context, name);
127
- var [ssrData, setSsrData] = useState(_maybeModify(ssrDataFromContext != undefined ? ssrDataFromContext : defval));
128
- var [needToRefresh, setNeedToRefresh] = useState(ssrDataFromContext == undefined);
129
- var refreshSsrData = useCallback(() => {
130
- if (loader == undefined) {
131
- return;
132
- }
133
- var {
134
- fetcher
135
- } = miolo;
136
- function fetchData() {
137
- return _fetchData.apply(this, arguments);
138
- }
139
- function _fetchData() {
140
- _fetchData = _asyncToGenerator(function* () {
141
- var nSsrData = yield loader(context, fetcher);
142
- setSsrData(_maybeModify(nSsrData));
143
- });
144
- return _fetchData.apply(this, arguments);
145
- }
146
- fetchData();
147
- }, [context, miolo, loader, _maybeModify]);
148
- useEffect(() => {
149
- try {
150
- if (needToRefresh) {
151
- setNeedToRefresh(false);
152
- refreshSsrData();
153
- }
154
- } catch (e) {}
155
- }, [needToRefresh, refreshSsrData]);
156
- return [ssrData, data => setSsrData(_maybeModify(data)), refreshSsrData];
157
- };
158
-
159
- var MioloContextProvider = _ref => {
160
- var {
161
- context,
162
- children
163
- } = _ref;
164
- var [innerContext, setInnerContext] = useState(context);
165
- var [mioloObj, setMioloObj] = useState(miolo_client(context));
166
- useEffect(() => {
167
- setInnerContext(context);
168
- setMioloObj(miolo_client(context));
169
- }, [context]);
170
- var login = useCallback(/*#__PURE__*/function () {
171
- var _ref2 = _asyncToGenerator(function* (credentials) {
172
- var {
173
- fetcher
174
- } = mioloObj;
175
- var {
176
- config
177
- } = innerContext;
178
- var url = config.login_url || '/login';
179
- var resp = yield fetcher.login(url, credentials);
180
- if (resp !== null && resp !== void 0 && resp.data) {
181
- var _resp$data;
182
- if (resp !== null && resp !== void 0 && (_resp$data = resp.data) !== null && _resp$data !== void 0 && _resp$data.authenticated) {
183
- setInnerContext(current => {
184
- return _objectSpread2(_objectSpread2({}, current), resp === null || resp === void 0 ? void 0 : resp.data);
185
- });
186
- }
187
- return resp === null || resp === void 0 ? void 0 : resp.data;
188
- }
189
- return {};
190
- });
191
- return function (_x) {
192
- return _ref2.apply(this, arguments);
193
- };
194
- }(), [innerContext, mioloObj]);
195
- var logout = useCallback(/*#__PURE__*/_asyncToGenerator(function* () {
196
- var {
197
- fetcher
198
- } = mioloObj;
199
- var {
200
- config
201
- } = innerContext;
202
- var url = config.logout_url || '/logout';
203
- yield fetcher.logout(url);
204
- // resp.redirected= true
205
-
206
- setInnerContext(current => {
207
- return _objectSpread2(_objectSpread2({}, current), {}, {
208
- user: undefined,
209
- authenticated: false
210
- });
211
- });
212
- return {
213
- user: undefined,
214
- authenticated: false
215
- };
216
- }), [innerContext, mioloObj]);
217
- var updateUser = useCallback(user => {
218
- setInnerContext(current => {
219
- return _objectSpread2(_objectSpread2({}, current), {}, {
220
- user
221
- });
222
- });
223
- }, []);
224
- var useSsrData = (name, defval, loader, modifier) => {
225
- return useSsrDataOrReload(innerContext, mioloObj, name, defval, loader, modifier);
226
- };
227
- return /*#__PURE__*/React.createElement(MioloContext.Provider, {
228
- value: {
229
- //context: innerContext,
230
- //setContext: setInnerContext,
231
- //miolo: mioloObj,
232
- user: innerContext.user,
233
- updateUser,
234
- authenticated: innerContext.authenticated,
235
- fetcher: mioloObj.fetcher,
236
- //socket: mioloObj.socket,
237
- login,
238
- logout,
239
- useSsrData
240
- }
241
- }, children);
242
- };
243
-
244
- var AppBrowser = _ref => {
245
- var {
246
- children
247
- } = _ref;
248
- var context = typeof window !== 'undefined' && window.__CONTEXT ? window.__CONTEXT : {};
249
- return /*#__PURE__*/React.createElement(MioloContextProvider, {
250
- context: context
251
- }, children);
252
- };
253
-
254
- var AppServer = _ref => {
255
- var {
256
- context,
257
- children
258
- } = _ref;
259
- return /*#__PURE__*/React.createElement(MioloContextProvider, {
260
- context: context || {}
261
- }, children);
262
- };
263
-
264
- export { AppBrowser, AppServer, useMioloContext, withMioloContext };
265
- //# sourceMappingURL=miolo-react.mjs.map