io-actions/src/docs/render_block_fields.js
2025-07-10 16:05:26 -04:00

52 lines
1.5 KiB
JavaScript

import { capitalize, filter, isArray, isObject, isString, map, mapValues, values } from 'lodash-es'
import { niceTemplate } from '#src/util.js'
const
getLineObjects = definition => filter(map(filter(definition.lines, isArray), "[1]"), isObject),
renderFields = definition => {
const fields = filter(getLineObjects(definition), "field").concat(
values(mapValues(definition.fields, (newField, name) => {
newField.field = name
return newField
}))
)
if(!fields.length) { return "This block has no form fields." }
return fields.map(renderField).join("\n\n")
},
renderField = field => {
const lines = []
// title for this field
lines.push(`### \`${capitalize(field.field)}\`:`)
// add lines based on what properties are present
Object.hasOwn(field, 'description') && lines.push(niceTemplate(field.description))
Object.hasOwn(field, 'text') && lines.push(renderTextField(field))
Object.hasOwn(field, 'checked') && lines.push(renderCheckboxField(field))
Object.hasOwn(field, 'options') && lines.push(renderSelectField(field))
return lines.join("\n\n")
},
renderTextField = textField => `Default: "${textField.text}"`,
renderCheckboxField = checkboxField => `- Boolean (default: ${checkboxField.checked})`,
renderSelectField = selectField => {
const
optionList = map(selectField.options, ([ label, , doc ]) => doc
? `- \`${label}\`: ${doc}`
: `- \`${label}\``
).join("\n")
return optionList
}
export default renderFields