[LS] [AI Context] DuoChat: context items loading state does not handle concurrent requests
When searching for context items within Duo Chat, there is a problem where the loading state can finish, but then more results continue to load in.
The vue app sets `contextMenuIsLoading` to `true` when a search is triggered, and then back to `false` when search results are returned. The search is debounced, but can trigger multiple requests as the user is typing. Currently the first of these requests to return results will set `contextMenuIsLoading` to `false`, despite other requests still being in flight. This results in a jarring experience where the search results can flicker/change as you're reading them.
This is not so noticeable when selecting `file` context items, since they are searched locally and resolve very fast. But it can be very noticeable when searching `issue` or `merge_request` context items, which use API calls to return search results.
### Expected behaviour
UI stays in loading state until final results are displayed.
### Actual behaviour
First set of results is displayed, loading state is removed, further results pop in later.
### Suggested fix
- cancel in-flight requests as new searches are run, so only one set of results ever returns
or
- track how many searches we have triggered, and only stop loading when they have all returned
epic