Sync acceptance criteria toggle state to children
linter / quality (pull_request) Successful in 1m16s
tests / ci (8.4) (pull_request) Failing after 1m38s

This commit is contained in:
2026-05-20 13:34:28 +00:00
parent 4fb25ccecd
commit 2bc7745e53
4 changed files with 201 additions and 11 deletions
+28
View File
@@ -65,6 +65,34 @@ export const buildAcceptanceCriteria = (
return normalizeAcceptanceCriteria(parseChecklistLines(checklistInput));
};
export const syncAcceptanceCriteriaDescendantCheckedState = (
items: AcceptanceCriteriaModel,
index: number,
checked: boolean,
): AcceptanceCriteriaModel => {
if (index < 0 || index >= items.length) {
return items;
}
const parentIndent = items[index]?.indent ?? 0;
return items.map((item, itemIndex) => {
if (itemIndex === index) {
return { ...item, checked };
}
if (itemIndex < index) {
return item;
}
if (item.indent <= parentIndent) {
return item;
}
return { ...item, checked };
});
};
export const acceptanceCriteriaToEditorState = (
value: AcceptanceCriteriaModel | null | undefined,
): AcceptanceCriteriaEditorState => {
+5 -2
View File
@@ -8,6 +8,7 @@ import {
formatChecklistLines,
normalizeAcceptanceCriteria,
parseChecklistLines,
syncAcceptanceCriteriaDescendantCheckedState,
} from '@/lib/acceptance-criteria';
import ProjectTicketBranchController from '@/actions/App/Http/Controllers/ProjectTicketBranchController';
import ProjectTicketLinkController from '@/actions/App/Http/Controllers/ProjectTicketLinkController';
@@ -392,8 +393,10 @@ const persistAcceptanceCriteriaToggle = async (
return;
}
const nextAcceptanceCriteria = savedAcceptanceCriteria.value.map((item, itemIndex) =>
itemIndex === index ? { ...item, checked } : item,
const nextAcceptanceCriteria = syncAcceptanceCriteriaDescendantCheckedState(
savedAcceptanceCriteria.value,
index,
checked,
);
const previousChecklist = formatChecklistLines(savedAcceptanceCriteria.value);
const nextChecklist = formatChecklistLines(nextAcceptanceCriteria);