UNPKG

@grafana/ui

Version:
1 lines 13.1 kB
{"version":3,"file":"CustomHeadersSettings.mjs","sources":["../../../../src/components/DataSourceSettings/CustomHeadersSettings.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { uniqueId } from 'lodash';\nimport { PureComponent } from 'react';\n\nimport { DataSourceSettings } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { Button } from '../Button/Button';\nimport { FormField } from '../FormField/FormField';\nimport { Icon } from '../Icon/Icon';\nimport { SecretFormField } from '../SecretFormField/SecretFormField';\n\nexport interface CustomHeader {\n id: string;\n name: string;\n value: string;\n configured: boolean;\n}\n\nexport type CustomHeaders = CustomHeader[];\n\nexport interface Props {\n dataSourceConfig: DataSourceSettings<any, any>;\n onChange: (config: DataSourceSettings) => void;\n}\n\nexport interface State {\n headers: CustomHeaders;\n}\n\ninterface CustomHeaderRowProps {\n header: CustomHeader;\n onReset: (id: string) => void;\n onRemove: (id: string) => void;\n onChange: (value: CustomHeader) => void;\n onBlur: () => void;\n}\n\nconst getCustomHeaderRowStyles = () => ({\n layout: css({\n display: 'flex',\n alignItems: 'center',\n marginBottom: '4px',\n '> *': {\n marginLeft: '4px',\n marginBottom: 0,\n height: '100%',\n '&:first-child, &:last-child': {\n marginLeft: 0,\n },\n },\n }),\n});\n\nconst CustomHeaderRow = ({ header, onBlur, onChange, onRemove, onReset }: CustomHeaderRowProps) => {\n const styles = useStyles2(getCustomHeaderRowStyles);\n\n return (\n <div className={styles.layout}>\n <FormField\n label={t('grafana-ui.data-source-settings.custom-headers-header', 'Header')}\n name=\"name\"\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"X-Custom-Header\"\n labelWidth={5}\n value={header.name || ''}\n onChange={(e) => onChange({ ...header, name: e.target.value })}\n onBlur={onBlur}\n />\n <SecretFormField\n label={t('grafana-ui.data-source-settings.custom-headers-header-value', 'Value')}\n aria-label={t('grafana-ui.data-source-settings.custom-headers-header-value', 'Value')}\n name=\"value\"\n isConfigured={header.configured}\n value={header.value}\n labelWidth={5}\n inputWidth={header.configured ? 11 : 12}\n placeholder={t('grafana-ui.data-source-settings.custom-headers-header-placeholder', 'Header Value')}\n onReset={() => onReset(header.id)}\n onChange={(e) => onChange({ ...header, value: e.target.value })}\n onBlur={onBlur}\n />\n <Button\n type=\"button\"\n aria-label={t('grafana-ui.data-source-settings.custom-headers-header-remove', 'Remove header')}\n variant=\"secondary\"\n size=\"xs\"\n onClick={(_e) => onRemove(header.id)}\n >\n <Icon name=\"trash-alt\" />\n </Button>\n </div>\n );\n};\n\nCustomHeaderRow.displayName = 'CustomHeaderRow';\n\nexport class CustomHeadersSettings extends PureComponent<Props, State> {\n state: State = {\n headers: [],\n };\n\n constructor(props: Props) {\n super(props);\n const { jsonData, secureJsonData, secureJsonFields } = this.props.dataSourceConfig;\n this.state = {\n headers: Object.keys(jsonData)\n .sort()\n .filter((key) => key.startsWith('httpHeaderName'))\n .map((key, index) => {\n return {\n id: uniqueId(),\n name: jsonData[key],\n value: secureJsonData !== undefined ? secureJsonData[key] : '',\n configured: (secureJsonFields && secureJsonFields[`httpHeaderValue${index + 1}`]) || false,\n };\n }),\n };\n }\n\n updateSettings = () => {\n const { headers } = this.state;\n\n // we remove every httpHeaderName* field\n const newJsonData = Object.fromEntries(\n Object.entries(this.props.dataSourceConfig.jsonData).filter(([key, val]) => !key.startsWith('httpHeaderName'))\n );\n\n // we remove every httpHeaderValue* field\n const newSecureJsonData = Object.fromEntries(\n Object.entries(this.props.dataSourceConfig.secureJsonData || {}).filter(\n ([key, val]) => !key.startsWith('httpHeaderValue')\n )\n );\n\n // then we add the current httpHeader-fields\n for (const [index, header] of headers.entries()) {\n newJsonData[`httpHeaderName${index + 1}`] = header.name;\n if (!header.configured) {\n newSecureJsonData[`httpHeaderValue${index + 1}`] = header.value;\n }\n }\n\n this.props.onChange({\n ...this.props.dataSourceConfig,\n jsonData: newJsonData,\n secureJsonData: newSecureJsonData,\n });\n };\n\n onHeaderAdd = () => {\n this.setState((prevState) => {\n return { headers: [...prevState.headers, { id: uniqueId(), name: '', value: '', configured: false }] };\n });\n };\n\n onHeaderChange = (headerIndex: number, value: CustomHeader) => {\n this.setState(({ headers }) => {\n return {\n headers: headers.map((item, index) => {\n if (headerIndex !== index) {\n return item;\n }\n return { ...value };\n }),\n };\n });\n };\n\n onHeaderReset = (headerId: string) => {\n this.setState(({ headers }) => {\n return {\n headers: headers.map((h, i) => {\n if (h.id !== headerId) {\n return h;\n }\n return {\n ...h,\n value: '',\n configured: false,\n };\n }),\n };\n });\n };\n\n onHeaderRemove = (headerId: string) => {\n this.setState(\n ({ headers }) => ({\n headers: headers.filter((h) => h.id !== headerId),\n }),\n this.updateSettings\n );\n };\n\n render() {\n const { headers } = this.state;\n const { dataSourceConfig } = this.props;\n\n return (\n <div className={'gf-form-group'}>\n <div className=\"gf-form\">\n <h6>\n <Trans i18nKey=\"grafana-ui.data-source-settings.custom-headers-title\">Custom HTTP Headers</Trans>\n </h6>\n </div>\n <div>\n {headers.map((header, i) => (\n <CustomHeaderRow\n key={header.id}\n header={header}\n onChange={(h) => {\n this.onHeaderChange(i, h);\n }}\n onBlur={this.updateSettings}\n onRemove={this.onHeaderRemove}\n onReset={this.onHeaderReset}\n />\n ))}\n </div>\n {!dataSourceConfig.readOnly && (\n <div className=\"gf-form\">\n <Button\n variant=\"secondary\"\n icon=\"plus\"\n type=\"button\"\n onClick={(e) => {\n this.onHeaderAdd();\n }}\n >\n <Trans i18nKey=\"grafana-ui.data-source-settings.custom-headers-add\">Add header</Trans>\n </Button>\n </div>\n )}\n </div>\n );\n }\n}\n\nexport default CustomHeadersSettings;\n"],"names":[],"mappings":"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"}