import styled from '@emotion/styled'; import FieldGroup from 'sentry/components/forms/fieldGroup'; import {space} from 'sentry/styles/space'; import {Organization} from 'sentry/types'; import {QueryFieldValue} from 'sentry/utils/discover/fields'; import {DisplayType, WidgetType} from 'sentry/views/dashboards/types'; import ColumnEditCollection from 'sentry/views/discover/table/columnEditCollection'; import {FieldValueOption} from 'sentry/views/discover/table/queryField'; import {generateFieldOptions} from 'sentry/views/discover/utils'; interface Props { displayType: DisplayType; fieldOptions: ReturnType; fields: QueryFieldValue[]; onChange: (newColumns: QueryFieldValue[]) => void; organization: Organization; widgetType: WidgetType; errors?: Record[]; filterAggregateParameters?: (option: FieldValueOption) => boolean; filterPrimaryOptions?: (option: FieldValueOption) => boolean; noFieldsMessage?: string; } export function ColumnFields({ displayType, fieldOptions, widgetType, fields, organization, errors, onChange, filterAggregateParameters, filterPrimaryOptions, noFieldsMessage, }: Props) { return ( error?.fields)?.fields} flexibleControlStateSize stacked > {displayType === DisplayType.TABLE ? ( ) : ( // The only other display type this component // renders for is TOP_N, where the n - 1 fields // are columns and the nth field is the y-axis { onChange([...newColumns, fields[fields.length - 1]]); }} fieldOptions={fieldOptions} organization={organization} source={widgetType} filterPrimaryOptions={filterPrimaryOptions} noFieldsMessage={noFieldsMessage} /> )} ); } const ColumnCollectionEdit = styled(ColumnEditCollection)` margin-top: ${space(1)}; `;