Files
BeWoPlaner/BeWo/ViewModel/View/Administration/AiPromptbausteinRoutineViewModel.cs

123 lines
3.4 KiB
C#

using BeWo.ServiceProxy;
using BeWo.ViewModel.ListViewModel;
using BS.Shared.DataContracts.Feature.AI;
using DevExpress.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace BeWo.ViewModel.View.Administration
{
public class AiPromptbausteinRoutineViewModel : AcceptCancelDialogViewModel<AiPromptbausteinRoutineDC, AiPromptbausteinRoutineVM>
{
private readonly bool _IsNew;
public AiPromptbausteinRoutineStepVM _SelectedStep;
public AiPromptbausteinFolderListVM FolderListVM { get; set; }
public ICommand DeleteStepCommand { get; private set; }
public ICommand MoveStepUpCommand { get; private set; }
public ICommand MoveStepDownCommand { get; private set; }
public AiPromptbausteinRoutineStepVM SelectedStep
{
get => _SelectedStep;
set => SetProperty(ref _SelectedStep, value, nameof(SelectedStep));
}
public AiPromptbausteinRoutineViewModel(AiPromptbausteinRoutineVM viewModel, AiPromptbausteinFolderListVM folders) : base(viewModel)
{
FolderListVM = folders;
ViewModel.Steps.VMList.ListChanged += (s, e) =>
{
SaveCommand.RaiseCanExecuteChanged();
};
DeleteStepCommand = new DelegateCommand<AiPromptbausteinRoutineStepVM>(DeleteStep, canDeleteStep);
MoveStepUpCommand = new DelegateCommand<AiPromptbausteinRoutineStepVM>(MoveStepUp, canMoveStepUp);
MoveStepDownCommand = new DelegateCommand<AiPromptbausteinRoutineStepVM>(MoveStepDown, canMoveStepDown);
}
void DeleteStep(AiPromptbausteinRoutineStepVM step)
{
ViewModel.Steps.VMList.Remove(step);
}
void MoveStepUp(AiPromptbausteinRoutineStepVM step)
{
swap(step, -1);
}
void MoveStepDown(AiPromptbausteinRoutineStepVM step)
{
swap(step, 1);
}
bool canDeleteStep(AiPromptbausteinRoutineStepVM step)
{
return step is object;
}
bool canMoveStepUp(AiPromptbausteinRoutineStepVM step)
{
return step is object && ViewModel.Steps.Count > 1 && ViewModel.Steps.VMList.First() != step;
}
bool canMoveStepDown(AiPromptbausteinRoutineStepVM step)
{
return step is object && ViewModel.Steps.Count > 1 && ViewModel.Steps.VMList.Last() != step;
}
protected override bool canSave()
{
return base.canSave() && !string.IsNullOrWhiteSpace(ViewModel.Title) && (ViewModel.Steps?.VMList.Any() ?? false);
}
protected override void Save()
{
var dc = ViewModel.CommitToDataContract();
if (ViewModel.IsNew)
{
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.InsertAiPromptbausteinRoutine(dc),
DataSave);
}
else
{
ServiceFacade.DoAiEnhancedServiceAsnyc(x => x.UpdateAiPromptbausteinRoutine(dc),
DataSave);
}
}
private void swap(AiPromptbausteinRoutineStepVM step_x, int offset_y)
{
var id_x = ViewModel.Steps.VMList.IndexOf(step_x);
var id_y = id_x + offset_y;
var step_y = ViewModel.Steps.VMList[id_y];
var prompt_x = step_x.PromptReference;
var version_x = step_x.ReferenceVersion;
var valid_x = step_x.IsValid;
var prompt_y = step_y.PromptReference;
var version_y = step_y.ReferenceVersion;
var valid_y = step_y.IsValid;
step_x.PromptReference = prompt_y;
step_x.ReferenceVersion = version_y;
step_x.SetIsValid(valid_y);
step_y.PromptReference = prompt_x;
step_y.ReferenceVersion = version_x;
step_y.SetIsValid(valid_x);
SelectedStep = step_y;
}
}
}