public IView <HTMLElement> Build(IReadWriteValue <DataT> model) { var v = _buildEditor(); v.BindReadWriteAndInitialize(model, _convertFromDomain, _convertToDomain); return(v); }
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)); }
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)); }
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); }); }
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); }
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); }
public static void AddValidatorAndRevalidate <T>(this IReadWriteValue <T> self, Validate <T> validator) { self.Validate += validator; self.DoChange(self.Value, false, self); }
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)); }
/// <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)); }
public static ValueChangedSimple <T> BindWrite <WidgetT, T>( this IReadWriteValueView <WidgetT, T> view, IReadWriteValue <T> domain) { return(view.BindWrite(domain, x => x)); }
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); }
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)); }