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();
}
}
}