/// <summary>
 /// Includes pattern validation metadata to a reactive property.
 /// </summary>
 /// <param name="prop">Property to include.</param>
 /// <param name="vm">View model of the property.</param>
 /// <param name="regexPattern">Regular expression pattern.</param>
 /// <param name="message">Validation message.</param>
 /// <param name="category">Validation category.</param>
 /// <returns>Property.</returns>
 public static ReactiveProperty <TProp> WithPatternValidation <TProp>(this ReactiveProperty <TProp> prop,
                                                                      IReactiveProperties vm, string regexPattern, string message = null, Validation.Categories category = Validation.Categories.Error)
 {
     message = message ?? $"{prop.GetLabelAttribute(vm)} must match the pattern '{regexPattern}'";
     return(prop.WithValidation(vm, new PatternValidation(regexPattern, message, category)));
 }
        /// <summary>
        /// Includes server validation metadata to a reactive property.
        /// When this is included, the property value will be sent to the server when it changed.
        /// </summary>
        /// <param name="prop">Property to include.</param>
        /// <param name="vm">View model of the property.</param>
        /// <param name="validate">Validation function.</param>
        /// <param name="message">Validation message.</param>
        /// <param name="category">Validation category.</param>
        /// <returns>Property.</returns>
        public static ReactiveProperty <TProp> WithServerValidation <TProp>(this ReactiveProperty <TProp> prop,
                                                                            IReactiveProperties vm, Func <TProp, bool> validate, string message, Validation.Categories category = Validation.Categories.Error)
        {
            var serverValidation  = new ServerValidation(message);
            var validationMsgProp = typeof(BaseVM).IsAssignableFrom(vm.GetType()) ?
                                    (vm as BaseVM).AddProperty <bool>(ToValidationMessageName(prop, serverValidation.Id))
            : vm.AddProperty <bool>(ToValidationMessageName(prop, serverValidation.Id));

            validationMsgProp.SubscribeTo(prop.Select(val => validate(val)));
            return(prop.WithValidation(vm, serverValidation));
        }
 /// <summary>
 /// Includes maximum value validation metadata to a reactive property.
 /// </summary>
 /// <param name="prop">Property to include.</param>
 /// <param name="vm">View model of the property.</param>
 /// <param name="max">Minimum value.</param>
 /// <param name="message">Validation message.</param>
 /// <param name="category">Validation category.</param>
 /// <returns>Property.</returns>
 public static ReactiveProperty <TProp> WithMaxValidation <TProp, T>(this ReactiveProperty <TProp> prop,
                                                                     IReactiveProperties vm, T max, string message = null, Validation.Categories category = Validation.Categories.Error) where T : struct
 {
     message = message ?? $"{prop.GetLabelAttribute(vm)} must be at most {max}";
     return(prop.WithValidation(vm, new RangeValidation <T>(null, max, message, category)));
 }
Example #4
0
        /// <summary>
        /// Includes server validation metadata to a reactive property.
        /// When this is included, the property value will be sent to the server when it changed.
        /// </summary>
        /// <param name="prop">Property to include.</param>
        /// <param name="vm">View model of the property.</param>
        /// <param name="validate">Validation function.</param>
        /// <param name="message">Validation message.</param>
        /// <param name="category">Validation category.</param>
        /// <returns>Property.</returns>
        public static ReactiveProperty <TProp> WithServerValidation <TProp>(this ReactiveProperty <TProp> prop,
                                                                            Func <TProp, bool> validate, string message, Validation.Categories category = Validation.Categories.Error)
        {
            var vm = prop.ViewModel ?? throw new NullReferenceException($"Property '{prop.Name}' has no view model!");
            var serverValidation  = new ServerValidation(message);
            var validationMsgProp = typeof(BaseVM).IsAssignableFrom(vm.GetType()) ?
                                    (vm as BaseVM).AddProperty <bool>(ToValidationMessageName(prop, serverValidation.Id))
            : vm.AddProperty <bool>(ToValidationMessageName(prop, serverValidation.Id));

            validationMsgProp.SubscribeTo(prop.Select(val => validate(val)));
            return(prop.WithValidation(serverValidation));
        }
Example #5
0
        /// <summary>
        /// Includes maximum value validation metadata to a reactive property.
        /// </summary>
        /// <param name="prop">Property to include.</param>
        /// <param name="vm">View model of the property.</param>
        /// <param name="max">Minimum value.</param>
        /// <param name="message">Validation message.</param>
        /// <param name="category">Validation category.</param>
        /// <returns>Property.</returns>
        public static ReactiveProperty <TProp> WithMaxValidation <TProp, T>(this ReactiveProperty <TProp> prop,
                                                                            T max, string message = null, Validation.Categories category = Validation.Categories.Error) where T : struct
        {
            var vm = prop.ViewModel ?? throw new NullReferenceException($"Property '{prop.Name}' has no view model!");

            message = message ?? $"{prop.GetLabelAttribute(vm)} must be at most {max}";
            return(prop.WithValidation(new RangeValidation <T>(null, max, message, category)));
        }
Example #6
0
        /// <summary>
        /// Includes pattern validation metadata to a reactive property.
        /// </summary>
        /// <param name="prop">Property to include.</param>
        /// <param name="vm">View model of the property.</param>
        /// <param name="regexPattern">Regular expression pattern.</param>
        /// <param name="message">Validation message.</param>
        /// <param name="category">Validation category.</param>
        /// <returns>Property.</returns>
        public static ReactiveProperty <TProp> WithPatternValidation <TProp>(this ReactiveProperty <TProp> prop,
                                                                             string regexPattern, string message = null, Validation.Categories category = Validation.Categories.Error)
        {
            var vm = prop.ViewModel ?? throw new NullReferenceException($"Property '{prop.Name}' has no view model!");

            message = message ?? $"{prop.GetLabelAttribute(vm)} must match the pattern '{regexPattern}'";
            return(prop.WithValidation(new PatternValidation(regexPattern, message, category)));
        }