protected override async Task PerformDeleteOnRecordCallback() { int id = Model.Id; var operation = await _interactor.CascadingDeleteAsync(Model); if (operation.WasSuccessful == false) { return; } switch (operation.Result) { case CascadingDeleteType.Edit: await RefreshModelInformation(Model.Id, false); break; case CascadingDeleteType.Delete: OnModelSearcherCleared(); if (ModelSearcher != null) { CSharpToolkit.Utilities.Abstractions.IIdProvider item = ModelSearcher.CurrentItems.FirstOrDefault(m => m.Id == id); if (item != null) { ModelSearcher.Remove(item); } } break; } }
/// <summary> /// The EventHandler for the <see cref="ModelSearcher" /> ExportId event. /// </summary> /// <param name="sender">The initiator of the event.</param> /// <param name="e">The EventArgs containing the new Id.</param> private void ModelSearcher_ExportId(object sender, GenericEventArgs <int> e) { if (CriticalOperationType == CriticalOperationType.None) { OnModelSearcherExportId(e.Data); } else { ModelSearcher.ClearSelectedItem(); } }
/// <summary> /// Used to dispose of resources in use by the <see cref="AdminViewModel{TViewModel, TModel, TModelSearcher}"/> /// </summary> /// <param name="disposing"></param> protected override void Dispose(bool disposing) { if (!_disposedValue) { if (disposing) { ApplicationRestrictor.RequestUnlock(_adminToken); FamilialLocker.RequestUnlock(_adminToken); CriticalOperationType = CriticalOperationType.None; if (ModelSearcher != null) { ModelSearcher.SelectedItems.CollectionChanged -= SelectedItems_CollectionChanged; ModelSearcher.ExportId -= ModelSearcher_ExportId; ModelSearcher.Cleared -= ModelSearcher_Cleared; ModelSearcher.RequestEnable(_adminToken); } Model.ErrorsChanged -= Model_ErrorsChanged; Model.Dispose(); _newEnableCallback = null; _duplicateEnableCallback = null; _modifyEnableCallback = null; _backEnableCallback = null; _forwardEnableCallback = null; _performDeleteOnRecordEnableCallback = null; _backForwardNavigator.CurrentItemChangedCallback = null; _backForwardNavigator?.Dispose(); Navigation.Dispose(); RecordChangeLocker.Dispose(); ConfirmCancelLocker.Dispose(); NewRecordCancelLocker.Dispose(); NavigationalOverride.Dispose(); OutsideModificationLocker.Dispose(); DefaultModelCallback = null; Locators.ForEach(locator => { locator.SearchToBegin -= Locator_SearchToBegin; locator.SearchComplete -= Locator_SearchComplete; locator.RecordRequested -= Locator_RecordRequested; locator.RequestEnable(_adminToken); }); Locators.Clear(); } _disposedValue = true; } base.Dispose(disposing); }
/// <summary> /// Logic used when the State changes. /// </summary> /// <param name="oldValue">The old State value.</param> protected override void OnStateChanged(ViewModelState oldValue) { base.OnStateChanged(oldValue); Navigation.State = State; switch (State) { case ViewModelState.Idle: CriticalOperationType = CriticalOperationType.None; ModelSearcher?.RequestEnable(_adminToken); break; case ViewModelState.FamilialOperation: case ViewModelState.Restricted: ModelSearcher?.RequestEnable(_adminToken); break; case ViewModelState.NonCriticalOperation: case ViewModelState.CriticalOperation: ModelSearcher?.RequestDisable(_adminToken); break; } }
/// <summary> /// The logic used when a search has been initiated. /// </summary> /// <param name="sender">The initiator of the event. Is used as token.</param> /// <param name="e">The EventArgs of the event.</param> private void Locator_SearchToBegin(object sender, EventArgs e) { ModelSearcher?.RequestDisable(sender); RecordChangeLocker?.RequestLock(sender); }
/// <summary> /// The logic used when a search has been completed. /// </summary> /// <param name="sender">The initiator of the event. Is used as token.</param> /// <param name="e">The EventArgs of the event.</param> private void Locator_SearchComplete(object sender, EventArgs e) { ModelSearcher?.RequestEnable(sender); RecordChangeLocker?.RequestUnlock(sender); }