/// <summary> /// Will add a resource by type which will be selected via a dialog /// </summary> private async Task AddResource(object parameters) { var typeDialog = new TypeSelectorViewModel(ResourceServiceModel, SelectedResource); await DialogManager.ShowDialogAsync(typeDialog); if (!typeDialog.Result) { return; } IsBusy = true; var detailsVm = DetailsFactory.Create(typeDialog.SelectedType.Name); await LoadDetails(async delegate { await detailsVm.Load(typeDialog.ResourcePrototype); }); // Add selected resource as parent reference if (SelectedResource != null) { var parentReference = detailsVm.EditableObject.References.First(r => r.Model.Name == "Parent"); parentReference.Targets.Add(SelectedResource.Resource); } ActivateItem(detailsVm); EnterEdit(); IsBusy = false; }
private async Task ActivateDetails(string productType, long detailsId) { //Select view model for the right resource type var detailsVm = DetailsFactory.Create(productType); await LoadDetails(() => detailsVm.Load(detailsId)); ActivateItem(detailsVm); // Don't know why but validate all commands again CommandManager.InvalidateRequerySuggested(); }
/// protected override void OnInitialize() { base.OnInitialize(); // Show busy indicator on master because we are not sure if the master is currently loaded IsBusy = true; Logger = Logger.GetChild(typeof(TDetailsType).Name, GetType()); // Create empty details here EmptyDetails = DetailsFactory.Create(DetailsConstants.EmptyType) as TEmptyDetails; ShowEmpty(); }
public override async Task OnMasterItemChanged(object sender, RoutedPropertyChangedEventArgs <object> args) { var selectedRecipe = (RecipeViewModel)args.NewValue; if (selectedRecipe == null) { ShowEmpty(); return; } var detailsVm = DetailsFactory.Create(selectedRecipe.Type); await LoadDetails(() => detailsVm.Load(selectedRecipe.Id, _workplans)); ActivateItem(detailsVm); }
/// <summary> /// Select <see cref="ResourceTreeItemViewModel"/> and load the details /// </summary> private async Task SelectResource(ResourceTreeItemViewModel treeItem) { SelectedResource = treeItem; if (treeItem == null) { ShowEmpty(); return; } //Select view model for the right resource type var detailsVm = DetailsFactory.Create(treeItem.Resource.TypeName); await LoadDetails(() => detailsVm.Load(treeItem.Resource.Id)); ActivateItem(detailsVm); }
/// <inheritdoc /> public override void ActivateItem(IScreen item) { if (item == ActiveItem) { return; } if (ActiveItem != null) { // TODO: ActiveItem is null after Deactivate base.DeactivateItem(ActiveItem, true); var detailItem = (TDetailsType)ActiveItem; DetailsFactory.Destroy(detailItem); } base.ActivateItem(item); NotifyOfPropertyChange(() => CurrentDetails); }
public void DetailsFactory_ContractWithNull(int pin, string expectedDetails) { // Arrange var rules = new List <Func <Employee, string> > { DetailsFactory.CreateEmployeePinDivisibilityRule(new[] { 3, 7 }, "divided_by_3_and_7"), DetailsFactory.CreateEmployeePinDivisibilityRule(new[] { 3 }, "divided_by_3"), DetailsFactory.CreateEmployeePinDivisibilityRule(new[] { 7 }, "divided_by_7") }; var detailsFactory = DetailsFactory.Create(rules); var employee = new Employee { Pin = pin }; // Act var details = detailsFactory.GetDetails(employee); // Assert Assert.AreEqual(expectedDetails, details); }
public void EnumerateEmployeesWithNonEmptyDetails_Algorithm() { int count_total = 10; // Arrange var employees = Enumerable.Range(1, count_total).Select(i => new Employee { Pin = i }).ToList(); var rules = new List <Func <Employee, string> > { DetailsFactory.CreateEmployeePinDivisibilityRule(new[] { 2 }, "divided_by_2") }; var detailsFactory = DetailsFactory.Create(rules); // Act var employeesWithDetails = EmployeeWithDetails.EnumerateEmployeesWithNonEmptyDetails(employees, detailsFactory).ToList(); // Assert Assert.AreEqual(count_total, employees.Count); Assert.AreEqual(count_total / 2, employeesWithDetails.Count); }