@schematichq/schematic-react 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -101,7 +101,7 @@ var Schematic = class {
101
101
  if (options?.webSocketUrl !== void 0) {
102
102
  this.webSocketUrl = options.webSocketUrl;
103
103
  }
104
- if (typeof window !== "undefined") {
104
+ if (window?.addEventListener) {
105
105
  window.addEventListener("beforeunload", () => {
106
106
  this.flushEventQueue();
107
107
  });
@@ -222,7 +222,7 @@ var Schematic = class {
222
222
  tracker_user_id: this.getAnonymousId(),
223
223
  type: eventType
224
224
  };
225
- if (typeof document !== "undefined" && document.hidden) {
225
+ if (document?.hidden) {
226
226
  this.storeEvent(event);
227
227
  } else {
228
228
  this.sendEvent(event);
@@ -337,28 +337,29 @@ var SchematicContext = (0, import_react.createContext)({
337
337
  flagValues: {}
338
338
  });
339
339
  var SchematicProvider = ({
340
- apiUrl,
341
340
  children,
342
- eventUrl,
343
- publishableKey,
344
- webSocketUrl
341
+ client: providedClient,
342
+ clientOpts,
343
+ publishableKey
345
344
  }) => {
346
345
  const [client, setClient] = (0, import_react.useState)();
347
346
  const [flagValues, setFlagValues] = (0, import_react.useState)({});
348
347
  (0, import_react.useEffect)(() => {
348
+ if (providedClient) {
349
+ setClient(providedClient);
350
+ return providedClient.cleanup;
351
+ }
349
352
  if (publishableKey === void 0) {
350
353
  return;
351
354
  }
352
- const client2 = new Schematic(publishableKey, {
353
- apiUrl,
354
- eventUrl,
355
+ const newClient = new Schematic(publishableKey, {
356
+ ...clientOpts,
355
357
  flagListener: setFlagValues,
356
- useWebSocket: true,
357
- webSocketUrl
358
+ useWebSocket: true
358
359
  });
359
- setClient(client2);
360
- return client2.cleanup;
361
- }, [apiUrl, eventUrl, publishableKey, webSocketUrl]);
360
+ setClient(newClient);
361
+ return newClient.cleanup;
362
+ }, [clientOpts, providedClient, publishableKey]);
362
363
  const contextValue = {
363
364
  client,
364
365
  flagValues
@@ -366,23 +367,36 @@ var SchematicProvider = ({
366
367
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SchematicContext.Provider, { value: contextValue, children });
367
368
  };
368
369
  var useSchematic = () => (0, import_react.useContext)(SchematicContext);
369
- var useSchematicContext = () => {
370
- const { client } = useSchematic();
370
+ var useSchematicClient = (opts) => {
371
+ const schematic = useSchematic();
372
+ const { client } = opts ?? {};
373
+ if (client) {
374
+ return client;
375
+ }
376
+ return schematic.client;
377
+ };
378
+ var useSchematicContext = (opts) => {
379
+ const client = useSchematicClient(opts);
371
380
  const { setContext } = client ?? {};
372
381
  return { setContext };
373
382
  };
374
- var useSchematicEvents = () => {
375
- const { client } = useSchematic();
383
+ var useSchematicEvents = (opts) => {
384
+ const client = useSchematicClient(opts);
376
385
  const { track, identify } = client ?? {};
377
386
  return { track, identify };
378
387
  };
379
- var useSchematicFlag = (key, fallback) => {
388
+ var useSchematicFlag = (key, opts) => {
380
389
  const { flagValues } = useSchematic();
390
+ const { client } = opts ?? {};
391
+ const { fallback = false } = opts ?? {};
381
392
  const [value, setValue] = (0, import_react.useState)(fallback ?? false);
382
393
  const flagValue = flagValues[key];
383
394
  (0, import_react.useEffect)(() => {
384
- typeof flagValue === "undefined" ? setValue(fallback ?? false) : setValue(flagValue);
395
+ typeof flagValue === "undefined" ? setValue(fallback) : setValue(flagValue);
385
396
  }, [key, fallback, flagValue]);
397
+ if (client) {
398
+ return client.checkFlag({ key, fallback });
399
+ }
386
400
  return value;
387
401
  };
388
402
  /*! Bundled license information:
@@ -9,8 +9,10 @@ import { FlagCheckWithKeyResponseBody } from '@schematichq/schematic-js';
9
9
  import { Keys } from '@schematichq/schematic-js';
10
10
  import { default as React_2 } from 'react';
11
11
  import { ReactNode } from 'react';
12
+ import { Schematic } from '@schematichq/schematic-js';
12
13
  import { SchematicContext } from '@schematichq/schematic-js';
13
14
  import * as SchematicJS from '@schematichq/schematic-js';
15
+ import { SchematicOptions } from '@schematichq/schematic-js';
14
16
  import { Traits } from '@schematichq/schematic-js';
15
17
 
16
18
  export { Event_2 as Event }
@@ -31,6 +33,8 @@ export { FlagCheckWithKeyResponseBody }
31
33
 
32
34
  export { Keys }
33
35
 
36
+ export { Schematic }
37
+
34
38
  export { SchematicContext }
35
39
 
36
40
  declare interface SchematicContextProps {
@@ -42,29 +46,38 @@ export declare interface SchematicFlags {
42
46
  [key: string]: boolean;
43
47
  }
44
48
 
49
+ export declare interface SchematicHookOpts {
50
+ client?: SchematicJS.Schematic;
51
+ }
52
+
53
+ export { SchematicOptions }
54
+
45
55
  export declare const SchematicProvider: React_2.FC<SchematicProviderProps>;
46
56
 
47
- declare interface SchematicProviderProps {
57
+ export declare interface SchematicProviderProps {
48
58
  children: ReactNode;
59
+ client?: SchematicJS.Schematic;
60
+ clientOpts?: SchematicJS.SchematicOptions;
49
61
  publishableKey?: string;
50
- apiUrl?: string;
51
- eventUrl?: string;
52
- webSocketUrl?: string;
53
62
  }
54
63
 
55
64
  export { Traits }
56
65
 
57
66
  export declare const useSchematic: () => SchematicContextProps;
58
67
 
59
- export declare const useSchematicContext: () => {
68
+ export declare const useSchematicContext: (opts?: SchematicHookOpts) => {
60
69
  setContext: ((context: SchematicJS.SchematicContext) => Promise<void>) | undefined;
61
70
  };
62
71
 
63
- export declare const useSchematicEvents: () => {
72
+ export declare const useSchematicEvents: (opts?: SchematicHookOpts) => {
64
73
  track: ((body: SchematicJS.EventBodyTrack) => void) | undefined;
65
74
  identify: ((body: SchematicJS.EventBodyIdentify) => void) | undefined;
66
75
  };
67
76
 
68
- export declare const useSchematicFlag: (key: string, fallback?: boolean) => boolean;
77
+ export declare const useSchematicFlag: (key: string, opts?: UseSchematicFlagOpts) => boolean | Promise<boolean>;
78
+
79
+ export declare type UseSchematicFlagOpts = SchematicHookOpts & {
80
+ fallback?: boolean;
81
+ };
69
82
 
70
83
  export { }
@@ -71,7 +71,7 @@ var Schematic = class {
71
71
  if (options?.webSocketUrl !== void 0) {
72
72
  this.webSocketUrl = options.webSocketUrl;
73
73
  }
74
- if (typeof window !== "undefined") {
74
+ if (window?.addEventListener) {
75
75
  window.addEventListener("beforeunload", () => {
76
76
  this.flushEventQueue();
77
77
  });
@@ -192,7 +192,7 @@ var Schematic = class {
192
192
  tracker_user_id: this.getAnonymousId(),
193
193
  type: eventType
194
194
  };
195
- if (typeof document !== "undefined" && document.hidden) {
195
+ if (document?.hidden) {
196
196
  this.storeEvent(event);
197
197
  } else {
198
198
  this.sendEvent(event);
@@ -312,28 +312,29 @@ var SchematicContext = createContext({
312
312
  flagValues: {}
313
313
  });
314
314
  var SchematicProvider = ({
315
- apiUrl,
316
315
  children,
317
- eventUrl,
318
- publishableKey,
319
- webSocketUrl
316
+ client: providedClient,
317
+ clientOpts,
318
+ publishableKey
320
319
  }) => {
321
320
  const [client, setClient] = useState();
322
321
  const [flagValues, setFlagValues] = useState({});
323
322
  useEffect(() => {
323
+ if (providedClient) {
324
+ setClient(providedClient);
325
+ return providedClient.cleanup;
326
+ }
324
327
  if (publishableKey === void 0) {
325
328
  return;
326
329
  }
327
- const client2 = new Schematic(publishableKey, {
328
- apiUrl,
329
- eventUrl,
330
+ const newClient = new Schematic(publishableKey, {
331
+ ...clientOpts,
330
332
  flagListener: setFlagValues,
331
- useWebSocket: true,
332
- webSocketUrl
333
+ useWebSocket: true
333
334
  });
334
- setClient(client2);
335
- return client2.cleanup;
336
- }, [apiUrl, eventUrl, publishableKey, webSocketUrl]);
335
+ setClient(newClient);
336
+ return newClient.cleanup;
337
+ }, [clientOpts, providedClient, publishableKey]);
337
338
  const contextValue = {
338
339
  client,
339
340
  flagValues
@@ -341,23 +342,36 @@ var SchematicProvider = ({
341
342
  return /* @__PURE__ */ jsx(SchematicContext.Provider, { value: contextValue, children });
342
343
  };
343
344
  var useSchematic = () => useContext(SchematicContext);
344
- var useSchematicContext = () => {
345
- const { client } = useSchematic();
345
+ var useSchematicClient = (opts) => {
346
+ const schematic = useSchematic();
347
+ const { client } = opts ?? {};
348
+ if (client) {
349
+ return client;
350
+ }
351
+ return schematic.client;
352
+ };
353
+ var useSchematicContext = (opts) => {
354
+ const client = useSchematicClient(opts);
346
355
  const { setContext } = client ?? {};
347
356
  return { setContext };
348
357
  };
349
- var useSchematicEvents = () => {
350
- const { client } = useSchematic();
358
+ var useSchematicEvents = (opts) => {
359
+ const client = useSchematicClient(opts);
351
360
  const { track, identify } = client ?? {};
352
361
  return { track, identify };
353
362
  };
354
- var useSchematicFlag = (key, fallback) => {
363
+ var useSchematicFlag = (key, opts) => {
355
364
  const { flagValues } = useSchematic();
365
+ const { client } = opts ?? {};
366
+ const { fallback = false } = opts ?? {};
356
367
  const [value, setValue] = useState(fallback ?? false);
357
368
  const flagValue = flagValues[key];
358
369
  useEffect(() => {
359
- typeof flagValue === "undefined" ? setValue(fallback ?? false) : setValue(flagValue);
370
+ typeof flagValue === "undefined" ? setValue(fallback) : setValue(flagValue);
360
371
  }, [key, fallback, flagValue]);
372
+ if (client) {
373
+ return client.checkFlag({ key, fallback });
374
+ }
361
375
  return value;
362
376
  };
363
377
  export {
package/package.json CHANGED
@@ -42,9 +42,9 @@
42
42
  "test": "jest --config jest.config.js"
43
43
  },
44
44
  "types": "dist/schematic-react.d.ts",
45
- "version": "0.1.5",
45
+ "version": "0.1.6",
46
46
  "dependencies": {
47
- "@schematichq/schematic-js": "^0.1.5"
47
+ "@schematichq/schematic-js": "^0.1.7"
48
48
  },
49
49
  "peerDependencies": {
50
50
  "react": ">=18"