[SYNC]
This commit is contained in:
@@ -138,6 +138,9 @@ class AstromicFormController extends FormController {
|
|||||||
//S1 - State Variables
|
//S1 - State Variables
|
||||||
final List<FormGroupStructure> _formGroups = <FormGroupStructure>[];
|
final List<FormGroupStructure> _formGroups = <FormGroupStructure>[];
|
||||||
//S1 - Methods
|
//S1 - Methods
|
||||||
|
/// Does the controller has a field group with this ID.
|
||||||
|
bool hasFieldGroup(String formGroupID) => getGroupStructure(formGroupID) != null;
|
||||||
|
|
||||||
/// Get the structure of this groupId
|
/// Get the structure of this groupId
|
||||||
FormGroupStructure? getGroupStructure(String groupID) {
|
FormGroupStructure? getGroupStructure(String groupID) {
|
||||||
// Get the full path of the group
|
// Get the full path of the group
|
||||||
@@ -204,7 +207,7 @@ class AstromicFormController extends FormController {
|
|||||||
if (p != null && p.split('->').length > 1 && p.split('->').indexOf(targetGroupID) != 0) {
|
if (p != null && p.split('->').length > 1 && p.split('->').indexOf(targetGroupID) != 0) {
|
||||||
// This is a subgroup
|
// This is a subgroup
|
||||||
pattern = RegExp(r'^' +
|
pattern = RegExp(r'^' +
|
||||||
p.split('->').sublist(0, p.split('->').indexOf(targetGroupID)).map((a) => standeredGroupFormat(a, '0', '')).toList().join('') +
|
p.split('->').sublist(0, p.split('->').indexOf(targetGroupID)).map((String a) => standeredGroupFormat(a, '0', '')).toList().join() +
|
||||||
standeredGroupFormat(targetGroupID, r'[\d+]', firstField) +
|
standeredGroupFormat(targetGroupID, r'[\d+]', firstField) +
|
||||||
r'$');
|
r'$');
|
||||||
} else {
|
} else {
|
||||||
@@ -277,7 +280,9 @@ class AstromicFormController extends FormController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Get the target formGroup Value.
|
/// Get the target formGroup Value.
|
||||||
FormGroupValue? getFormGroupValue(String formGroupID) {
|
FormGroupValue? getFormGroupValue(String formGroupID, {String? prefix}) {
|
||||||
|
assert(prefix != null || _formGroups.map((FormGroupStructure f) => f.id).contains(formGroupID), 'This method is not valid for sub-groups.');
|
||||||
|
|
||||||
// Get the group structure with the ID
|
// Get the group structure with the ID
|
||||||
FormGroupStructure? groupStructure = getGroupStructure(formGroupID);
|
FormGroupStructure? groupStructure = getGroupStructure(formGroupID);
|
||||||
|
|
||||||
@@ -290,20 +295,27 @@ class AstromicFormController extends FormController {
|
|||||||
// get the values IDs
|
// get the values IDs
|
||||||
List<String> valuesIDs = groupStructure.values?.nonNulls.toList() ?? <String>[];
|
List<String> valuesIDs = groupStructure.values?.nonNulls.toList() ?? <String>[];
|
||||||
|
|
||||||
// get the subGroups
|
|
||||||
List<FormGroupValue> subValues = <FormGroupValue>[];
|
|
||||||
if (groupStructure.subGroups != null && groupStructure.subGroups!.isNotEmpty) {
|
|
||||||
subValues = groupStructure.subGroups!.map(((int, FormGroupStructure) s) => getFormGroupValue(s.$2.id)).nonNulls.toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
List<FormGroupInstance> instances = <FormGroupInstance>[];
|
List<FormGroupInstance> instances = <FormGroupInstance>[];
|
||||||
for (int i = 0; i < instancesCount; i++) {
|
for (int i = 0; i < instancesCount; i++) {
|
||||||
|
// get the subGroups
|
||||||
|
List<FormGroupValue> subValues = <FormGroupValue>[];
|
||||||
|
if (groupStructure.subGroups != null && groupStructure.subGroups!.isNotEmpty) {
|
||||||
|
subValues = groupStructure.subGroups!
|
||||||
|
.map(((int, FormGroupStructure) s) => getFormGroupValue(s.$2.id, prefix: (prefix != null ? '$prefix-' : '') + standeredGroupFormat(formGroupID, i.toString(), null)))
|
||||||
|
.nonNulls
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
String pr = prefix != null ? '$prefix-' : '';
|
||||||
instances.add(
|
instances.add(
|
||||||
FormGroupInstance(
|
FormGroupInstance(
|
||||||
composedID: standeredGroupFormat(formGroupID, i.toString(), ''),
|
composedID: pr + standeredGroupFormat(formGroupID, i.toString(), ''),
|
||||||
fields: Map<String, String>.fromEntries(fieldsIDs.map((String id) => MapEntry<String, String>(standeredGroupFormat(formGroupID, i.toString(), id),value(standeredGroupFormat(formGroupID, i.toString(), id)))).toList()),
|
fields: Map<String, String>.fromEntries(fieldsIDs
|
||||||
|
.map((String id) => MapEntry<String, String>(pr + standeredGroupFormat(formGroupID, i.toString(), id), value(pr + standeredGroupFormat(formGroupID, i.toString(), id))))
|
||||||
|
.toList()),
|
||||||
values: valuesIDs.isNotEmpty
|
values: valuesIDs.isNotEmpty
|
||||||
? Map<String, dynamic>.fromEntries(valuesIDs.map((String id) => MapEntry<String, dynamic>(standeredGroupFormat(formGroupID, i.toString(), id), getValue<dynamic>(standeredGroupFormat(formGroupID, i.toString(), id)))).toList())
|
? Map<String, dynamic>.fromEntries(valuesIDs
|
||||||
|
.map((String id) => MapEntry<String, dynamic>(pr + standeredGroupFormat(formGroupID, i.toString(), id), getValue<dynamic>(pr + standeredGroupFormat(formGroupID, i.toString(), id))))
|
||||||
|
.toList())
|
||||||
: <String, dynamic>{},
|
: <String, dynamic>{},
|
||||||
subGroups: subValues,
|
subGroups: subValues,
|
||||||
),
|
),
|
||||||
@@ -314,241 +326,41 @@ class AstromicFormController extends FormController {
|
|||||||
return groupValue;
|
return groupValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// _formController.initializeFormGroup(
|
bool isASubGroup(String formGroupID) {
|
||||||
// FormGroupStructure(
|
List<String>? fullPath = getFullPathOfGroup(formGroupID)?.split('->');
|
||||||
// id: 'mainGroup',
|
return fullPath != null && fullPath.length > 1 && fullPath.indexOf(formGroupID) != 0;
|
||||||
// fields: [
|
}
|
||||||
// 'title',
|
|
||||||
// 'description',
|
|
||||||
// ],
|
|
||||||
// values: [
|
|
||||||
// 'media',
|
|
||||||
// ],
|
|
||||||
// subGroups: [
|
|
||||||
// (FormGroupStructure(
|
|
||||||
// id: 'variations',
|
|
||||||
// fields: ['title'],
|
|
||||||
// values: ['media'],
|
|
||||||
// ),3),
|
|
||||||
// ],
|
|
||||||
// ),
|
|
||||||
// initialCount: 2,
|
|
||||||
// );
|
|
||||||
/// Does the controller has a field group with this ID.
|
|
||||||
// bool hasFieldGroup(String formGroupID, {bool isSubGroup = false}) => _getGroupStructure(formGroupID, isSubGroup: isSubGroup) != null;
|
|
||||||
|
|
||||||
/// Get the formGroupStructure of this groupId
|
String addInstanceToFormGroup(String formGroupID, {Map<String, int>? parentsPrefixes}) {
|
||||||
// String? findGroupPath(String groupID, List<FormGroupStructure>? groups) {
|
// Get the group structure with the same ID
|
||||||
// if ((groups ?? _formGroups).map((FormGroupStructure a) => a.id).contains(groupID)) return groupID;
|
FormGroupStructure? structure = getGroupStructure(formGroupID);
|
||||||
// findGroupPath(
|
assert(structure != null, 'The Group $formGroupID doesn\'t seem to be found, are you sure you initialized it?');
|
||||||
// groupID,
|
|
||||||
// (groups ?? _formGroups)
|
|
||||||
// .map((FormGroupStructure f) => f.subGroups?.map(((FormGroupStructure, int) aa) => aa.$1).toList())
|
|
||||||
// .toList()
|
|
||||||
// .reduce((List<FormGroupStructure>? a, List<FormGroupStructure>? b) => <FormGroupStructure>[...?a, ...?b])
|
|
||||||
// ?.toList() ??
|
|
||||||
// <FormGroupStructure>[],
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
|
|
||||||
// FormGroupStructure? _getGroupStructure(String formGroupID, {bool isSubGroup = false}) {
|
// Get current instances of this group
|
||||||
// FormGroupStructure? groupStructure;
|
int currentGroupInstances = getInstanceCount(formGroupID);
|
||||||
// if (isSubGroup) {
|
int newGroupIndex = currentGroupInstances + 1;
|
||||||
// FormGroupStructure? parentGroup =
|
|
||||||
// _formGroups.where((FormGroupStructure f) => (f.subGroups?.map(((FormGroupStructure, int) ss) => ss.$1.id).contains(formGroupID) ?? false)).nonNulls.toList().firstOrNull;
|
|
||||||
// if (parentGroup != null && parentGroup.subGroups != null && parentGroup.subGroups!.map(((FormGroupStructure, int) i) => i.$1.id).contains(formGroupID)) {
|
|
||||||
// assert(parentGroup.subGroups!.where(((FormGroupStructure, int) f) => f.$1.id == formGroupID).nonNulls.toList().length == 1, 'Seems there are multible subgroups with this ID!');
|
|
||||||
// groupStructure = parentGroup.subGroups!.where(((FormGroupStructure, int) f) => f.$1.id == formGroupID).nonNulls.toList().firstOrNull?.$1;
|
|
||||||
// }
|
|
||||||
// } else {
|
|
||||||
// groupStructure = _formGroups.where((FormGroupStructure f) => f.id == formGroupID).nonNulls.toList().firstOrNull;
|
|
||||||
// }
|
|
||||||
// //
|
|
||||||
// return groupStructure;
|
|
||||||
// }
|
|
||||||
|
|
||||||
/// Get current Instance count of this formGroup
|
if (structure!.subGroups != null && structure.subGroups!.isNotEmpty) {
|
||||||
// int formGroupInstancesLength(String formGroupID, {bool isSubGroup = false}) {
|
for ((int gI, FormGroupStructure gS) f in structure.subGroups!) {
|
||||||
// // Get the group structure with the same ID
|
addInstanceToFormGroup(formGroupID, parentsPrefixes: {
|
||||||
// FormGroupStructure? structure = _getGroupStructure(formGroupID, isSubGroup: isSubGroup);
|
...?parentsPrefixes,
|
||||||
// assert(structure != null, 'The ${isSubGroup ? "SUBGroup" : "Group"} $formGroupID doesn\'t seem to be found, are you sure you initialized it?');
|
...{formGroupID: newGroupIndex},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Map<String, String> firstSetOfFieldsWithID = Map<String, String>.fromEntries(
|
String prefixedGroup = parentsPrefixes?.entries.map((MapEntry<String, int> p) => standeredGroupFormat(p.key, p.value.toString(), null)).toList().join('-') ?? '';
|
||||||
// controllers.entries.where((MapEntry<String, String> c) => RegExp(formGroupID + r'-#[\d+]-' + groupStructure!.fields.first).hasMatch(c.key)).nonNulls.toList(),
|
// Add the controllers and values.
|
||||||
// );
|
for (String fieldID in structure.fields.nonNulls) {
|
||||||
// }
|
controller(prefixedGroup + standeredGroupFormat(formGroupID, newGroupIndex.toString(), fieldID));
|
||||||
|
}
|
||||||
/// Prepare the groupStructure.
|
if (structure.values != null && structure.values!.isNotEmpty) {
|
||||||
// void _addFieldsToGroup(String structureID, List<String> fields, List<String>? values, int index) {
|
for (String valueID in structure.values!.nonNulls) {
|
||||||
// for (String fieldID in fields) {
|
controller(prefixedGroup + standeredGroupFormat(formGroupID, newGroupIndex.toString(), valueID));
|
||||||
// controller(standeredGroupFormat(structureID, index, fieldID));
|
}
|
||||||
// }
|
}
|
||||||
// if (values != null && values.isNotEmpty) {
|
return prefixedGroup + standeredGroupFormat(formGroupID, newGroupIndex.toString(), '');
|
||||||
// for (String valueID in values) {
|
}
|
||||||
// controller(standeredGroupFormat(structureID, index, valueID));
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
/// Initialize the formGroup Structure.
|
|
||||||
// void initializeFormGroup(FormGroupStructure groupStructure, {int initialCount = 1}) {
|
|
||||||
// assert(groupStructure.fields.isNotEmpty, '${groupStructure.id}: Group fields should NOT be empty.');
|
|
||||||
|
|
||||||
// // Validate subgroups (if any)
|
|
||||||
// groupStructure.subGroups?.map(((FormGroupStructure, int) a) => a.$1).forEach(((FormGroupStructure subGroup) {
|
|
||||||
// assert(subGroup.fields.isNotEmpty, '${subGroup.id}: Subgroup fields should NOT be empty.');
|
|
||||||
// }));
|
|
||||||
|
|
||||||
// // Add structure to registry
|
|
||||||
// _formGroups.add(groupStructure);
|
|
||||||
|
|
||||||
// for (int groupIndex = 0; groupIndex < initialCount; groupIndex++) {
|
|
||||||
// // Add main group fields/values
|
|
||||||
// _addGroupControllers(groupStructure, groupIndex);
|
|
||||||
|
|
||||||
// // Add subgroup fields/values
|
|
||||||
// if (groupStructure.subGroups != null && groupStructure.subGroups!.isNotEmpty) {
|
|
||||||
// for (final (FormGroupStructure subGroup, int subgroupInitialCount) in groupStructure.subGroups!) {
|
|
||||||
// for (int subIndex = 0; subIndex < subgroupInitialCount; subIndex++) {
|
|
||||||
// final String nestedID = standeredGroupFormat(groupStructure.id, groupIndex, subGroup.id);
|
|
||||||
// _addGroupControllers(subGroup, subIndex, parentPrefix: nestedID);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// void initializeFormGroup(FormGroupStructure groupStructure, {int initialCount = 1}) {
|
|
||||||
// assert(groupStructure.fields.isNotEmpty, '$groupStructure: Group Fields should NOT be empty.');
|
|
||||||
// if (groupStructure.subGroups != null && groupStructure.subGroups!.isNotEmpty) {
|
|
||||||
// assert(!groupStructure.subGroups!.any(((FormGroupStructure, int) a) => a.$1.fields.isEmpty), '$groupStructure: Subgroup Fields should NOT be empty.');
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Add the group.
|
|
||||||
// _formGroups.add(groupStructure);
|
|
||||||
|
|
||||||
// // Add the controllers and values.
|
|
||||||
// for (int groupInstanceIndex = 0; groupInstanceIndex < initialCount; groupInstanceIndex++) {
|
|
||||||
// _addFieldsToGroup(groupStructure.id, groupStructure.fields, groupStructure.values, groupInstanceIndex);
|
|
||||||
|
|
||||||
// // Add subGroup data if non null
|
|
||||||
// if (groupStructure.subGroups != null && groupStructure.subGroups!.isNotEmpty) {
|
|
||||||
// for ((FormGroupStructure, int) subGroupStructure in groupStructure.subGroups!) {
|
|
||||||
// for (int subgroupInstanceIndex = 0; subgroupInstanceIndex < subGroupStructure.$2; subgroupInstanceIndex++) {
|
|
||||||
// _addFieldsToGroup(standeredGroupFormat(groupStructure.id, groupInstanceIndex, subGroupStructure.$1.id), subGroupStructure.$1.fields, subGroupStructure.$1.values, subgroupInstanceIndex);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// String addInstanceToFormGroup(String formGroupID, {bool isSubGroup = false}) {
|
|
||||||
// // Get the group structure with the same ID
|
|
||||||
// FormGroupStructure? structure = _getGroupStructure(formGroupID);
|
|
||||||
// assert(structure != null, 'The ${isSubGroup ? "SUBGroup" : "Group"} $formGroupID doesn\'t seem to be found, are you sure you initialized it?');
|
|
||||||
|
|
||||||
// // Get the current fields with this ID
|
|
||||||
// Map<String, String> firstSetOfFieldsWithID = Map<String, String>.fromEntries(
|
|
||||||
// controllers.entries.where((MapEntry<String, String> c) => RegExp(formGroupID + r'-#[\d+]-' + groupStructure!.fields.first).hasMatch(c.key)).nonNulls.toList(),
|
|
||||||
// );
|
|
||||||
|
|
||||||
// // get the fields IDs
|
|
||||||
// List<String> fieldsIDs = groupStructure!.fields.nonNulls.toList();
|
|
||||||
// print('fieldIDs: $fieldsIDs');
|
|
||||||
// // get the values IDs
|
|
||||||
// List<String> valuesIDs = groupStructure.values?.nonNulls.toList() ?? <String>[];
|
|
||||||
// print('valueIDs: $valuesIDs');
|
|
||||||
|
|
||||||
// // Add the controllers and values.
|
|
||||||
|
|
||||||
// for (String fieldID in groupStructure.fields) {
|
|
||||||
// String finalFieldID = '${groupStructure.id}-#${firstSetOfFieldsWithID.length}-$fieldID';
|
|
||||||
// controller(finalFieldID);
|
|
||||||
// }
|
|
||||||
// if (groupStructure.values != null && groupStructure.values!.isNotEmpty) {
|
|
||||||
// for (String valueID in groupStructure.values!) {
|
|
||||||
// String finalFieldID = '${groupStructure.id}-#${firstSetOfFieldsWithID.length}-$valueID';
|
|
||||||
// controller(finalFieldID);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return '${groupStructure.id}-#${firstSetOfFieldsWithID.length}-';
|
|
||||||
// }
|
|
||||||
|
|
||||||
// FormGroupValue getFormGroupValue(String groupID) {
|
|
||||||
// final FormGroupStructure structure = _formGroups.firstWhere(
|
|
||||||
// (FormGroupStructure group) => group.id == groupID,
|
|
||||||
// orElse: () => throw Exception("Group '$groupID' not initialized."),
|
|
||||||
// );
|
|
||||||
|
|
||||||
// final List<FormGroupInstance> instances = <FormGroupInstance>[];
|
|
||||||
|
|
||||||
// for (int index = 0; index < structure.count; index++) {
|
|
||||||
// final Map<String, dynamic> values = {};
|
|
||||||
// final Map<String, TextEditingController> fields = {};
|
|
||||||
|
|
||||||
// // Fields (Text)
|
|
||||||
// for (final fieldID in structure.fields) {
|
|
||||||
// final fullID = standeredGroupFormat(groupID, index, fieldID);
|
|
||||||
// fields[fieldID] = controller(fullID);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // Values (Dynamic)
|
|
||||||
// for (final valueID in structure.values ?? []) {
|
|
||||||
// final fullID = standeredGroupFormat(groupID, index, valueID);
|
|
||||||
// values[valueID] = controller(fullID).value;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// // SubGroups
|
|
||||||
// final Map<String, FormGroupValue> subGroups = {};
|
|
||||||
|
|
||||||
// if (structure.subGroups != null && structure.subGroups!.isNotEmpty) {
|
|
||||||
// for ((FormGroupStructure subGroup, int subCount) in structure.subGroups!) {
|
|
||||||
// final nestedID = standeredGroupFormat(groupID, index, subGroup.id);
|
|
||||||
|
|
||||||
// final List<FormGroupInstance> subInstances = [];
|
|
||||||
|
|
||||||
// for (int subIndex = 0; subIndex < subCount; subIndex++) {
|
|
||||||
// final Map<String, dynamic> subValues = {};
|
|
||||||
// final Map<String, TextEditingController> subFields = {};
|
|
||||||
|
|
||||||
// for (final fieldID in subGroup.fields) {
|
|
||||||
// final subFullID = standeredGroupFormat(nestedID, subIndex, fieldID);
|
|
||||||
// subFields[fieldID] = controller(subFullID);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// for (final valueID in subGroup.values ?? []) {
|
|
||||||
// final subFullID = standeredGroupFormat(nestedID, subIndex, valueID);
|
|
||||||
// subValues[valueID] = controller(subFullID).value;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// subInstances.add(FormGroupInstance(
|
|
||||||
// fields: subFields,
|
|
||||||
// values: subValues,
|
|
||||||
// subGroups: const {}, // deeper nesting unsupported (for now)
|
|
||||||
// ));
|
|
||||||
// }
|
|
||||||
|
|
||||||
// subGroups[subGroup.id] = FormGroupValue(
|
|
||||||
// groupID: subGroup.id,
|
|
||||||
// instancesCount: subCount,
|
|
||||||
// instances: subInstances,
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// instances.add(FormGroupInstance(
|
|
||||||
// fields: fields,
|
|
||||||
// values: values,
|
|
||||||
// subGroups: subGroups,
|
|
||||||
// ));
|
|
||||||
// }
|
|
||||||
|
|
||||||
// return FormGroupValue(
|
|
||||||
// groupID: groupID,
|
|
||||||
// instancesCount: structure.count,
|
|
||||||
// instances: instances,
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
|
|
||||||
// void removeInstanceFromFormGroup(String formGroupID, int indexToRemove, {bool isSubGroup = false}) {
|
// void removeInstanceFromFormGroup(String formGroupID, int indexToRemove, {bool isSubGroup = false}) {
|
||||||
// // Get the group structure with the same ID
|
// // Get the group structure with the same ID
|
||||||
|
|||||||
Reference in New Issue
Block a user