Skip to content

Commit f895807

Browse files
committed
👔 Add ask-seer-consent items to lists
1 parent ec7665c commit f895807

File tree

4 files changed

+58
-10
lines changed

4 files changed

+58
-10
lines changed

static/app/components/searchQueryBuilder/tokens/combobox.tsx

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@ import {
2929
import {Input} from 'sentry/components/core/input';
3030
import {useAutosizeInput} from 'sentry/components/core/input/useAutosizeInput';
3131
import {Overlay} from 'sentry/components/overlay';
32-
import {ASK_SEER_ITEM_KEY, AskSeer} from 'sentry/components/searchQueryBuilder/askSeer';
32+
import {
33+
ASK_SEER_CONSENT_ITEM_KEY,
34+
ASK_SEER_ITEM_KEY,
35+
AskSeer,
36+
} from 'sentry/components/searchQueryBuilder/askSeer';
3337
import {useSearchQueryBuilder} from 'sentry/components/searchQueryBuilder/context';
3438
import {useSearchTokenCombobox} from 'sentry/components/searchQueryBuilder/tokens/useSearchTokenCombobox';
3539
import {
@@ -163,7 +167,7 @@ function menuIsOpen({
163167

164168
// When a custom menu is not being displayed and we aren't loading anything,
165169
// only show when there is something to select from.
166-
return openState && totalOptions > hiddenOptions.size;
170+
return openState && totalOptions >= hiddenOptions.size;
167171
}
168172

169173
function useHiddenItems<T extends SelectOptionOrSectionWithKey<string>>({
@@ -185,13 +189,21 @@ function useHiddenItems<T extends SelectOptionOrSectionWithKey<string>>({
185189
shouldFilterResults ? filterValue : '',
186190
maxOptions
187191
);
188-
return showAskSeerOption ? options.add(ASK_SEER_ITEM_KEY) : options;
192+
193+
if (showAskSeerOption) {
194+
options.add(ASK_SEER_ITEM_KEY);
195+
options.add(ASK_SEER_CONSENT_ITEM_KEY);
196+
}
197+
198+
return options;
189199
}, [items, shouldFilterResults, filterValue, maxOptions, showAskSeerOption]);
190200

191201
const disabledKeys = useMemo(() => {
192202
const baseDisabledKeys = [...getDisabledOptions(items), ...hiddenOptions];
193203
return showAskSeerOption
194-
? baseDisabledKeys.filter(key => key !== ASK_SEER_ITEM_KEY)
204+
? baseDisabledKeys.filter(
205+
key => key !== ASK_SEER_ITEM_KEY && key !== ASK_SEER_CONSENT_ITEM_KEY
206+
)
195207
: baseDisabledKeys;
196208
}, [hiddenOptions, items, showAskSeerOption]);
197209

@@ -621,7 +633,7 @@ const ListBoxOverlay = styled(Overlay)`
621633
max-height: 400px;
622634
min-width: 200px;
623635
width: 600px;
624-
max-width: min-content;
636+
max-width: fit-content;
625637
overflow-y: auto;
626638
`;
627639

static/app/components/searchQueryBuilder/tokens/filterKeyListBox/index.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@ import type {
1515
} from 'sentry/components/core/compactSelect/types';
1616
import InteractionStateLayer from 'sentry/components/core/interactionStateLayer';
1717
import {Overlay} from 'sentry/components/overlay';
18-
import {ASK_SEER_ITEM_KEY, AskSeer} from 'sentry/components/searchQueryBuilder/askSeer';
18+
import {
19+
ASK_SEER_CONSENT_ITEM_KEY,
20+
ASK_SEER_ITEM_KEY,
21+
AskSeer,
22+
} from 'sentry/components/searchQueryBuilder/askSeer';
1923
import {useSearchQueryBuilder} from 'sentry/components/searchQueryBuilder/context';
2024
import type {CustomComboboxMenuProps} from 'sentry/components/searchQueryBuilder/tokens/combobox';
2125
import {KeyDescription} from 'sentry/components/searchQueryBuilder/tokens/filterKeyListBox/keyDescription';
@@ -315,6 +319,7 @@ export function FilterKeyListBox<T extends SelectOptionOrSectionWithKey<string>>
315319

316320
if (enableAISearch) {
317321
baseHidden.push(ASK_SEER_ITEM_KEY);
322+
baseHidden.push(ASK_SEER_CONSENT_ITEM_KEY);
318323
}
319324

320325
return new Set(baseHidden);

static/app/components/searchQueryBuilder/tokens/filterKeyListBox/useFilterKeyListBox.tsx

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {useRecentSearchFilters} from 'sentry/components/searchQueryBuilder/token
1616
import {
1717
ALL_CATEGORY,
1818
ALL_CATEGORY_VALUE,
19+
createAskSeerConsentItem,
1920
createAskSeerItem,
2021
createRecentFilterItem,
2122
createRecentFilterOptionKey,
@@ -162,8 +163,13 @@ function useFilterKeySections({
162163
return {sections, selectedSection, setSelectedSection};
163164
}
164165
export function useFilterKeyListBox({filterValue}: {filterValue: string}) {
165-
const {filterKeys, getFieldDefinition, setDisplaySeerResults, enableAISearch} =
166-
useSearchQueryBuilder();
166+
const {
167+
filterKeys,
168+
getFieldDefinition,
169+
setDisplaySeerResults,
170+
enableAISearch,
171+
gaveSeerConsentRef,
172+
} = useSearchQueryBuilder();
167173
const {sectionedItems} = useFilterKeyItems();
168174
const recentFilters = useRecentSearchFilters();
169175
const {data: recentSearches} = useRecentSearches();
@@ -176,7 +182,12 @@ export function useFilterKeyListBox({filterValue}: {filterValue: string}) {
176182
const filterKeyMenuItems = useMemo(() => {
177183
const recentFilterItems = makeRecentFilterItems({recentFilters});
178184

179-
const askSeerItem = enableAISearch ? [createAskSeerItem()] : [];
185+
const askSeerItem = [];
186+
if (enableAISearch) {
187+
askSeerItem.push(
188+
gaveSeerConsentRef.current ? createAskSeerItem() : createAskSeerConsentItem()
189+
);
190+
}
180191

181192
if (selectedSection === RECENT_SEARCH_CATEGORY_VALUE) {
182193
return [
@@ -206,6 +217,7 @@ export function useFilterKeyListBox({filterValue}: {filterValue: string}) {
206217
enableAISearch,
207218
filterKeys,
208219
getFieldDefinition,
220+
gaveSeerConsentRef,
209221
recentFilters,
210222
recentSearches,
211223
sectionedItems,
@@ -378,6 +390,15 @@ export function useFilterKeyListBox({filterValue}: {filterValue: string}) {
378390
setDisplaySeerResults(true);
379391
return;
380392
}
393+
394+
if (option.type === 'ask-seer-consent') {
395+
// TODO: Implement logic to handle consent
396+
trackAnalytics('trace.explorer.ai_query_interface', {
397+
organization,
398+
action: 'consent_accepted',
399+
});
400+
return;
401+
}
381402
},
382403
[organization, setDisplaySeerResults]
383404
);

static/app/components/searchQueryBuilder/tokens/useSortedFilterKeyItems.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import type {
77
SearchKeyItem,
88
} from 'sentry/components/searchQueryBuilder/tokens/filterKeyListBox/types';
99
import {
10+
createAskSeerConsentItem,
1011
createAskSeerItem,
1112
createFilterValueItem,
1213
createItem,
@@ -137,6 +138,7 @@ export function useSortedFilterKeyItems({
137138
disallowFreeText,
138139
replaceRawSearchKeys,
139140
enableAISearch,
141+
gaveSeerConsentRef,
140142
} = useSearchQueryBuilder();
141143
const organization = useOrganization();
142144

@@ -245,6 +247,13 @@ export function useSortedFilterKeyItems({
245247
type: 'section',
246248
};
247249

250+
const askSeerItem = [];
251+
if (enableAISearch) {
252+
askSeerItem.push(
253+
gaveSeerConsentRef.current ? createAskSeerItem() : createAskSeerConsentItem()
254+
);
255+
}
256+
248257
const {shouldShowAtTop, suggestedFiltersSection} =
249258
getValueSuggestionsFromSearchResult(searched);
250259

@@ -254,7 +263,7 @@ export function useSortedFilterKeyItems({
254263
...(shouldIncludeRawSearch ? [rawSearchSection] : []),
255264
keyItemsSection,
256265
...(!shouldShowAtTop && suggestedFiltersSection ? [suggestedFiltersSection] : []),
257-
...(enableAISearch ? [createAskSeerItem()] : []),
266+
...askSeerItem,
258267
];
259268
}
260269

@@ -267,6 +276,7 @@ export function useSortedFilterKeyItems({
267276
filterValue,
268277
flatKeys,
269278
getFieldDefinition,
279+
gaveSeerConsentRef,
270280
hasRawSearchReplacement,
271281
includeSuggestions,
272282
inputValue,

0 commit comments

Comments
 (0)