@grafana/ui
Version:
Grafana Components Library
1 lines • 4.22 kB
Source Map (JSON)
{"version":3,"file":"ActionButton.mjs","sources":["../../../../src/components/Actions/ActionButton.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { ActionModel, Field, ActionVariableInput } from '@grafana/data';\nimport { t } from '@grafana/i18n';\n\nimport { useTheme2 } from '../../themes/ThemeContext';\nimport { Button, ButtonProps } from '../Button/Button';\nimport { ConfirmModal } from '../ConfirmModal/ConfirmModal';\n\nimport { VariablesInputModal } from './VariablesInputModal';\n\ntype ActionButtonProps = ButtonProps & {\n action: ActionModel<Field>;\n};\n\n/**\n * @internal\n */\nexport function ActionButton({ action, ...buttonProps }: ActionButtonProps) {\n const theme = useTheme2();\n const backgroundColor = action.style.backgroundColor || theme.colors.secondary.main;\n const textColor = theme.colors.getContrastText(backgroundColor);\n\n const [showConfirm, setShowConfirm] = useState(false);\n\n // Action variables\n const [showVarsModal, setShowVarsModal] = useState(false);\n const [actionVars, setActionVars] = useState<ActionVariableInput>({});\n\n const actionHasVariables = action.variables && action.variables.length > 0;\n\n const onClick = () => {\n if (actionHasVariables) {\n setShowVarsModal(true);\n } else {\n setShowConfirm(true);\n }\n };\n\n return (\n <>\n <Button\n variant=\"primary\"\n size=\"sm\"\n onClick={onClick}\n {...buttonProps}\n style={{ width: 'fit-content', backgroundColor, color: textColor }}\n >\n {action.title}\n </Button>\n\n {actionHasVariables && showVarsModal && (\n <VariablesInputModal\n onDismiss={() => setShowVarsModal(false)}\n action={action}\n onShowConfirm={() => setShowConfirm(true)}\n variables={actionVars}\n setVariables={setActionVars}\n />\n )}\n\n {showConfirm && (\n <ConfirmModal\n isOpen={true}\n title={t('grafana-ui.action-editor.button.confirm-action', 'Confirm action')}\n body={action.confirmation(actionVars)}\n confirmText={t('grafana-ui.action-editor.button.confirm', 'Confirm')}\n confirmButtonVariant=\"primary\"\n onConfirm={() => {\n setShowConfirm(false);\n action.onClick(new MouseEvent('click'), null, actionVars);\n }}\n onDismiss={() => {\n setShowConfirm(false);\n }}\n />\n )}\n </>\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAkBO,SAAS,YAAa,CAAA,EAAE,MAAQ,EAAA,GAAG,aAAkC,EAAA;AAC1E,EAAA,MAAM,QAAQ,SAAU,EAAA;AACxB,EAAA,MAAM,kBAAkB,MAAO,CAAA,KAAA,CAAM,eAAmB,IAAA,KAAA,CAAM,OAAO,SAAU,CAAA,IAAA;AAC/E,EAAA,MAAM,SAAY,GAAA,KAAA,CAAM,MAAO,CAAA,eAAA,CAAgB,eAAe,CAAA;AAE9D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,KAAK,CAAA;AAGpD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,UAAY,EAAA,aAAa,CAAI,GAAA,QAAA,CAA8B,EAAE,CAAA;AAEpE,EAAA,MAAM,kBAAqB,GAAA,MAAA,CAAO,SAAa,IAAA,MAAA,CAAO,UAAU,MAAS,GAAA,CAAA;AAEzE,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,KAChB,MAAA;AACL,MAAA,cAAA,CAAe,IAAI,CAAA;AAAA;AACrB,GACF;AAEA,EAAA,uBAEI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,OAAQ,EAAA,SAAA;AAAA,QACR,IAAK,EAAA,IAAA;AAAA,QACL,OAAA;AAAA,QACC,GAAG,WAAA;AAAA,QACJ,OAAO,EAAE,KAAA,EAAO,aAAe,EAAA,eAAA,EAAiB,OAAO,SAAU,EAAA;AAAA,QAEhE,QAAO,EAAA,MAAA,CAAA;AAAA;AAAA,KACV;AAAA,IAEC,sBAAsB,aACrB,oBAAA,GAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,MAAM,gBAAA,CAAiB,KAAK,CAAA;AAAA,QACvC,MAAA;AAAA,QACA,aAAA,EAAe,MAAM,cAAA,CAAe,IAAI,CAAA;AAAA,QACxC,SAAW,EAAA,UAAA;AAAA,QACX,YAAc,EAAA;AAAA;AAAA,KAChB;AAAA,IAGD,WACC,oBAAA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,MAAQ,EAAA,IAAA;AAAA,QACR,KAAA,EAAO,CAAE,CAAA,gDAAA,EAAkD,gBAAgB,CAAA;AAAA,QAC3E,IAAA,EAAM,MAAO,CAAA,YAAA,CAAa,UAAU,CAAA;AAAA,QACpC,WAAA,EAAa,CAAE,CAAA,yCAAA,EAA2C,SAAS,CAAA;AAAA,QACnE,oBAAqB,EAAA,SAAA;AAAA,QACrB,WAAW,MAAM;AACf,UAAA,cAAA,CAAe,KAAK,CAAA;AACpB,UAAA,MAAA,CAAO,QAAQ,IAAI,UAAA,CAAW,OAAO,CAAA,EAAG,MAAM,UAAU,CAAA;AAAA,SAC1D;AAAA,QACA,WAAW,MAAM;AACf,UAAA,cAAA,CAAe,KAAK,CAAA;AAAA;AACtB;AAAA;AACF,GAEJ,EAAA,CAAA;AAEJ;;;;"}