diff --git a/samples/MADE.Samples/MADE.Samples.Droid/MADE.Samples.Droid.csproj b/samples/MADE.Samples/MADE.Samples.Droid/MADE.Samples.Droid.csproj index 375059f..b352abd 100644 --- a/samples/MADE.Samples/MADE.Samples.Droid/MADE.Samples.Droid.csproj +++ b/samples/MADE.Samples/MADE.Samples.Droid/MADE.Samples.Droid.csproj @@ -63,14 +63,20 @@ 7.1.2 - - - - - - - - + + 10.4.0 + + + + + + 1.6.0-preview1 + + + + + + 5.0.2 diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidatorFluentValidationCode.txt b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidatorFluentValidationCode.txt new file mode 100644 index 0000000..4b1fa37 --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidatorFluentValidationCode.txt @@ -0,0 +1,24 @@ +public FluentValidatorCollection FluentValidationValidators { get; } = new(GetFluentValidators()); + +public string FluentValidationInputText +{ + get => fluentValidationInputText; + set => this.SetProperty(ref fluentValidationInputText, value); +} + +private static IEnumerable> GetFluentValidators() +{ + var requiredValidator = new InlineValidator(); + requiredValidator + .RuleFor(x => x) + .NotEmpty() + .WithMessage("A value is required."); + + var maxLengthValidator = new InlineValidator(); + maxLengthValidator + .RuleFor(x => x.Length) + .LessThanOrEqualTo(16) + .WithMessage("The length of the value must be less than or equal to 16 characters."); + + return new[] { requiredValidator, maxLengthValidator }; +} \ No newline at end of file diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidatorFluentValidationXaml.txt b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidatorFluentValidationXaml.txt new file mode 100644 index 0000000..46e3429 --- /dev/null +++ b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Assets/InputValidator/InputValidatorFluentValidationXaml.txt @@ -0,0 +1,23 @@ + + + + + + + + diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Pages/InputValidatorPage.xaml b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Pages/InputValidatorPage.xaml index 24213c7..bdfe428 100644 --- a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Pages/InputValidatorPage.xaml +++ b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/Pages/InputValidatorPage.xaml @@ -50,6 +50,7 @@ + @@ -75,6 +76,7 @@ @@ -90,6 +92,25 @@ + + + + + + + + diff --git a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/ViewModels/InputValidatorPageViewModel.cs b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/ViewModels/InputValidatorPageViewModel.cs index e33d637..e3ba28f 100644 --- a/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/ViewModels/InputValidatorPageViewModel.cs +++ b/samples/MADE.Samples/MADE.Samples.Shared/Features/Samples/ViewModels/InputValidatorPageViewModel.cs @@ -1,7 +1,9 @@ namespace MADE.Samples.Features.Samples.ViewModels { using System; + using System.Collections.Generic; using CommunityToolkit.Mvvm.Messaging; + using FluentValidation; using MADE.Data.Validation; using MADE.Data.Validation.Validators; using MADE.UI.Views.Navigation; @@ -11,13 +13,15 @@ public class InputValidatorPageViewModel : PageViewModel { private string inputText; private DateTimeOffset? inputDate; + private string fluentValidationInputText; public InputValidatorPageViewModel(INavigationService navigationService, IMessenger messenger) : base(navigationService, messenger) { } - public ValidatorCollection InputTextValidators { get; } = new ValidatorCollection { new RequiredValidator(), new MaxLengthValidator(16) }; + public ValidatorCollection InputTextValidators { get; } = + new ValidatorCollection { new RequiredValidator(), new MaxLengthValidator(16) }; public string InputText { @@ -25,12 +29,41 @@ public string InputText set => this.SetProperty(ref inputText, value); } - public ValidatorCollection InputDateValidators { get; } = new ValidatorCollection { new RequiredValidator(), new BetweenValidator(DateTimeOffset.Now.AddDays(-7), DateTimeOffset.Now.AddDays(7)) }; + public ValidatorCollection InputDateValidators { get; } = new ValidatorCollection + { + new RequiredValidator(), + new BetweenValidator(DateTimeOffset.Now.AddDays(-7), DateTimeOffset.Now.AddDays(7)) + }; public DateTimeOffset? InputDate { get => inputDate; set => this.SetProperty(ref inputDate, value); } + + public FluentValidatorCollection FluentValidationValidators { get; } = new(GetFluentValidators()); + + public string FluentValidationInputText + { + get => fluentValidationInputText; + set => this.SetProperty(ref fluentValidationInputText, value); + } + + private static IEnumerable> GetFluentValidators() + { + var requiredValidator = new InlineValidator(); + requiredValidator + .RuleFor(x => x) + .NotEmpty() + .WithMessage("A value is required."); + + var maxLengthValidator = new InlineValidator(); + maxLengthValidator + .RuleFor(x => x.Length) + .LessThanOrEqualTo(16) + .WithMessage("The length of the value must be less than or equal to 16 characters."); + + return new[] { requiredValidator, maxLengthValidator }; + } } } \ No newline at end of file diff --git a/samples/MADE.Samples/MADE.Samples.Shared/MADE.Samples.Shared.projitems b/samples/MADE.Samples/MADE.Samples.Shared/MADE.Samples.Shared.projitems index 7187f7c..e448a0a 100644 --- a/samples/MADE.Samples/MADE.Samples.Shared/MADE.Samples.Shared.projitems +++ b/samples/MADE.Samples/MADE.Samples.Shared/MADE.Samples.Shared.projitems @@ -101,6 +101,11 @@ + + Designer + + + Designer @@ -111,6 +116,11 @@ + + Designer + + + Designer diff --git a/samples/MADE.Samples/MADE.Samples.UWP/MADE.Samples.UWP.csproj b/samples/MADE.Samples/MADE.Samples.UWP/MADE.Samples.UWP.csproj index b773ac4..50c1e70 100644 --- a/samples/MADE.Samples/MADE.Samples.UWP/MADE.Samples.UWP.csproj +++ b/samples/MADE.Samples/MADE.Samples.UWP/MADE.Samples.UWP.csproj @@ -8,14 +8,20 @@ 7.1.2 - - - - - - - - + + 10.4.0 + + + + + + 1.6.0-preview1 + + + + + + 5.0.2 diff --git a/samples/MADE.Samples/MADE.Samples.Wasm/MADE.Samples.Wasm.csproj b/samples/MADE.Samples/MADE.Samples.Wasm/MADE.Samples.Wasm.csproj index ffd0fa2..534d297 100644 --- a/samples/MADE.Samples/MADE.Samples.Wasm/MADE.Samples.Wasm.csproj +++ b/samples/MADE.Samples/MADE.Samples.Wasm/MADE.Samples.Wasm.csproj @@ -42,14 +42,16 @@ - - - - - - - - + + + + + + + + + + diff --git a/samples/MADE.Samples/MADE.Samples.iOS/MADE.Samples.iOS.csproj b/samples/MADE.Samples/MADE.Samples.iOS/MADE.Samples.iOS.csproj index 868dcd0..3231da0 100644 --- a/samples/MADE.Samples/MADE.Samples.iOS/MADE.Samples.iOS.csproj +++ b/samples/MADE.Samples/MADE.Samples.iOS/MADE.Samples.iOS.csproj @@ -118,14 +118,20 @@ 7.1.2 - - - - - - - - + + 10.4.0 + + + + + + 1.6.0-preview1 + + + + + + 5.0.2 diff --git a/src/MADE.UI.Controls.DropDownList/MADE.UI.Controls.DropDownList.csproj b/src/MADE.UI.Controls.DropDownList/MADE.UI.Controls.DropDownList.csproj index 7b1e40c..8239fd0 100644 --- a/src/MADE.UI.Controls.DropDownList/MADE.UI.Controls.DropDownList.csproj +++ b/src/MADE.UI.Controls.DropDownList/MADE.UI.Controls.DropDownList.csproj @@ -18,8 +18,8 @@ - - + + diff --git a/src/MADE.UI.Controls.FilePicker/MADE.UI.Controls.FilePicker.csproj b/src/MADE.UI.Controls.FilePicker/MADE.UI.Controls.FilePicker.csproj index 7ee998a..c986a85 100644 --- a/src/MADE.UI.Controls.FilePicker/MADE.UI.Controls.FilePicker.csproj +++ b/src/MADE.UI.Controls.FilePicker/MADE.UI.Controls.FilePicker.csproj @@ -18,7 +18,7 @@ - + diff --git a/src/MADE.UI.Controls.Validator/IInputValidator.cs b/src/MADE.UI.Controls.Validator/IInputValidator.cs index 7a27dc1..c990205 100644 --- a/src/MADE.UI.Controls.Validator/IInputValidator.cs +++ b/src/MADE.UI.Controls.Validator/IInputValidator.cs @@ -29,6 +29,6 @@ public interface IInputValidator /// /// Gets or sets the validators to run on the input. /// - ValidatorCollection Validators { get; set; } + IValidatorCollection Validators { get; set; } } } diff --git a/src/MADE.UI.Controls.Validator/InputValidator.cs b/src/MADE.UI.Controls.Validator/InputValidator.cs index fd9d321..dfcaa7a 100644 --- a/src/MADE.UI.Controls.Validator/InputValidator.cs +++ b/src/MADE.UI.Controls.Validator/InputValidator.cs @@ -30,9 +30,9 @@ public partial class InputValidator : ContentControl, IInputValidator /// public static readonly DependencyProperty ValidatorsProperty = DependencyProperty.Register( nameof(Validators), - typeof(ValidatorCollection), + typeof(IValidatorCollection), typeof(InputValidator), - new PropertyMetadata(default(ValidatorCollection), (o, args) => ((InputValidator)o).InvokeValidators())); + new PropertyMetadata(default(IValidatorCollection), (o, args) => ((InputValidator)o).InvokeValidators())); /// /// Identifies the dependency property. @@ -79,9 +79,9 @@ public object Input /// /// Gets or sets the validators to run on the input. /// - public ValidatorCollection Validators + public IValidatorCollection Validators { - get => (ValidatorCollection)this.GetValue(ValidatorsProperty); + get => (IValidatorCollection)this.GetValue(ValidatorsProperty); set => this.SetValue(ValidatorsProperty, value); } diff --git a/src/MADE.UI.Controls.Validator/MADE.UI.Controls.Validator.csproj b/src/MADE.UI.Controls.Validator/MADE.UI.Controls.Validator.csproj index 9aaa7d0..2c6f74f 100644 --- a/src/MADE.UI.Controls.Validator/MADE.UI.Controls.Validator.csproj +++ b/src/MADE.UI.Controls.Validator/MADE.UI.Controls.Validator.csproj @@ -18,7 +18,7 @@ - + diff --git a/src/MADE.UI.Data.Converters/MADE.UI.Data.Converters.csproj b/src/MADE.UI.Data.Converters/MADE.UI.Data.Converters.csproj index 38b3c73..68ecd7e 100644 --- a/src/MADE.UI.Data.Converters/MADE.UI.Data.Converters.csproj +++ b/src/MADE.UI.Data.Converters/MADE.UI.Data.Converters.csproj @@ -19,7 +19,7 @@ - + diff --git a/src/MADE.UI.Styling/MADE.UI.Styling.csproj b/src/MADE.UI.Styling/MADE.UI.Styling.csproj index 00fcbe9..15ece31 100644 --- a/src/MADE.UI.Styling/MADE.UI.Styling.csproj +++ b/src/MADE.UI.Styling/MADE.UI.Styling.csproj @@ -26,7 +26,7 @@ - + diff --git a/src/MADE.UI.ViewManagement/MADE.UI.ViewManagement.csproj b/src/MADE.UI.ViewManagement/MADE.UI.ViewManagement.csproj index 16cd4ee..bda99c0 100644 --- a/src/MADE.UI.ViewManagement/MADE.UI.ViewManagement.csproj +++ b/src/MADE.UI.ViewManagement/MADE.UI.ViewManagement.csproj @@ -18,7 +18,7 @@ - +