@sigmacomputing/react-embed-sdk 0.2.6 → 0.2.8

Sign up to get free protection for your applications and to get access to all the features.
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",