BasePage.xaml.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Syncfusion.XForms.PopupLayout;
  7. using Xamarin.Forms;
  8. using Xamarin.Forms.Xaml;
  9. using XF.Material.Forms.UI.Dialogs;
  10. namespace comal.timesheets
  11. {
  12. [XamlCompilation(XamlCompilationOptions.Compile)]
  13. public partial class BasePage
  14. {
  15. public IList<View> ActionButtons => _actionButtons.Children;
  16. public IList<View> PageContent => _content.Children;
  17. public bool BackButtonEnabled
  18. {
  19. get => _backButton.IsVisible;
  20. set => _backButton.IsVisible = value;
  21. }
  22. private SfPopupLayout _popup = new SfPopupLayout();
  23. public BasePage()
  24. {
  25. InitializeComponent();
  26. _titleBar.BackgroundColor = XF.Material.Forms.Material.Color.Primary;
  27. _titleLabel.TextColor = XF.Material.Forms.Material.Color.OnPrimary;
  28. }
  29. protected override void OnAppearing()
  30. {
  31. App.Data.TransportConnected += TransportConnected;
  32. App.Data.TransportDisconnected += TransportDisconnected;
  33. UpdateTransportStatus();
  34. base.OnAppearing();
  35. }
  36. protected override void OnDisappearing()
  37. {
  38. App.Data.TransportConnected -= TransportConnected;
  39. App.Data.TransportDisconnected -= TransportDisconnected;
  40. base.OnDisappearing();
  41. }
  42. private void TransportDisconnected(TransportDisconnectedEventArgs args) => UpdateConnectionStatus();
  43. private void TransportConnected(TransportConnectedEventArgs args) => UpdateConnectionStatus();
  44. private void UpdateConnectionStatus()
  45. {
  46. Device.BeginInvokeOnMainThread(UpdateTransportStatus);
  47. }
  48. private static Task<IMaterialModalPage> _snackbar = null;
  49. protected virtual void UpdateTransportStatus()
  50. {
  51. // ConnectionIndicator.Image = App.Data.IsConnected()
  52. // ? ImageSource.FromFile("transparent.png")
  53. // : ImageSource.FromFile("disconnected.png"); //ImageSource.FromFile("Images/nodata.png");
  54. _connectionIndicator.IsVisible = !App.Data.IsConnected();
  55. // if (!App.Data.IsConnected() && (_snackbar == null))
  56. // _snackbar = MaterialDialog.Instance.LoadingSnackbarAsync(message: "No Connection Available!");
  57. //
  58. // else if (App.Data.IsConnected() && (_snackbar != null) && (_snackbar.Result != null))
  59. // {
  60. // _snackbar.Result.DismissAsync();
  61. // _snackbar = null;
  62. // }
  63. }
  64. private void _backButton_OnClicked(object sender, EventArgs e)
  65. {
  66. Navigation.PopAsync();
  67. }
  68. public void ShowPopup(Func<View> view, int height = 500, int width = 300, int padding = 10)
  69. {
  70. _popup.PopupView.HeightRequest = height;
  71. _popup.PopupView.WidthRequest = width;
  72. _popup.PopupView.ShowHeader = false;
  73. _popup.PopupView.ShowFooter = false;
  74. _popup.PopupView.ContentTemplate = new DataTemplate(() =>
  75. {
  76. Grid grid = new Grid() { Margin = padding, Padding = padding};
  77. grid.Children.Add(view());
  78. return grid;
  79. });
  80. _popup.Show();
  81. }
  82. public void DismissPopup()
  83. {
  84. _popup.Dismiss();
  85. }
  86. }
  87. }