Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add various bookmark events #78

Merged
merged 1 commit into from
Feb 19, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/thick-students-laugh.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@sigmacomputing/react-embed-sdk": minor
"@sigmacomputing/embed-sdk": minor
---

feat: add various bookmark events
48 changes: 40 additions & 8 deletions packages/embed-sdk/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,30 @@ Listen for a workbook bookmark create event, and execute the given callback when
workbookBookmarkCreateListener(event: MessageEvent, iframe: HTMLIFrameElement, onBookmarkCreate: (event: WorkbookBookmarkOnCreateEvent) => void)
```

#### workbookBookmarkOnChangeListener

Listen for a workbook bookmark change event, and execute the given callback when it occurs.

```typescript
workbookBookmarkOnChangeListener(event: MessageEvent, iframe: HTMLIFrameElement, onBookmarkChange: (event: WorkbookBookmarkOnChangeEvent) => void)
```

#### workbookBookmarkOnUpdateListener

Listen for a workbook bookmark update event, and execute the given callback when it occurs.

```typescript
workbookBookmarkOnUpdateListener(event: MessageEvent, iframe: HTMLIFrameElement, onBookmarkUpdate: (event: WorkbookBookmarkOnUpdateEvent) => void)
```

#### workbookBookmarkOnDeleteListener

Listen for a workbook bookmark delete event, and execute the given callback when it occurs.

```typescript
workbookBookmarkOnDeleteListener(event: MessageEvent, iframe: HTMLIFrameElement, onBookmarkDelete: (event: WorkbookBookmarkOnDeleteEvent) => void)
```

#### workbookDataLoadedListener

Listen for a workbook data loaded event, and execute the given callback when it occurs.
Expand All @@ -162,14 +186,6 @@ Listen for a workbook explore key change event, and execute the given callback w
workbookExploreKeyOnChangeListener(event: MessageEvent, iframe: HTMLIFrameElement, onExploreKeyOnChange: (event: WorkbookExploreKeyOnChangeEvent) => void)
```

#### workbookBookmarkOnChangeListener

Listen for a workbook bookmark change event, and execute the given callback when it occurs.

```typescript
workbookBookmarkOnChangeListener(event: MessageEvent, iframe: HTMLIFrameElement, onBookmarkChange: (event: WorkbookBookmarkOnChangeEvent) => void)
```

#### urlOnChangeListener

