Пример #1
0
        public IView <HTMLElement> Build(IReadWriteValue <DataT> model)
        {
            var v = _buildEditor();

            v.BindReadWriteAndInitialize(model, _convertFromDomain, _convertToDomain);
            return(v);
        }
Пример #2
0
        public ConfirmMessageForm(ConfirmMessageFormView view, string messageOrNull = null, string titleOrNull = null)
        {
            Title = titleOrNull ?? I18n.Translate("Confirmation");
            View  = view;

            _message = new LocalValue <string>(messageOrNull ?? I18n.Translate("Without message"));
            view.Message.BindReadOnlyAndInitialize(_message);

            LocalActionBuilder.Build(view.Confirm, () => Ended?.Invoke(this, CompletedOrCanceled.Completed));
            LocalActionBuilder.Build(view.Cancel, () => Ended?.Invoke(this, CompletedOrCanceled.Canceled));
        }
Пример #3
0
        public static Tuple <ValueChangedRich <DomainT>, ValueChangedSimple <ViewT> > BindReadWriteAndInitialize <WidgetT, ViewT, DomainT>(
            this IReadWriteValueView <WidgetT, ViewT> view, IReadWriteValue <DomainT> domain,
            Func <DomainT, ViewT> convertFromDomain, Func <ViewT, DomainT> convertToDomain)
        {
            var readHandler  = view.BindRead(domain, convertFromDomain);
            var writeHandler = view.BindWrite(domain, convertToDomain);

            readHandler(domain, domain.Value, domain.Value, domain.Errors, false);
            Logger.Debug(typeof(ValueViewExtensions), "BindReadWriteAndInitialize current value = {0} errors={1}", domain.Value, domain.Errors.PrettyToString());
            return(new Tuple <ValueChangedRich <DomainT>, ValueChangedSimple <ViewT> >(readHandler, writeHandler));
        }
Пример #4
0
        public ConfirmOperationForm(Func <Task <T> > operation, ConfirmOperationFormView view, string message = null, string title = null)
        {
            Title = title ?? I18n.Translate("Confirmation");
            _view = view;

            _message = new LocalValue <string>(message ?? I18n.Translate("Without message"));
            view.Message.BindReadOnlyAndInitialize(_message);

            RemoteActionBuilder.Build(view.Confirm, operation, x => {
                SuccessResult = x;
                Ended?.Invoke(this, ConfirmOperationFormOutcome.Success);
            });
        }
Пример #5
0
        public TextInputForm(
            TextInputFormView view, string label, string titleOrNull = null, string defaultValue = null,
            params Validate <string>[] validators)
        {
            Title = titleOrNull ?? I18n.Translate("Input");
            _view = view;

            _msg = new LocalValue <string>(label ?? "");
            view.Label.BindReadOnlyAndInitialize(_msg);

            _input = LocalValueFieldBuilder.Build(defaultValue, view.Input, validators);

            var isFormValid  = new AggregatedErrorsValue <bool>(false, x => !x.Errors.Any(), x => x.Observes(_input));
            var confirmInput = LocalActionBuilder.Build(view.Confirm, () => Ended?.Invoke(this, CompletedOrCanceled.Completed));

            confirmInput.BindEnableAndInitialize(isFormValid);
        }
Пример #6
0
        public RemoteValueChangeByEntryForm(
            Func <DomainT, Task <RemoteT> > remoteChanger,
            IReadWriteValueView <HTMLElement, ViewT> input,
            Action <string> inputLabelChanger,
            Func <DomainT, ViewT> domainToViewConverter,
            Func <ViewT, DomainT> viewToDomainConverter,
            string label, string titleOrNull = null,
            DomainT defaultValue             = default(DomainT),
            TextType labelTextType           = TextType.TreatAsText,
            params Validate <DomainT>[] validators)
        {
            _inputLabelChanger = inputLabelChanger;

            Title = titleOrNull ?? I18n.Translate("Input");
            _view = new RemoteValueChangeByEntryFormView <ViewT>(input, labelTextType);

            _inputLabelChanger(label);
            _msg = new LocalValue <string>("");
            _view.Message.BindReadOnlyAndInitialize(_msg);

            _input = LocalValueFieldBuilder.Build(
                defaultValue, _view.Input, domainToViewConverter, viewToDomainConverter, validators);

            var isFormValid = new AggregatedErrorsValue <bool>(
                false, x => !x.Errors.Any(), x => x.Observes(_input));

            var confirmInput = RemoteActionBuilder.Build(
                _view.Confirm,
                () => remoteChanger(_input.Value),
                x => {
                SavedValue = x;
                Ended?.Invoke(this, CompletedOrCanceled.Completed);
            });

            confirmInput.BindEnableAndInitialize(isFormValid);
        }
Пример #7
0
 public static void AddValidatorAndRevalidate <T>(this IReadWriteValue <T> self, Validate <T> validator)
 {
     self.Validate += validator;
     self.DoChange(self.Value, false, self);
 }
Пример #8
0
 public static async Task <Unit> Revalidate <T>(this IReadWriteValue <T> self, bool isUserChange = false, object sender = null)
 {
     return(await self.DoChange(self.Value, isUserChange, sender));
 }
Пример #9
0
 /// <summary>shorthand for DoChange() that is: programmatic AND is allowed to store invalid values</summary>
 public static Task <Unit> DoProgrammaticChange <T>(this IReadWriteValue <T> self, T newValue)
 {
     return(self.DoChange(newValue, false, null, false));
 }
Пример #10
0
 public static ValueChangedSimple <T> BindWrite <WidgetT, T>(
     this IReadWriteValueView <WidgetT, T> view, IReadWriteValue <T> domain)
 {
     return(view.BindWrite(domain, x => x));
 }
Пример #11
0
        public static ValueChangedSimple <ViewT> BindWrite <WidgetT, ViewT, DomainT>(this IReadWriteValueView <WidgetT, ViewT> view, IReadWriteValue <DomainT> domain, Func <ViewT, DomainT> convertToDomain)
        {
            ValueChangedSimple <ViewT> handler = async(newValue, userChange) => {
                var value = RunConvertingExceptionToFailure(convertToDomain, newValue);
                Logger.Debug(typeof(ValueViewExtensions), "BindWrite handler called with value after conversion={0}", value);

                if (value.Success)
                {
                    view.SetErrors(new HashSet <string>(), userChange);
                    view.IsValidating = true;
                    //await Task.Delay(5000); //testing only
                    try {
                        await domain.DoChange(value.Result, userChange);
                    } finally {
                        view.IsValidating = false;
                    }
                }
                else
                {
                    view.SetErrors(new HashSet <string> {
                        value.ErrorMessage
                    }, userChange);
                }
            };

            view.Changed += handler;
            return(handler);
        }
Пример #12
0
 public static Tuple <ValueChangedRich <T>, ValueChangedSimple <T> > BindReadWriteAndInitialize <WidgetT, T>(
     this IReadWriteValueView <WidgetT, T> view, IReadWriteValue <T> domain)
 {
     return(view.BindReadWriteAndInitialize(domain, x => x, x => x));
 }