From bd9d715a5ee039e228c42507c4a250937a97ad18 Mon Sep 17 00:00:00 2001 From: Kyle Doliente Date: Tue, 30 Jun 2026 15:02:28 -0700 Subject: [PATCH 1/5] Update docs; still need minimum version for server --- .../plugins/interactive-dialogs/_index.md | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/site/content/integrate/plugins/interactive-dialogs/_index.md b/site/content/integrate/plugins/interactive-dialogs/_index.md index 1245129977..75ae952aa2 100644 --- a/site/content/integrate/plugins/interactive-dialogs/_index.md +++ b/site/content/integrate/plugins/interactive-dialogs/_index.md @@ -68,6 +68,8 @@ Each dialog supports elements for users to enter information. - `radio`: Radio button option. Use this to quickly select an option from pre-selected choices. - `date`: Date picker field. Use this for selecting dates without time information. - `datetime`: Date and time picker field. Use this for selecting both date and time with timezone support. +- `collapsible`: A section that groups child elements under a toggleable header. Use this to organize long forms; sections can be nested and can start expanded or collapsed. + Each element is required by default, otherwise the client will return an error as shown below. Note that the error message will appear below the help text, if one is specified. To make an element optional, set the field `"optional": "true"`. @@ -621,6 +623,46 @@ The `datetime_config` object groups date/datetime configuration into a single ne - `"time_interval": 60` creates options: 00:00, 01:00, 02:00, 03:00, etc. - Invalid: `"time_interval": 7` (7 is not a divisor of 1440) +### Collapsible elements +##### Minimum Server Version: TODO: Find version + +Collapsible elements group other elements under a toggleable header, letting you organize long forms into sections. Sections can be nested, and each section can start expanded or collapsed via `is_expanded`. A `collapsible` element does not submit a value itself — only its child `elements` appear in the submission payload. There can be, at most, 3 levels of nesting. + +```json +{ + "display_name": "Contact Details", + "name": "contact_section", + "type": "collapsible", + "is_expanded": true, + "elements": [ + { + "display_name": "Email", + "name": "email", + "type": "text", + "subtype": "email", + "placeholder": "you@example.com" + }, + { + "display_name": "Phone", + "name": "phone", + "type": "text", + "optional": true + } + ] +} +``` + +The full list of supported fields is included below: + +| Field | Type | Description | +|----------------|---------|------------------------------------------------------------------------------------------------------------------------------------| +| `display_name` | String | Header text shown for the section. Maximum 24 characters. | +| `name` | String | Name of the section element used by the integration. Maximum 300 characters. You should use unique `name` fields in the same dialog. | +| `type` | String | Set this value to `collapsible` for a collapsible section. | +| `is_expanded` | Boolean | (Optional) When `true`, the section starts expanded. Default is `true` (expanded). | +| `elements` | Array | Child elements rendered inside the section. May include other `collapsible` elements to create nested sections (up to 3 levels deep). Note that each collapsible element must have at least one child, or validation will fail.| + + ## Dialog submission When a user submits a dialog, Mattermost will perform client-side input validation to make sure: From 64d2bfcfa3e83d7f86e8cfa7028ce8e0ba3ad06b Mon Sep 17 00:00:00 2001 From: Kyle Doliente Date: Thu, 2 Jul 2026 13:29:47 -0700 Subject: [PATCH 2/5] Update docs to keep current with collapsible dialog capability --- .../integrate/plugins/interactive-dialogs/_index.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/site/content/integrate/plugins/interactive-dialogs/_index.md b/site/content/integrate/plugins/interactive-dialogs/_index.md index 75ae952aa2..37913a0f2c 100644 --- a/site/content/integrate/plugins/interactive-dialogs/_index.md +++ b/site/content/integrate/plugins/interactive-dialogs/_index.md @@ -70,7 +70,6 @@ Each dialog supports elements for users to enter information. - `datetime`: Date and time picker field. Use this for selecting both date and time with timezone support. - `collapsible`: A section that groups child elements under a toggleable header. Use this to organize long forms; sections can be nested and can start expanded or collapsed. - Each element is required by default, otherwise the client will return an error as shown below. Note that the error message will appear below the help text, if one is specified. To make an element optional, set the field `"optional": "true"`. ![image](interactive-dialog-error.png) @@ -624,16 +623,17 @@ The `datetime_config` object groups date/datetime configuration into a single ne - Invalid: `"time_interval": 7` (7 is not a divisor of 1440) ### Collapsible elements -##### Minimum Server Version: TODO: Find version +##### Minimum Server Version: 11.10.0 -Collapsible elements group other elements under a toggleable header, letting you organize long forms into sections. Sections can be nested, and each section can start expanded or collapsed via `is_expanded`. A `collapsible` element does not submit a value itself — only its child `elements` appear in the submission payload. There can be, at most, 3 levels of nesting. +Collapsible elements group other elements under a toggleable header, letting you organize long forms into sections. Sections start expanded by default; set `collapsed` to `true` to have a section start closed. By default a section renders with a box outline; set `borderless` to `true` to remove it. A `collapsible` element does not submit a value itself — only its child `elements` appear in the submission payload. There can be, at most, 3 levels of nesting. ```json { "display_name": "Contact Details", "name": "contact_section", "type": "collapsible", - "is_expanded": true, + "collapsed": true, + "borderless": true, "elements": [ { "display_name": "Email", @@ -659,7 +659,8 @@ The full list of supported fields is included below: | `display_name` | String | Header text shown for the section. Maximum 24 characters. | | `name` | String | Name of the section element used by the integration. Maximum 300 characters. You should use unique `name` fields in the same dialog. | | `type` | String | Set this value to `collapsible` for a collapsible section. | -| `is_expanded` | Boolean | (Optional) When `true`, the section starts expanded. Default is `true` (expanded). | +| `collapsed` | Boolean | (Optional) When `true`, the section starts collapsed. Default is `false` (expanded). | +| `borderless` | Boolean | (Optional) When `true`, the section renders without a box outline. Default is `false` (bordered). | | `elements` | Array | Child elements rendered inside the section. May include other `collapsible` elements to create nested sections (up to 3 levels deep). Note that each collapsible element must have at least one child, or validation will fail.| From 8d720ae49db86c3257ee7aa8d642d80f7d65e5d0 Mon Sep 17 00:00:00 2001 From: Kyle Doliente <66671859+krd311@users.noreply.github.com> Date: Wed, 8 Jul 2026 10:34:28 -0700 Subject: [PATCH 3/5] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- site/content/integrate/plugins/interactive-dialogs/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/content/integrate/plugins/interactive-dialogs/_index.md b/site/content/integrate/plugins/interactive-dialogs/_index.md index 37913a0f2c..c0e41bc807 100644 --- a/site/content/integrate/plugins/interactive-dialogs/_index.md +++ b/site/content/integrate/plugins/interactive-dialogs/_index.md @@ -70,7 +70,7 @@ Each dialog supports elements for users to enter information. - `datetime`: Date and time picker field. Use this for selecting both date and time with timezone support. - `collapsible`: A section that groups child elements under a toggleable header. Use this to organize long forms; sections can be nested and can start expanded or collapsed. -Each element is required by default, otherwise the client will return an error as shown below. Note that the error message will appear below the help text, if one is specified. To make an element optional, set the field `"optional": "true"`. +Each element is required by default, otherwise the client will return an error as shown below. Note that the error message will appear below the help text, if one is specified. To make an element optional, set the field `"optional": true`. ![image](interactive-dialog-error.png) From 51766506dc6120af2267ac31d20caa99b011125c Mon Sep 17 00:00:00 2001 From: Kyle Doliente <66671859+krd311@users.noreply.github.com> Date: Wed, 8 Jul 2026 10:34:40 -0700 Subject: [PATCH 4/5] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- site/content/integrate/plugins/interactive-dialogs/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/content/integrate/plugins/interactive-dialogs/_index.md b/site/content/integrate/plugins/interactive-dialogs/_index.md index c0e41bc807..bada3e6fa3 100644 --- a/site/content/integrate/plugins/interactive-dialogs/_index.md +++ b/site/content/integrate/plugins/interactive-dialogs/_index.md @@ -623,7 +623,7 @@ The `datetime_config` object groups date/datetime configuration into a single ne - Invalid: `"time_interval": 7` (7 is not a divisor of 1440) ### Collapsible elements -##### Minimum Server Version: 11.10.0 +##### Minimum Server Version: 11.10 Collapsible elements group other elements under a toggleable header, letting you organize long forms into sections. Sections start expanded by default; set `collapsed` to `true` to have a section start closed. By default a section renders with a box outline; set `borderless` to `true` to remove it. A `collapsible` element does not submit a value itself — only its child `elements` appear in the submission payload. There can be, at most, 3 levels of nesting. From d1bc0598dcca85186190659297b0e7d7cfd695a8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 8 Jul 2026 17:38:17 +0000 Subject: [PATCH 5/5] Fix TypeError in plugin-jsdocs.js when param has no properties --- scripts/plugin-jsdocs.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scripts/plugin-jsdocs.js b/scripts/plugin-jsdocs.js index 54dd30f90f..81e231be4f 100644 --- a/scripts/plugin-jsdocs.js +++ b/scripts/plugin-jsdocs.js @@ -54,10 +54,11 @@ const methodsOutput = pluginRegistryClassMethods.map((statement) => { s => s.type === "ArrowFunctionExpression" ); if (funcExpr && funcExpr[0]) { - params = funcExpr[0].params.map(param => { - return param.properties.map(prop => { - return prop.key.name; - }); + params = funcExpr[0].params.flatMap(param => { + if (param.properties) { + return param.properties.map(prop => prop.key.name); + } + return param.name ? [param.name] : []; }); } } else {