Sync acceptance criteria toggle state to children
This commit is contained in:
@@ -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 => {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user