Subchapter 1.162
references/function-library/PARAMETER_PATTERNS.mdMarkdown5 KBView on GitHub
Reference for all function registration parameter patterns. Read this when implementing functions with complex parameter types.
functions: {
capitalize: {
parameters: [
{
dataType: 'text',
displayName: 'Text to capitalize',
},
],
returns: {
dataType: 'text',
},
async: false,
},
}functions: {
greet: {
parameters: [
{
dataType: 'text',
displayName: 'Name',
},
{
dataType: 'text',
displayName: 'Greeting',
optional: true,
defaultValue: 'Hello',
},
],
returns: {
dataType: 'text',
},
async: false,
},
}When a function accepts a structured object, use dataType: 'data' with a nested data.items map:
functions: {
formatUser: {
parameters: [
{
dataType: 'data',
displayName: 'User Data',
data: {
items: {
firstName: { dataType: 'text', displayName: 'First Name' },
lastName: { dataType: 'text', displayName: 'Last Name' },
age: { dataType: 'number', displayName: 'Age' },
},
},
},
],
returns: { dataType: 'text' },
async: false,
},
}functions: {
sum: {
parameters: [
{
dataType: 'arrayItems',
displayName: 'Numbers',
arrayItems: {
item: { dataType: 'number' },
},
},
],
returns: { dataType: 'number' },
async: false,
},
}Arrays can contain complex objects:
functions: {
calculateTotal: {
parameters: [
{
dataType: 'arrayItems',
displayName: 'Products',
arrayItems: {
item: {
dataType: 'data',
data: {
items: {
price: { dataType: 'number', displayName: 'Price' },
quantity: { dataType: 'number', displayName: 'Quantity' },
},
},
},
},
},
],
returns: { dataType: 'number' },
async: false,
},
}functions: {
getNextStatus: {
parameters: [
{
dataType: 'textEnum',
displayName: 'Current Status',
textEnum: {
options: [
{ value: 'pending', displayName: 'Pending' },
{ value: 'processing', displayName: 'Processing' },
{ value: 'completed', displayName: 'Completed' },
],
},
},
],
returns: {
dataType: 'textEnum',
textEnum: {
options: [
{ value: 'processing', displayName: 'Processing' },
{ value: 'completed', displayName: 'Completed' },
],
},
},
async: false,
},
}Set async: true and define a returns type. The implementation must return a Promise:
functions: {
fetchData: {
parameters: [
{ dataType: 'webUrl', displayName: 'URL' },
],
returns: { dataType: 'text' },
async: true,
},
}Omit the returns field entirely:
functions: {
logMessage: {
parameters: [
{ dataType: 'text', displayName: 'Message' },
],
async: false,
},
}Function libraries can accept DOM events as parameters.
Instead of dataType, set domEvent on a parameter to receive the raw browser event:
| Event Type | DOM Object | Use For |
|---|---|---|
POINTER | PointerEvent | Clicks, taps, drag starts |
CHANGE | Event | Input value changes |
KEYBOARD | KeyboardEvent | Key presses, shortcuts |
FOCUS | FocusEvent | Focus/blur |
SUBMIT | SubmitEvent | Form submissions |
functions: {
handleClick: {
parameters: [
{
domEvent: 'POINTER',
displayName: 'Click Event',
},
],
async: false,
},
}When domEvent is CHANGE, the optional changeEvent field declares where the meaningful value resides in the event object:
functions: {
onSearchChange: {
parameters: [
{
domEvent: 'CHANGE',
changeEvent: { inputType: 'text' },
displayName: 'Search Input Change',
},
],
returns: { dataType: 'text' },
async: false,
},
onToggleChange: {
parameters: [
{
domEvent: 'CHANGE',
changeEvent: { inputType: 'checkbox' },
displayName: 'Toggle Change',
},
],
returns: { dataType: 'booleanValue' },
async: false,
},
}Available inputType values:
text — value at target.value (string)checkbox — value at target.checked (boolean)number — value at target.valueAsNumber (number)date — value at target.valueAsDate (Date)any types@ts-ignore commentsconst/let (no var)