GetActions Helper
This helper will create attributes actions from blocks manifest.json
.
Actions are passed in child components to update props on an event (onChange
, onClick
, etc.).
Default Attribute
Default function output is onChange
+ attribute name.
Example: onChangeContent
.
manifest.json
{
"attributes": {
"content": {
"type": "string"
},
"styleSize": {
"type": "string",
"default": "default"
}
}
}
Usage
import { getActions } from 'EighshiftBlocksGetActions';
import manifest from './manifest.json';
const actions = getActions(props, manifest);
Output:
const actions = {
onChangeContent: (value) => {
setAttributes({
content: value,
});
},
onChangeStyleSize: (value) => {
setAttributes({
styleSize: value,
});
},
};
Media Attribute
If the attribute needs to save multiple values at the same time for media (images, video, etc.). ID
value is used on the front-end using the PHP methods to fetch images, and URL
is used in the editor to provide image preview.
manifest.json
{
"attributes": {
"media": {
"type": "object",
"default": {
"id": 0,
"url": "",
"title": ""
},
"items": {
"type": "object"
},
"mediaAction": true
},
}
}
Usage
import { getActions } from 'EighshiftBlocksGetActions';
import manifest from './manifest.json';
const actions = getActions(props, manifest);
Output:
const actions = {
onChangeMediaContent: (value) => {
setAttributes({
media: {
id: 0,
url: "",
title: "",
},
});
},
};
Object/Array Attribute
If attribute needs to save multiple values at the same time, generally used for arrays and objects.
manifest.json
{
"attributes": {
"heading": {
"type": "object",
"default": {
"content": "",
"level": 2,
"styleAlign": "left",
},
"items": {
"type": "object"
},
"multipleProps": true
}
}
}
Usage
import { getActions } from 'EighshiftBlocksGetActions';
import manifest from './manifest.json';
const actions = getActions(props, manifest);
Output:
const actions = {
onChangeHeadingContent: (value) => {
setAttributes({
content: value,
});
},
onChangeHeadingLevel: (value) => {
setAttributes({
level: value,
});
},
onChangeHeadingStyleAlign: (value) => {
setAttributes({
styleAlign: value,
});
},
};