diff --git a/Nester.Deploy.sln b/Nester.Deploy.sln index bb5454b..6663cc3 100644 --- a/Nester.Deploy.sln +++ b/Nester.Deploy.sln @@ -11,6 +11,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nester.Deploy.UWP", "Nester EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Nester.Deploy", "Nester.Deploy\Nester.Deploy\Nester.Deploy.csproj", "{E6E24809-F81B-458F-AA59-4E982AA67C6B}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Nester.Library", "..\nester.library\Nester.Library\Nester.Library.csproj", "{4FA15B95-63BC-46C1-92D5-40075E2A9B37}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Ad-Hoc|Any CPU = Ad-Hoc|Any CPU @@ -251,6 +253,54 @@ Global {E6E24809-F81B-458F-AA59-4E982AA67C6B}.Release|x64.Build.0 = Release|Any CPU {E6E24809-F81B-458F-AA59-4E982AA67C6B}.Release|x86.ActiveCfg = Release|Any CPU {E6E24809-F81B-458F-AA59-4E982AA67C6B}.Release|x86.Build.0 = Release|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Ad-Hoc|x64.ActiveCfg = Release|x64 + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Ad-Hoc|x64.Build.0 = Release|x64 + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Ad-Hoc|x86.Build.0 = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.AppStore|ARM.ActiveCfg = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.AppStore|ARM.Build.0 = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.AppStore|iPhone.Build.0 = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.AppStore|x64.ActiveCfg = Release|x64 + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.AppStore|x64.Build.0 = Release|x64 + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.AppStore|x86.ActiveCfg = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.AppStore|x86.Build.0 = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Debug|ARM.ActiveCfg = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Debug|ARM.Build.0 = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Debug|iPhone.Build.0 = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Debug|x64.ActiveCfg = Debug|x64 + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Debug|x64.Build.0 = Debug|x64 + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Debug|x86.ActiveCfg = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Debug|x86.Build.0 = Debug|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Release|Any CPU.Build.0 = Release|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Release|ARM.ActiveCfg = Release|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Release|ARM.Build.0 = Release|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Release|iPhone.ActiveCfg = Release|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Release|iPhone.Build.0 = Release|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Release|x64.ActiveCfg = Release|x64 + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Release|x64.Build.0 = Release|x64 + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Release|x86.ActiveCfg = Release|Any CPU + {4FA15B95-63BC-46C1-92D5-40075E2A9B37}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Nester.Deploy/Nester.Deploy.Android/Nester.Deploy.Android.csproj b/Nester.Deploy/Nester.Deploy.Android/Nester.Deploy.Android.csproj index a4f650d..04d64d3 100644 --- a/Nester.Deploy/Nester.Deploy.Android/Nester.Deploy.Android.csproj +++ b/Nester.Deploy/Nester.Deploy.Android/Nester.Deploy.Android.csproj @@ -48,9 +48,6 @@ 2.1.0 - - 1.2.0 - 10.0.3 diff --git a/Nester.Deploy/Nester.Deploy.Android/Properties/AndroidManifest.xml b/Nester.Deploy/Nester.Deploy.Android/Properties/AndroidManifest.xml index 7b73c32..baeb9a2 100644 --- a/Nester.Deploy/Nester.Deploy.Android/Properties/AndroidManifest.xml +++ b/Nester.Deploy/Nester.Deploy.Android/Properties/AndroidManifest.xml @@ -1,5 +1,5 @@ - - + + - + \ No newline at end of file diff --git a/Nester.Deploy/Nester.Deploy.UWP/MainPage.xaml.cs b/Nester.Deploy/Nester.Deploy.UWP/MainPage.xaml.cs index 67f2dcb..8231adf 100644 --- a/Nester.Deploy/Nester.Deploy.UWP/MainPage.xaml.cs +++ b/Nester.Deploy/Nester.Deploy.UWP/MainPage.xaml.cs @@ -20,7 +20,7 @@ public sealed partial class MainPage public MainPage() { this.InitializeComponent(); - + Syncfusion.ListView.XForms.UWP.SfListViewRenderer.Init(); LoadApplication(new Nester.Deploy.App()); } } diff --git a/Nester.Deploy/Nester.Deploy.UWP/Nester.Deploy.UWP.csproj b/Nester.Deploy/Nester.Deploy.UWP/Nester.Deploy.UWP.csproj index 2cd82a7..6fa9059 100644 --- a/Nester.Deploy/Nester.Deploy.UWP/Nester.Deploy.UWP.csproj +++ b/Nester.Deploy/Nester.Deploy.UWP/Nester.Deploy.UWP.csproj @@ -20,7 +20,7 @@ Nester.Deploy.UWP_StoreKey.pfx False Always - x64|arm + x64 43AF1CD213998B143E3BAEB89FB128BE8AD03B98 @@ -117,7 +117,9 @@ + + @@ -219,9 +221,6 @@ 2.1.1 - - 1.2.0 - 10.0.3 diff --git a/Nester.Deploy/Nester.Deploy.UWP/Package.appxmanifest b/Nester.Deploy/Nester.Deploy.UWP/Package.appxmanifest index 1231126..65a0685 100644 --- a/Nester.Deploy/Nester.Deploy.UWP/Package.appxmanifest +++ b/Nester.Deploy/Nester.Deploy.UWP/Package.appxmanifest @@ -1,6 +1,6 @@  - + Nester Deploy diff --git a/Nester.Deploy/Nester.Deploy.UWP/Properties/AssemblyInfo.cs b/Nester.Deploy/Nester.Deploy.UWP/Properties/AssemblyInfo.cs index 6408c33..32e99a0 100644 --- a/Nester.Deploy/Nester.Deploy.UWP/Properties/AssemblyInfo.cs +++ b/Nester.Deploy/Nester.Deploy.UWP/Properties/AssemblyInfo.cs @@ -24,6 +24,6 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.6.0.0")] -[assembly: AssemblyFileVersion("1.6.0.0")] +[assembly: AssemblyVersion("1.6.2.0")] +[assembly: AssemblyFileVersion("1.6.2.0")] [assembly: ComVisible(false)] \ No newline at end of file diff --git a/Nester.Deploy/Nester.Deploy.UWP/_pkginfo.txt b/Nester.Deploy/Nester.Deploy.UWP/_pkginfo.txt index 52712b4..d029cf3 100644 --- a/Nester.Deploy/Nester.Deploy.UWP/_pkginfo.txt +++ b/Nester.Deploy/Nester.Deploy.UWP/_pkginfo.txt @@ -1 +1 @@ -C:\Users\rajitha\Documents\inkton\github\nester.deploy\Nester.Deploy\Nester.Deploy.UWP\bin\ARM\Release\Upload\Nester.Deploy.UWP_1.6.0.0\Nester.Deploy.UWP_1.6.0.0_x64_arm.appxbundle +C:\Users\rajitha\Documents\inkton\github\nester.deploy\Nester.Deploy\Nester.Deploy.UWP\bin\x64\Release\Upload\Nester.Deploy.UWP_1.6.1.0\Nester.Deploy.UWP_1.6.1.0_x64.appxbundle diff --git a/Nester.Deploy/Nester.Deploy.UWP/apprestore24.png b/Nester.Deploy/Nester.Deploy.UWP/apprestore24.png new file mode 100644 index 0000000..28c6f5d Binary files /dev/null and b/Nester.Deploy/Nester.Deploy.UWP/apprestore24.png differ diff --git a/Nester.Deploy/Nester.Deploy.UWP/appupgrade24.png b/Nester.Deploy/Nester.Deploy.UWP/appupgrade24.png new file mode 100644 index 0000000..8b82d00 Binary files /dev/null and b/Nester.Deploy/Nester.Deploy.UWP/appupgrade24.png differ diff --git a/Nester.Deploy/Nester.Deploy.iOS/Nester.Deploy.iOS.csproj b/Nester.Deploy/Nester.Deploy.iOS/Nester.Deploy.iOS.csproj index 6de5b57..c16836f 100644 --- a/Nester.Deploy/Nester.Deploy.iOS/Nester.Deploy.iOS.csproj +++ b/Nester.Deploy/Nester.Deploy.iOS/Nester.Deploy.iOS.csproj @@ -87,6 +87,9 @@ iPhone Distribution Entitlements.plist + + + @@ -122,9 +125,6 @@ 2.1.0 - - 1.2.0 - 10.0.3 diff --git a/Nester.Deploy/Nester.Deploy.iOS/Properties/AssemblyInfo.cs b/Nester.Deploy/Nester.Deploy.iOS/Properties/AssemblyInfo.cs index 4707088..e48feab 100644 --- a/Nester.Deploy/Nester.Deploy.iOS/Properties/AssemblyInfo.cs +++ b/Nester.Deploy/Nester.Deploy.iOS/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyVersion("1.6.1.0")] +[assembly: AssemblyFileVersion("1.6.1.0")] diff --git a/Nester.Deploy/Nester.Deploy/Nester.Deploy.csproj b/Nester.Deploy/Nester.Deploy/Nester.Deploy.csproj index c17d46f..15b05d1 100644 --- a/Nester.Deploy/Nester.Deploy/Nester.Deploy.csproj +++ b/Nester.Deploy/Nester.Deploy/Nester.Deploy.csproj @@ -2,9 +2,11 @@ netstandard2.0 - 1.6.0 + 1.6.2 nest.yt Inkton + Copyright © 2018 + https://nest.yt/ @@ -19,7 +21,6 @@ - @@ -28,6 +29,10 @@ + + + + Code @@ -46,4 +51,10 @@ + + + MSBuild:UpdateDesignTimeXaml + + + \ No newline at end of file diff --git a/Nester.Deploy/Nester.Deploy/Views/EntryView.xaml.cs b/Nester.Deploy/Nester.Deploy/Views/EntryView.xaml.cs index b8d11dc..3127987 100644 --- a/Nester.Deploy/Nester.Deploy/Views/EntryView.xaml.cs +++ b/Nester.Deploy/Nester.Deploy/Views/EntryView.xaml.cs @@ -151,7 +151,6 @@ async private void OnLoginButtonClickedAsync(object sender, EventArgs e) { await MainSideView.Detail.Navigation.PopAsync(); NesterControl.Target = _baseModels.AllApps.AppModels.First(); - NesterControl.Target.Reload(); NesterControl.ResetView(NesterControl.Target); } } diff --git a/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppBackupView.xaml b/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppBackupView.xaml new file mode 100644 index 0000000..9a5baec --- /dev/null +++ b/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppBackupView.xaml @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppDomainView.xaml.cs b/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppDomainView.xaml.cs index 6dd51aa..e40e749 100644 --- a/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppDomainView.xaml.cs +++ b/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppDomainView.xaml.cs @@ -76,6 +76,8 @@ public AppDomainView(BaseModels baseModels) , RegexOptions.Singleline | RegexOptions.IgnoreCase); Clear(); + + ButtonAppServices.Clicked += ButtonAppServices_ClickedAsync; } public override void UpdateBindings() @@ -85,6 +87,21 @@ public override void UpdateBindings() BindingContext = _baseModels.TargetViewModel.DomainModel; } + async private void OnButtonServiceClickedAsync(object sender, EventArgs e) + { + IsServiceActive = true; + + try + { + MainSideView.CurrentLevelViewAsync(new AppTierView(_baseModels)); + } + catch (Exception ex) + { + await DisplayAlert("Nester", ex.Message, "OK"); + } + + IsServiceActive = false; + } async private void OnButtonBasicDetailsClickedAsync(object sender, EventArgs e) { IsServiceActive = true; @@ -102,14 +119,28 @@ async private void OnButtonBasicDetailsClickedAsync(object sender, EventArgs e) IsServiceActive = false; } - async private void OnButtonContactsClickedAsync(object sender, EventArgs e) + async private void ButtonAppServices_ClickedAsync(object sender, EventArgs e) { IsServiceActive = true; try { - await _baseModels.TargetViewModel.ContactModel.InitAsync(); + MainSideView.CurrentLevelViewAsync(new AppTierView(_baseModels)); + } + catch (Exception ex) + { + await DisplayAlert("Nester", ex.Message, "OK"); + } + + IsServiceActive = false; + } + async private void OnButtonContactsClickedAsync(object sender, EventArgs e) + { + IsServiceActive = true; + + try + { MainSideView.CurrentLevelViewAsync(new ContactsView(_baseModels)); } catch (Exception ex) @@ -126,8 +157,6 @@ async private void OnButtonNestsClickedAsync(object sender, EventArgs e) try { - await _baseModels.TargetViewModel.NestModel.InitAsync(); - MainSideView.CurrentLevelViewAsync(new AppNestsView(_baseModels)); } catch (Exception ex) diff --git a/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppJoinDetailView.xaml b/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppJoinDetailView.xaml index cd97ae6..007db5c 100644 --- a/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppJoinDetailView.xaml +++ b/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppJoinDetailView.xaml @@ -76,9 +76,9 @@ - - - + + + diff --git a/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppJoinDetailView.xaml.cs b/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppJoinDetailView.xaml.cs index b6f5ecf..68d1c3a 100644 --- a/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppJoinDetailView.xaml.cs +++ b/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppJoinDetailView.xaml.cs @@ -151,7 +151,7 @@ async private void ButtonMembership_ClickedAsync(object sender, EventArgs e) if (invitation.Status == "active") { - await appCollection.AddAppAsync(joinApp); + appCollection.AddApp(joinApp); } else { @@ -167,12 +167,6 @@ async private void ButtonMembership_ClickedAsync(object sender, EventArgs e) NesterControl.Target = NesterControl.BaseModels.AllApps .AppModels.FirstOrDefault(); - - if (NesterControl.Target != null) - { - NesterControl.Target.Reload(); - } - NesterControl.ResetView(NesterControl.Target); ToggleMembershipButton(invitation); } diff --git a/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppNestsView.xaml b/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppNestsView.xaml index c713a3d..f30a7d4 100644 --- a/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppNestsView.xaml +++ b/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppNestsView.xaml @@ -103,9 +103,9 @@ - - - + + + + + + + + + + + + + + + + - - + diff --git a/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppTierView.xaml.cs b/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppTierView.xaml.cs index df31476..fe5e987 100644 --- a/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppTierView.xaml.cs +++ b/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/AppTierView.xaml.cs @@ -22,7 +22,9 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; +using System.Threading.Tasks; using Inkton.Nester.Models; using Inkton.Nester.ViewModels; @@ -30,62 +32,226 @@ namespace Inkton.Nester.Views { public partial class AppTierView : View { + private ServicesViewModel.ServiceTableItem _selectedAppRow; + private bool _isUpgrading; + public AppTierView(BaseModels baseModels) { InitializeComponent(); + _isUpgrading = baseModels + .TargetViewModel + .DeploymentModel + .UpgradableAppTiers.Any(); + BaseModels = baseModels; AppTypeTierView.SelectionChanged += AppTypeTierView_SelectionChanged; SetActivityMonotoring(ServiceActive, - new List { + new List { ButtonDone }); + + ButtonDone.IsVisible = _baseModels.WizardMode || _isUpgrading; + if (_baseModels.WizardMode || _isUpgrading) + { + // hide but do not collapse + TopButtonPanel.Opacity = 0; + } + + AppTypeTierView.Loaded += AppTypeTierView_Loaded; } - private void AppTypeTierView_SelectionChanged(object sender, Syncfusion.ListView.XForms.ItemSelectionChangedEventArgs e) + public override void UpdateBindings() { - Validate(); + if (_baseModels.TargetViewModel.EditApp != null) + { + Title = _baseModels.TargetViewModel.EditApp.Name; + } + + if (_isUpgrading) + { + // The app is being created and deployed. Only selected services are applicable + AppTierTitle.Text = "Select an App Tier to Upgrade"; + BindingContext = _baseModels.TargetViewModel + .DeploymentModel; + DatabaseOption.Opacity = 0; + } + else + { + // The app is being created. All services are applicable + AppTierTitle.Text = "Select an App Tier to Install"; + BindingContext = _baseModels.TargetViewModel; + } } - void Validate() + private void AppTypeTierView_Loaded(object sender, Syncfusion.ListView.XForms.ListViewLoadedEventArgs e) { - if (_baseModels.TargetViewModel != null) + if (!_isUpgrading) { - _baseModels.TargetViewModel.Validated = ( - AppTypeTierView.SelectedItem != null - ); + AppTypeTierView.SelectedItems.Clear(); - if (_baseModels.TargetViewModel.Validated) + if (_baseModels.TargetViewModel.SelectedAppService != null) { - _baseModels.TargetViewModel.SelectedAppService = - AppTypeTierView.SelectedItem as ServicesViewModel.ServiceTableItem; + ServicesViewModel.ServiceTableItem serviceTableItem = + (AppTypeTierView.ItemsSource as ObservableCollection).Where( + x => x.Tier.Id == _baseModels.TargetViewModel.SelectedAppService.Tier.Id).First(); + AppTypeTierView.SelectedItems.Add(serviceTableItem); } } } - async void OnDoneButtonClickedAsync(object sender, EventArgs e) + async private void OnButtonBasicDetailsClickedAsync(object sender, EventArgs e) { IsServiceActive = true; try { - // At present only the wizard mode brings up this page. - // the app cannot change app tier afterwards as - // there is no support in the backend. + BaseModels.WizardMode = false; + await UpdateServicesAsync(); + MainSideView.CurrentLevelViewAsync(new AppBasicDetailView(BaseModels)); + } + catch (Exception ex) + { + await DisplayAlert("Nester", ex.Message, "OK"); + } + + IsServiceActive = false; + } + + async private void OnButtonDomainsClickedAsync(object sender, EventArgs e) + { + IsServiceActive = true; + try + { + await UpdateServicesAsync(); + MainSideView.CurrentLevelViewAsync(new AppDomainView(_baseModels)); + } + catch (Exception ex) + { + await DisplayAlert("Nester", ex.Message, "OK"); + } + + IsServiceActive = false; + } + + async private void OnButtonNestsClickedAsync(object sender, EventArgs e) + { + IsServiceActive = true; + + try + { + await UpdateServicesAsync(); + MainSideView.CurrentLevelViewAsync(new AppNestsView(_baseModels)); + } + catch (Exception ex) + { + await DisplayAlert("Nester", ex.Message, "OK"); + } + + IsServiceActive = false; + } + + async private void OnButtonContactsClickedAsync(object sender, EventArgs e) + { + IsServiceActive = true; + + try + { + await UpdateServicesAsync(); + MainSideView.CurrentLevelViewAsync(new ContactsView(_baseModels)); + } + catch (Exception ex) + { + await DisplayAlert("Nester", ex.Message, "OK"); + } + + IsServiceActive = false; + } + + private void AppTypeTierView_SelectionChanged(object sender, Syncfusion.ListView.XForms.ItemSelectionChangedEventArgs e) + { + if (_isUpgrading) + { + _baseModels.TargetViewModel.DeploymentModel.Validated = ( + e.AddedItems.Any() + ); + + if (_baseModels.TargetViewModel.DeploymentModel.Validated) + { + _selectedAppRow = e.AddedItems.First() as ServicesViewModel.ServiceTableItem; + } + } + else if (_baseModels.TargetViewModel != null) + { + _baseModels.TargetViewModel.Validated = ( + e.AddedItems.Any() + ); + + if (_baseModels.TargetViewModel.Validated) + { + _selectedAppRow = e.AddedItems.First() as ServicesViewModel.ServiceTableItem; + } + } + } + + async Task UpdateServicesAsync() + { + // At present only the wizard mode brings up this page. + if (_isUpgrading) + { + if (_selectedAppRow != null) + { + _baseModels.TargetViewModel.DeploymentModel.SelectedAppService = _selectedAppRow; + _baseModels.TargetViewModel.DeploymentModel.MariaDBEnabled = + _baseModels.TargetViewModel.MariaDBEnabled; + AppSummaryView summaryView = new AppSummaryView(_baseModels); + summaryView.MainSideView = MainSideView; + MainSideView.Detail.Navigation.InsertPageBefore(summaryView, this); + } + } + else + { if (_baseModels.TargetViewModel.EditApp.Status != "assigned") { - await _baseModels.TargetViewModel.CreateAppAsync(); + await _baseModels.TargetViewModel.CreateAppAsync(_selectedAppRow.Tier); + NesterControl.Target = _baseModels.TargetViewModel; NesterControl.BaseModels.AllApps.AddModel(_baseModels.TargetViewModel); } + if (_selectedAppRow != null && ( + _baseModels.TargetViewModel.SelectedAppService == null || + _baseModels.TargetViewModel.SelectedAppService.Tier.Id != _selectedAppRow.Tier.Id)) + { + AppServiceSubscription subscription = _baseModels.TargetViewModel.EditApp.Subscriptions.FirstOrDefault( + x => x.ServiceTier.Service.Tag == "nest-oak"); + + if (subscription != null) + { + await _baseModels.TargetViewModel.ServicesViewModel.RemoveSubscription(subscription); + } + + await _baseModels.TargetViewModel.ServicesViewModel.CreateSubscription(_selectedAppRow.Tier); + await _baseModels.TargetViewModel.ServicesViewModel.QueryAppSubscriptions(); + } + else if (_baseModels.TargetViewModel.SelectedMariaDBService != null && !MariaDBEnabled.IsToggled) + { + AppServiceSubscription subscription = _baseModels.TargetViewModel.EditApp.Subscriptions.FirstOrDefault( + x => x.ServiceTier.Service.Tag == "mariadb"); + + if (subscription != null) + { + await _baseModels.TargetViewModel.ServicesViewModel.RemoveSubscription(subscription); + } + } + if (_baseModels.TargetViewModel.SelectedMariaDBService == null && MariaDBEnabled.IsToggled) { // Only one tier available at present - AppServiceTier mariaDBTier =_baseModels.TargetViewModel.MariaDBTiers.First(); + AppServiceTier mariaDBTier = _baseModels.TargetViewModel.MariaDBTiers.First(); await _baseModels.TargetViewModel.ServicesViewModel.CreateSubscription(mariaDBTier); } else if (_baseModels.TargetViewModel.SelectedMariaDBService != null && !MariaDBEnabled.IsToggled) @@ -98,13 +264,33 @@ async void OnDoneButtonClickedAsync(object sender, EventArgs e) await _baseModels.TargetViewModel.ServicesViewModel.RemoveSubscription(subscription); } } + } + } - await _baseModels.TargetViewModel.NestModel.InitAsync(); + async void OnDoneButtonClickedAsync(object sender, EventArgs e) + { + IsServiceActive = true; - AppNestsView nestsView = new AppNestsView(_baseModels); - nestsView.MainSideView = MainSideView; - MainSideView.Detail.Navigation.InsertPageBefore(nestsView, this); - await MainSideView.Detail.Navigation.PopAsync(); + try + { + await UpdateServicesAsync(); + + if (_baseModels.WizardMode) + { + await _baseModels.TargetViewModel.NestModel.InitAsync(); + + AppNestsView nestsView = new AppNestsView(_baseModels); + nestsView.MainSideView = MainSideView; + MainSideView.Detail.Navigation.InsertPageBefore(nestsView, this); + + await MainSideView.Detail.Navigation.PopAsync(); + } + else + { + // Head back to homepage if the + // page was called from here + MainSideView.UnstackViewAsync(); + } } catch (Exception ex) { diff --git a/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/ContactsView.xaml b/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/ContactsView.xaml index c3c7d87..0bc8ddb 100644 --- a/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/ContactsView.xaml +++ b/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppSetup/ContactsView.xaml @@ -128,9 +128,9 @@ - + - + + + + + + + - + + + + - + + + - - - + diff --git a/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppView.xaml.cs b/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppView.xaml.cs index 0f35665..e8d9dd7 100644 --- a/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppView.xaml.cs +++ b/Nester.Deploy/Nester.Deploy/Views/Homesteads/AppView.xaml.cs @@ -57,7 +57,9 @@ public AppView(BaseModels baseModels) ButtonAppSettings, ButtonNotifications, ButtonAppDeploy, + ButtonAppRestore, ButtonAppDepRemove, + ButtonAppUpgrade, ButtonAppDownload, ButtonAppView, ButtonAddToSlack @@ -67,6 +69,8 @@ public AppView(BaseModels baseModels) ButtonAppSettings.Clicked += ButtonAppSettings_ClickedAsync; ButtonNotifications.Clicked += ButtonNotifications_ClickedAsync; + ButtonAppRestore.Clicked += ButtonAppRestore_ClickedAsync; + ButtonAppUpgrade.Clicked += ButtonAppUpgrade_ClickedAsync; ButtonAppDepRemove.Clicked += ButtonAppDepRemove_ClickedAsync; ButtonAppDeploy.Clicked += ButtonAppDeploy_ClickedAsync; ButtonAppView.Clicked += ButtonAppView_ClickedAsync; @@ -133,6 +137,7 @@ public override void UpdateBindings() public void UpdateState() { + ResetTimeFilter(); Status newState = Status.Refreshing; if (App.IsBusy) @@ -149,6 +154,13 @@ public void UpdateState() } State = newState; + + ButtonAppDeploy.IsEnabled = !App.IsBusy; + ButtonAppRestore.IsEnabled = App.IsDeployed; + ButtonAppDepRemove.IsEnabled = App.IsDeployed; + ButtonAppDownload.IsEnabled = App.IsDeployed; + ButtonAppView.IsEnabled = App.IsDeployed; + ButtonAppUpgrade.IsEnabled = App.IsDeployed; } public void ReloadAnalytics() @@ -321,6 +333,8 @@ await DisplayAlert("Nester", "Failed to retrieve metrics from the app " + async private void ButtonAppDownload_ClickedAsync(object sender, EventArgs e) { + IsServiceActive = true; + try { Devkit devkit = new Devkit(); @@ -334,24 +348,31 @@ async private void ButtonAppDownload_ClickedAsync(object sender, EventArgs e) { await DisplayAlert("Nester", ex.Message, "OK"); } + + IsServiceActive = false; } async private void ButtonNotifications_ClickedAsync(object sender, EventArgs e) { + IsServiceActive = true; + try { await _baseModels.TargetViewModel.QueryAppNotificationsAsync(); - MainSideView.StackViewAsync(new NotificationView(_baseModels)); } catch (Exception ex) { await DisplayAlert("Nester", ex.Message, "OK"); } + + IsServiceActive = false; } async private void ButtonAddToSlack_ClickedAsync(object sender, EventArgs e) { + IsServiceActive = true; + try { MainSideView.StackViewAsync(new AppWebView(_baseModels, @@ -361,6 +382,8 @@ async private void ButtonAddToSlack_ClickedAsync(object sender, EventArgs e) { await DisplayAlert("Nester", ex.Message, "OK"); } + + IsServiceActive = false; } async private void ButtonAppView_ClickedAsync(object sender, EventArgs e) @@ -380,10 +403,53 @@ async private void ButtonAppView_ClickedAsync(object sender, EventArgs e) IsServiceActive = false; } - async private void ButtonAppDepRemove_ClickedAsync(object sender, EventArgs e) + async private void ButtonAppUpgrade_ClickedAsync(object sender, EventArgs e) + { + IsServiceActive = true; + + try + { + AppService appService = _baseModels + .TargetViewModel + .ServicesViewModel + .Services.FirstOrDefault( + x => x.Tag == "nest-oak"); + + await _baseModels.TargetViewModel + .DeploymentModel + .QueryAppUpgradeServiceTiersAsync(appService); + + _baseModels.WizardMode = false; + MainSideView.StackViewAsync(new AppTierView(_baseModels)); + } + catch (Exception ex) + { + await DisplayAlert("Nester", ex.Message, "OK"); + } + + IsServiceActive = false; + } + + async private void ButtonAppRestore_ClickedAsync(object sender, EventArgs e) { IsServiceActive = true; + try + { + await _baseModels.TargetViewModel.DeploymentModel.QueryAppBackupsAsync(); + + MainSideView.StackViewAsync(new AppBackupView(_baseModels)); + } + catch (Exception ex) + { + await DisplayAlert("Nester", ex.Message, "OK"); + } + + IsServiceActive = false; + } + + async private void ButtonAppDepRemove_ClickedAsync(object sender, EventArgs e) + { try { var yes = await DisplayAlert("Nester", "Would you like to remove this deployment", "Yes", "No"); @@ -406,15 +472,20 @@ await Process(_baseModels.TargetViewModel.EditApp.Deployment, true, { await DisplayAlert("Nester", ex.Message, "OK"); } - - IsServiceActive = false; } async private void ButtonAppDeploy_ClickedAsync(object sender, EventArgs e) { + IsServiceActive = true; + try { - await _baseModels.TargetViewModel.InitAsync(); + if (_baseModels.TargetViewModel + .DeploymentModel.UpgradableAppTiers != null) + { + _baseModels.TargetViewModel + .DeploymentModel.UpgradableAppTiers.Clear(); + } if (_baseModels.PaymentViewModel.EditPaymentMethod.Proof == null || _baseModels.PaymentViewModel.EditPaymentMethod.Proof.Last4 == 0) @@ -454,19 +525,25 @@ async private void ButtonAppDeploy_ClickedAsync(object sender, EventArgs e) { await DisplayAlert("Nester", ex.Message, "OK"); } + + IsServiceActive = false; } async private void ButtonAppSettings_ClickedAsync(object sender, EventArgs e) { + IsServiceActive = true; + try { - BaseModels.WizardMode = false; ; + BaseModels.WizardMode = false; MainSideView.StackViewAsync(new AppBasicDetailView(BaseModels)); } catch (Exception ex) { await DisplayAlert("Nester", ex.Message, "OK"); } + + IsServiceActive = false; } } } diff --git a/Nester.Deploy/Nester.Deploy/Views/NotificationView.xaml b/Nester.Deploy/Nester.Deploy/Views/NotificationView.xaml index 2e9067d..3051265 100644 --- a/Nester.Deploy/Nester.Deploy/Views/NotificationView.xaml +++ b/Nester.Deploy/Nester.Deploy/Views/NotificationView.xaml @@ -38,9 +38,9 @@ - - - + + +