Skip to content

Commit 696e24d

Browse files
authored
DEVREL-2691: Example for openCanvas (#24)
* Rename to "Select a component" to distinguish from openCanvas() * Example for openCanvas
1 parent 8e8bdca commit 696e24d

File tree

3 files changed

+41
-1
lines changed

3 files changed

+41
-1
lines changed

src/components/PermissionsMap.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ export const permissionsMap: PermissionsMap = {
5555
getComponentByNameAndGroup: { permissions: ['canAccessCanvas'] },
5656
getInstanceCount: { permissions: ['canAccessCanvas'] },
5757
enterComponent: { permissions: ['canModifyComponents'] },
58+
openCanvas: { permissions: ['canModifyComponents'] },
59+
selectComponent: { permissions: ['canModifyComponents'] },
5860
exitComponent: { permissions: ['canAccessCanvas'] },
5961
},
6062

src/designer-extension-typings/api.d.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,36 @@ interface WebflowApi {
218218
* await webflow.enterComponent(heroComponentInstance);
219219
* ```
220220
*/
221+
/**
222+
* Open a Component's canvas or a page for editing in the Designer.
223+
* @param target - A Component, ComponentInstance, or page object
224+
* @returns A Promise that resolves when the canvas or page switch is successful.
225+
* @example
226+
* ```ts
227+
* `// Open a Component canvas by ID
228+
* await webflow.openCanvas({ componentId: 'component-id' });
229+
*
230+
* // Open a Component canvas by Component reference
231+
* const components = await webflow.getAllComponents();
232+
* const hero = components[0];
233+
* await webflow.openCanvas(hero);
234+
*
235+
* // Open a Component canvas via an instance reference
236+
* const selectedElement = await webflow.getSelectedElement();
237+
* if (selectedElement?.type === 'ComponentInstance') {
238+
* await webflow.openCanvas(selectedElement as ComponentElement);
239+
* }
240+
*
241+
* // Navigate to a page by ID
242+
* await webflow.openCanvas({ pageId: 'page-id' });
243+
*
244+
* // Navigate to a page by reference (equivalent to webflow.switchPage)
245+
* const pagesAndFolders = await webflow.getAllPagesAndFolders();
246+
* const pages = pagesAndFolders?.filter((i): i is Page => i.type === 'Page');
247+
* await webflow.openCanvas(pages[0]);
248+
* ```
249+
*/
250+
openCanvas()
221251
enterComponent(instance: ComponentElement): Promise<null>;
222252
/**
223253
* Return to the broader context of the entire site or page.

src/examples/components.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,15 @@ export const Components = {
120120
}
121121
},
122122

123-
enterComponent: async () => {
123+
openComponentCanvas: async () => {
124+
// Open the canvas for the Component that has an instance selected in the Designer
125+
const selected = await webflow.getSelectedElement();
126+
if (selected?.type === 'ComponentInstance') {
127+
await webflow.openCanvas(selected);
128+
}
129+
},
130+
131+
selectComponent: async () => {
124132
// Step 1: Fetch the currently selected element
125133
const selectedElement = await webflow.getSelectedElement()
126134

0 commit comments

Comments
 (0)