public StartUpViewModel(IScreen screen) : base(screen) { IsDbAvailable = App.Features.InAppDatabase == Infrastructure.Features.FeatureAvailability.Available && App.Features.MultiUserEnabled == Infrastructure.Features.FeatureAvailability.Available; Identifier = new TestIndentifier { ImpulseRate = _minimumImpulseRate, Correction = false }; NavigateCommand = ReactiveCommand.Create(StartTest); NavigateToturialMode = ReactiveCommand.Create(StartTurotial); Quantums = QuantumTypeLookup.Load(); Counts = TestCountTypeLookup.Load(); SelectedQuantum = Quantums.FirstOrDefault(x => x.Item == Quantum.TwoHalf); SelectedCount = Counts.FirstOrDefault(x => x.Item == TestCount.Sixty); Representations = RepresentationTypeLookup.Load(); SelectedRepresentation = Representations.FirstOrDefault(x => x.Item == RepresentationType.UI); SelectedUser = UserManager.GetDefaultUser(); SuggestedUsers = new ObservableCollection <User>(); this.WhenActivated(disposables => { this .WhenAnyValue(x => x.SelectedRepresentation) .WhereNotNull() .Subscribe(x => Identifier.RepresentationType = x.Item) .DisposeWith(disposables); this.WhenAnyValue(x => x.SearchTerm) .WhereNotNull() .Subscribe(term => Search(term.Trim())); }); }
public static void Load(this TestIndentifier identifier) { sheet = identifier; identifier.Answers = new List <TestAnswer>(); identifier.TestFragments = new List <TestFragment>(); Load(identifier.TestCount); }
private void StartTest() { var Identifier = new TestIndentifier { ImpulseRate = 200, Correction = true, Quantum = 3000, TestCount = 10, RepresentationType = RepresentationType.UI }; HostScreen.Router.Navigate.Execute(new ValidationViewModel(HostScreen, Identifier, null)); }
public TestViewModel(IScreen screen, TestIndentifier identifier, User selectedUser) : base(screen) { User = selectedUser; ActiveIdentifier = identifier; identifier.Load(); FirstButtonCommand = ReactiveCommand.Create(FirstButtonAction); SecondButtonCommand = ReactiveCommand.Create(SecondButtonAction); ThirdButtonCommand = ReactiveCommand.Create(ThirdButtonAction); FourthButtonCommand = ReactiveCommand.Create(FourthButtonAction); IsInformational = false; }
public static async Task InsetTest(TestIndentifier test) { if (App.Features.InAppDatabase == Infrastructure.Features.FeatureAvailability.Available) { var identifierRepo = GenericRepository.Of <TestIndentifier>(); await identifierRepo.AddAsync(test); ReactiveFactory.ChangeUser(new User { Id = test.UserId }); } }
public static async Task <TestIndentifier> EagerLoad(TestIndentifier test) { var fragmentRepo = GenericRepository.Of <TestFragment>(); var answerRepo = GenericRepository.Of <TestAnswer>(); var userRepo = GenericRepository.Of <User>(); test.Answers = (await answerRepo.FindAllAsync(x => x.IndentifierId == test.Id)).ToList(); test.TestFragments = (await fragmentRepo.FindAllAsync(x => x.IndentifierId == test.Id)).ToList(); foreach (var item in test.Answers) { item.TestFragment = test.TestFragments.FirstOrDefault(x => x.Id == item.TestFragmentId); item.PreFragment = test.TestFragments.FirstOrDefault(x => x.Id == item.PreFragmentId); } test.User = await userRepo.GetAsync(test.UserId); return(test); }
public static ValidationContext LoadValidation(this TestIndentifier identifier) { var context = new ValidationContext(); var possibleAnswers = new List <VirtualKey> { VirtualKey.Up, VirtualKey.Down, VirtualKey.Left, VirtualKey.Right }; possibleAnswers.Add(possibleAnswers.PickRandom()); possibleAnswers.Add(possibleAnswers.PickRandom()); context.Items = possibleAnswers.Randomize().Select(x => new ValidationItem { Key = x }).ToList(); return(context); }
public ValidationViewModel(IScreen screen, TestIndentifier identifier, Models.User selectedUser, bool proceedOnInvalid = false) : base(screen) { User = selectedUser; Context = identifier.LoadValidation(); ActiveIdentifier = identifier; _proceed = proceedOnInvalid; FirstButtonCommand = ReactiveCommand.Create(FirstButtonAction); SecondButtonCommand = ReactiveCommand.Create(SecondButtonAction); ThirdButtonCommand = ReactiveCommand.Create(ThirdButtonAction); FourthButtonCommand = ReactiveCommand.Create(FourthButtonAction); this.WhenAnyValue(x => x.InfoText) .Subscribe(y => { IsInformational = y.HasValue(); IsButtonShown = y.IsEmpty(); }); }
public ResultsViewModel(IScreen screen, TestIndentifier sheet, bool canTest = false) : base(screen) { Validation = sheet.ValidationContext; CanTest = canTest; ActiveSheet = sheet; FilteredData = new ObservableCollection <TestAnswer>(); HasTrue = sheet.Answers.Any(x => x.Status == CorrectionStatus.True); HasFalse = sheet.Answers.Any(x => x.Status == CorrectionStatus.False); HasNotAnswered = sheet.Answers.Any(x => x.Status == CorrectionStatus.NoEntry); Mode = GraphResultShowModeLookup.Load(HasTrue, HasFalse); SelectedMode = Mode.FirstOrDefault(); ExportExcelCommand = ReactiveCommand.Create(Export); if (canTest) { NavigateTest = ReactiveCommand.Create(GoToStartUp); } if (HasNotAnswered) { Idle = getSustain(CorrectionStatus.NoEntry); } if (HasTrue) { _trueReaction = (int)sheet.Answers.Where(x => x.Status == CorrectionStatus.True).Select(x => x.InputSpeed).Average().Value; Sustain = getSustain(CorrectionStatus.True); } if (HasFalse) { _falseReaction = (int)sheet.Answers.Where(x => x.Status == CorrectionStatus.False).Select(x => x.InputSpeed).Average().Value; Fatigue = getSustain(CorrectionStatus.False); } if (HasMixed) { _mixReaction = (int)sheet.Answers.Where(x => x.Status != CorrectionStatus.NoEntry).Select(x => x.InputSpeed).Average().Value; } if (true) { } var trueCount = ActiveSheet.Answers.Count(x => x.Status == CorrectionStatus.True); var falseCount = ActiveSheet.Answers.Count(x => x.Status == CorrectionStatus.False); var all = ActiveSheet.Answers.Count; Grade = $"{ trueCount - falseCount} / {all}"; Percentage = $"{((trueCount - falseCount) * 100) / all}%"; this.WhenActivated(disposables => { this .WhenAnyValue(x => x.SelectedMode) .WhereNotNull() .Subscribe(x => { System.Diagnostics.Debug.WriteLine("Chart Update Requested"); FilteredData.Clear(); switch (x.Item) { case GraphResultShowMode.Mixed: FilteredData.AddRange(GetMixedList()); ReactionTime = _mixReaction.Value; break; case GraphResultShowMode.True: FilteredData.AddRange(GetTrueList()); ReactionTime = _trueReaction.Value; break; case GraphResultShowMode.False: FilteredData.AddRange(GetFalseList()); ReactionTime = _falseReaction.Value; break; default: break; } MinWindow = FilteredData.Count * 25; }) .DisposeWith(disposables); }); DataFix(); }