private void UpdateFilter(int caretIndex)
{
if (caretIndex > intellisenseStartedAt)
{
Dispatcher.UIThread.InvokeTaskAsync(() =>
{
currentFilter = editor.TextDocument.GetText(intellisenseStartedAt, caretIndex - intellisenseStartedAt).Replace(".", string.Empty);
}).Wait();
}
else
{
currentFilter = string.Empty;
}
CompletionDataViewModel suggestion = null;
var filteredResults = unfilteredCompletions as IEnumerable<CompletionDataViewModel>;
if (currentFilter != string.Empty)
{
filteredResults = unfilteredCompletions.Where(c => c != null && c.Title.ToLower().Contains(currentFilter.ToLower()));
IEnumerable<CompletionDataViewModel> newSelectedCompletions = null;
newSelectedCompletions = filteredResults.Where(s => s.Title.StartsWith(currentFilter));
// try find exact match case sensitive
if (newSelectedCompletions.Count() == 0)
{
newSelectedCompletions = filteredResults.Where(s => s.Title.ToLower().StartsWith(currentFilter.ToLower()));
// try find non-case sensitve match
}
if (newSelectedCompletions.Count() == 0)
{
suggestion = noSelectedCompletion;
}
else
{
var newSelectedCompletion = newSelectedCompletions.FirstOrDefault();
suggestion = newSelectedCompletion;
}
}
else
{
suggestion = noSelectedCompletion;
}
if (filteredResults?.Count() > 0)
{
if (filteredResults?.Count() == 1 && filteredResults.First().Title == currentFilter)
{
CloseIntellisense();
}
else
{
var list = filteredResults.ToList();
Dispatcher.UIThread.InvokeTaskAsync(() =>
{
intellisenseControl.CompletionData = null;
intellisenseControl.CompletionData = list;
intellisenseControl.SelectedCompletion = suggestion;
intellisenseControl.IsVisible = true;
}).Wait();
}
}
else
{
Dispatcher.UIThread.InvokeTaskAsync(() =>
{
intellisenseControl.SelectedCompletion = noSelectedCompletion;
});
}
}