@buzzbrothers/datocms-plugin-buzz-json-options
v0.0.7
Published
This plugin allows you to define some properties that will be editable either one by one, or by (visual) presets. You can also define which properties are available for editing.
Readme
DatoCMS Plugin Buzz JSON Options
This plugin allows you to define some properties that will be editable either one by one, or by (visual) presets. You can also define which properties are available for editing.

Features
- Multiple input types:
string: Simple text inputnumber: Simple number inputboolean: Simple switch inputselect: Select input
- Support presets
- Specify values you want
- Display a preview
imagevideo: Play on hover
- Preview size (aspect ratio and height)
- Specify what is displayed
props: Choose with property field is displayedpresets: Display of not the presets previews
- Plugin level configuration
- Field level configuration
- Can extends
templatesdefined in the plugin config for convinience
- Can extends
Usage
- Specify the plugin level configuration
- Create a
JSONfield on one of your blocks/models - Go to
Presentation - Choose
Buzz JSON options - Specify the field level configuration
Plugin level configuration
Here's an example of plugin level configuration:
{
"settings": {
"presets": {
"display": true,
"preview": {
"aspectRatio": 1.77,
"height": 200
}
},
"props": {
// can be an array of properties ids to display
"display": true
}
},
// specify some templates to extends fields from
"templates": {
"image": {
"settings": {
"preset": {
"display": true
// and other settings...
}
},
"props": {
"animated": {
"type": "boolean",
"label": "Animated",
"default": true
}
}
}
}
}Field level configuration
Here's an example of a field level configuration
{
// extends from the "image" template
"extends": "image",
// some custom settings
"settings": {
"props": {
"display": ["animated"]
}
},
"presets": [
{
"label": "Animated image",
"values": {
"shape": "square",
"animated": true
},
// can be images or videos
"preview": "https://..."
},
{
"label": "Non animated image",
"values": {
"shape": "circle",
"animated": true
},
// can be images or videos
"preview": "https://..."
}
],
"props": {
"shape": {
"type": "select",
"label": "Shape",
"options": [
{
"label": "Square",
"value": "square"
},
{
"label": "Circle",
"value": "circle"
}
]
}
}
}Types
Here's the typescript types for convinience
export type TDatoPluginBuzzOptions = {
settings?: TDatoPluginBuzzOptionsSettings
presets?: Record<string, TDatoPluginBuzzOptionsPreset>
props?: Record<string, TDatoPluginBuzzOptionsProp>
extends?: string
}
export type TDatoPluginBuzzOptionsConfig = {
settings?: TDatoPluginBuzzOptionsSettings
templates?: {
[key: string]: TDatoPluginBuzzOptions
}
}
export type TDatoPluginBuzzOptionsPreset = {
label: string
values: {
[key: string]: string | number | boolean
}
preview?: string
}
export type TDatoPluginBuzzOptionsProp =
| {
label: string
type: 'string' | 'number' | 'boolean'
default?: string | number | boolean
}
| {
type: 'string' | 'number' | 'select'
options: {
label: string
value: string | number
}
}
export type TDatoPluginBuzzOptionsSettings = {
debug?: {
togglePropsKey?: boolean
}
presets?: {
display?: boolean
excludeProps?: string[]
preview?: {
aspectRatio: number
height: number
}
}
props: {
display?: boolean | string[]
}
panel?: {
collapsed?: boolean
icon?: string
label?: string
}
}