This commit is contained in:
2025-04-15 14:06:20 +02:00
parent 41a129db44
commit 0b7abff431

View File

@@ -468,32 +468,63 @@ class AstromicFormController extends FormController {
} }
} }
bool validateGroup(String groupID, {Map<String, int>? parents}) { (List<String> fields, List<String> values) _checkSubgroupsToValidate(String groupID, {Map<String, int>? parents}) {
FormGroupStructure? groupStructure = getGroupStructure(groupID);
String? prefix;
if (parents != null) {
prefix = parents.entries.map((MapEntry<String, int> parentEntry) => standeredGroupFormat(parentEntry.key, parentEntry.value.toString(), null)).join('-');
}
//
//
List<String> fieldsToValidate = <String>[];
List<String> valuesToValidate = <String>[];
for ((int, FormGroupStructure) sg in (groupStructure?.subGroups ?? <(int, FormGroupStructure)>[])) {
FormGroupStructure? subgroupStructure = getGroupStructure(sg.$2.id);
int sgInstances = getInstanceCount(sg.$2.id, parents: <String, int>{...?parents});
for (int i = 0; i < sgInstances; i++) {
_checkSubgroupsToValidate(
sg.$2.id,
parents: <String, int>{
...?parents,
...<String, int>{sg.$2.id: i}
},
);
for (String fieldID in subgroupStructure!.fields) {
fieldsToValidate.add(standeredGroupFormat((prefix != null ? '$prefix-' : '') + sg.$2.id, i.toString(), fieldID));
}
for (String valueID in (subgroupStructure.values ?? <String>[])) {
valuesToValidate.add(standeredGroupFormat((prefix != null ? '$prefix-' : '') + sg.$2.id, i.toString(), valueID));
}
}
}
return (fieldsToValidate, valuesToValidate);
}
/// Validate the group with ID.
bool validateGroup(String groupID) {
// Get tha main targeted group's structure // Get tha main targeted group's structure
FormGroupStructure? groupStructure = getGroupStructure(groupID); FormGroupStructure? groupStructure = getGroupStructure(groupID);
assert(groupStructure != null, 'The Group $groupID doesn\'t seem to be found, are you sure you initialized it?'); assert(groupStructure != null, 'The Group $groupID doesn\'t seem to be found, are you sure you initialized it?');
// Get the prefix for subgroups if exists
String? prefix;
if (isASubGroup(groupID) && parents != null) {
prefix = parents.entries.map((MapEntry<String, int> parentEntry) => standeredGroupFormat(parentEntry.key, parentEntry.value.toString(), null)).join('-');
}
// Get current instances of this group and the new index. // Get current instances of this group and the new index.
int currentGroupInstances = getInstanceCount(groupID, parents: parents); int currentGroupInstances = getInstanceCount(groupID);
List<String> fieldsToValidate = <String>[]; List<String> fieldsToValidate = <String>[];
List<String> valuesToValidate = <String>[]; List<String> valuesToValidate = <String>[];
for (int i = 0; i < currentGroupInstances; i++) { for (int i = 0; i < currentGroupInstances; i++) {
for (String fieldID in groupStructure!.fields) { for (String fieldID in groupStructure!.fields) {
fieldsToValidate.add((prefix != null ? '$prefix-' : '') + standeredGroupFormat(groupID, i.toString(), fieldID)); fieldsToValidate.add(standeredGroupFormat(groupID, i.toString(), fieldID));
} }
for (String valueID in (groupStructure.values ?? <String>[])) { for (String valueID in (groupStructure.values ?? <String>[])) {
valuesToValidate.add((prefix != null ? '$prefix-' : '') + standeredGroupFormat(groupID, i.toString(), valueID)); valuesToValidate.add(standeredGroupFormat(groupID, i.toString(), valueID));
} }
}
// // Loop through the subgroups and get their fields and values
(List<String> fields, List<String> values) sgRet = _checkSubgroupsToValidate(groupID, parents: <String, int>{groupID: i});
fieldsToValidate.addAll(sgRet.$1);
valuesToValidate.addAll(sgRet.$2);
} //
return validateOnly(fieldsToValidate) && validateValues(valuesToValidate); return validateOnly(fieldsToValidate) && validateValues(valuesToValidate);
} }
//!SECTION //!SECTION