AssignmentEditFormsView.xaml.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. using System;
  2. using System.Linq;
  3. using System.Linq.Expressions;
  4. using Comal.Classes;
  5. using InABox.Clients;
  6. using InABox.Core;
  7. using Xamarin.Forms;
  8. using Xamarin.Forms.Xaml;
  9. using XF.Material.Forms.UI;
  10. using XF.Material.Forms.UI.Dialogs;
  11. namespace PRS.Mobile
  12. {
  13. [XamlCompilation(XamlCompilationOptions.Compile)]
  14. public partial class AssignmentEditFormsView : AssignmentEditView
  15. {
  16. public AssignmentEditFormsView()
  17. {
  18. InitializeComponent();
  19. }
  20. public override void Refresh()
  21. {
  22. _forms.DataModel = ViewModel?.Forms;
  23. _forms.AppliesTo = "Assignment";
  24. _forms.Property = model => ViewModel?.Forms.Items.OfType<IDigitalFormInstanceShell>().ToArray();
  25. _forms.RefreshData(true,false);
  26. NoForms.IsVisible = ViewModel?.Forms.Any() != true;
  27. _forms.IsVisible = ViewModel?.Forms.Any() == true;
  28. }
  29. private async void _forms_OnFormTapped(object sender, ExistingFormTappedEventArgs args)
  30. {
  31. if (args.Shell is AssignmentFormShell instance)
  32. {
  33. using (await MaterialDialog.Instance.LoadingDialogAsync(message: "Loading"))
  34. {
  35. // Pretty sure this can be replaced with _forms.EditFormAsync<>(instance, ViewModel.Item.Entity)
  36. // Only difference is that calls RefreshData(true, true)
  37. var form = new Client<AssignmentForm>()
  38. .Query(
  39. new Filter<AssignmentForm>(x => x.ID).IsEqualTo(instance.ID),
  40. new Columns<AssignmentForm>(ColumnTypeFlags.None).Add(x=>x.ID).Add(x=>x.Form.ID)
  41. )
  42. .Rows
  43. .Select(x => x.ToObject<AssignmentForm>())
  44. .FirstOrDefault();
  45. var model = new DigitalFormHostModel<Assignment, AssignmentLink, AssignmentForm>();
  46. model.LoadItems(ViewModel.Item.Entity, form.Form.ID, form.ID, null);
  47. var host = new DigitalFormHost(model);
  48. host.OnClosing += (o, args) =>
  49. {
  50. if (args.Changed)
  51. {
  52. //instance.Completed = !model.DigitalFormDataModel.Instance.FormCompleted.IsEmpty();
  53. }
  54. };
  55. Navigation.PushAsync(host);
  56. }
  57. }
  58. }
  59. }
  60. }