feat(form): add metadata tag to bypass validation #29

This commit is contained in:
2022-11-15 18:48:02 -05:00
parent cecbc94a95
commit 6eb40de72c
3 changed files with 161 additions and 5 deletions
@@ -23,7 +23,21 @@ class OnlyRequiredInputValidator extends FormValidator {
@override
FormStatus validate(WyattForm form) {
// TODO(hpcl): use metadata to check if input is required or not.
if (isPure(form)) {
return FormStatus.pure;
}
final inputsToTest =
form.inputs.where((input) => input.metadata.isRequired);
if (inputsToTest.every((input) => input.validator.pure)) {
return FormStatus.pure;
}
if (inputsToTest.any((input) => input.validator.valid == false)) {
return FormStatus.invalid;
}
return FormStatus.valid;
}
}
@@ -18,38 +18,44 @@
import 'package:equatable/equatable.dart';
import 'package:wyatt_architecture/wyatt_architecture.dart';
class FormInputMetadata<Extra> extends Equatable
implements Entity {
class FormInputMetadata<Extra> extends Equatable implements Entity {
final bool export;
final bool isRequired;
final String? name;
final Extra? extra;
const FormInputMetadata({
this.export = true,
this.isRequired = true,
this.name,
this.extra,
});
FormInputMetadata<Extra> copyWith({
bool? export,
bool? isRequired,
String? name,
Extra? extra,
}) =>
FormInputMetadata<Extra>(
export: export ?? this.export,
isRequired: isRequired ?? this.isRequired,
name: name ?? this.name,
extra: extra ?? this.extra,
);
FormInputMetadata<Extra> clone() => copyWith(
export: export,
isRequired: isRequired,
name: name,
extra: extra,
);
@override
bool? get stringify => true;
List<Object?> get props => [export, isRequired, name, extra];
@override
List<Object?> get props => [export, name, extra];
String toString() =>
'FormInputMetada(name: $name, export: $export, isRequired: $isRequired, '
'${(extra != null) ? "extra(${extra.runtimeType}): $extra" : ""})';
}