Пример #1
0
        public static ValueChangedRich <DomainT> BindRead <WidgetT, ViewT, DomainT>(this IReadOnlyValueView <WidgetT, ViewT> view, IReadOnlyValue <DomainT> domain, Func <DomainT, ViewT> convertFromDomain)
        {
            ValueChangedRich <DomainT> handler = (sender, oldValue, newValue, rawErrors, isUserAction) => {
                var errors           = rawErrors.ToList();
                var allErrors        = new HashSet <string>(errors);
                var value            = RunConvertingExceptionToFailure(convertFromDomain, newValue);
                var selfInvalidation = sender == view && errors.Any();

                if (!value.Success)
                {
                    allErrors.Add(value.ErrorMessage);
                }

                Logger.Debug(typeof(ValueViewExtensions), "BindRead handler called with value after conversion={0} errors={1} senderIsSelf={2} selfInvalidation={3}", value, sender == view, allErrors.PrettyToString(), selfInvalidation);

                if (!selfInvalidation)
                {
                    //don't overwrite errorneus entry if entry origins from self so that user sees wrong value
                    view.Value = value.Result;
                }

                view.SetErrors(allErrors, isUserAction);
            };

            domain.Changed += handler;
            return(handler);
        }
Пример #2
0
        public void Add <T>(IReadOnlyValueView <HTMLElement, T> observed, HTMLElement view)
        {
            var err = observed.Errors;

            Logger.Debug(GetType(), "Add for itm {0} has initial result={1}", observed.Widget.Id, err.Count);
            observed.ErrorsChanged += (sender, errors) => _updateObserver(sender, errors);
            _updateObserver(observed, err); //initialization
            _widgets.Add(view);
        }
        public static LocalValue <int> BuildInt <WidgetT>(
            IReadOnlyValueView <WidgetT, string> view, params Validate <int>[] validators)
        {
            var result = new LocalValue <int>(0);

            view.BindReadOnlyAndInitialize(result, x => I18n.Localize(x));
            validators.ForEach(y => result.AddValidatorAndRevalidate(y));
            return(result);
        }
        public static LocalValue <DataT> Build <WidgetT, DataT>(
            IReadOnlyValueView <WidgetT, DataT> view, params Validate <DataT>[] validators)
        {
            var result = new LocalValue <DataT>(default(DataT));

            view.BindReadOnlyAndInitialize(result, x => x);
            validators.ForEach(y => result.AddValidatorAndRevalidate(y));
            return(result);
        }
        public static LocalValue <decimal> BuildDecimal <WidgetT>(
            IReadOnlyValueView <WidgetT, string> view, DecimalFormat format, params Validate <decimal>[] validators)
        {
            var result = new LocalValue <decimal>(0);

            view.BindReadOnlyAndInitialize(result,
                                           x => I18n.Localize(x, format));
            validators.ForEach(y => result.AddValidatorAndRevalidate(y));
            return(result);
        }
        public static LocalValue <ModelT> Build <WidgetT, ModelT, ViewT>(
            IReadOnlyValueView <WidgetT, ViewT> view, Func <ModelT, ViewT> convertFromDomain,
            params Validate <ModelT>[] validators)
        {
            var result = new LocalValue <ModelT>(default(ModelT));

            view.BindReadOnlyAndInitialize(result, convertFromDomain);
            validators.ForEach(y => result.AddValidatorAndRevalidate(y));
            return(result);
        }
Пример #7
0
        public static ValueChangedRich <DomainT> BindReadOnlyAndInitialize <WidgetT, ViewT, DomainT>(
            this IReadOnlyValueView <WidgetT, ViewT> view,
            IReadOnlyValue <DomainT> domain,
            Func <DomainT, ViewT> convertFromDomain)
        {
            var handler = view.BindRead(domain, convertFromDomain);

            handler(domain, domain.Value, domain.Value, domain.Errors, false);

            return(handler);
        }
        public static LocalValue <decimal> BuildDecimalWithPrecision <WidgetT>(
            IReadOnlyValueView <WidgetT, string> view, decimal defaultValue, Func <int> getPrecision,
            params Validate <decimal>[] validators)
        {
            var result = new LocalValue <decimal>(defaultValue);

            view.BindReadOnlyAndInitialize(result,
                                           x => I18n.Localize(x, DecimalFormatExtensions.GetWithPrecision(getPrecision())));

            validators.ForEach(y => result.AddValidatorAndRevalidate(y));
            return(result);
        }
Пример #9
0
 public ClassFieldRemoteMutator <ModelT, ModelT, ContT> Build <WidgetT, ModelT, ViewT>(
     Expression <Func <ContT, ModelT> > getField, IReadOnlyValueView <WidgetT, ViewT> view,
     Func <ModelT, ViewT> convertFromDomain)
 {
     return(new ClassFieldRemoteMutator <ModelT, ModelT, ContT>(
                getField,
                x => x,
                x => x,
                x => _caller.SaveField(ExpressionUtil.ExtractFieldName(getField), x),
                x => view.BindReadOnlyAndInitialize(x, convertFromDomain),
                postOperationConsumerOrNull: _postOperationConsumerOrNull,
                postOperationInvokeBeforeChanged: _postOperationInvokeBeforeChanged));
 }
Пример #10
0
 public ClassFieldRemoteMutator <ModelT, ModelT, ContT> Build <WidgetT, ModelT>(
     Expression <Func <ContT, ModelT> > getField, IReadOnlyValueView <WidgetT, ModelT> view,
     params Validate <ModelT>[] validators)
 {
     return(new ClassFieldRemoteMutator <ModelT, ModelT, ContT>(
                getField,
                x => x,
                x => x,
                x => _caller.SaveField(ExpressionUtil.ExtractFieldName(getField), x),
                x => {
         validators.ForEach(y => x.AddValidatorAndRevalidate(y));
         view.BindReadOnlyAndInitialize(x);
     },
                postOperationConsumerOrNull: _postOperationConsumerOrNull,
                postOperationInvokeBeforeChanged: _postOperationInvokeBeforeChanged));
 }
Пример #11
0
 public static ValueChangedRich <T> BindReadOnlyAndInitialize <WidgetT, T>(this IReadOnlyValueView <WidgetT, T> view, IReadOnlyValue <T> domain)
 {
     return(view.BindReadOnlyAndInitialize(domain, x => x));
 }
Пример #12
0
 public ClassFieldRemoteMutator <int, int, ContT> BuildInt <WidgetT>(
     Expression <Func <ContT, int> > getField, IReadOnlyValueView <WidgetT, string> view)
 {
     return(Build(getField, view, x => I18n.Localize(x)));
 }
Пример #13
0
 public ClassFieldRemoteMutator <DateTime?, DateTime?, ContT> BuildDateTimeNullable <WidgetT>(
     Expression <Func <ContT, DateTime?> > getField, IReadOnlyValueView <WidgetT, string> view,
     DateTimeFormat format)
 {
     return(Build(getField, view, x => !x.HasValue ? "" : I18n.Localize(x.Value, format)));
 }