in uui-core/src/data/processing/views/tree/treeStructure/helpers/CheckingHelper.ts [9:80]
public static cascadeSelection<TItem, TId>({
tree,
currentCheckedIds,
checkedId,
isChecked,
isCheckable,
isUnknown,
cascadeSelectionType,
}: CascadeSelectionOptions<TItem, TId>) {
const isImplicitMode = cascadeSelectionType === CascadeSelectionTypes.IMPLICIT;
let checkedIdsMap = newMap<TId, boolean>(tree.getParams());
if (!(checkedId === ROOT_ID && isImplicitMode)) {
currentCheckedIds.forEach((id) => checkedIdsMap.set(id, true));
}
const optionsWithDefaults = { isCheckable: isCheckable ?? (() => true), cascadeSelectionType };
const { count } = tree.getItems(undefined);
const treeIsLoaded = count !== 0;
// If clear items while tree is not loaded yet (while clearing tags of PickerInput before opening body).
if (!treeIsLoaded && !isChecked) {
checkedIdsMap = this.clearIfTreeNotLoaded({
tree,
checkedIdsMap,
checkedId,
isCheckable: optionsWithDefaults.isCheckable,
});
}
if (treeIsLoaded && !optionsWithDefaults.cascadeSelectionType) {
checkedIdsMap = this.simpleSelection({
tree,
checkedIdsMap,
checkedId,
isChecked,
...optionsWithDefaults,
});
}
if (treeIsLoaded && (
optionsWithDefaults.cascadeSelectionType === true
|| optionsWithDefaults.cascadeSelectionType === CascadeSelectionTypes.EXPLICIT)
) {
checkedIdsMap = this.explicitCascadeSelection({
tree,
checkedIdsMap,
checkedId,
isChecked,
...optionsWithDefaults,
});
}
if (treeIsLoaded && optionsWithDefaults.cascadeSelectionType === CascadeSelectionTypes.IMPLICIT) {
checkedIdsMap = this.implicitCascadeSelection({
tree,
checkedIdsMap,
checkedId,
isChecked,
...optionsWithDefaults,
});
}
if (!isChecked && checkedId === ROOT_ID && checkedIdsMap.size > 0) {
checkedIdsMap = this.clearUnknownItems({ checkedIdsMap, isUnknown });
}
const result = [];
for (const [id, value] of checkedIdsMap) {
value && result.push(id);
}
return result;
}