From d715d3a35140e2d9a389eaa8bf469bff87960deb Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Tue, 10 Nov 2026 10:56:19 +0100 Subject: [PATCH] feat(conditional): go to a question after date and time questions Date and time questions get the select "After question N", stored in extraSettings.next. Date and time questions of old forms (datetime) get no jumps. Assisted-by: Claude Code:claude-opus-5-5 Signed-off-by: Andy Scherzinger --- docs/DataStructure.md | 2 +- lib/Constants.php | 2 ++ src/utils/Jumps.ts | 2 ++ tests/Unit/Service/FormsServiceTest.php | 12 +++++++++++- tests/fixtures/jump-paths.json | 19 +++++++++++++++++++ 5 files changed, 35 insertions(+), 2 deletions(-) diff --git a/docs/DataStructure.md b/docs/DataStructure.md index 2a2e5af66..81c6abe24 100644 --- a/docs/DataStructure.md +++ b/docs/DataStructure.md @@ -271,7 +271,7 @@ Optional extra settings for some [Question Types](#question-types) | `rows` | `grid` | Array | - | Array of row identifiers / labels for grid questions | | `questionType` | `grid` | String | `checkbox`, `number`, `radio` | Type of cell for grid questions (checkbox, numeric input, or radio) | | `goTo` | `dropdown, multiple_unique` | Array | see [Jumps](#jumps) | Where to go next for an answer | -| `next` | `color, file, grid, long, multiple, ranking, short` | Integer / string | question id, `'submit'` | Where to go after the question, see [Jumps](#jumps) | +| `next` | `color, date, file, grid, long, multiple, ranking, short, time` | Integer / string | question id, `'submit'` | Where to go after the question, see [Jumps](#jumps) | ### Jumps diff --git a/lib/Constants.php b/lib/Constants.php index afb0e1bf2..59d1c3fb5 100644 --- a/lib/Constants.php +++ b/lib/Constants.php @@ -242,12 +242,14 @@ class Constants { public const QUESTION_TYPES_WITH_NEXT = [ self::ANSWER_TYPE_COLOR, + self::ANSWER_TYPE_DATE, self::ANSWER_TYPE_FILE, self::ANSWER_TYPE_GRID, self::ANSWER_TYPE_LONG, self::ANSWER_TYPE_MULTIPLE, self::ANSWER_TYPE_RANKING, self::ANSWER_TYPE_SHORT, + self::ANSWER_TYPE_TIME, ]; public const EXTRA_SETTINGS_GRID_QUESTION_TYPE = [ diff --git a/src/utils/Jumps.ts b/src/utils/Jumps.ts index 5dad119b5..7eec1f992 100644 --- a/src/utils/Jumps.ts +++ b/src/utils/Jumps.ts @@ -17,12 +17,14 @@ export const QUESTION_TYPES_WITH_GOTO = ['dropdown', 'multiple_unique'] export const QUESTION_TYPES_WITH_NEXT = [ 'color', + 'date', 'file', 'grid', 'long', 'multiple', 'ranking', 'short', + 'time', ] /** The answer a jump belongs to: an option or the answer "Other" */ diff --git a/tests/Unit/Service/FormsServiceTest.php b/tests/Unit/Service/FormsServiceTest.php index 04fa89b62..6f39a5009 100644 --- a/tests/Unit/Service/FormsServiceTest.php +++ b/tests/Unit/Service/FormsServiceTest.php @@ -1687,9 +1687,19 @@ public static function dataAreExtraSettingsValid() { 'questionType' => Constants::ANSWER_TYPE_SHORT, 'expected' => false, ], - 'jump: next not offered on date questions' => [ + 'jump: next on date questions' => [ 'extraSettings' => ['next' => 5], 'questionType' => Constants::ANSWER_TYPE_DATE, + 'expected' => true, + ], + 'jump: next on time questions' => [ + 'extraSettings' => ['next' => 'submit'], + 'questionType' => Constants::ANSWER_TYPE_TIME, + 'expected' => true, + ], + 'jump: next not offered on datetime questions' => [ + 'extraSettings' => ['next' => 5], + 'questionType' => Constants::ANSWER_TYPE_DATETIME, 'expected' => false, ], 'jump: goTo per option and Other' => [ diff --git a/tests/fixtures/jump-paths.json b/tests/fixtures/jump-paths.json index 087f2f656..584b82d08 100644 --- a/tests/fixtures/jump-paths.json +++ b/tests/fixtures/jump-paths.json @@ -238,6 +238,25 @@ "answers": { "1": ["11", "12"] }, "visible": [1, 3] }, + { + "name": "a time question goes to its target", + "questions": [ + { "id": 1, "type": "time", "extraSettings": { "next": 3 } }, + { "id": 2, "type": "short", "extraSettings": {} }, + { "id": 3, "type": "short", "extraSettings": {} } + ], + "answers": { "1": ["10:30"] }, + "visible": [1, 3] + }, + { + "name": "a date question goes to its target", + "questions": [ + { "id": 1, "type": "date", "extraSettings": { "next": "submit" } }, + { "id": 2, "type": "short", "extraSettings": {} } + ], + "answers": { "1": ["2026-11-10"] }, + "visible": [1] + }, { "name": "the jumps of skipped questions do not count", "questions": [