Browse Source

chore(search): Adopting the new parameterDependentValueType functionality (#76340)

https://github.com/user-attachments/assets/90f8359a-f26d-4a81-8777-c7624d242de4

---------

Co-authored-by: Abdullah Khan <abdullahkhan@PG9Y57YDXQ.local>
Abdullah Khan 6 months ago
parent
commit
30bedab465
2 changed files with 33 additions and 3 deletions
  1. 31 1
      static/app/utils/fields/index.ts
  2. 2 2
      static/app/views/performance/table.spec.tsx

+ 31 - 1
static/app/utils/fields/index.ts

@@ -341,6 +341,12 @@ function validateForNumericAggregate(
   };
 }
 
+function getDynamicFieldValueType(parameters: Array<string | null>): FieldValueType {
+  const column = parameters[0];
+  const fieldDef = column ? getFieldDefinition(column) : null;
+  return fieldDef?.valueType ?? FieldValueType.NUMBER;
+}
+
 function validateAndDenyListColumns(
   validColumnTypes: FieldValueType[],
   deniedColumns: string[]
@@ -494,7 +500,9 @@ export const AGGREGATION_FIELDS: Record<AggregationKey, FieldDefinition> = {
   [AggregationKey.MIN]: {
     desc: t('Returns the minimum value of the selected field'),
     kind: FieldKind.FUNCTION,
+    defaultValue: '300ms',
     valueType: null,
+    parameterDependentValueType: getDynamicFieldValueType,
     parameters: [
       {
         name: 'column',
@@ -514,7 +522,9 @@ export const AGGREGATION_FIELDS: Record<AggregationKey, FieldDefinition> = {
   [AggregationKey.MAX]: {
     desc: t('Returns maximum value of the selected field'),
     kind: FieldKind.FUNCTION,
+    defaultValue: '300ms',
     valueType: null,
+    parameterDependentValueType: getDynamicFieldValueType,
     parameters: [
       {
         name: 'column',
@@ -534,7 +544,9 @@ export const AGGREGATION_FIELDS: Record<AggregationKey, FieldDefinition> = {
   [AggregationKey.SUM]: {
     desc: t('Returns the total value for the selected field'),
     kind: FieldKind.FUNCTION,
+    defaultValue: '300ms',
     valueType: null,
+    parameterDependentValueType: getDynamicFieldValueType,
     parameters: [
       {
         name: 'column',
@@ -552,7 +564,9 @@ export const AGGREGATION_FIELDS: Record<AggregationKey, FieldDefinition> = {
   [AggregationKey.ANY]: {
     desc: t('Not Recommended, a random field value'),
     kind: FieldKind.FUNCTION,
+    defaultValue: '300ms',
     valueType: null,
+    parameterDependentValueType: getDynamicFieldValueType,
     parameters: [
       {
         name: 'column',
@@ -573,7 +587,9 @@ export const AGGREGATION_FIELDS: Record<AggregationKey, FieldDefinition> = {
   [AggregationKey.P50]: {
     desc: t('Returns the 50th percentile of the selected field'),
     kind: FieldKind.FUNCTION,
+    defaultValue: '300ms',
     valueType: null,
+    parameterDependentValueType: getDynamicFieldValueType,
     parameters: [
       {
         name: 'column',
@@ -591,7 +607,9 @@ export const AGGREGATION_FIELDS: Record<AggregationKey, FieldDefinition> = {
   [AggregationKey.P75]: {
     desc: t('Returns the 75th percentile of the selected field'),
     kind: FieldKind.FUNCTION,
+    defaultValue: '300ms',
     valueType: null,
+    parameterDependentValueType: getDynamicFieldValueType,
     parameters: [
       {
         name: 'column',
@@ -609,7 +627,9 @@ export const AGGREGATION_FIELDS: Record<AggregationKey, FieldDefinition> = {
   [AggregationKey.P90]: {
     desc: t('Returns the 90th percentile of the selected field'),
     kind: FieldKind.FUNCTION,
+    defaultValue: '300ms',
     valueType: null,
+    parameterDependentValueType: getDynamicFieldValueType,
     parameters: [
       {
         name: 'column',
@@ -627,7 +647,9 @@ export const AGGREGATION_FIELDS: Record<AggregationKey, FieldDefinition> = {
   [AggregationKey.P95]: {
     desc: t('Returns the 95th percentile of the selected field'),
     kind: FieldKind.FUNCTION,
+    defaultValue: '300ms',
     valueType: null,
+    parameterDependentValueType: getDynamicFieldValueType,
     parameters: [
       {
         name: 'column',
@@ -645,7 +667,9 @@ export const AGGREGATION_FIELDS: Record<AggregationKey, FieldDefinition> = {
   [AggregationKey.P99]: {
     desc: t('Returns the 99th percentile of the selected field'),
     kind: FieldKind.FUNCTION,
+    defaultValue: '300ms',
     valueType: null,
+    parameterDependentValueType: getDynamicFieldValueType,
     parameters: [
       {
         name: 'column',
@@ -663,7 +687,9 @@ export const AGGREGATION_FIELDS: Record<AggregationKey, FieldDefinition> = {
   [AggregationKey.P100]: {
     desc: t('Returns the 100th percentile of the selected field'),
     kind: FieldKind.FUNCTION,
+    defaultValue: '300ms',
     valueType: null,
+    parameterDependentValueType: getDynamicFieldValueType,
     parameters: [
       {
         name: 'column',
@@ -681,7 +707,9 @@ export const AGGREGATION_FIELDS: Record<AggregationKey, FieldDefinition> = {
   [AggregationKey.PERCENTILE]: {
     desc: t('Returns the percentile of the selected field'),
     kind: FieldKind.FUNCTION,
+    defaultValue: '300ms',
     valueType: null,
+    parameterDependentValueType: getDynamicFieldValueType,
     parameters: [
       {
         name: 'column',
@@ -706,7 +734,9 @@ export const AGGREGATION_FIELDS: Record<AggregationKey, FieldDefinition> = {
   [AggregationKey.AVG]: {
     desc: t('Returns averages for a selected field'),
     kind: FieldKind.FUNCTION,
+    defaultValue: '300ms',
     valueType: null,
+    parameterDependentValueType: getDynamicFieldValueType,
     parameters: [
       {
         name: 'column',
@@ -740,7 +770,7 @@ export const AGGREGATION_FIELDS: Record<AggregationKey, FieldDefinition> = {
       'User-weighted performance metric that counts the number of unique users who were frustrated'
     ),
     kind: FieldKind.FUNCTION,
-    valueType: null,
+    valueType: FieldValueType.NUMBER,
     parameters: [
       {
         name: 'value',

+ 2 - 2
static/app/views/performance/table.spec.tsx

@@ -221,10 +221,10 @@ describe('Performance > Table', function () {
       await userEvent.click(cellActionTriggers[8]);
 
       expect(
-        screen.getByRole('menuitemradio', {name: 'Add to filter'})
+        screen.getByRole('menuitemradio', {name: 'Show values greater than'})
       ).toBeInTheDocument();
       expect(
-        screen.getByRole('menuitemradio', {name: 'Exclude from filter'})
+        screen.getByRole('menuitemradio', {name: 'Show values less than'})
       ).toBeInTheDocument();
 
       await userEvent.keyboard('{Escape}'); // Close actions menu