private async Task SetCurrentNodeWithAnimationAsync(TreeNode <T, TKey> selectedNode)
        {
            var diffResult = TreeMenuDiff.Calculate(_currentNode, selectedNode);

            diffResult
            .ChangedIndexes
            .Select(x => (cell: _recyclerView.FindViewHolderForLayoutPosition(x.Index), relation: x.Relation))
            .Where(x => x.cell != null)
            .ForEach((_, x) => _itemStateChanged(x.cell, x.relation));

            _currentNode = selectedNode;
            _itemCollection.CurrentNode = selectedNode;

            _itemAnimator.DiffResult = diffResult;
            await AnimateDiffAsync(diffResult);

            NodeSelected?.Invoke(this, selectedNode);
        }