import {useCallback, useMemo} from 'react'; import type {SelectOption} from 'sentry/components/compactSelect'; import {CompactSelect} from 'sentry/components/compactSelect'; import {Tooltip} from 'sentry/components/tooltip'; import {t} from 'sentry/locale'; import type {Sort} from 'sentry/utils/discover/fields'; import {formatParsedFunction, parseFunction} from 'sentry/utils/discover/fields'; import {TypeBadge} from 'sentry/views/explore/components/typeBadge'; import {useSpanTags} from 'sentry/views/explore/contexts/spanTagsContext'; import type {Field} from 'sentry/views/explore/hooks/useSampleFields'; import {ToolbarHeader, ToolbarLabel, ToolbarRow, ToolbarSection} from './styles'; interface ToolbarSortByProps { fields: Field[]; setSorts: (newSorts: Sort[]) => void; sorts: Sort[]; } export function ToolbarSortBy({fields, setSorts, sorts}: ToolbarSortByProps) { const numberTags = useSpanTags('number'); const stringTags = useSpanTags('string'); const fieldOptions: SelectOption[] = useMemo(() => { return fields.map(field => { const tag = stringTags[field] ?? numberTags[field] ?? null; if (tag) { return { label: tag.name, value: field, textValue: tag.name, trailingItems: , }; } const func = parseFunction(field); if (func) { const formatted = formatParsedFunction(func); return { label: formatted, value: field, textValue: formatted, trailingItems: , }; } // not a tag, maybe it's an aggregate return { label: field, value: field, textValue: field, trailingItems: , }; }); }, [fields, numberTags, stringTags]); const setSortField = useCallback( (i: number, {value}: SelectOption) => { if (sorts[i]) { setSorts([ { field: value, kind: sorts[i].kind, }, ]); } }, [setSorts, sorts] ); const kindOptions: SelectOption[] = useMemo(() => { return [ { label: 'Desc', value: 'desc', textValue: t('Descending'), }, { label: 'Asc', value: 'asc', textValue: t('Ascending'), }, ]; }, []); const setSortKind = useCallback( (i: number, {value}: SelectOption) => { if (sorts[i]) { setSorts([ { field: sorts[i].field, kind: value, }, ]); } }, [setSorts, sorts] ); return ( {t('Sort By')}
setSortField(0, newSortField)} /> setSortKind(0, newSortKind)} />
); }