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);});
Permissions
Before an app that uses this method can be submitted for review, the following permissions must be enabled via the Developer Portal:
canva:design:content:read
, if the app calls theregisterOnElementChange
methodcanva:design:content:write
, if the app calls theaddOrUpdateElement
method
To learn more, see Configuring permissions.
Parameters
options
object
RequiredThe options for initializing an app element.
options.render
function
RequiredRenders 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)
function
RequiredThe current state of the app element data.
Returns
A Promise
that resolves with the following object:
result
object
RequiredThe result of the successful initialization of an app element.
result.addOrUpdateElement
function
RequiredIf 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)
object
RequiredThe data to attach to the app element.
result.addOrUpdateElement(data, placement)
object
OptionalThe position of the app element on the page.
result.addOrUpdateElement(data, placement.top)
number
RequiredThe distance from the top edge of the page, in pixels.
result.addOrUpdateElement(data, placement.left)
number
RequiredThe distance from the left edge of the page, in pixels.
result.addOrUpdateElement(data, placement.width)
number
RequiredThe width of the element, in pixels.
If height
is a number, this can be set to "auto"
.
result.addOrUpdateElement(data, placement.height)
number
RequiredThe height of the element, in pixels.
If width
is a number, this can be set to "auto"
.
result.addOrUpdateElement(data, placement.rotation)
number
OptionalThe rotation of the element, in degrees. This must be a number between -180
and 180
.
result.registerOnElementChange
function
RequiredRegisters a callback that runs when the app element data or selection changes.
result.registerOnElementChange(callback)
function
RequiredThe callback that runs when the app element data or selection changes.
result.registerOnElementChange(callback(element))
object
OptionalThe selected element. If an element is not selected, this is undefined
.
result.registerOnElementChange(callback(element.data))
object
RequiredThe current state of the app element data.
result.registerOnElementChange(callback(element.version))
string
RequiredThe version number of the app.