private async Task <InvokeForm.Response> SubmitFormAsync(ViewGroup resultLayout, FormMetadata formMetadata, List <FormInputManager> inputsManager, bool validate = true) { var valid = !validate || this.ValidateForm(inputsManager); InvokeForm.Response result = null; if (valid) { resultLayout.RemoveAllViews(); result = await this.HandleFormAsync(formMetadata, inputsManager); } return(result); }
private void RenderOutput(ViewGroup layout, InvokeForm.Response result, FormMetadata formMetadata, List <FormInputManager> inputsManager) { if (result?.Data == null) { return; } var reloadResponse = result.Data.CastTObject <ReloadResponse>(); if (reloadResponse?.Form != null) { this.FormWrapper.ReloadView(this, reloadResponse); return; } var orderedOutputs = formMetadata.OutputFields.OrderBy(a => a.OrderIndex).ToList(); foreach (var output in orderedOutputs) { if (!output.Hidden) { object value; if (result.Data.GetType() == typeof(JObject)) { var jsonObj = (JObject)result.Data; value = jsonObj.GetValue(output.Id, StringComparison.OrdinalIgnoreCase); } else { var propertyInfo = result.Data.GetType().GetProperty(output.Id); value = propertyInfo?.GetValue(result.Data, null); } if (value != null) { var manager = this.ManagersCollection.OutputManagerCollection.GetManager(output.Type); var view = manager.GetView(output, value, this, formMetadata, inputsManager); view.SetPadding(0, 10, 0, 10); if (view.LayoutParameters == null) { view.LayoutParameters = layout.MatchParentWrapContent(); } layout.AddView(view); } } } // run on response handled events EventsManager.OnResponseHandledEvent(this, formMetadata, inputsManager, result); }
public static void OnResponseHandledEvent(MyFormHandler myFormHandler, FormMetadata formMetadata, List <FormInputManager> inputsManager, InvokeForm.Response result) { var inputsWithEvent = inputsManager.Where(a => a.Input.EventHandlers.Any(e => e.RunAt.Equals(FormEvents.ResponseHandled))).ToList(); //var formEvent = formMetadata.EventHandlers.Where(e => e.RunAt.Equals(FormEvents.ResponseHandled)).ToList(); foreach (var input in inputsWithEvent) { var inputEvents = input.Input.EventHandlers.Where(e => e.RunAt.Equals(FormEvents.ResponseHandled)); foreach (var inputEvent in inputEvents) { var manager = myFormHandler.ManagersCollection.EventHandlerManagerCollection.GetManager(inputEvent.Id); manager.HandleEvent(inputEvent.CustomProperties, input, result); } } }
public void HandleEvent(object inputEventCustomProperties, FormInputManager inputManager, InvokeForm.Response result) { string outputField; if (inputEventCustomProperties.GetType() == typeof(JObject)) { var jsonObj = (JObject)inputEventCustomProperties; outputField = jsonObj.GetValue(nameof(BindToOutputAttribute.OutputFieldId), StringComparison.OrdinalIgnoreCase).ToString(); } else { var data = (CustomProperty)inputEventCustomProperties; outputField = data.OutputFieldId; } object value; if (result.Data.GetType() == typeof(JObject)) { var jsonObj = (JObject)result.Data; value = jsonObj.GetValue(outputField, StringComparison.OrdinalIgnoreCase); } else { var propertyInfo = result.Data.GetType().GetProperty(outputField); value = propertyInfo?.GetValue(result.Data, null); } inputManager.Manager.SetValue(value); }
public void HandleEvent(IDictionary <string, object> inputEventCustomProperties, FormInputManager inputManager, InvokeForm.Response result) { var outputField = inputEventCustomProperties.GetCustomProperty <string>(nameof(BindToOutputAttribute.OutputFieldId)); object value; if (result.Data.GetType() == typeof(JObject)) { var jsonObj = (JObject)result.Data; value = jsonObj.GetValue(outputField, StringComparison.OrdinalIgnoreCase); } else { var propertyInfo = result.Data.GetType().GetProperty(outputField); value = propertyInfo?.GetValue(result.Data, null); } inputManager.Manager.SetValue(value); }
private View RenderForm(FormParameter formParameter, string submitAction) { var scroll = new NestedScrollView(Application.Context); var linearLayout = new LinearLayout(Application.Context) { Orientation = Orientation.Vertical }; if (formParameter != null) { InvokeForm.Response result = null; var inputsManager = new List <FormInputManager>(); var resultLayout = new LinearLayout(Application.Context) { Orientation = Orientation.Vertical, LayoutParameters = linearLayout.MatchParentWrapContent() }; if (formParameter.Form.InputFields.Count > 0) { var inputsLayout = new LinearLayout(Application.Context) { Orientation = Orientation.Vertical }; this.RenderInputs(inputsLayout, formParameter, inputsManager); if (formParameter.Form.InputFields.Count(a => !a.Hidden) > 0) { this.ManagersCollection.StyleRegister.ApplyStyle("FormLayout", inputsLayout); var submitLabel = "Submit"; var submitbuttonlabel = formParameter.Form.CustomProperties?.GetCustomProperty <string>("submitButtonLabel"); if (!string.IsNullOrEmpty(submitbuttonlabel)) { submitLabel = submitbuttonlabel; } var btn = new Button(Application.Context) { Text = submitLabel, LayoutParameters = inputsLayout.MatchParentWrapContent() }; this.ManagersCollection.StyleRegister.ApplyStyle("Button SubmitButton", btn); inputsLayout.AddView(btn); btn.Click += async(sender, args) => { try { result = await this.SubmitFormAsync(resultLayout, formParameter.Form, inputsManager); if (submitAction == FormLinkActions.OpenModal && result != null) { this.FormWrapper.CloseForm(); } else { this.RenderOutput(resultLayout, result, formParameter.Form, inputsManager); } } catch (Exception ex) { Toast.MakeText(Application.Context, ex.Message, ToastLength.Long).Show(); } }; } linearLayout.AddView(inputsLayout); } // run on response handled events EventsManager.OnFormLoadedEvent(formParameter); if (formParameter.Form.PostOnLoad || submitAction == FormLinkActions.Run) { try { var taskToRun = Task.Run(() => this.SubmitFormAsync(resultLayout, formParameter.Form, inputsManager, formParameter.Form.PostOnLoadValidation)); result = taskToRun.Result; } catch (AggregateException ex) { ex.ThrowInnerException(); } if (submitAction == FormLinkActions.Run) { this.FormWrapper.CloseForm(); return(null); } this.RenderOutput(resultLayout, result, formParameter.Form, inputsManager); } this.ManagersCollection.StyleRegister.ApplyStyle("ResultsLayout", resultLayout); linearLayout.AddView(resultLayout); scroll.AddView(linearLayout, scroll.MatchParentWrapContent()); } return(scroll); }
private Layout RenderFormAsync(FormParameter formParameters, string submitAction = null) { this.YAxis = 10; var scrollView = new UIScrollView { BackgroundColor = UIColor.White }; var frame = scrollView.Frame; if (formParameters.Form != null) { InvokeForm.Response result = null; var resultLayout = new UIView(); resultLayout.AddSubview(new UIView()); var inputsManager = new List <FormInputManager>(); if (formParameters.Form.InputFields.Count > 0) { this.RenderInputs(scrollView, formParameters, inputsManager); frame.Height += this.YAxis + 20; scrollView.ContentSize = frame.Size; if (formParameters.Form.InputFields.Count(a => !a.Hidden) > 0) { var submitLabel = "Submit"; var submitbuttonlabel = formParameters.Form.CustomProperties?.GetCustomProperty <string>("submitButtonLabel"); if (!string.IsNullOrEmpty(submitbuttonlabel)) { submitLabel = submitbuttonlabel; } var btn = new UIButton(); btn.SetTitle(submitLabel, UIControlState.Normal); var btnSize = new CGSize(UIScreen.MainScreen.Bounds.Width - 40, 40); btn.Frame = new CGRect(new CGPoint(20, this.YAxis), btnSize); btn.BackgroundColor = UIColor.Gray; this.YAxis += 45; btn.TouchUpInside += async(sender, args) => { result = await this.SubmitFormAsync(resultLayout, formParameters.Form, inputsManager); if (submitAction == FormLinkActions.OpenModal && result != null) { this.FormWrapper.CloseForm(); } else { this.RenderOutput(resultLayout, result, formParameters.Form, inputsManager); } }; scrollView.AddSubview(btn); } } // run on response handled events EventsManager.OnFormLoadedEvent(formParameters); if (formParameters.Form.PostOnLoad || submitAction == FormLinkActions.Run) { try { result = this.SubmitForm(resultLayout, formParameters.Form, inputsManager, formParameters.Form.PostOnLoadValidation); } catch (AggregateException ex) { ex.ThrowInnerException(); } if (submitAction == FormLinkActions.Run) { this.FormWrapper.CloseForm(); return(null); } this.RenderOutput(resultLayout, result, formParameters.Form, inputsManager); } resultLayout.UserInteractionEnabled = true; var resSize = new CGSize(UIScreen.MainScreen.Bounds.Width, this.ResultYAxis + 10); resultLayout.Frame = new CGRect(new CGPoint(0, this.YAxis), resSize); scrollView.AddSubview(resultLayout); frame.Height += resultLayout.Frame.Height; scrollView.ContentSize = frame.Size; } return(new Layout(scrollView, null)); }