initAppElement
Initializes an element that the app can edit once it exists in the user's design.
To learn more, see Creating app elements.
Usage
import { initAppElement } from "@canva/design";// The data structure to attach to the app elementtype AppElementData = {text: string;};// Initialize the app elementconst appElement = initAppElement<AppElementData>({render: (data) => {return [{type: "TEXT",children: [data.text],top: 0,left: 0,},];},});// Set the app element dataappElement.addOrUpdateElement({text: "Hello world",});// Keep track of element changesappElement.registerOnElementChange((element) => {console.log("The app element has changed:", element?.data);});
Scopes
Before an app that uses this method can be submitted for review, the following scopes must be enabled through the Developer Portal:
- canva:design:content:read, if the app calls the- registerOnElementChangemethod
- canva:design:content:write, if the app calls the- addOrUpdateElementmethod
To learn more, see Configuring scopes.
Parameters
optionsobjectThe options for initializing an app element.
options.renderfunctionRenders an app element based on the current state of the app element data.
This function must return an array of one or more elements, such as images or shapes, and all of the elements must have the following positional properties:
- top
- left
- width
- height
options.render(data)functionThe current state of the app element data.
Returns
A Promise that resolves with the following object:
resultobjectThe result of the successful initialization of an app element.
result.addOrUpdateElementfunctionIf an app element is not selected, sets the initial data of the element and adds it to the user's design. If an app element is selected, overwrites the data and re-renders the element.
result.addOrUpdateElement(data)objectThe data to attach to the app element.
result.addOrUpdateElement(data, placement)objectThe position of the app element on the page.
result.addOrUpdateElement(data, placement.top)numberThe distance from the top edge of the page, in pixels.
result.addOrUpdateElement(data, placement.left)numberThe distance from the left edge of the page, in pixels.
result.addOrUpdateElement(data, placement.width)numberThe width of the element, in pixels.
If height is a number, this can be set to "auto".
result.addOrUpdateElement(data, placement.height)numberThe height of the element, in pixels.
If width is a number, this can be set to "auto".
result.addOrUpdateElement(data, placement.rotation)numberThe rotation of the element, in degrees. This must be a number between -180 and 180.
result.registerOnElementChangefunctionRegisters a callback that runs when the app element data or selection changes.
result.registerOnElementChange(callback)functionThe callback that runs when the app element data or selection changes.
result.registerOnElementChange(callback(element))objectThe selected element. If an element is not selected, this is undefined.
result.registerOnElementChange(callback(element.data))objectThe current state of the app element data.
result.registerOnElementChange(callback(element.version))stringThe version number of the app.