@flagship.io/react-sdk 5.2.0 → 5.2.2
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/dist/edge/src/FlagshipContext.js +6 -4
- package/dist/edge/src/FlagshipHooks.js +79 -53
- package/dist/edge/src/FlagshipProvider.js +141 -101
- package/dist/edge/src/hooks.js +42 -0
- package/dist/edge/src/sdkVersion.js +1 -1
- package/dist/index.node.cjs +291 -171
- package/dist/index.node.cjs.map +1 -1
- package/dist/src/FlagshipContext.d.ts +1 -1
- package/dist/src/FlagshipContext.js +6 -4
- package/dist/src/FlagshipHooks.js +79 -53
- package/dist/src/FlagshipProvider.js +141 -101
- package/dist/src/hooks.d.ts +6 -0
- package/dist/src/hooks.js +42 -0
- package/dist/src/sdkVersion.d.ts +1 -1
- package/dist/src/sdkVersion.js +1 -1
- package/dist/src/type.d.ts +2 -0
- package/package.json +2 -2
package/dist/index.node.cjs
CHANGED
|
@@ -97,11 +97,15 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
97
97
|
/* harmony export */ });
|
|
98
98
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
|
99
99
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
100
|
-
|
|
100
|
+
/* harmony import */ var _flagship_io_js_sdk__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @flagship.io/js-sdk */ "@flagship.io/js-sdk");
|
|
101
|
+
/* harmony import */ var _flagship_io_js_sdk__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_flagship_io_js_sdk__WEBPACK_IMPORTED_MODULE_1__);
|
|
102
|
+
"use client";
|
|
103
|
+
|
|
101
104
|
|
|
102
105
|
|
|
103
106
|
const initStat = {
|
|
104
|
-
isInitializing: true
|
|
107
|
+
isInitializing: true,
|
|
108
|
+
sdkStatus: _flagship_io_js_sdk__WEBPACK_IMPORTED_MODULE_1__.FSSdkStatus.SDK_NOT_INITIALIZED
|
|
105
109
|
};
|
|
106
110
|
const FlagshipContext = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({
|
|
107
111
|
state: {
|
|
@@ -126,12 +130,13 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
126
130
|
/* harmony import */ var core_js_modules_es_regexp_flags_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_flags_js__WEBPACK_IMPORTED_MODULE_0__);
|
|
127
131
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "react");
|
|
128
132
|
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);
|
|
129
|
-
/* harmony import */ var
|
|
130
|
-
/* harmony import */ var
|
|
133
|
+
/* harmony import */ var _deps__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./deps */ "@flagship.io/js-sdk");
|
|
134
|
+
/* harmony import */ var _deps__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_deps__WEBPACK_IMPORTED_MODULE_7__);
|
|
131
135
|
/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./constants */ "./src/constants.ts");
|
|
132
136
|
/* harmony import */ var _FlagshipContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./FlagshipContext */ "./src/FlagshipContext.tsx");
|
|
133
137
|
/* harmony import */ var _FSFlag__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./FSFlag */ "./src/FSFlag.ts");
|
|
134
138
|
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils */ "./src/utils.ts");
|
|
139
|
+
/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./hooks */ "./src/hooks.ts");
|
|
135
140
|
'use client';
|
|
136
141
|
|
|
137
142
|
|
|
@@ -142,6 +147,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
142
147
|
|
|
143
148
|
|
|
144
149
|
|
|
150
|
+
|
|
145
151
|
/**
|
|
146
152
|
* This hook returns a flag object by its key. If no flag match the given key an empty flag will be returned.
|
|
147
153
|
* @param key
|
|
@@ -186,108 +192,126 @@ const useFlagship = () => {
|
|
|
186
192
|
visitor,
|
|
187
193
|
config
|
|
188
194
|
} = state;
|
|
195
|
+
const visitorRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_6__.useLatestRef)(visitor);
|
|
196
|
+
const configRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_6__.useLatestRef)(config);
|
|
197
|
+
const stateRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_6__.useLatestRef)(state);
|
|
198
|
+
const visitorContext = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(() => ({
|
|
199
|
+
...(visitor === null || visitor === void 0 ? void 0 : visitor.context)
|
|
200
|
+
}), [JSON.stringify(visitor === null || visitor === void 0 ? void 0 : visitor.context)]);
|
|
189
201
|
const fsUpdateContext = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(context => {
|
|
190
202
|
handleContextChange({
|
|
191
|
-
config,
|
|
192
|
-
visitor,
|
|
193
|
-
updateFunction: () =>
|
|
203
|
+
config: configRef.current,
|
|
204
|
+
visitor: visitorRef.current,
|
|
205
|
+
updateFunction: () => {
|
|
206
|
+
var _visitorRef$current;
|
|
207
|
+
return (_visitorRef$current = visitorRef.current) === null || _visitorRef$current === void 0 ? void 0 : _visitorRef$current.updateContext(context);
|
|
208
|
+
},
|
|
194
209
|
functionName: 'updateContext'
|
|
195
210
|
});
|
|
196
|
-
}, [
|
|
211
|
+
}, []);
|
|
197
212
|
const fsClearContext = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(() => {
|
|
198
213
|
handleContextChange({
|
|
199
|
-
config,
|
|
200
|
-
visitor,
|
|
201
|
-
updateFunction: () =>
|
|
214
|
+
config: configRef.current,
|
|
215
|
+
visitor: visitorRef.current,
|
|
216
|
+
updateFunction: () => {
|
|
217
|
+
var _visitorRef$current2;
|
|
218
|
+
return (_visitorRef$current2 = visitorRef.current) === null || _visitorRef$current2 === void 0 ? void 0 : _visitorRef$current2.clearContext();
|
|
219
|
+
},
|
|
202
220
|
functionName: 'cleanContext'
|
|
203
221
|
});
|
|
204
|
-
}, [
|
|
222
|
+
}, []);
|
|
205
223
|
const fsAuthenticate = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(visitorId => {
|
|
206
224
|
const functionName = 'authenticate';
|
|
207
|
-
|
|
208
|
-
|
|
225
|
+
const currentVisitor = visitorRef.current;
|
|
226
|
+
if (!currentVisitor) {
|
|
227
|
+
(0,_utils__WEBPACK_IMPORTED_MODULE_4__.logError)(configRef.current, _constants__WEBPACK_IMPORTED_MODULE_5__.noVisitorMessage, functionName);
|
|
209
228
|
return;
|
|
210
229
|
}
|
|
211
|
-
const originalVisitorId =
|
|
212
|
-
|
|
230
|
+
const originalVisitorId = currentVisitor.visitorId;
|
|
231
|
+
currentVisitor.authenticate(visitorId);
|
|
213
232
|
if (originalVisitorId !== visitorId) {
|
|
214
|
-
|
|
233
|
+
currentVisitor.fetchFlags();
|
|
215
234
|
}
|
|
216
|
-
}, [
|
|
235
|
+
}, []);
|
|
217
236
|
const fsUnauthenticate = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(() => {
|
|
218
237
|
const functionName = 'unauthenticate';
|
|
219
|
-
|
|
220
|
-
|
|
238
|
+
const currentVisitor = visitorRef.current;
|
|
239
|
+
if (!currentVisitor) {
|
|
240
|
+
(0,_utils__WEBPACK_IMPORTED_MODULE_4__.logError)(configRef.current, _constants__WEBPACK_IMPORTED_MODULE_5__.noVisitorMessage, functionName);
|
|
221
241
|
return;
|
|
222
242
|
}
|
|
223
|
-
const originalVisitorId =
|
|
224
|
-
|
|
225
|
-
if (originalVisitorId !==
|
|
226
|
-
|
|
243
|
+
const originalVisitorId = currentVisitor.visitorId;
|
|
244
|
+
currentVisitor.unauthenticate();
|
|
245
|
+
if (originalVisitorId !== currentVisitor.visitorId) {
|
|
246
|
+
currentVisitor.fetchFlags();
|
|
227
247
|
}
|
|
228
|
-
}, [
|
|
248
|
+
}, []);
|
|
229
249
|
const fsSendHit = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(hit => {
|
|
230
250
|
const functionName = 'sendHit';
|
|
231
|
-
|
|
232
|
-
|
|
251
|
+
const currentVisitor = visitorRef.current;
|
|
252
|
+
if (!currentVisitor) {
|
|
253
|
+
(0,_utils__WEBPACK_IMPORTED_MODULE_4__.logError)(configRef.current, _constants__WEBPACK_IMPORTED_MODULE_5__.noVisitorMessage, functionName);
|
|
233
254
|
return Promise.resolve();
|
|
234
255
|
}
|
|
235
256
|
if (Array.isArray(hit)) {
|
|
236
|
-
return
|
|
257
|
+
return currentVisitor.sendHits(hit);
|
|
237
258
|
}
|
|
238
|
-
return
|
|
239
|
-
}, [
|
|
259
|
+
return currentVisitor.sendHit(hit);
|
|
260
|
+
}, []);
|
|
240
261
|
const getFlag = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(key => {
|
|
241
|
-
|
|
242
|
-
|
|
262
|
+
const currentVisitor = visitorRef.current;
|
|
263
|
+
if (!currentVisitor) {
|
|
264
|
+
return new _FSFlag__WEBPACK_IMPORTED_MODULE_3__.FSFlag(key, stateRef.current);
|
|
243
265
|
}
|
|
244
|
-
return
|
|
245
|
-
}, [
|
|
266
|
+
return currentVisitor.getFlag(key);
|
|
267
|
+
}, []);
|
|
246
268
|
const fetchFlags = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(async () => {
|
|
247
|
-
|
|
248
|
-
|
|
269
|
+
const currentVisitor = visitorRef.current;
|
|
270
|
+
if (!currentVisitor) {
|
|
271
|
+
(0,_utils__WEBPACK_IMPORTED_MODULE_4__.logWarn)(configRef.current, _constants__WEBPACK_IMPORTED_MODULE_5__.noVisitorMessage, 'fetchFlags');
|
|
249
272
|
return Promise.resolve();
|
|
250
273
|
}
|
|
251
|
-
return
|
|
252
|
-
}, [
|
|
274
|
+
return currentVisitor.fetchFlags();
|
|
275
|
+
}, []);
|
|
253
276
|
const setConsent = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(hasConsented => {
|
|
254
|
-
|
|
255
|
-
|
|
277
|
+
const currentVisitor = visitorRef.current;
|
|
278
|
+
if (!currentVisitor) {
|
|
279
|
+
(0,_utils__WEBPACK_IMPORTED_MODULE_4__.logWarn)(configRef.current, _constants__WEBPACK_IMPORTED_MODULE_5__.noVisitorMessage, 'setConsent');
|
|
256
280
|
return;
|
|
257
281
|
}
|
|
258
|
-
|
|
259
|
-
}, [
|
|
282
|
+
currentVisitor.setConsent(hasConsented);
|
|
283
|
+
}, []);
|
|
260
284
|
const close = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(() => {
|
|
261
|
-
return
|
|
285
|
+
return _deps__WEBPACK_IMPORTED_MODULE_7__.Flagship.close();
|
|
262
286
|
}, []);
|
|
263
287
|
const getFlags = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(() => {
|
|
264
|
-
|
|
265
|
-
|
|
288
|
+
const currentVisitor = visitorRef.current;
|
|
289
|
+
if (!currentVisitor) {
|
|
290
|
+
var _stateRef$current$fla;
|
|
266
291
|
const flags = new Map();
|
|
267
|
-
(
|
|
268
|
-
flags.set(key, new _FSFlag__WEBPACK_IMPORTED_MODULE_3__.FSFlag(key,
|
|
292
|
+
(_stateRef$current$fla = stateRef.current.flags) === null || _stateRef$current$fla === void 0 || _stateRef$current$fla.forEach((flag, key) => {
|
|
293
|
+
flags.set(key, new _FSFlag__WEBPACK_IMPORTED_MODULE_3__.FSFlag(key, stateRef.current));
|
|
269
294
|
});
|
|
270
|
-
return new
|
|
295
|
+
return new _deps__WEBPACK_IMPORTED_MODULE_7__.FSFlagCollection({
|
|
271
296
|
flags
|
|
272
297
|
});
|
|
273
298
|
}
|
|
274
|
-
return
|
|
275
|
-
}, [
|
|
299
|
+
return currentVisitor.getFlags();
|
|
300
|
+
}, []);
|
|
276
301
|
const collectEAIEventsAsync = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)(async (...args) => {
|
|
277
|
-
|
|
302
|
+
const currentVisitor = visitorRef.current;
|
|
303
|
+
if (!currentVisitor) {
|
|
278
304
|
return;
|
|
279
305
|
}
|
|
280
|
-
return
|
|
281
|
-
}, [
|
|
306
|
+
return currentVisitor.collectEAIEventsAsync(...args);
|
|
307
|
+
}, []);
|
|
282
308
|
return (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)(() => ({
|
|
283
309
|
visitorId: visitor === null || visitor === void 0 ? void 0 : visitor.visitorId,
|
|
284
310
|
anonymousId: visitor === null || visitor === void 0 ? void 0 : visitor.anonymousId,
|
|
285
|
-
context:
|
|
286
|
-
...(visitor === null || visitor === void 0 ? void 0 : visitor.context)
|
|
287
|
-
},
|
|
311
|
+
context: visitorContext,
|
|
288
312
|
hasConsented: visitor === null || visitor === void 0 ? void 0 : visitor.hasConsented,
|
|
289
|
-
sdkStatus:
|
|
290
|
-
flagsStatus:
|
|
313
|
+
sdkStatus: state.sdkStatus,
|
|
314
|
+
flagsStatus: state.flagsStatus,
|
|
291
315
|
setConsent,
|
|
292
316
|
updateContext: fsUpdateContext,
|
|
293
317
|
clearContext: fsClearContext,
|
|
@@ -299,7 +323,7 @@ const useFlagship = () => {
|
|
|
299
323
|
close,
|
|
300
324
|
getFlags,
|
|
301
325
|
collectEAIEventsAsync
|
|
302
|
-
}), [visitor, setConsent, fsUpdateContext, fsClearContext, fsAuthenticate, fsUnauthenticate, fsSendHit, getFlag, fetchFlags, close, getFlags, collectEAIEventsAsync]);
|
|
326
|
+
}), [visitor === null || visitor === void 0 ? void 0 : visitor.visitorId, visitor === null || visitor === void 0 ? void 0 : visitor.anonymousId, visitor === null || visitor === void 0 ? void 0 : visitor.hasConsented, visitorContext, state.sdkStatus, state.flagsStatus, setConsent, fsUpdateContext, fsClearContext, fsAuthenticate, fsUnauthenticate, fsSendHit, getFlag, fetchFlags, close, getFlags, collectEAIEventsAsync]);
|
|
303
327
|
};
|
|
304
328
|
|
|
305
329
|
/***/ }),
|
|
@@ -319,9 +343,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
319
343
|
/* harmony import */ var _deps__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./deps */ "@flagship.io/js-sdk");
|
|
320
344
|
/* harmony import */ var _deps__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_deps__WEBPACK_IMPORTED_MODULE_1__);
|
|
321
345
|
/* harmony import */ var _FlagshipContext__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./FlagshipContext */ "./src/FlagshipContext.tsx");
|
|
322
|
-
/* harmony import */ var
|
|
346
|
+
/* harmony import */ var _internalType__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./internalType */ "./src/internalType.ts");
|
|
323
347
|
/* harmony import */ var _sdkVersion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./sdkVersion */ "./src/sdkVersion.ts");
|
|
324
348
|
/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ "./src/utils.ts");
|
|
349
|
+
/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hooks */ "./src/hooks.ts");
|
|
325
350
|
"use client";
|
|
326
351
|
|
|
327
352
|
|
|
@@ -330,6 +355,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
330
355
|
|
|
331
356
|
|
|
332
357
|
|
|
358
|
+
|
|
333
359
|
function FlagshipProvider({
|
|
334
360
|
children,
|
|
335
361
|
envId,
|
|
@@ -350,174 +376,207 @@ function FlagshipProvider({
|
|
|
350
376
|
shouldSaveInstance,
|
|
351
377
|
...props
|
|
352
378
|
}) {
|
|
353
|
-
|
|
354
|
-
const
|
|
355
|
-
const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({
|
|
379
|
+
const flags = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => (0,_utils__WEBPACK_IMPORTED_MODULE_3__.extractFlagsMap)(initialFlagsData, initialCampaigns), [initialFlagsData, initialCampaigns]);
|
|
380
|
+
const [flagshipState, setFlagshipState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({
|
|
356
381
|
..._FlagshipContext__WEBPACK_IMPORTED_MODULE_4__.initStat,
|
|
357
382
|
flags,
|
|
358
383
|
hasVisitorData: !!visitorData
|
|
359
384
|
});
|
|
360
385
|
const [lastModified, setLastModified] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();
|
|
361
|
-
const
|
|
362
|
-
|
|
363
|
-
|
|
386
|
+
const flagshipVisitorRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
|
|
387
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
388
|
+
flagshipVisitorRef.current = flagshipState.visitor;
|
|
389
|
+
}, [flagshipState.visitor]);
|
|
390
|
+
const propsRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_5__.useLatestRef)(props);
|
|
391
|
+
const configRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_5__.useLatestRef)({
|
|
392
|
+
fetchNow,
|
|
393
|
+
hitDeduplicationTime,
|
|
394
|
+
language,
|
|
395
|
+
sdkVersion
|
|
396
|
+
});
|
|
397
|
+
const callbacksRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_5__.useLatestRef)({
|
|
398
|
+
onSdkStatusChanged,
|
|
399
|
+
onBucketingUpdated,
|
|
400
|
+
onFlagsStatusChanged
|
|
401
|
+
});
|
|
402
|
+
const visitorDataMemo = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => visitorData, [visitorData === null || visitorData === void 0 ? void 0 : visitorData.id, visitorData === null || visitorData === void 0 ? void 0 : visitorData.isAuthenticated, visitorData === null || visitorData === void 0 ? void 0 : visitorData.hasConsented, JSON.stringify(visitorData === null || visitorData === void 0 ? void 0 : visitorData.context)]);
|
|
364
403
|
|
|
365
404
|
// #region functions
|
|
366
405
|
|
|
367
|
-
const
|
|
368
|
-
if (onBucketingUpdated) {
|
|
369
|
-
onBucketingUpdated(lastUpdate);
|
|
406
|
+
const handleBucketingUpdate = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(lastUpdate => {
|
|
407
|
+
if (callbacksRef.current.onBucketingUpdated) {
|
|
408
|
+
callbacksRef.current.onBucketingUpdated(lastUpdate);
|
|
370
409
|
}
|
|
371
410
|
setLastModified(lastUpdate);
|
|
372
|
-
};
|
|
373
|
-
const
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
break;
|
|
382
|
-
case _deps__WEBPACK_IMPORTED_MODULE_1__.FSSdkStatus.SDK_NOT_INITIALIZED:
|
|
383
|
-
setState(prev => ({
|
|
384
|
-
...prev,
|
|
385
|
-
config: _deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.getConfig(),
|
|
386
|
-
isInitializing: false
|
|
387
|
-
}));
|
|
388
|
-
break;
|
|
389
|
-
}
|
|
390
|
-
};
|
|
391
|
-
const initSdk = () => {
|
|
392
|
-
_deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.start(envId, apiKey, {
|
|
393
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
394
|
-
decisionMode: decisionMode,
|
|
395
|
-
fetchNow,
|
|
396
|
-
onSdkStatusChanged: statusChanged,
|
|
397
|
-
onBucketingUpdated: onBucketingLastModified,
|
|
398
|
-
hitDeduplicationTime,
|
|
399
|
-
language,
|
|
400
|
-
sdkVersion,
|
|
401
|
-
...props
|
|
411
|
+
}, []);
|
|
412
|
+
const handleFlagsStatusChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({
|
|
413
|
+
status,
|
|
414
|
+
reason
|
|
415
|
+
}) => {
|
|
416
|
+
var _callbacksRef$current, _callbacksRef$current2;
|
|
417
|
+
(_callbacksRef$current = (_callbacksRef$current2 = callbacksRef.current).onFlagsStatusChanged) === null || _callbacksRef$current === void 0 || _callbacksRef$current.call(_callbacksRef$current2, {
|
|
418
|
+
status,
|
|
419
|
+
reason
|
|
402
420
|
});
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
421
|
+
setFlagshipState(currentState => ({
|
|
422
|
+
...currentState,
|
|
423
|
+
flagsStatus: {
|
|
424
|
+
status,
|
|
425
|
+
reason
|
|
426
|
+
}
|
|
427
|
+
}));
|
|
428
|
+
}, []);
|
|
429
|
+
const initializeVisitorState = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(param => {
|
|
430
|
+
setFlagshipState(currentState => ({
|
|
406
431
|
...currentState,
|
|
407
432
|
visitor: param.fsVisitor,
|
|
408
433
|
config: _deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.getConfig(),
|
|
409
434
|
isInitializing: false,
|
|
410
|
-
hasVisitorData: !!
|
|
435
|
+
hasVisitorData: !!visitorDataMemo,
|
|
436
|
+
sdkStatus: param.sdkStatus
|
|
411
437
|
}));
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
415
|
-
const onVisitorReady = (fsVisitor, error) => {
|
|
438
|
+
}, [!!visitorDataMemo]);
|
|
439
|
+
const handleVisitorReady = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((fsVisitor, error, sdkStatus) => {
|
|
416
440
|
if (error) {
|
|
417
441
|
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.logError)(_deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.getConfig(), error.message || error, "onReady");
|
|
418
442
|
}
|
|
419
|
-
|
|
420
|
-
fsVisitor
|
|
443
|
+
initializeVisitorState({
|
|
444
|
+
fsVisitor,
|
|
445
|
+
sdkStatus
|
|
421
446
|
});
|
|
422
|
-
};
|
|
423
|
-
const
|
|
424
|
-
if (!
|
|
447
|
+
}, [initializeVisitorState]);
|
|
448
|
+
const createFlagshipVisitor = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(sdkStatus => {
|
|
449
|
+
if (!visitorDataMemo) {
|
|
425
450
|
return;
|
|
426
451
|
}
|
|
427
452
|
const fsVisitor = _deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.newVisitor({
|
|
428
|
-
visitorId:
|
|
429
|
-
context:
|
|
430
|
-
isAuthenticated:
|
|
431
|
-
hasConsented:
|
|
453
|
+
visitorId: visitorDataMemo.id,
|
|
454
|
+
context: visitorDataMemo.context,
|
|
455
|
+
isAuthenticated: visitorDataMemo.isAuthenticated,
|
|
456
|
+
hasConsented: visitorDataMemo.hasConsented,
|
|
432
457
|
initialCampaigns,
|
|
433
458
|
initialFlagsData,
|
|
434
|
-
onFlagsStatusChanged,
|
|
459
|
+
onFlagsStatusChanged: handleFlagsStatusChange,
|
|
435
460
|
shouldSaveInstance
|
|
436
461
|
});
|
|
437
462
|
fsVisitor === null || fsVisitor === void 0 || fsVisitor.on("ready", error => {
|
|
438
|
-
|
|
463
|
+
handleVisitorReady(fsVisitor, error, sdkStatus);
|
|
439
464
|
});
|
|
440
465
|
if (!fetchNow) {
|
|
441
|
-
|
|
442
|
-
fsVisitor
|
|
466
|
+
initializeVisitorState({
|
|
467
|
+
fsVisitor,
|
|
468
|
+
sdkStatus
|
|
443
469
|
});
|
|
444
470
|
}
|
|
445
|
-
};
|
|
446
|
-
|
|
447
|
-
if (
|
|
448
|
-
|
|
471
|
+
}, [initialCampaigns, initialFlagsData, handleFlagsStatusChange, shouldSaveInstance, fetchNow, handleVisitorReady, initializeVisitorState, visitorDataMemo]);
|
|
472
|
+
const handleSdkStatusChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(sdkStatus => {
|
|
473
|
+
if (callbacksRef.current.onSdkStatusChanged) {
|
|
474
|
+
callbacksRef.current.onSdkStatusChanged(sdkStatus);
|
|
449
475
|
}
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
476
|
+
switch (sdkStatus) {
|
|
477
|
+
case _deps__WEBPACK_IMPORTED_MODULE_1__.FSSdkStatus.SDK_PANIC:
|
|
478
|
+
case _deps__WEBPACK_IMPORTED_MODULE_1__.FSSdkStatus.SDK_INITIALIZED:
|
|
479
|
+
createFlagshipVisitor(sdkStatus);
|
|
480
|
+
break;
|
|
481
|
+
case _deps__WEBPACK_IMPORTED_MODULE_1__.FSSdkStatus.SDK_NOT_INITIALIZED:
|
|
482
|
+
setFlagshipState(prev => ({
|
|
483
|
+
...prev,
|
|
484
|
+
config: _deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.getConfig(),
|
|
485
|
+
isInitializing: false,
|
|
486
|
+
sdkStatus
|
|
487
|
+
}));
|
|
488
|
+
break;
|
|
455
489
|
}
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
490
|
+
}, [createFlagshipVisitor]);
|
|
491
|
+
const handleSdkStatusChangeRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_5__.useLatestRef)(handleSdkStatusChange);
|
|
492
|
+
const handleBucketingUpdateRef = (0,_hooks__WEBPACK_IMPORTED_MODULE_5__.useLatestRef)(handleBucketingUpdate);
|
|
493
|
+
const initializeFlagshipSdk = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {
|
|
494
|
+
_deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.start(envId, apiKey, {
|
|
495
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
496
|
+
decisionMode: decisionMode,
|
|
497
|
+
fetchNow: configRef.current.fetchNow,
|
|
498
|
+
onSdkStatusChanged: (...args) => handleSdkStatusChangeRef.current(...args),
|
|
499
|
+
onBucketingUpdated: (...args) => handleBucketingUpdateRef.current(...args),
|
|
500
|
+
hitDeduplicationTime: configRef.current.hitDeduplicationTime,
|
|
501
|
+
language: configRef.current.language,
|
|
502
|
+
sdkVersion: configRef.current.sdkVersion,
|
|
503
|
+
...propsRef.current
|
|
504
|
+
});
|
|
505
|
+
}, [envId, apiKey, decisionMode]);
|
|
506
|
+
const updateFlagshipVisitor = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => {
|
|
507
|
+
if (!visitorDataMemo || _deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.getStatus() !== _deps__WEBPACK_IMPORTED_MODULE_1__.FSSdkStatus.SDK_INITIALIZED) {
|
|
508
|
+
return;
|
|
459
509
|
}
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
510
|
+
const currentVisitor = flagshipVisitorRef.current;
|
|
511
|
+
if ((0,_hooks__WEBPACK_IMPORTED_MODULE_5__.shouldRecreateVisitor)(currentVisitor, visitorDataMemo.id, visitorDataMemo.isAuthenticated)) {
|
|
512
|
+
currentVisitor === null || currentVisitor === void 0 || currentVisitor.cleanup();
|
|
513
|
+
createFlagshipVisitor(_deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.getStatus());
|
|
514
|
+
return;
|
|
464
515
|
}
|
|
465
|
-
|
|
466
|
-
|
|
516
|
+
|
|
517
|
+
// Update existing visitor
|
|
518
|
+
if (currentVisitor) {
|
|
519
|
+
(0,_hooks__WEBPACK_IMPORTED_MODULE_5__.updateVisitorData)(currentVisitor, visitorDataMemo.id, visitorDataMemo.context, visitorDataMemo.hasConsented, visitorDataMemo.isAuthenticated);
|
|
467
520
|
}
|
|
468
|
-
|
|
469
|
-
}
|
|
521
|
+
}, [createFlagshipVisitor, visitorDataMemo]);
|
|
470
522
|
|
|
471
523
|
// #endregion
|
|
472
524
|
|
|
473
525
|
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.useNonInitialEffect)(() => {
|
|
474
526
|
if (fetchFlagsOnBucketingUpdated) {
|
|
475
|
-
var
|
|
476
|
-
(
|
|
527
|
+
var _flagshipVisitorRef$c;
|
|
528
|
+
(_flagshipVisitorRef$c = flagshipVisitorRef.current) === null || _flagshipVisitorRef$c === void 0 || _flagshipVisitorRef$c.fetchFlags();
|
|
477
529
|
}
|
|
478
|
-
}, [lastModified]);
|
|
530
|
+
}, [lastModified, fetchFlagsOnBucketingUpdated]);
|
|
479
531
|
(0,_utils__WEBPACK_IMPORTED_MODULE_3__.useNonInitialEffect)(() => {
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
}, [JSON.stringify(visitorData)]);
|
|
532
|
+
updateFlagshipVisitor();
|
|
533
|
+
}, [updateFlagshipVisitor]);
|
|
483
534
|
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
484
|
-
|
|
485
|
-
}, [
|
|
486
|
-
const handleDisplay = () => {
|
|
487
|
-
const isFirstInit = !state.visitor;
|
|
488
|
-
if (state.isInitializing && loadingComponent && isFirstInit && fetchNow) {
|
|
489
|
-
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, loadingComponent);
|
|
490
|
-
}
|
|
491
|
-
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, children);
|
|
492
|
-
};
|
|
535
|
+
initializeFlagshipSdk();
|
|
536
|
+
}, [initializeFlagshipSdk]);
|
|
493
537
|
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
494
|
-
var _window, _window$addEventListe;
|
|
495
|
-
(_window = window) === null || _window === void 0 || (_window$addEventListe = _window.addEventListener) === null || _window$addEventListe === void 0 || _window$addEventListe.call(_window, _internalType__WEBPACK_IMPORTED_MODULE_5__.INTERNAL_EVENTS.FsTriggerRendering, onVariationsForced);
|
|
496
538
|
return () => {
|
|
497
|
-
var
|
|
498
|
-
|
|
539
|
+
var _flagshipVisitorRef$c2;
|
|
540
|
+
(_flagshipVisitorRef$c2 = flagshipVisitorRef.current) === null || _flagshipVisitorRef$c2 === void 0 || _flagshipVisitorRef$c2.cleanup();
|
|
541
|
+
_deps__WEBPACK_IMPORTED_MODULE_1__.Flagship.close();
|
|
499
542
|
};
|
|
500
|
-
}, [
|
|
501
|
-
const
|
|
543
|
+
}, []);
|
|
544
|
+
const handleDisplay = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => {
|
|
545
|
+
const isFirstInit = !flagshipState.visitor;
|
|
546
|
+
if (flagshipState.isInitializing && loadingComponent && isFirstInit && fetchNow) {
|
|
547
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, loadingComponent);
|
|
548
|
+
}
|
|
549
|
+
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, children);
|
|
550
|
+
}, [flagshipState.isInitializing, flagshipState.visitor, loadingComponent, fetchNow, children]);
|
|
551
|
+
const handleForcedVariations = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e => {
|
|
502
552
|
const {
|
|
503
553
|
detail
|
|
504
554
|
} = e;
|
|
505
555
|
if (detail.forcedReFetchFlags) {
|
|
506
|
-
var
|
|
507
|
-
(
|
|
556
|
+
var _flagshipVisitorRef$c3;
|
|
557
|
+
(_flagshipVisitorRef$c3 = flagshipVisitorRef.current) === null || _flagshipVisitorRef$c3 === void 0 || _flagshipVisitorRef$c3.fetchFlags();
|
|
508
558
|
} else {
|
|
509
|
-
|
|
559
|
+
setFlagshipState(state => ({
|
|
510
560
|
...state,
|
|
511
561
|
toggleForcedVariations: !state.toggleForcedVariations
|
|
512
562
|
}));
|
|
513
563
|
}
|
|
514
|
-
};
|
|
564
|
+
}, []);
|
|
565
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
566
|
+
var _window, _window$addEventListe;
|
|
567
|
+
(_window = window) === null || _window === void 0 || (_window$addEventListe = _window.addEventListener) === null || _window$addEventListe === void 0 || _window$addEventListe.call(_window, _internalType__WEBPACK_IMPORTED_MODULE_6__.INTERNAL_EVENTS.FsTriggerRendering, handleForcedVariations);
|
|
568
|
+
return () => {
|
|
569
|
+
var _window2, _window2$removeEventL;
|
|
570
|
+
return (_window2 = window) === null || _window2 === void 0 || (_window2$removeEventL = _window2.removeEventListener) === null || _window2$removeEventL === void 0 ? void 0 : _window2$removeEventL.call(_window2, _internalType__WEBPACK_IMPORTED_MODULE_6__.INTERNAL_EVENTS.FsTriggerRendering, handleForcedVariations);
|
|
571
|
+
};
|
|
572
|
+
}, [handleForcedVariations]);
|
|
573
|
+
const contextValue = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => ({
|
|
574
|
+
state: flagshipState,
|
|
575
|
+
setState: setFlagshipState
|
|
576
|
+
}), [flagshipState]);
|
|
515
577
|
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_FlagshipContext__WEBPACK_IMPORTED_MODULE_4__.FlagshipContext.Provider, {
|
|
516
|
-
value:
|
|
517
|
-
|
|
518
|
-
setState
|
|
519
|
-
}
|
|
520
|
-
}, handleDisplay());
|
|
578
|
+
value: contextValue
|
|
579
|
+
}, handleDisplay);
|
|
521
580
|
}
|
|
522
581
|
|
|
523
582
|
/***/ }),
|
|
@@ -662,6 +721,67 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
662
721
|
/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);
|
|
663
722
|
|
|
664
723
|
|
|
724
|
+
/***/ }),
|
|
725
|
+
|
|
726
|
+
/***/ "./src/hooks.ts":
|
|
727
|
+
/*!**********************!*\
|
|
728
|
+
!*** ./src/hooks.ts ***!
|
|
729
|
+
\**********************/
|
|
730
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
731
|
+
|
|
732
|
+
__webpack_require__.r(__webpack_exports__);
|
|
733
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
734
|
+
/* harmony export */ getAuthenticationAction: () => (/* binding */ getAuthenticationAction),
|
|
735
|
+
/* harmony export */ shouldRecreateVisitor: () => (/* binding */ shouldRecreateVisitor),
|
|
736
|
+
/* harmony export */ shouldUpdateConsent: () => (/* binding */ shouldUpdateConsent),
|
|
737
|
+
/* harmony export */ updateVisitorData: () => (/* binding */ updateVisitorData),
|
|
738
|
+
/* harmony export */ useLatestRef: () => (/* binding */ useLatestRef)
|
|
739
|
+
/* harmony export */ });
|
|
740
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
|
|
741
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
|
|
742
|
+
'use client';
|
|
743
|
+
|
|
744
|
+
|
|
745
|
+
function useLatestRef(value) {
|
|
746
|
+
const ref = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(value);
|
|
747
|
+
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
|
|
748
|
+
ref.current = value;
|
|
749
|
+
}, [value]);
|
|
750
|
+
return ref;
|
|
751
|
+
}
|
|
752
|
+
function shouldRecreateVisitor(currentVisitor, visitorId, isAuthenticated) {
|
|
753
|
+
if (!currentVisitor) {
|
|
754
|
+
return true;
|
|
755
|
+
}
|
|
756
|
+
const hasIdChanged = currentVisitor.visitorId !== visitorId;
|
|
757
|
+
return hasIdChanged && (!isAuthenticated || isAuthenticated && !!currentVisitor.anonymousId);
|
|
758
|
+
}
|
|
759
|
+
function shouldUpdateConsent(currentVisitor, hasConsented) {
|
|
760
|
+
return currentVisitor.hasConsented !== hasConsented;
|
|
761
|
+
}
|
|
762
|
+
function getAuthenticationAction(currentVisitor, isAuthenticated) {
|
|
763
|
+
if (!currentVisitor.anonymousId && isAuthenticated) {
|
|
764
|
+
return "authenticate";
|
|
765
|
+
}
|
|
766
|
+
if (currentVisitor.anonymousId && !isAuthenticated) {
|
|
767
|
+
return "unauthenticate";
|
|
768
|
+
}
|
|
769
|
+
return null;
|
|
770
|
+
}
|
|
771
|
+
function updateVisitorData(visitor, visitorId, context, hasConsented, isAuthenticated) {
|
|
772
|
+
if (shouldUpdateConsent(visitor, hasConsented)) {
|
|
773
|
+
visitor.setConsent(hasConsented !== null && hasConsented !== void 0 ? hasConsented : true);
|
|
774
|
+
}
|
|
775
|
+
visitor.updateContext(context);
|
|
776
|
+
const authAction = getAuthenticationAction(visitor, isAuthenticated);
|
|
777
|
+
if (authAction === "authenticate") {
|
|
778
|
+
visitor.authenticate(visitorId);
|
|
779
|
+
} else if (authAction === "unauthenticate") {
|
|
780
|
+
visitor.unauthenticate();
|
|
781
|
+
}
|
|
782
|
+
visitor.fetchFlags();
|
|
783
|
+
}
|
|
784
|
+
|
|
665
785
|
/***/ }),
|
|
666
786
|
|
|
667
787
|
/***/ "./src/internalType.ts":
|
|
@@ -692,7 +812,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
692
812
|
/* harmony export */ version: () => (/* binding */ version)
|
|
693
813
|
/* harmony export */ });
|
|
694
814
|
// Generated by genversion.
|
|
695
|
-
const version = '5.2.
|
|
815
|
+
const version = '5.2.2';
|
|
696
816
|
|
|
697
817
|
/***/ }),
|
|
698
818
|
|