@sigmacomputing/react-embed-sdk 0.2.6 → 0.2.8

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/index.d.mts CHANGED
@@ -54,6 +54,30 @@ declare function useSigmaIframe(): {
54
54
  */
55
55
  declare function usePageHeight(iframeRef: React.RefObject<HTMLIFrameElement>): number | undefined;
56
56
 
57
+ /**
58
+ * A hook that returns functions to get and set the variables in a workbook.
59
+ * @example
60
+ * ```
61
+ * function MyEmbed() {
62
+ * const { getVariables, setVariables } = useWorkbookVariables(iframeRef);
63
+ * return (
64
+ * <>
65
+ * <button onClick={() => setVariables({ foo: "bar" })}>Set Variables</button>
66
+ * <button onClick={() => const variable = await getVariables()}>Get Variables</button>
67
+ * <iframe
68
+ * ref={iframeRef}
69
+ * src="https://app.sigmacomputing.com/embed"
70
+ * />
71
+ * <>
72
+ * );
73
+ * }
74
+ * ```
75
+ */
76
+ declare const useWorkbookVariables: (iframeRef: React.RefObject<HTMLIFrameElement>) => {
77
+ getVariables: () => Promise<unknown>;
78
+ setVariables: (variables: Record<string, string>) => void;
79
+ };
80
+
57
81
  /**
58
82
  * Listen for a workbook loaded event, and execute the given callback when it occurs.
59
83
  *
@@ -134,4 +158,4 @@ declare function useWorkbookBookmarkOnChange(iframeRef: React.RefObject<HTMLIFra
134
158
  declare function useUrlOnChange(iframeRef: React.RefObject<HTMLIFrameElement>, onUrlChange: (event: UrlOnChangeEvent) => void): void;
135
159
  declare function useWorkbookIdOnChange(iframeRef: React.RefObject<HTMLIFrameElement>, onIdChange: (event: WorkbookIdOnChangeEvent) => void): void;
136
160
 
137
- export { usePageHeight, useSigmaIframe, useTableCellSelect, useUrlOnChange, useVariableChange, useWorkbookBookmarkOnChange, useWorkbookBookmarkOnCreate, useWorkbookChartError, useWorkbookChartValueSelect, useWorkbookCurrentVariables, useWorkbookDataLoaded, useWorkbookError, useWorkbookExploreKeyOnChange, useWorkbookFullScreen, useWorkbookIdOnChange, useWorkbookLoaded, useWorkbookPageHeight, useWorkbookPageSelectedNode, useWorkbookPivotTableCellSelect, useWorkbookPublished };
161
+ export { usePageHeight, useSigmaIframe, useTableCellSelect, useUrlOnChange, useVariableChange, useWorkbookBookmarkOnChange, useWorkbookBookmarkOnCreate, useWorkbookChartError, useWorkbookChartValueSelect, useWorkbookCurrentVariables, useWorkbookDataLoaded, useWorkbookError, useWorkbookExploreKeyOnChange, useWorkbookFullScreen, useWorkbookIdOnChange, useWorkbookLoaded, useWorkbookPageHeight, useWorkbookPageSelectedNode, useWorkbookPivotTableCellSelect, useWorkbookPublished, useWorkbookVariables };
package/dist/index.d.ts CHANGED
@@ -54,6 +54,30 @@ declare function useSigmaIframe(): {
54
54
  */
55
55
  declare function usePageHeight(iframeRef: React.RefObject<HTMLIFrameElement>): number | undefined;
56
56
 
57
+ /**
58
+ * A hook that returns functions to get and set the variables in a workbook.
59
+ * @example
60
+ * ```
61
+ * function MyEmbed() {
62
+ * const { getVariables, setVariables } = useWorkbookVariables(iframeRef);
63
+ * return (
64
+ * <>
65
+ * <button onClick={() => setVariables({ foo: "bar" })}>Set Variables</button>
66
+ * <button onClick={() => const variable = await getVariables()}>Get Variables</button>
67
+ * <iframe
68
+ * ref={iframeRef}
69
+ * src="https://app.sigmacomputing.com/embed"
70
+ * />
71
+ * <>
72
+ * );
73
+ * }
74
+ * ```
75
+ */
76
+ declare const useWorkbookVariables: (iframeRef: React.RefObject<HTMLIFrameElement>) => {
77
+ getVariables: () => Promise<unknown>;
78
+ setVariables: (variables: Record<string, string>) => void;
79
+ };
80
+
57
81
  /**
58
82
  * Listen for a workbook loaded event, and execute the given callback when it occurs.
59
83
  *
@@ -134,4 +158,4 @@ declare function useWorkbookBookmarkOnChange(iframeRef: React.RefObject<HTMLIFra
134
158
  declare function useUrlOnChange(iframeRef: React.RefObject<HTMLIFrameElement>, onUrlChange: (event: UrlOnChangeEvent) => void): void;
135
159
  declare function useWorkbookIdOnChange(iframeRef: React.RefObject<HTMLIFrameElement>, onIdChange: (event: WorkbookIdOnChangeEvent) => void): void;
136
160
 
137
- export { usePageHeight, useSigmaIframe, useTableCellSelect, useUrlOnChange, useVariableChange, useWorkbookBookmarkOnChange, useWorkbookBookmarkOnCreate, useWorkbookChartError, useWorkbookChartValueSelect, useWorkbookCurrentVariables, useWorkbookDataLoaded, useWorkbookError, useWorkbookExploreKeyOnChange, useWorkbookFullScreen, useWorkbookIdOnChange, useWorkbookLoaded, useWorkbookPageHeight, useWorkbookPageSelectedNode, useWorkbookPivotTableCellSelect, useWorkbookPublished };
161
+ export { usePageHeight, useSigmaIframe, useTableCellSelect, useUrlOnChange, useVariableChange, useWorkbookBookmarkOnChange, useWorkbookBookmarkOnCreate, useWorkbookChartError, useWorkbookChartValueSelect, useWorkbookCurrentVariables, useWorkbookDataLoaded, useWorkbookError, useWorkbookExploreKeyOnChange, useWorkbookFullScreen, useWorkbookIdOnChange, useWorkbookLoaded, useWorkbookPageHeight, useWorkbookPageSelectedNode, useWorkbookPivotTableCellSelect, useWorkbookPublished, useWorkbookVariables };
package/dist/index.js CHANGED
@@ -39,7 +39,8 @@ __export(src_exports, {
39
39
  useWorkbookPageHeight: () => useWorkbookPageHeight,
40
40
  useWorkbookPageSelectedNode: () => useWorkbookPageSelectedNode,
41
41
  useWorkbookPivotTableCellSelect: () => useWorkbookPivotTableCellSelect,
42
- useWorkbookPublished: () => useWorkbookPublished
42
+ useWorkbookPublished: () => useWorkbookPublished,
43
+ useWorkbookVariables: () => useWorkbookVariables
43
44
  });
44
45
  module.exports = __toCommonJS(src_exports);
45
46
 
@@ -332,6 +333,55 @@ function usePageHeight(iframeRef) {
332
333
  });
333
334
  return height;
334
335
  }
336
+
337
+ // src/mutations.ts
338
+ var import_react4 = require("react");
339
+ var import_embed_sdk2 = require("@sigmacomputing/embed-sdk");
340
+ var useWorkbookVariables = (iframeRef) => {
341
+ const [state, setState] = (0, import_react4.useState)();
342
+ const getVariables = (0, import_react4.useCallback)(() => {
343
+ if (!iframeRef.current) {
344
+ throw new Error("iframe is not available");
345
+ }
346
+ (0, import_embed_sdk2.workbookVariablesList)(iframeRef.current);
347
+ const promise = new Promise((resolve) => {
348
+ setState({ state: "pending", callback: resolve });
349
+ });
350
+ return promise;
351
+ }, [iframeRef]);
352
+ const setVariables = (0, import_react4.useCallback)(
353
+ (variables) => {
354
+ if (!iframeRef.current) {
355
+ throw new Error("iframe is not available");
356
+ }
357
+ (0, import_embed_sdk2.workbookVariablesUpdate)(iframeRef.current, variables);
358
+ },
359
+ [iframeRef]
360
+ );
361
+ (0, import_react4.useEffect)(() => {
362
+ if (!iframeRef.current)
363
+ return;
364
+ const listener = (event) => {
365
+ if (!iframeRef.current) {
366
+ return;
367
+ }
368
+ (0, import_embed_sdk2.workbookCurrentVariablesListener)(event, iframeRef.current, (event2) => {
369
+ if ((state == null ? void 0 : state.state) === "pending") {
370
+ setState({ state: "success", variables: event2.variables });
371
+ state.callback(event2.variables);
372
+ }
373
+ });
374
+ };
375
+ window.addEventListener("message", listener);
376
+ return () => {
377
+ window.removeEventListener("message", listener);
378
+ };
379
+ }, [iframeRef, state]);
380
+ return {
381
+ getVariables,
382
+ setVariables
383
+ };
384
+ };
335
385
  // Annotate the CommonJS export names for ESM import in node:
336
386
  0 && (module.exports = {
337
387
  usePageHeight,
@@ -353,5 +403,6 @@ function usePageHeight(iframeRef) {
353
403
  useWorkbookPageHeight,
354
404
  useWorkbookPageSelectedNode,
355
405
  useWorkbookPivotTableCellSelect,
356
- useWorkbookPublished
406
+ useWorkbookPublished,
407
+ useWorkbookVariables
357
408
  });
package/dist/index.mjs CHANGED
@@ -306,6 +306,59 @@ function usePageHeight(iframeRef) {
306
306
  });
307
307
  return height;
308
308
  }
309
+
310
+ // src/mutations.ts
311
+ import { useCallback as useCallback2, useEffect as useEffect2, useState as useState3 } from "react";
312
+ import {
313
+ workbookVariablesList,
314
+ workbookCurrentVariablesListener as workbookCurrentVariablesListener2,
315
+ workbookVariablesUpdate
316
+ } from "@sigmacomputing/embed-sdk";
317
+ var useWorkbookVariables = (iframeRef) => {
318
+ const [state, setState] = useState3();
319
+ const getVariables = useCallback2(() => {
320
+ if (!iframeRef.current) {
321
+ throw new Error("iframe is not available");
322
+ }
323
+ workbookVariablesList(iframeRef.current);
324
+ const promise = new Promise((resolve) => {
325
+ setState({ state: "pending", callback: resolve });
326
+ });
327
+ return promise;
328
+ }, [iframeRef]);
329
+ const setVariables = useCallback2(
330
+ (variables) => {
331
+ if (!iframeRef.current) {
332
+ throw new Error("iframe is not available");
333
+ }
334
+ workbookVariablesUpdate(iframeRef.current, variables);
335
+ },
336
+ [iframeRef]
337
+ );
338
+ useEffect2(() => {
339
+ if (!iframeRef.current)
340
+ return;
341
+ const listener = (event) => {
342
+ if (!iframeRef.current) {
343
+ return;
344
+ }
345
+ workbookCurrentVariablesListener2(event, iframeRef.current, (event2) => {
346
+ if ((state == null ? void 0 : state.state) === "pending") {
347
+ setState({ state: "success", variables: event2.variables });
348
+ state.callback(event2.variables);
349
+ }
350
+ });
351
+ };
352
+ window.addEventListener("message", listener);
353
+ return () => {
354
+ window.removeEventListener("message", listener);
355
+ };
356
+ }, [iframeRef, state]);
357
+ return {
358
+ getVariables,
359
+ setVariables
360
+ };
361
+ };
309
362
  export {
310
363
  usePageHeight,
311
364
  useSigmaIframe,
@@ -326,5 +379,6 @@ export {
326
379
  useWorkbookPageHeight,
327
380
  useWorkbookPageSelectedNode,
328
381
  useWorkbookPivotTableCellSelect,
329
- useWorkbookPublished
382
+ useWorkbookPublished,
383
+ useWorkbookVariables
330
384
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sigmacomputing/react-embed-sdk",
3
- "version": "0.2.6",
3
+ "version": "0.2.8",
4
4
  "description": "React JavaScript SDK to interact with Sigma Computing's Embed API",
5
5
  "author": "sigmacomputing",
6
6
  "license": "ISC",
@@ -23,7 +23,7 @@
23
23
  "@sigmacomputing/typescript-config": "0.0.0"
24
24
  },
25
25
  "dependencies": {
26
- "@sigmacomputing/embed-sdk": "0.2.6"
26
+ "@sigmacomputing/embed-sdk": "0.2.8"
27
27
  },
28
28
  "scripts": {
29
29
  "prepublish": "pnpm build",