This extension provides a ready to use parser for issues created via issue forms.
npm install --save @operate-first/probot-issue-form
Library exposes a single fuction parse
. It accepts probot context for issue.created
or issue.modified
events and returns a promise which resolves to a record mapping.
const issueForm = require('@operate-first/probot-issue-form');
module.exports = app => {
app.on('issues.created', async(context) => {
try {
const data = await issueForm.parse(context);
} catch {
app.log.info('Issue was not created using Issue form template (the YAML ones)')
}
});
}
See upstream documentation for API specification, schema and details.
Textual response field which allows a single line response only.
Issue template:
...
body:
- type: input
id: thisIsInput
attributes:
label: This is input field
Issue body:
### This is input field
some value
Result:
{thisIsInput: "some value"}
Issue template:
...
body:
- type: input
attributes:
label: This is input field
Issue body:
### This is input field
some value
Result:
{this-is-input-field: "some value"}
This translation of labels to IDs is available for all the other input field types as well.
Issue template:
...
body:
- type: input
attributes:
label: This is input field
Issue body:
### This is input field
_No response_
Result:
{this-is-input-field: ""}
Checkboxes are parsed into an array of selected options.
Issue template:
...
body:
- type: checkboxes
id: thisIsCheckbox
attributes:
label: Use these checkboxes
options:
- label: First item
- label: Second item
- label: Third item
Issue body:
### Use these checkboxes
- [ ] First item
- [X] Second item
- [X] Third item
Result:
{thisIsCheckbox: ["Second item", "Third item"]}
Issue template:
...
body:
- type: checkboxes
id: thisIsCheckbox
attributes:
label: Use these checkboxes
options:
- label: First item
- label: Second item
- label: Third item
Issue body:
### Use these checkboxes
- [ ] First item
- [ ] Second item
- [ ] Third item
Result:
{thisIsCheckbox: []}
Since dropdowns allows user to select multiple options (when flag mutliple
is truthy), they are parsed into array of selected options, similarly to checkboxes.
Issue template:
...
body:
- type: dropdown
id: thisIsDropdown
attributes:
label: Use this dropdown
options:
- First item
- Second item
- Third item
Issue body:
### Use this dropdown
First item
Result:
{thisIsDropdown: ["First item"]}
Issue template:
...
body:
- type: dropdown
id: thisIsDropdown
attributes:
label: Use this dropdown
multiple: true
options:
- First item
- Second item
- Third item
Issue body:
### Use this dropdown
First item, Second item
Result:
{thisIsDropdown: ["First item", "Second item"]}
Issue template:
...
body:
- type: dropdown
id: thisIsDropdown
attributes:
label: Use this dropdown
options:
- First item
- Second item
- Third item
Issue body:
### Use this dropdown
_No response_
Result:
{thisIsDropdown: []}
Type supports multiline text responses which can contain markdown formatting. There's also an optional flag render
, which wraps the response into a codeblock (```
), this extension removes this wrapping and returns the content only.
Issue template:
...
body:
- type: textarea
id: thisIsTextarea
attributes:
label: Use this textarea
Issue body:
### Use this textarea
value
can
be
multiline
Result:
{thisIsTextarea: "value
can
be
multiline"}
Issue template:
...
body:
- type: textarea
id: thisIsTextarea
attributes:
label: Use this textarea
render: true
Issue body:
### Use this textarea
```true
text
```
Result:
{thisIsTextarea: "text"}
Issue template:
...
body:
- type: textarea
id: thisIsTextarea
attributes:
label: Use this textarea
Issue body:
### Use this textarea
_No response_
Result:
{thisIsTextarea: ""}
Markdown field is not propagated to issue body, hence we ignore it.