1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import styled from '@emotion/styled';
- import FieldGroup from 'sentry/components/forms/fieldGroup';
- import {space} from 'sentry/styles/space';
- import type {Organization} from 'sentry/types/organization';
- import type {QueryFieldValue} from 'sentry/utils/discover/fields';
- import type {WidgetType} from 'sentry/views/dashboards/types';
- import {DisplayType} from 'sentry/views/dashboards/types';
- import ColumnEditCollection from 'sentry/views/discover/table/columnEditCollection';
- import type {FieldValueOption} from 'sentry/views/discover/table/queryField';
- import type {generateFieldOptions} from 'sentry/views/discover/utils';
- interface Props {
- displayType: DisplayType;
- fieldOptions: ReturnType<typeof generateFieldOptions>;
- fields: QueryFieldValue[];
- isOnDemandWidget: boolean;
- onChange: (newColumns: QueryFieldValue[]) => void;
- organization: Organization;
- widgetType: WidgetType;
- errors?: Record<string, string>[];
- filterAggregateParameters?: (option: FieldValueOption) => boolean;
- filterPrimaryOptions?: (option: FieldValueOption) => boolean;
- noFieldsMessage?: string;
- }
- export function ColumnFields({
- displayType,
- fieldOptions,
- widgetType,
- fields,
- organization,
- errors,
- onChange,
- filterAggregateParameters,
- filterPrimaryOptions,
- noFieldsMessage,
- isOnDemandWidget,
- }: Props) {
- return (
- <FieldGroup
- inline={false}
- error={errors?.find(error => error?.fields)?.fields}
- flexibleControlStateSize
- stacked
- >
- {displayType === DisplayType.TABLE ? (
- <ColumnCollectionEdit
- columns={fields}
- onChange={onChange}
- fieldOptions={fieldOptions}
- organization={organization}
- source={widgetType}
- showAliasField
- filterAggregateParameters={filterAggregateParameters}
- filterPrimaryOptions={filterPrimaryOptions}
- noFieldsMessage={noFieldsMessage}
- isOnDemandWidget={isOnDemandWidget}
- />
- ) : (
- // 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
- <ColumnCollectionEdit
- columns={fields.slice(0, fields.length - 1)}
- onChange={newColumns => {
- onChange([...newColumns, fields[fields.length - 1]]);
- }}
- fieldOptions={fieldOptions}
- organization={organization}
- source={widgetType}
- filterPrimaryOptions={filterPrimaryOptions}
- noFieldsMessage={noFieldsMessage}
- isOnDemandWidget={isOnDemandWidget}
- />
- )}
- </FieldGroup>
- );
- }
- const ColumnCollectionEdit = styled(ColumnEditCollection)`
- margin-top: ${space(1)};
- `;
|