{"version":3,"file":"OperationHeader.cjs","sources":["../../../../src/querybuilder/shared/OperationHeader.tsx"],"sourcesContent":["// Core Grafana history https://github.com/grafana/grafana/blob/v11.0.0-preview/public/app/plugins/datasource/prometheus/querybuilder/shared/OperationHeader.tsx\nimport { css } from '@emotion/css';\nimport { type DraggableProvided } from '@hello-pangea/dnd';\nimport { memo, useState } from 'react';\n\nimport { type GrafanaTheme2, type SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { FlexItem } from '@grafana/plugin-ui';\nimport { Button, Select, useStyles2 } from '@grafana/ui';\n\nimport { OperationInfoButton } from './OperationInfoButton';\nimport { type QueryBuilderOperation, type QueryBuilderOperationDef, type VisualQueryModeller } from './types';\n\ninterface Props {\n  operation: QueryBuilderOperation;\n  def: QueryBuilderOperationDef;\n  index: number;\n  queryModeller: VisualQueryModeller;\n  dragHandleProps?: DraggableProvided['dragHandleProps'];\n  onChange: (index: number, update: QueryBuilderOperation) => void;\n  onRemove: (index: number) => void;\n}\n\ninterface State {\n  isOpen?: boolean;\n  alternatives?: Array<SelectableValue<QueryBuilderOperationDef>>;\n}\n\nexport const OperationHeader = memo<Props>(\n  ({ operation, def, index, onChange, onRemove, queryModeller, dragHandleProps }) => {\n    const styles = useStyles2(getStyles);\n    const [state, setState] = useState<State>({});\n\n    const onToggleSwitcher = () => {\n      if (state.isOpen) {\n        setState({ ...state, isOpen: false });\n      } else {\n        const alternatives = queryModeller\n          .getAlternativeOperations(def.alternativesKey!)\n          .map((alt) => ({ label: alt.name, value: alt }));\n        setState({ isOpen: true, alternatives });\n      }\n    };\n\n    return (\n      <div className={styles.header}>\n        {!state.isOpen && (\n          <>\n            <div {...dragHandleProps}>{def.name ?? def.id}</div>\n            <FlexItem grow={1} />\n            <div className={`${styles.operationHeaderButtons} operation-header-show-on-hover`}>\n              <Button\n                icon=\"angle-down\"\n                size=\"sm\"\n                onClick={onToggleSwitcher}\n                fill=\"text\"\n                variant=\"secondary\"\n                aria-label={t(\n                  'grafana-prometheus.querybuilder.operation-header.title-click-to-view-alternative-operations',\n                  'Click to view alternative operations'\n                )}\n              />\n              <OperationInfoButton def={def} operation={operation} />\n              <Button\n                icon=\"times\"\n                size=\"sm\"\n                onClick={() => onRemove(index)}\n                fill=\"text\"\n                variant=\"secondary\"\n                aria-label={t(\n                  'grafana-prometheus.querybuilder.operation-header.title-remove-operation',\n                  'Remove operation'\n                )}\n              />\n            </div>\n          </>\n        )}\n        {state.isOpen && (\n          <div className={styles.selectWrapper}>\n            <Select\n              autoFocus\n              openMenuOnFocus\n              placeholder={t(\n                'grafana-prometheus.querybuilder.operation-header.placeholder-replace-with',\n                'Replace with'\n              )}\n              options={state.alternatives}\n              isOpen={true}\n              onCloseMenu={onToggleSwitcher}\n              onChange={(value) => {\n                if (value.value) {\n                  // Operation should exist if it is selectable\n                  const newDef = queryModeller.getOperationDef(value.value.id)!;\n\n                  // copy default params, and override with all current params\n                  const newParams = [...newDef.defaultParams];\n                  for (let i = 0; i < Math.min(operation.params.length, newParams.length); i++) {\n                    if (newDef.params[i].type === def.params[i].type) {\n                      newParams[i] = operation.params[i];\n                    }\n                  }\n\n                  const changedOp = { ...operation, params: newParams, id: value.value.id };\n                  onChange(index, def.changeTypeHandler ? def.changeTypeHandler(changedOp, newDef) : changedOp);\n                }\n              }}\n            />\n          </div>\n        )}\n      </div>\n    );\n  }\n);\n\nOperationHeader.displayName = 'OperationHeader';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n  return {\n    header: css({\n      borderBottom: `1px solid ${theme.colors.border.medium}`,\n      padding: theme.spacing(0.5, 0.5, 0.5, 1),\n      display: 'flex',\n      alignItems: 'center',\n    }),\n    operationHeaderButtons: css({\n      opacity: 1,\n    }),\n    selectWrapper: css({\n      paddingRight: theme.spacing(2),\n    }),\n  };\n};\n"],"names":["memo","useStyles2","useState","jsxs","Fragment","jsx","FlexItem","Button","t","OperationInfoButton","Select","css"],"mappings":"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"}