{"version":3,"file":"OperationEditor.cjs","sources":["../../../../src/querybuilder/shared/OperationEditor.tsx"],"sourcesContent":["// Core Grafana history https://github.com/grafana/grafana/blob/v11.0.0-preview/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationEditor.tsx\nimport { css, cx } from '@emotion/css';\nimport { Draggable } from '@hello-pangea/dnd';\nimport { useEffect, useId, useState } from 'react';\nimport * as React from 'react';\n\nimport { type DataSourceApi, type GrafanaTheme2, type TimeRange } from '@grafana/data';\nimport { Trans, t } from '@grafana/i18n';\nimport { Button, Icon, Stack, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { OperationHeader } from './OperationHeader';\nimport { getOperationParamEditor } from './OperationParamEditorRegistry';\nimport { getOperationParamId } from './param_utils';\nimport {\n  type QueryBuilderOperation,\n  type QueryBuilderOperationDef,\n  type QueryBuilderOperationParamDef,\n  type QueryBuilderOperationParamValue,\n  type VisualQueryModeller,\n} from './types';\n\ninterface Props {\n  operation: QueryBuilderOperation;\n  index: number;\n  query: any;\n  datasource: DataSourceApi;\n  queryModeller: VisualQueryModeller;\n  onChange: (index: number, update: QueryBuilderOperation) => void;\n  onRemove: (index: number) => void;\n  onRunQuery: () => void;\n  flash?: boolean;\n  highlight?: boolean;\n  timeRange: TimeRange;\n}\n\nexport function OperationEditor({\n  operation,\n  index,\n  onRemove,\n  onChange,\n  onRunQuery,\n  queryModeller,\n  query,\n  datasource,\n  flash,\n  highlight,\n  timeRange,\n}: Props) {\n  const styles = useStyles2(getStyles);\n  const def = queryModeller.getOperationDef(operation.id);\n  const shouldFlash = useFlash(flash);\n  const id = useId();\n\n  if (!def) {\n    return (\n      <span>\n        <Trans i18nKey=\"grafana-prometheus.querybuilder.operation-editor.not-found\" values={{ id: operation.id }}>\n          Operation {'{{id}}'} not found\n        </Trans>\n      </span>\n    );\n  }\n\n  const onParamValueChanged = (paramIdx: number, value: QueryBuilderOperationParamValue) => {\n    const update: QueryBuilderOperation = { ...operation, params: [...operation.params] };\n    update.params[paramIdx] = value;\n    callParamChangedThenOnChange(def, update, index, paramIdx, onChange);\n  };\n\n  const onAddRestParam = () => {\n    const update: QueryBuilderOperation = { ...operation, params: [...operation.params, ''] };\n    callParamChangedThenOnChange(def, update, index, operation.params.length, onChange);\n  };\n\n  const onRemoveRestParam = (paramIdx: number) => {\n    const update: QueryBuilderOperation = {\n      ...operation,\n      params: [...operation.params.slice(0, paramIdx), ...operation.params.slice(paramIdx + 1)],\n    };\n    callParamChangedThenOnChange(def, update, index, paramIdx, onChange);\n  };\n\n  const operationElements: React.ReactNode[] = [];\n\n  for (let paramIndex = 0; paramIndex < operation.params.length; paramIndex++) {\n    const paramDef = def.params[Math.min(def.params.length - 1, paramIndex)];\n    const Editor = getOperationParamEditor(paramDef);\n\n    operationElements.push(\n      <div className={styles.paramRow} key={`${paramIndex}-1`}>\n        {!paramDef.hideName && (\n          <div className={styles.paramName}>\n            <label htmlFor={getOperationParamId(id, paramIndex)}>{paramDef.name}</label>\n            {paramDef.description && (\n              <Tooltip placement=\"top\" content={paramDef.description} theme=\"info\">\n                <Icon name=\"info-circle\" size=\"sm\" className={styles.infoIcon} />\n              </Tooltip>\n            )}\n          </div>\n        )}\n        <div className={styles.paramValue}>\n          <Stack gap={0.5} direction=\"row\" alignItems=\"center\">\n            <Editor\n              paramDef={paramDef}\n              value={operation.params[paramIndex]}\n              index={paramIndex}\n              operationId={operation.id}\n              query={query}\n              datasource={datasource}\n              timeRange={timeRange}\n              onChange={onParamValueChanged}\n              onRunQuery={onRunQuery}\n              queryModeller={queryModeller}\n            />\n            {paramDef.restParam && (operation.params.length > def.params.length || paramDef.optional) && (\n              <Button\n                data-testid={`operations.${index}.remove-rest-param`}\n                size=\"sm\"\n                fill=\"text\"\n                icon=\"times\"\n                variant=\"secondary\"\n                aria-label={t('grafana-prometheus.querybuilder.operation-editor.title-remove', 'Remove {{name}}', {\n                  name: paramDef.name,\n                })}\n                onClick={() => onRemoveRestParam(paramIndex)}\n              />\n            )}\n          </Stack>\n        </div>\n      </div>\n    );\n  }\n\n  // Handle adding button for rest params\n  let restParam: React.ReactNode | undefined;\n  if (def.params.length > 0) {\n    const lastParamDef = def.params[def.params.length - 1];\n    if (lastParamDef.restParam) {\n      restParam = renderAddRestParamButton(lastParamDef, onAddRestParam, index, operation.params.length, styles);\n    }\n  }\n\n  return (\n    <Draggable draggableId={`operation-${index}`} index={index}>\n      {(provided) => (\n        <div\n          className={cx(styles.card, (shouldFlash || highlight) && styles.cardHighlight)}\n          ref={provided.innerRef}\n          {...provided.draggableProps}\n          data-testid={`operations.${index}.wrapper`}\n        >\n          <OperationHeader\n            operation={operation}\n            dragHandleProps={provided.dragHandleProps}\n            def={def}\n            index={index}\n            onChange={onChange}\n            onRemove={onRemove}\n            queryModeller={queryModeller}\n          />\n          <div className={styles.body}>{operationElements}</div>\n          {restParam}\n          {index < query.operations.length - 1 && (\n            <div className={styles.arrow}>\n              <div className={styles.arrowLine} />\n              <div className={styles.arrowArrow} />\n            </div>\n          )}\n        </div>\n      )}\n    </Draggable>\n  );\n}\n\n/**\n * When flash is switched on makes sure it is switched of right away, so we just flash the highlight and then fade\n * out.\n * @param flash\n */\nfunction useFlash(flash?: boolean) {\n  const [keepFlash, setKeepFlash] = useState(true);\n  useEffect(() => {\n    let t: ReturnType<typeof setTimeout>;\n    if (flash) {\n      t = setTimeout(() => {\n        setKeepFlash(false);\n      }, 1000);\n    } else {\n      setKeepFlash(true);\n    }\n\n    return () => clearTimeout(t);\n  }, [flash]);\n\n  return keepFlash && flash;\n}\n\nfunction renderAddRestParamButton(\n  paramDef: QueryBuilderOperationParamDef,\n  onAddRestParam: () => void,\n  operationIndex: number,\n  paramIndex: number,\n  styles: OperationEditorStyles\n) {\n  return (\n    <div className={styles.restParam} key={`${paramIndex}-2`}>\n      <Button\n        size=\"sm\"\n        icon=\"plus\"\n        title={`Add ${paramDef.name}`.trimEnd()}\n        variant=\"secondary\"\n        onClick={onAddRestParam}\n        data-testid={`operations.${operationIndex}.add-rest-param`}\n      >\n        {paramDef.name}\n      </Button>\n    </div>\n  );\n}\n\nfunction callParamChangedThenOnChange(\n  def: QueryBuilderOperationDef,\n  operation: QueryBuilderOperation,\n  operationIndex: number,\n  paramIndex: number,\n  onChange: (index: number, update: QueryBuilderOperation) => void\n) {\n  if (def.paramChangedHandler) {\n    onChange(operationIndex, def.paramChangedHandler(paramIndex, operation, def));\n  } else {\n    onChange(operationIndex, operation);\n  }\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  return {\n    cardWrapper: css({\n      alignItems: 'stretch',\n    }),\n    error: css({\n      marginBottom: theme.spacing(1),\n    }),\n    card: css({\n      background: theme.colors.background.primary,\n      border: `1px solid ${theme.colors.border.medium}`,\n      cursor: 'grab',\n      borderRadius: theme.shape.radius.default,\n      marginBottom: theme.spacing(1),\n      position: 'relative',\n      [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n        transition: 'all 0.5s ease-in 0s',\n      },\n      height: '100%',\n    }),\n    cardError: css({\n      boxShadow: `0px 0px 4px 0px ${theme.colors.warning.main}`,\n      border: `1px solid ${theme.colors.warning.main}`,\n    }),\n    cardHighlight: css({\n      boxShadow: `0px 0px 4px 0px ${theme.colors.primary.border}`,\n      border: `1px solid ${theme.colors.primary.border}`,\n    }),\n    infoIcon: css({\n      marginLeft: theme.spacing(0.5),\n      color: theme.colors.text.secondary,\n      ':hover': {\n        color: theme.colors.text.primary,\n      },\n    }),\n    body: css({\n      margin: theme.spacing(1, 1, 0.5, 1),\n      display: 'table',\n    }),\n    paramRow: css({\n      label: 'paramRow',\n      display: 'table-row',\n      verticalAlign: 'middle',\n    }),\n    paramName: css({\n      display: 'table-cell',\n      padding: theme.spacing(0, 1, 0, 0),\n      fontSize: theme.typography.bodySmall.fontSize,\n      fontWeight: theme.typography.fontWeightMedium,\n      verticalAlign: 'middle',\n      height: '32px',\n    }),\n    paramValue: css({\n      label: 'paramValue',\n      display: 'table-cell',\n      verticalAlign: 'middle',\n    }),\n    restParam: css({\n      padding: theme.spacing(0, 1, 1, 1),\n    }),\n    arrow: css({\n      position: 'absolute',\n      top: '0',\n      right: '-18px',\n      display: 'flex',\n    }),\n    arrowLine: css({\n      height: '2px',\n      width: '8px',\n      backgroundColor: theme.colors.border.strong,\n      position: 'relative',\n      top: '14px',\n    }),\n    arrowArrow: css({\n      width: 0,\n      height: 0,\n      borderTop: `5px solid transparent`,\n      borderBottom: `5px solid transparent`,\n      borderLeft: `7px solid ${theme.colors.border.strong}`,\n      position: 'relative',\n      top: '10px',\n    }),\n  };\n};\n\ntype OperationEditorStyles = ReturnType<typeof getStyles>;\n"],"names":["useStyles2","useId","jsx","jsxs","Trans","getOperationParamEditor","getOperationParamId","Tooltip","Icon","Stack","Button","t","Draggable","cx","OperationHeader","useState","useEffect","css"],"mappings":"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"}