mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-10-30 14:49:14 +00:00
80 lines
2.5 KiB
TypeScript
80 lines
2.5 KiB
TypeScript
import styled from '@emotion/styled';
|
|
|
|
import FieldGroup from 'sentry/components/forms/fieldGroup';
|
|
import {space} from 'sentry/styles/space';
|
|
import type {Organization} from 'sentry/types';
|
|
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[];
|
|
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,
|
|
}: 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}
|
|
/>
|
|
) : (
|
|
// 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}
|
|
/>
|
|
)}
|
|
</FieldGroup>
|
|
);
|
|
}
|
|
|
|
const ColumnCollectionEdit = styled(ColumnEditCollection)`
|
|
margin-top: ${space(1)};
|
|
`;
|