public override async Task HandleAsync(AddArticleCommitAction action, IDispatcher dispatcher) { var article = await _articleService.GetArticle(action.ArticleId, action.PrevCommitId); var prevCommit = article?.Commits?.FirstOrDefault(c => c.Id == action.PrevCommitId); if (prevCommit != null) { var oldContent = article.ArticleInfo.Content; var diffResult = Differ.Instance.CreateWordDiffs(oldContent, action.Content, false, false, new[] { ' ' }); var diffWords = new List <string>(); foreach (var diff in diffResult.DiffBlocks) { if (diff.InsertCountB != 0) { diffWords.AddRange(diffResult.PiecesNew.Skip(diff.InsertStartB).Take(diff.InsertCountB)); } } //var commit = new ArticleCommitVM //{ // Id = Guid.NewGuid(), // Title = action.Title, // Description = action.Description, // Type = action.CommitType, // CreatedAt = DateTime.Now, // CreatedBy = "artbiel", // CommitState = CommitState.Unsent, // DiffBlocks = diffResult.DiffBlocks.ToArticleDiffBlocks(), // DiffWords = diffWords.ToArray(), // PrevCommitId = action.PrevCommitId //}; //article.Commits.Add(commit); //dispatcher.Dispatch(new SetArticleCommitsAction(article.Commits, commit)); } var commit = new ArticleCommitMainInfoVM { Id = Guid.NewGuid(), Title = action.Title, Description = action.Description, Type = action.CommitType, CreatedAt = DateTime.Now, CreatedBy = "artbiel", CommitState = CommitState.Unsent, PrevCommitId = action.PrevCommitId, Content = action.Content }; await _articleService.AddCommit(action.ArticleId, commit); _toastService.ShowToast(MBToastLevel.Success, "Commit was successfully added!"); }