Listen for a url change event, and execute the given callback when it occurs.
Expand Down Expand Up @@ -230,6 +246,22 @@ Send a message to the embed to update the current bookmark.
workbookBookmarkUpdate(iframe: HTMLIFrameElement)
```

#### workbookBookmarkDelete

Send a message to the embed to delete the given bookmark.

```typescript
workbookBookmarkDelete(iframe: HTMLIFrameElement, bookmarkId: string)
```

#### workbookBookmarkSelect

Send a message to the embed to select the given bookmark. If no bookmarkId is provided, the current bookmark will be deselected.

```typescript
workbookBookmarkSelect(iframe: HTMLIFrameElement, bookmarkId?: string)
```

#### workbookFullscreenUpdate

Send a message to the embed to toggle the fullscreen state of the given element.
Expand Down
20 changes: 20 additions & 0 deletions packages/embed-sdk/src/mutations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,26 @@ export const workbookBookmarkUpdate = (iframe: HTMLIFrameElement) => {
});
};

export const workbookBookmarkSelect = (
iframe: HTMLIFrameElement,
bookmarkId?: string,
) => {
sendIframeMessage(iframe, {
type: "workbook:bookmark:select",
bookmarkId: bookmarkId,
});
};

export const workbookBookmarkDelete = (
iframe: HTMLIFrameElement,
bookmarkId: string,
) => {
sendIframeMessage(iframe, {
type: "workbook:bookmark:delete",
bookmarkId: bookmarkId,
});
};

export const workbookFullscreenUpdate = (
iframe: HTMLIFrameElement,
nodeId: string | null,
Expand Down
64 changes: 48 additions & 16 deletions packages/embed-sdk/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,14 +66,28 @@ export const WorkbookDataLoadedEventName = "workbook:dataloaded" as const;
export const WorkbookChartErrorEventName = "workbook:chart:error" as const;
export const WorkbookExploreKeyOnChangeEventName =
"workbook:exploreKey:onchange" as const;
export const WorkbookBookmarkOnChangeEventName =
"workbook:bookmark:onchange" as const;

export const UrlOnChangeEventName = "url:onchange" as const;
export const WorkbookIdOnChangeEventName = "workbook:id:onchange" as const;

export const WorkbookBookmarkCreateEventName =
"workbook:bookmark:create" as const;
export const WorkbookBookmarkUpdateEventName =
"workbook:bookmark:update" as const;
export const WorkbookBookmarkDeleteEventName =
"workbook:bookmark:delete" as const;
export const WorkbookBookmarkSelectEventName =
"workbook:bookmark:select" as const;

export const WorkbookBookmarkOnChangeEventName =
"workbook:bookmark:onchange" as const;
export const WorkbookBookmarkOnCreateEvent =
"workbook:bookmark:oncreate" as const;
export const WorkbookBookmarkOnDeleteEventName =
"workbook:bookmark:ondelete" as const;
export const WorkbookBookmarkOnUpdateEventName =
"workbook:bookmark:onupdate" as const;

export const WorkbookFullscreenUpdateEventName =
"workbook:fullscreen:update" as const;

Expand Down Expand Up @@ -168,14 +182,6 @@ export type WorkbookCurrentVariablesEvent = {
variables: Record<string, string>;
};

export type WorkbookBookmarkOnCreateEvent = {
type: typeof WorkbookBookmarkOnCreateEventName;
bookmarkName: string;
workbookId: string;
versionTagName: string | null;
bookmarkId: string;
};

export type WorkbookDataLoadedEvent = {
type: typeof WorkbookDataLoadedEventName;
};
Expand All @@ -192,6 +198,14 @@ export type WorkbookExploreKeyOnChangeEvent = {
exploreKey: string | null;
};

export type WorkbookBookmarkOnCreateEvent = {
type: typeof WorkbookBookmarkOnCreateEventName;
bookmarkName: string;
workbookId: string;
versionTagName: string | null;
bookmarkId: string;
};

export type WorkbookBookmarkOnChangeEvent = {
type: typeof WorkbookBookmarkOnChangeEventName;
bookmarkName: string | null;
Expand All @@ -200,14 +214,22 @@ export type WorkbookBookmarkOnChangeEvent = {
bookmarkId: string | null;
};

export type UrlOnChangeEvent = {
type: typeof UrlOnChangeEventName;
url: string;
export type WorkbookBookmarkOnUpdateEvent = {
type: typeof WorkbookBookmarkOnUpdateEventName;
bookmarkName?: string;
workbookId: string;
versionTagName: string | null;
bookmarkId: string;
isDefault?: boolean;
isShared?: boolean;
};

export type WorkbookIdOnChangeEvent = {
type: typeof WorkbookIdOnChangeEventName;
id: string;
export type WorkbookBookmarkOnDeleteEvent = {
type: typeof WorkbookBookmarkOnDeleteEventName;
bookmarkName: string;
workbookId: string;
versionTagName: string | null;
bookmarkId: string;
};

export type WorkbookBookmarkCreateEvent = {
Expand All @@ -216,6 +238,16 @@ export type WorkbookBookmarkCreateEvent = {
isShared: boolean;
};

export type UrlOnChangeEvent = {
type: typeof UrlOnChangeEventName;
url: string;
};

export type WorkbookIdOnChangeEvent = {
type: typeof WorkbookIdOnChangeEventName;
id: string;
};

export type ActionOutboundEvent = {
type: typeof ActionOutboundEventName;
name: string;
Expand Down
53 changes: 41 additions & 12 deletions packages/embed-sdk/src/wrapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ import {
WorkbookVariablesCurrentEventName,
ActionOutboundEvent,
ActionOutboundEventName,
WorkbookBookmarkOnUpdateEvent,
WorkbookBookmarkOnUpdateEventName,
WorkbookBookmarkOnDeleteEvent,
WorkbookBookmarkOnDeleteEventName,
} from "./types";

const checkEventOrigin = (url: string) => {
Expand Down Expand Up @@ -217,6 +221,43 @@ export const workbookBookmarkCreateListener = (
}
}
};

export const workbookBookmarkOnChangeListener = (
event: MessageEvent,
iframe: HTMLIFrameElement,
onBookmarkChange: (event: WorkbookBookmarkOnChangeEvent) => void,
) => {
if (event.source === iframe.contentWindow && checkEventOrigin(event.origin)) {
if (event.data.type === WorkbookBookmarkOnChangeEventName) {
onBookmarkChange(event.data);
}
}
};

export const workbookBookmarkOnUpdateListener = (
event: MessageEvent,
iframe: HTMLIFrameElement,
onBookmarkUpdate: (event: WorkbookBookmarkOnUpdateEvent) => void,
) => {
if (event.source === iframe.contentWindow && checkEventOrigin(event.origin)) {
if (event.data.type === WorkbookBookmarkOnUpdateEventName) {
onBookmarkUpdate(event.data);
}
}
};

export const workbookBookmarkOnDeleteListener = (
event: MessageEvent,
iframe: HTMLIFrameElement,
onBookmarkDelete: (event: WorkbookBookmarkOnDeleteEvent) => void,
) => {
if (event.source === iframe.contentWindow && checkEventOrigin(event.origin)) {
if (event.data.type === WorkbookBookmarkOnDeleteEventName) {
onBookmarkDelete(event.data);
}
}
};

export const workbookDataLoadedListener = (
event: MessageEvent,
iframe: HTMLIFrameElement,
Expand Down Expand Up @@ -253,18 +294,6 @@ export const workbookExploreKeyOnChangeListener = (
}
};

export const workbookBookmarkOnChangeListener = (
event: MessageEvent,
iframe: HTMLIFrameElement,
onBookmarkChange: (event: WorkbookBookmarkOnChangeEvent) => void,
) => {
if (event.source === iframe.contentWindow && checkEventOrigin(event.origin)) {
if (event.data.type === WorkbookBookmarkOnChangeEventName) {
onBookmarkChange(event.data);
}
}
};

export const urlOnChangeListener = (
event: MessageEvent,
iframe: HTMLIFrameElement,
Expand Down
48 changes: 40 additions & 8 deletions packages/react-embed-sdk/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,30 @@ Listen for a workbook bookmark create event, and execute the given callback when
useWorkbookBookmarkOnCreate(iframeRef: React.RefObject<HTMLIFrameElement>, onBookmarkCreate: (event: WorkbookBookmarkOnCreateEvent) => void)
```

