index.tsx 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import ExternalLink from 'sentry/components/links/externalLink';
  2. import {t, tct} from 'sentry/locale';
  3. import type {Organization, TagCollection} from 'sentry/types';
  4. import type {QueryFieldValue} from 'sentry/utils/discover/fields';
  5. import useCustomMeasurements from 'sentry/utils/useCustomMeasurements';
  6. import {getDatasetConfig} from 'sentry/views/dashboards/datasetConfig/base';
  7. import type {DisplayType, WidgetQuery, WidgetType} from 'sentry/views/dashboards/types';
  8. import {DataSet} from '../../utils';
  9. import {BuildStep} from '../buildStep';
  10. import {ColumnFields} from './columnFields';
  11. interface Props {
  12. dataSet: DataSet;
  13. displayType: DisplayType;
  14. explodedFields: QueryFieldValue[];
  15. handleColumnFieldChange: (newFields: QueryFieldValue[]) => void;
  16. isOnDemandWidget: boolean;
  17. onQueryChange: (queryIndex: number, newQuery: WidgetQuery) => void;
  18. organization: Organization;
  19. tags: TagCollection;
  20. widgetType: WidgetType;
  21. queryErrors?: Record<string, any>[];
  22. }
  23. export function ColumnsStep({
  24. dataSet,
  25. displayType,
  26. organization,
  27. widgetType,
  28. handleColumnFieldChange,
  29. queryErrors,
  30. explodedFields,
  31. tags,
  32. isOnDemandWidget,
  33. }: Props) {
  34. const {customMeasurements} = useCustomMeasurements();
  35. const datasetConfig = getDatasetConfig(widgetType);
  36. return (
  37. <BuildStep
  38. data-test-id="choose-column-step"
  39. title={t('Choose your columns')}
  40. description={
  41. dataSet === DataSet.ISSUES
  42. ? tct(
  43. '[fieldTagLink: Field and tag] columns will help you view more details about the issues (e.g., title).',
  44. {
  45. fieldTagLink: (
  46. <ExternalLink href="https://docs.sentry.io/product/sentry-basics/search/searchable-properties/#event-properties" />
  47. ),
  48. }
  49. )
  50. : dataSet === DataSet.RELEASES
  51. ? tct(
  52. 'To stack sessions, add [functionLink: functions] f(x) that may take in additional parameters. [fieldTagLink: Field and tag] columns will help you view more details about the sessions (e.g., releases).',
  53. {
  54. functionLink: (
  55. <ExternalLink href="https://docs.sentry.io/product/discover-queries/query-builder/#filter-by-table-columns" />
  56. ),
  57. fieldTagLink: (
  58. <ExternalLink href="https://docs.sentry.io/product/sentry-basics/search/searchable-properties/#release-properties" />
  59. ),
  60. }
  61. )
  62. : tct(
  63. 'To stack events, add [functionLink: functions] f(x) that may take in additional parameters. [fieldTagLink: Field and tag] columns will help you view more details about the events (e.g., title).',
  64. {
  65. functionLink: (
  66. <ExternalLink href="https://docs.sentry.io/product/discover-queries/query-builder/#filter-by-table-columns" />
  67. ),
  68. fieldTagLink: (
  69. <ExternalLink href="https://docs.sentry.io/product/sentry-basics/search/searchable-properties/#event-properties" />
  70. ),
  71. }
  72. )
  73. }
  74. >
  75. <ColumnFields
  76. displayType={displayType}
  77. organization={organization}
  78. widgetType={widgetType}
  79. fields={explodedFields}
  80. errors={queryErrors}
  81. fieldOptions={datasetConfig.getTableFieldOptions(
  82. organization,
  83. tags,
  84. customMeasurements
  85. )}
  86. isOnDemandWidget={isOnDemandWidget}
  87. filterAggregateParameters={datasetConfig.filterAggregateParams}
  88. filterPrimaryOptions={datasetConfig.filterTableOptions}
  89. onChange={handleColumnFieldChange}
  90. />
  91. </BuildStep>
  92. );
  93. }