using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.BL.Entities; using Tango.Core.Commands; using Tango.FSE.Common; using Tango.FSE.Common.AutoComplete; using Tango.FSE.UsersAndRoles.Navigation; using Tango.FSE.UsersAndRoles.Views; namespace Tango.FSE.UsersAndRoles.ViewModels { public class OrganizationSelectionViewVM : UsersAndRolesViewModel { /// /// Gets or sets the organizations completion source. /// public AutoCompleteSource Organizations { get; set; } private Organization _selectedOrganization; /// /// Gets or sets the selected organization. /// public Organization SelectedOrganization { get { return _selectedOrganization; } set { _selectedOrganization = value; RaisePropertyChangedAuto(); InvalidateRelayCommands(); } } /// /// Navigates to the organization users list with the specified organization. /// public RelayCommand ManageOrganizationCommand { get; set; } /// /// Initializes a new instance of the class. /// public OrganizationSelectionViewVM() { Organizations = new AutoCompleteSource(AutoCompleteOrganizations); ManageOrganizationCommand = new RelayCommand(ManageSelectedOrganization, () => SelectedOrganization != null); } private void ManageSelectedOrganization() { if (SelectedOrganization == null) { NotificationProvider.ShowError("No organization selected."); return; } ModularNavigationManager.NavigateTo(UsersAndRolesView.OrganizationUsersView, new OrganizationUsersViewVM.NavigationObject() { Organization = SelectedOrganization }); } private List AutoCompleteOrganizations(string key) { key = key ?? String.Empty; try { return Services.OrganizationsService.GetCurrentUserOrganizations().Result.Where(x => x.Name.ToLower().StartsWith(key.ToLower())).ToList(); } catch (Exception ex) { LogManager.Log(ex, "Error on auto complete organizations filter."); return new List(); } } public async override void OnNavigatedTo() { base.OnNavigatedTo(); if (SelectedOrganization == null) { await Task.Delay(200); SelectedOrganization = AuthenticationProvider.CurrentUser.Organization; } } public override Task OnApplicationLogout() { SelectedOrganization = null; return base.OnApplicationLogout(); } } }