#### useWorkbookBookmarkOnChange

Listen for a workbook bookmark change event, and execute the given callback when it occurs.

```typescript
useWorkbookBookmarkOnChange(iframeRef: React.RefObject<HTMLIFrameElement>, onBookmarkChange: (event: WorkbookBookmarkOnChangeEvent) => void)
```

#### useWorkbookBookmarkOnUpdate

Listen for a workbook bookmark update event, and execute the given callback when it occurs.

```typescript
useWorkbookBookmarkOnUpdate(iframeRef: React.RefObject<HTMLIFrameElement>, onBookmarkUpdate: (event: WorkbookBookmarkOnUpdateEvent) => void)
```

#### useWorkbookBookmarkOnDelete

Listen for a workbook bookmark delete event, and execute the given callback when it occurs.

```typescript
useWorkbookBookmarkOnDelete(iframeRef: React.RefObject<HTMLIFrameElement>, onBookmarkDelete: (event: WorkbookBookmarkOnDeleteEvent) => void)
```

#### useWorkbookChartError

Listen for a workbook chart error event, and execute the given callback when it occurs.
Expand All @@ -242,14 +266,6 @@ Listen for a workbook explore key change event, and execute the given callback w
useWorkbookExploreKeyOnChange(iframeRef: React.RefObject<HTMLIFrameElement>, onExploreKeyOnChange: (event: WorkbookExploreKeyOnChangeEvent) => void)
```

#### useWorkbookBookmarkOnChange

Listen for a workbook bookmark change event, and execute the given callback when it occurs.

```typescript
useWorkbookBookmarkOnChange(iframeRef: React.RefObject<HTMLIFrameElement>, onBookmarkChange: (event: WorkbookBookmarkOnChangeEvent) => void)
```

#### useUrlOnChange

Listen for a url change event, and execute the given callback when it occurs.
Expand Down Expand Up @@ -302,6 +318,22 @@ Send a message to the embed to update the current bookmark.
updateWorkbookBookmark(iframeRef: React.RefObject<HTMLIFrameElement>)
```

#### deleteWorkbookBookmark

Send a message to the embed to delete the given bookmark.

```typescript
deleteWorkbookBookmark(iframeRef: React.RefObject<HTMLIFrameElement>, bookmarkId: string)
```

#### selectWorkbookBookmark

Send a message to the embed to select the given bookmark. If no bookmarkId is provided, the current bookmark will be deselected.

```typescript
selectWorkbookBookmark(iframeRef: React.RefObject<HTMLIFrameElement>, bookmarkId?: string)
```

#### updateWorkbookFullscreen

Send a message to the embed to toggle the fullscreen state of the given element.
Expand Down
22 changes: 22 additions & 0 deletions packages/react-embed-sdk/src/mutations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import {
workbookSelectedNodeIdUpdate,
WorkbookBookmarkCreateEvent,
workbookSharingLinkUpdate,
workbookBookmarkDelete,
workbookBookmarkSelect,
} from "@sigmacomputing/embed-sdk";

export { DO_NOT_USE_IN_PRODUCTION_overrideMutationUrl } from "@sigmacomputing/embed-sdk";
Expand Down Expand Up @@ -49,6 +51,26 @@ export function updateWorkbookBookmark(
workbookBookmarkUpdate(iframeRef.current);
}

export function deleteWorkbookBookmark(
iframeRef: React.RefObject<HTMLIFrameElement>,
bookmarkId: string,
) {
if (!iframeRef.current) {
throw new Error("iframe is not available");
}
workbookBookmarkDelete(iframeRef.current, bookmarkId);
}

export function selectWorkbookBookmark(
iframeRef: React.RefObject<HTMLIFrameElement>,
bookmarkId?: string,
) {
if (!iframeRef.current) {
throw new Error("iframe is not available");
}
workbookBookmarkSelect(iframeRef.current, bookmarkId);
}

export function updateWorkbookFullscreen(
iframeRef: React.RefObject<HTMLIFrameElement>,
nodeId: string | null,
Expand Down
Loading