@grafana/plugin-ui 0.13.0 → 0.14.0-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +214 -224
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +2 -9
- package/dist/cjs/test-utils.cjs +2 -2
- package/dist/cjs/test-utils.cjs.map +1 -1
- package/dist/cjs/test-utils.d.cts +1 -1
- package/dist/esm/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/Auth.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js +4 -4
- package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/auth-method/BasicAuth.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeader.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js +1 -1
- package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/styles.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/SkipTLSVerification.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js +3 -3
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettingsSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/types.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/utils.js +3 -3
- package/dist/esm/components/ConfigEditor/Auth/utils.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js +2 -2
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSubSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/GenericConfigSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js +1 -1
- package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/DataSourceDescription.js.map +1 -1
- package/dist/esm/components/ConfigEditor/SecureSocksProxyToggle.js.map +1 -1
- package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js +11 -11
- package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js.map +1 -1
- package/dist/esm/components/DataLinks/DataLink.js +4 -4
- package/dist/esm/components/DataLinks/DataLink.js.map +1 -1
- package/dist/esm/components/DataLinks/DataLinks.js +3 -3
- package/dist/esm/components/DataLinks/DataLinks.js.map +1 -1
- package/dist/esm/components/DataSourcePicker/DataSourcePicker.js +8 -8
- package/dist/esm/components/DataSourcePicker/DataSourcePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/styles.js +2 -2
- package/dist/esm/components/DatePicker/styles.js.map +1 -1
- package/dist/esm/components/DatePickerWithInput/DatePickerWithInput.js.map +1 -1
- package/dist/esm/components/DatePickerWithInput/styles.js +2 -2
- package/dist/esm/components/DatePickerWithInput/styles.js.map +1 -1
- package/dist/esm/components/DebounceInput/DebounceInput.js.map +1 -1
- package/dist/esm/components/Plugins/PluginSignatureBadge.js.map +1 -1
- package/dist/esm/components/QueryEditor/AccessoryButton.js.map +1 -1
- package/dist/esm/components/QueryEditor/CatalogSelector.js +1 -1
- package/dist/esm/components/QueryEditor/CatalogSelector.js.map +1 -1
- package/dist/esm/components/QueryEditor/ConfirmModal.js +1 -1
- package/dist/esm/components/QueryEditor/ConfirmModal.js.map +1 -1
- package/dist/esm/components/QueryEditor/DatasetSelector.js +1 -1
- package/dist/esm/components/QueryEditor/DatasetSelector.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorField.js +5 -5
- package/dist/esm/components/QueryEditor/EditorField.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorFieldGroup.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorHeader.js +2 -2
- package/dist/esm/components/QueryEditor/EditorHeader.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorList.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorRow.js +4 -4
- package/dist/esm/components/QueryEditor/EditorRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorRows.js +2 -2
- package/dist/esm/components/QueryEditor/EditorRows.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorStack.js +1 -1
- package/dist/esm/components/QueryEditor/EditorStack.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorSwitch.js +2 -2
- package/dist/esm/components/QueryEditor/EditorSwitch.js.map +1 -1
- package/dist/esm/components/QueryEditor/FlexItem.js.map +1 -1
- package/dist/esm/components/QueryEditor/InlineSelect.js.map +1 -1
- package/dist/esm/components/QueryEditor/InputGroup.js +2 -2
- package/dist/esm/components/QueryEditor/InputGroup.js.map +1 -1
- package/dist/esm/components/QueryEditor/QueryEditor.js +7 -7
- package/dist/esm/components/QueryEditor/QueryEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/QueryHeader.js +18 -18
- package/dist/esm/components/QueryEditor/QueryHeader.js.map +1 -1
- package/dist/esm/components/QueryEditor/RunQueryButton.js +1 -1
- package/dist/esm/components/QueryEditor/RunQueryButton.js.map +1 -1
- package/dist/esm/components/QueryEditor/Space.js +17 -26
- package/dist/esm/components/QueryEditor/Space.js.map +1 -1
- package/dist/esm/components/QueryEditor/TableSelector.js.map +1 -1
- package/dist/esm/components/QueryEditor/defaults.js +7 -7
- package/dist/esm/components/QueryEditor/defaults.js.map +1 -1
- package/dist/esm/components/QueryEditor/expressions.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryEditorRaw.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js +4 -4
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js +3 -3
- package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/types.js.map +1 -1
- package/dist/esm/components/QueryEditor/utils/formatSQL.js.map +1 -1
- package/dist/esm/components/QueryEditor/utils/sql.utils.js +8 -8
- package/dist/esm/components/QueryEditor/utils/sql.utils.js.map +1 -1
- package/dist/esm/components/QueryEditor/utils/useSqlChange.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js +26 -27
- package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js +3 -3
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRows.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js +4 -4
- package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLGroupByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLSelectRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLWhereRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js +9 -9
- package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/VisualEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/WhereRow.js.map +1 -1
- package/dist/esm/components/QueryEditorRow/QueryEditorRow.js.map +1 -1
- package/dist/esm/components/SQLEditor/components/SQLEditor.js +13 -13
- package/dist/esm/components/SQLEditor/components/SQLEditor.js.map +1 -1
- package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js +1 -1
- package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/Monaco.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/TextModel.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQuery.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQueryWithAggregation.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/multiLineMultipleColumns.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineEmptyQuery.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQuery.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQueryWithAggregation.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineMultipleColumns.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueries.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueriesWithAggregation.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/definition.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js +2 -2
- package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js +3 -3
- package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/language.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/macros.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js +2 -2
- package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js +1 -1
- package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js +25 -25
- package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js +1 -1
- package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js.map +1 -1
- package/dist/esm/components/SQLEditor/test-utils/index.js.map +1 -1
- package/dist/esm/components/SQLEditor/test-utils/statementPosition.js.map +1 -1
- package/dist/esm/components/SQLEditor/types.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/LinkedToken.js +7 -7
- package/dist/esm/components/SQLEditor/utils/LinkedToken.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/commands.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/debugger.js +1 -1
- package/dist/esm/components/SQLEditor/utils/debugger.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/getSuggestionKind.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js +1 -1
- package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/toCompletionItem.js +1 -1
- package/dist/esm/components/SQLEditor/utils/toCompletionItem.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/tokenUtils.js +9 -9
- package/dist/esm/components/SQLEditor/utils/tokenUtils.js.map +1 -1
- package/dist/esm/components/Segment/Segment.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js +11 -11
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js +4 -4
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js +2 -3
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js +3 -3
- package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationList.js +3 -4
- package/dist/esm/components/VisualQueryBuilder/components/OperationList.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js +5 -6
- package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js +2 -3
- package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js +8 -8
- package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryEditorModeToggle.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js +2 -3
- package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js +0 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/types.js.map +1 -1
- package/dist/esm/datasource/SqlDatasource.js +14 -14
- package/dist/esm/datasource/SqlDatasource.js.map +1 -1
- package/dist/esm/datasource/constants.js.map +1 -1
- package/dist/esm/hooks/useDebounce.js.map +1 -1
- package/dist/esm/index.d.ts +2 -9
- package/dist/esm/test/mocks/DataQuery.js.map +1 -1
- package/dist/esm/test/mocks/Datasource.js +1 -1
- package/dist/esm/test/mocks/Datasource.js.map +1 -1
- package/dist/esm/test/mocks/Plugin.js +1 -1
- package/dist/esm/test/mocks/Plugin.js.map +1 -1
- package/dist/esm/test/mocks/QueryEditorProps.js.map +1 -1
- package/dist/esm/test/mocks/utils.js +2 -2
- package/dist/esm/test/mocks/utils.js.map +1 -1
- package/dist/esm/test-utils.d.ts +1 -1
- package/package.json +13 -29
package/dist/cjs/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { ComponentProps, PureComponent, ReactElement, ReactNode, FunctionComponent, HTMLProps } from 'react';
|
|
2
2
|
import { Input, Segment as Segment$1, monacoTypes, Monaco, ButtonProps, Field, PopoverContent, Switch, SelectCommonProps, InlineLabel } from '@grafana/ui';
|
|
3
|
-
import { DataSourceInstanceSettings, SelectableValue, DataSourceJsonData, VariableSuggestion, TimeRange, DataFrame, MetricFindValue, ThemeSpacingTokens, ScopedVars,
|
|
3
|
+
import { DataSourceInstanceSettings, SelectableValue, DataSourceJsonData, VariableSuggestion, TimeRange, DataFrame, MetricFindValue, ThemeSpacingTokens, ScopedVars, VariableModel, DataFrameView, QueryEditorProps as QueryEditorProps$1, DataSourceSettings, RegistryItem, DataSourceApi, Registry, DataQuery as DataQuery$1, PanelData } from '@grafana/data';
|
|
4
4
|
import { DataSourceSrv, DataSourceWithBackend, TemplateSrv } from '@grafana/runtime';
|
|
5
5
|
import { JsonTree } from '@react-awesome-query-builder/ui';
|
|
6
6
|
import { DataQuery } from '@grafana/schema';
|
|
@@ -726,14 +726,7 @@ interface SpaceProps {
|
|
|
726
726
|
h?: number;
|
|
727
727
|
layout?: 'block' | 'inline';
|
|
728
728
|
}
|
|
729
|
-
declare const Space: {
|
|
730
|
-
(props: SpaceProps): React.JSX.Element;
|
|
731
|
-
defaultProps: {
|
|
732
|
-
v: number;
|
|
733
|
-
h: number;
|
|
734
|
-
layout: string;
|
|
735
|
-
};
|
|
736
|
-
};
|
|
729
|
+
declare const Space: ({ v, h, layout }: SpaceProps) => React.JSX.Element;
|
|
737
730
|
|
|
738
731
|
interface SearchFilterOptions {
|
|
739
732
|
searchFilter?: string;
|
package/dist/cjs/test-utils.cjs
CHANGED
|
@@ -14,7 +14,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
|
|
|
14
14
|
var userEvent__default = /*#__PURE__*/_interopDefaultCompat(userEvent);
|
|
15
15
|
|
|
16
16
|
const generateBoolean = () => chance.Chance().pickone([true, false]);
|
|
17
|
-
const undefinedOr = (fn) => chance.Chance().pickone([
|
|
17
|
+
const undefinedOr = (fn) => chance.Chance().pickone([void 0, fn()]);
|
|
18
18
|
const generateArrayOf = (fn, numberOf = 3) => Array.from(new Array(numberOf), () => fn());
|
|
19
19
|
const openSelect = (container, optionLabel) => {
|
|
20
20
|
const selectInput = react.within(container).getByRole("textbox");
|
|
@@ -22,7 +22,7 @@ const openSelect = (container, optionLabel) => {
|
|
|
22
22
|
userEvent__default.default.type(selectInput, optionLabel != null ? optionLabel : "{arrowdown}");
|
|
23
23
|
};
|
|
24
24
|
const selectOption = async (container, optionLabel, typeOptionLabel) => {
|
|
25
|
-
openSelect(container, typeOptionLabel ? optionLabel :
|
|
25
|
+
openSelect(container, typeOptionLabel ? optionLabel : void 0);
|
|
26
26
|
const option = await react.waitFor(() => react.within(container).getByText(optionLabel));
|
|
27
27
|
userEvent__default.default.click(option);
|
|
28
28
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-utils.cjs","sources":["../../src/test/mocks/utils.ts","../../src/test/mocks/Plugin.ts","../../src/test/mocks/Datasource.ts","../../src/test/mocks/DataQuery.ts","../../src/test/mocks/QueryEditorProps.ts"],"sourcesContent":["import { type SelectableValue } from '@grafana/data';\nimport { Chance } from 'chance';\nimport { within, fireEvent, waitFor } from '@testing-library/react';\nimport userEvent from '@testing-library/user-event';\nimport { kebabCase } from 'lodash';\n\nexport const generateBoolean = () => Chance().pickone([true, false]);\n\nexport const undefinedOr = (fn: Function) => Chance().pickone([undefined, fn()]);\n\nexport const generateArrayOf = (fn: Function, numberOf = 3) => Array.from(new Array(numberOf), () => fn());\n\n// react-select (used by @grafana/ui) renders very differently from the native Select HTML element\n// and because they are not accessible and do not pass data-testid or aria-labels down,\n// it is difficult to grab the correct element and simulate selecting different options\n// the helper functions below can be used instead\n\n/**\n * Opens a Select or MultiSelect dropdown\n *\n * @param {HTMLElement} container The container wrapping the Select or MultiSelect component\n * @param {string} optionLabel The option text we want to type or search\n */\nexport const openSelect = (container: HTMLElement, optionLabel?: string) => {\n const selectInput = within(container).getByRole('textbox');\n\n // this needs to be here to support autoFocus=true prop\n fireEvent.blur(selectInput);\n\n // if we have an async Select, we want to type the option label to make the option available\n // otherwise, just press down to open the dropdown\n userEvent.type(selectInput, optionLabel ?? '{arrowdown}');\n};\n\n/**\n * Selects an option from the Select or MultiSelect component\n *\n * @param {HTMLElement} container The container wrapping the Select or MultiSelect component\n * @param {string} optionLabel The option we want to select\n * @param {boolean} [typeOptionLabel=false] If we should type the optional label after opening - this is useful for AsyncSelect\n */\nexport const selectOption = async (container: HTMLElement, optionLabel: string, typeOptionLabel?: boolean) => {\n openSelect(container, typeOptionLabel ? optionLabel : undefined);\n\n // wait for the list to show\n const option = await waitFor(() => within(container).getByText(optionLabel));\n\n // select the option\n userEvent.click(option);\n};\n\nexport const generateOptions = (): Array<SelectableValue<string>> => {\n const numberOfOptions = 5;\n\n return Array.from(new Array(numberOfOptions), () => {\n const name = Chance().name();\n\n return {\n label: name,\n value: kebabCase(name),\n };\n });\n};\n","import { Chance } from 'chance';\nimport {\n type DataSourcePluginMeta,\n type PluginMetaInfo,\n type PluginMeta,\n PluginState,\n PluginSignatureStatus,\n type PluginInclude,\n PluginIncludeType,\n type PluginDependencies,\n PluginType,\n} from '@grafana/data';\nimport { generateBoolean } from './utils';\n\nexport const mockDataSourcePluginMeta = (): DataSourcePluginMeta => ({\n builtIn: generateBoolean(),\n metrics: generateBoolean(),\n logs: generateBoolean(),\n annotations: generateBoolean(),\n alerting: generateBoolean(),\n tracing: generateBoolean(),\n mixed: generateBoolean(),\n hasQueryHelp: generateBoolean(),\n category: Chance().word(),\n queryOptions: {\n cacheTimeout: generateBoolean(),\n maxDataPoints: generateBoolean(),\n minInterval: generateBoolean(),\n },\n sort: 1,\n streaming: generateBoolean(),\n unlicensed: generateBoolean(),\n id: Chance().word(),\n name: Chance().word(),\n type: mockPluginType(),\n info: mockPluginMetaInfo(),\n module: Chance().word(),\n baseUrl: Chance().word(),\n});\n\nexport const mockPluginMetaInfo = (): PluginMetaInfo => ({\n author: {\n name: Chance().word(),\n url: Chance().word(),\n },\n description: Chance().word(),\n links: [],\n logos: {\n large: Chance().word(),\n small: Chance().word(),\n },\n screenshots: [],\n updated: Chance().word(),\n version: Chance().word(),\n});\n\nexport const mockPluginMeta = (): PluginMeta => ({\n id: Chance().word(),\n name: Chance().word(),\n type: mockPluginType(),\n info: mockPluginMetaInfo(),\n includes: [mockPluginInclude()],\n state: mockPluginState(),\n module: Chance().word(),\n baseUrl: Chance().word(),\n dependencies: mockPluginDependencies(),\n jsonData: {},\n secureJsonData: {},\n enabled: generateBoolean(),\n defaultNavUrl: Chance().word(),\n hasUpdate: generateBoolean(),\n enterprise: generateBoolean(),\n latestVersion: Chance().word(),\n pinned: generateBoolean(),\n signature: mockPluginSignatureStatus(),\n live: generateBoolean(),\n});\n\nexport const mockPluginInclude = (): PluginInclude => ({\n type: mockPluginIncludeType(),\n name: Chance().word(),\n path: Chance().word(),\n icon: Chance().word(),\n role: Chance().word(),\n addToNav: generateBoolean(),\n component: Chance().word(),\n});\n\nexport const mockPluginType = (): PluginType =>\n Chance().pickone([PluginType.panel, PluginType.datasource, PluginType.app, PluginType.renderer]);\n\nexport const mockPluginIncludeType = (): PluginIncludeType =>\n Chance().pickone([\n PluginIncludeType.dashboard,\n PluginIncludeType.page,\n PluginIncludeType.panel,\n PluginIncludeType.datasource,\n ]);\n\nexport const mockPluginState = (): PluginState =>\n Chance().pickone([PluginState.alpha, PluginState.beta, PluginState.deprecated]);\n\nexport const mockPluginDependencies = (): PluginDependencies => ({\n grafanaVersion: Chance().word(),\n plugins: [],\n});\n\nexport const mockPluginSignatureStatus = (): PluginSignatureStatus =>\n Chance().pickone([\n PluginSignatureStatus.internal,\n PluginSignatureStatus.valid,\n PluginSignatureStatus.invalid,\n PluginSignatureStatus.modified,\n PluginSignatureStatus.missing,\n ]);\n","import { type DataSourceInstanceSettings, type QueryHint } from '@grafana/data';\nimport { DataSourceWithBackend } from '@grafana/runtime';\nimport { Chance } from 'chance';\nimport { mockDataSourcePluginMeta } from './Plugin';\nimport { generateBoolean, undefinedOr } from './utils';\n\nclass DatasourceMock extends DataSourceWithBackend {\n // DataSourceWithBackend\n query = jest.fn();\n filterQuery = undefinedOr(generateBoolean);\n applyTemplateVariables = jest.fn();\n getResource = jest.fn();\n postResource = jest.fn();\n callHealthCheck = jest.fn();\n testDatasource = jest.fn();\n // DataSourceApi\n uid = Chance().guid();\n name = Chance().word();\n id = 1;\n type = Chance().word();\n interval = Chance().word();\n importQueries = jest.fn();\n init = jest.fn();\n getQueryHints = jest.fn().mockReturnValue([mockQueryHint()]);\n getQueryDisplayText = jest.fn().mockReturnValue(Chance().word());\n metricFindQuery = jest.fn();\n getTagKeys = jest.fn();\n getTagValues = jest.fn();\n components = {};\n meta = mockDataSourcePluginMeta();\n targetContainsTemplate = jest.fn();\n modifyQuery = jest.fn();\n getHighlighterExpression = jest.fn();\n languageProvider = jest.fn();\n getVersion = jest.fn();\n interpolateVariablesInQueries = jest.fn();\n annotations = {};\n annotationQuery = jest.fn();\n streamOptionsProvider = jest.fn();\n getRef = jest.fn();\n protected getRequestHeaders = jest.fn();\n}\n\nexport const mockDatasource = () => new DatasourceMock(mockDatasourceInstanceSettings());\n\nconst mockQueryHint = (): QueryHint => ({\n type: Chance().word(),\n label: Chance().word(),\n fix: {\n label: Chance().word(),\n action: {\n type: Chance().word(),\n query: Chance().word(),\n preventSubmit: generateBoolean(),\n },\n },\n});\n\nexport const mockDatasourceInstanceSettings = (): DataSourceInstanceSettings => ({\n id: Chance().integer(),\n uid: Chance().word(),\n type: Chance().word(),\n name: Chance().word(),\n meta: mockDataSourcePluginMeta(),\n url: Chance().word(),\n jsonData: {},\n username: Chance().word(),\n password: Chance().word(),\n database: Chance().word(),\n basicAuth: Chance().word(),\n withCredentials: generateBoolean(),\n access: Chance().pickone(['direct', 'proxy']),\n readOnly: false,\n});\n","import { type DataQuery } from '@grafana/data';\nimport { Chance } from 'chance';\nimport { undefinedOr } from './utils';\n\nexport const mockDataQuery = (): DataQuery => ({\n refId: Chance().word(),\n hide: false,\n key: Chance().guid(),\n queryType: Chance().word(),\n datasource: undefinedOr(() => Chance().word()),\n});\n","import { type QueryEditorProps, DataTopic, dateTime, LoadingState, type TimeRange } from '@grafana/data';\nimport { Chance } from 'chance';\n\nexport const mockQueryEditorProps = (): QueryEditorProps<any, any, any> => ({\n datasource: {},\n query: {\n refId: Chance().word(),\n hide: false,\n key: Chance().word(),\n queryType: Chance().word(),\n dataTopic: DataTopic.Annotations,\n datasource: Chance().pickone([Chance().word(), null]),\n },\n onRunQuery: jest.fn(),\n onChange: jest.fn(),\n onBlur: jest.fn(),\n data: {\n state: mockLoadingState(),\n series: [],\n annotations: [],\n timeRange: mockTimeRange(),\n },\n range: mockTimeRange(),\n history: [],\n});\n\nexport const mockLoadingState = (): LoadingState =>\n Chance().pickone([\n LoadingState.NotStarted,\n LoadingState.Loading,\n LoadingState.Streaming,\n LoadingState.Done,\n LoadingState.Error,\n ]);\n\nexport const mockTimeRange = (): TimeRange => ({\n from: dateTime(),\n to: dateTime(),\n raw: {\n from: dateTime(),\n to: dateTime(),\n },\n});\n"],"names":["Chance","within","fireEvent","userEvent","waitFor","kebabCase","PluginType","PluginIncludeType","PluginState","PluginSignatureStatus","DataSourceWithBackend","DataTopic","LoadingState","dateTime"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"test-utils.cjs","sources":["../../src/test/mocks/utils.ts","../../src/test/mocks/Plugin.ts","../../src/test/mocks/Datasource.ts","../../src/test/mocks/DataQuery.ts","../../src/test/mocks/QueryEditorProps.ts"],"sourcesContent":["import { type SelectableValue } from '@grafana/data';\nimport { Chance } from 'chance';\nimport { within, fireEvent, waitFor } from '@testing-library/react';\nimport userEvent from '@testing-library/user-event';\nimport { kebabCase } from 'lodash';\n\nexport const generateBoolean = () => Chance().pickone([true, false]);\n\nexport const undefinedOr = (fn: Function) => Chance().pickone([undefined, fn()]);\n\nexport const generateArrayOf = (fn: Function, numberOf = 3) => Array.from(new Array(numberOf), () => fn());\n\n// react-select (used by @grafana/ui) renders very differently from the native Select HTML element\n// and because they are not accessible and do not pass data-testid or aria-labels down,\n// it is difficult to grab the correct element and simulate selecting different options\n// the helper functions below can be used instead\n\n/**\n * Opens a Select or MultiSelect dropdown\n *\n * @param {HTMLElement} container The container wrapping the Select or MultiSelect component\n * @param {string} optionLabel The option text we want to type or search\n */\nexport const openSelect = (container: HTMLElement, optionLabel?: string) => {\n const selectInput = within(container).getByRole('textbox');\n\n // this needs to be here to support autoFocus=true prop\n fireEvent.blur(selectInput);\n\n // if we have an async Select, we want to type the option label to make the option available\n // otherwise, just press down to open the dropdown\n userEvent.type(selectInput, optionLabel ?? '{arrowdown}');\n};\n\n/**\n * Selects an option from the Select or MultiSelect component\n *\n * @param {HTMLElement} container The container wrapping the Select or MultiSelect component\n * @param {string} optionLabel The option we want to select\n * @param {boolean} [typeOptionLabel=false] If we should type the optional label after opening - this is useful for AsyncSelect\n */\nexport const selectOption = async (container: HTMLElement, optionLabel: string, typeOptionLabel?: boolean) => {\n openSelect(container, typeOptionLabel ? optionLabel : undefined);\n\n // wait for the list to show\n const option = await waitFor(() => within(container).getByText(optionLabel));\n\n // select the option\n userEvent.click(option);\n};\n\nexport const generateOptions = (): Array<SelectableValue<string>> => {\n const numberOfOptions = 5;\n\n return Array.from(new Array(numberOfOptions), () => {\n const name = Chance().name();\n\n return {\n label: name,\n value: kebabCase(name),\n };\n });\n};\n","import { Chance } from 'chance';\nimport {\n type DataSourcePluginMeta,\n type PluginMetaInfo,\n type PluginMeta,\n PluginState,\n PluginSignatureStatus,\n type PluginInclude,\n PluginIncludeType,\n type PluginDependencies,\n PluginType,\n} from '@grafana/data';\nimport { generateBoolean } from './utils';\n\nexport const mockDataSourcePluginMeta = (): DataSourcePluginMeta => ({\n builtIn: generateBoolean(),\n metrics: generateBoolean(),\n logs: generateBoolean(),\n annotations: generateBoolean(),\n alerting: generateBoolean(),\n tracing: generateBoolean(),\n mixed: generateBoolean(),\n hasQueryHelp: generateBoolean(),\n category: Chance().word(),\n queryOptions: {\n cacheTimeout: generateBoolean(),\n maxDataPoints: generateBoolean(),\n minInterval: generateBoolean(),\n },\n sort: 1,\n streaming: generateBoolean(),\n unlicensed: generateBoolean(),\n id: Chance().word(),\n name: Chance().word(),\n type: mockPluginType(),\n info: mockPluginMetaInfo(),\n module: Chance().word(),\n baseUrl: Chance().word(),\n});\n\nexport const mockPluginMetaInfo = (): PluginMetaInfo => ({\n author: {\n name: Chance().word(),\n url: Chance().word(),\n },\n description: Chance().word(),\n links: [],\n logos: {\n large: Chance().word(),\n small: Chance().word(),\n },\n screenshots: [],\n updated: Chance().word(),\n version: Chance().word(),\n});\n\nexport const mockPluginMeta = (): PluginMeta => ({\n id: Chance().word(),\n name: Chance().word(),\n type: mockPluginType(),\n info: mockPluginMetaInfo(),\n includes: [mockPluginInclude()],\n state: mockPluginState(),\n module: Chance().word(),\n baseUrl: Chance().word(),\n dependencies: mockPluginDependencies(),\n jsonData: {},\n secureJsonData: {},\n enabled: generateBoolean(),\n defaultNavUrl: Chance().word(),\n hasUpdate: generateBoolean(),\n enterprise: generateBoolean(),\n latestVersion: Chance().word(),\n pinned: generateBoolean(),\n signature: mockPluginSignatureStatus(),\n live: generateBoolean(),\n});\n\nexport const mockPluginInclude = (): PluginInclude => ({\n type: mockPluginIncludeType(),\n name: Chance().word(),\n path: Chance().word(),\n icon: Chance().word(),\n role: Chance().word(),\n addToNav: generateBoolean(),\n component: Chance().word(),\n});\n\nexport const mockPluginType = (): PluginType =>\n Chance().pickone([PluginType.panel, PluginType.datasource, PluginType.app, PluginType.renderer]);\n\nexport const mockPluginIncludeType = (): PluginIncludeType =>\n Chance().pickone([\n PluginIncludeType.dashboard,\n PluginIncludeType.page,\n PluginIncludeType.panel,\n PluginIncludeType.datasource,\n ]);\n\nexport const mockPluginState = (): PluginState =>\n Chance().pickone([PluginState.alpha, PluginState.beta, PluginState.deprecated]);\n\nexport const mockPluginDependencies = (): PluginDependencies => ({\n grafanaVersion: Chance().word(),\n plugins: [],\n});\n\nexport const mockPluginSignatureStatus = (): PluginSignatureStatus =>\n Chance().pickone([\n PluginSignatureStatus.internal,\n PluginSignatureStatus.valid,\n PluginSignatureStatus.invalid,\n PluginSignatureStatus.modified,\n PluginSignatureStatus.missing,\n ]);\n","import { type DataSourceInstanceSettings, type QueryHint } from '@grafana/data';\nimport { DataSourceWithBackend } from '@grafana/runtime';\nimport { Chance } from 'chance';\nimport { mockDataSourcePluginMeta } from './Plugin';\nimport { generateBoolean, undefinedOr } from './utils';\n\nclass DatasourceMock extends DataSourceWithBackend {\n // DataSourceWithBackend\n query = jest.fn();\n filterQuery = undefinedOr(generateBoolean);\n applyTemplateVariables = jest.fn();\n getResource = jest.fn();\n postResource = jest.fn();\n callHealthCheck = jest.fn();\n testDatasource = jest.fn();\n // DataSourceApi\n uid = Chance().guid();\n name = Chance().word();\n id = 1;\n type = Chance().word();\n interval = Chance().word();\n importQueries = jest.fn();\n init = jest.fn();\n getQueryHints = jest.fn().mockReturnValue([mockQueryHint()]);\n getQueryDisplayText = jest.fn().mockReturnValue(Chance().word());\n metricFindQuery = jest.fn();\n getTagKeys = jest.fn();\n getTagValues = jest.fn();\n components = {};\n meta = mockDataSourcePluginMeta();\n targetContainsTemplate = jest.fn();\n modifyQuery = jest.fn();\n getHighlighterExpression = jest.fn();\n languageProvider = jest.fn();\n getVersion = jest.fn();\n interpolateVariablesInQueries = jest.fn();\n annotations = {};\n annotationQuery = jest.fn();\n streamOptionsProvider = jest.fn();\n getRef = jest.fn();\n protected getRequestHeaders = jest.fn();\n}\n\nexport const mockDatasource = () => new DatasourceMock(mockDatasourceInstanceSettings());\n\nconst mockQueryHint = (): QueryHint => ({\n type: Chance().word(),\n label: Chance().word(),\n fix: {\n label: Chance().word(),\n action: {\n type: Chance().word(),\n query: Chance().word(),\n preventSubmit: generateBoolean(),\n },\n },\n});\n\nexport const mockDatasourceInstanceSettings = (): DataSourceInstanceSettings => ({\n id: Chance().integer(),\n uid: Chance().word(),\n type: Chance().word(),\n name: Chance().word(),\n meta: mockDataSourcePluginMeta(),\n url: Chance().word(),\n jsonData: {},\n username: Chance().word(),\n password: Chance().word(),\n database: Chance().word(),\n basicAuth: Chance().word(),\n withCredentials: generateBoolean(),\n access: Chance().pickone(['direct', 'proxy']),\n readOnly: false,\n});\n","import { type DataQuery } from '@grafana/data';\nimport { Chance } from 'chance';\nimport { undefinedOr } from './utils';\n\nexport const mockDataQuery = (): DataQuery => ({\n refId: Chance().word(),\n hide: false,\n key: Chance().guid(),\n queryType: Chance().word(),\n datasource: undefinedOr(() => Chance().word()),\n});\n","import { type QueryEditorProps, DataTopic, dateTime, LoadingState, type TimeRange } from '@grafana/data';\nimport { Chance } from 'chance';\n\nexport const mockQueryEditorProps = (): QueryEditorProps<any, any, any> => ({\n datasource: {},\n query: {\n refId: Chance().word(),\n hide: false,\n key: Chance().word(),\n queryType: Chance().word(),\n dataTopic: DataTopic.Annotations,\n datasource: Chance().pickone([Chance().word(), null]),\n },\n onRunQuery: jest.fn(),\n onChange: jest.fn(),\n onBlur: jest.fn(),\n data: {\n state: mockLoadingState(),\n series: [],\n annotations: [],\n timeRange: mockTimeRange(),\n },\n range: mockTimeRange(),\n history: [],\n});\n\nexport const mockLoadingState = (): LoadingState =>\n Chance().pickone([\n LoadingState.NotStarted,\n LoadingState.Loading,\n LoadingState.Streaming,\n LoadingState.Done,\n LoadingState.Error,\n ]);\n\nexport const mockTimeRange = (): TimeRange => ({\n from: dateTime(),\n to: dateTime(),\n raw: {\n from: dateTime(),\n to: dateTime(),\n },\n});\n"],"names":["Chance","within","fireEvent","userEvent","waitFor","kebabCase","PluginType","PluginIncludeType","PluginState","PluginSignatureStatus","DataSourceWithBackend","DataTopic","LoadingState","dateTime"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _grafana_data from '@grafana/data';
|
|
2
|
-
import { DataSourceInstanceSettings, DataQuery, DataSourcePluginMeta,
|
|
2
|
+
import { DataSourceInstanceSettings, DataQuery, DataSourcePluginMeta, PluginDependencies, PluginInclude, PluginIncludeType, PluginMeta, PluginMetaInfo, PluginSignatureStatus, PluginState, PluginType, LoadingState, QueryEditorProps, TimeRange, SelectableValue } from '@grafana/data';
|
|
3
3
|
import { DataSourceWithBackend } from '@grafana/runtime';
|
|
4
4
|
|
|
5
5
|
declare class DatasourceMock extends DataSourceWithBackend {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdvancedHttpSettings.js","sources":["../../../../../src/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.tsx"],"sourcesContent":["import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineField, Input, TagsInput } from '@grafana/ui';\nimport { ConfigSubSection } from '../ConfigSection';\nimport { type Config, type OnChangeHandler } from '../types';\n\nexport type Props<C extends Config = Config> = {\n config: C;\n onChange: OnChangeHandler<C>;\n className?: string;\n};\n\nexport const AdvancedHttpSettings: <C extends Config = Config>(props: Props<C>) => JSX.Element = ({\n config,\n onChange,\n className,\n}) => {\n const onCookiesChange = (cookies: string[]) => {\n onChange({\n ...config,\n jsonData: {\n ...config.jsonData,\n keepCookies: cookies,\n },\n });\n };\n\n const onTimeoutChange = (event: React.FormEvent<HTMLInputElement>) => {\n onChange({\n ...config,\n jsonData: {\n ...config.jsonData,\n timeout: parseInt(event.currentTarget.value, 10),\n },\n });\n };\n\n const styles = {\n container: css({\n maxWidth: 578,\n }),\n };\n\n return (\n <ConfigSubSection title=\"Advanced HTTP settings\" className={cx(styles.container, className)}>\n <InlineField\n htmlFor=\"advanced-http-cookies\"\n label=\"Allowed cookies\"\n labelWidth={24}\n tooltip=\"Grafana proxy deletes forwarded cookies by default. Specify cookies by name that should be forwarded to the data source.\"\n disabled={config.readOnly}\n grow\n >\n <TagsInput\n id=\"advanced-http-cookies\"\n placeholder=\"New cookie (hit enter to add)\"\n tags={config.jsonData.keepCookies}\n onChange={onCookiesChange}\n />\n </InlineField>\n\n <InlineField\n htmlFor=\"advanced-http-timeout\"\n label=\"Timeout\"\n labelWidth={24}\n tooltip=\"HTTP request timeout in seconds\"\n disabled={config.readOnly}\n grow\n >\n <Input\n id=\"advanced-http-timeout\"\n type=\"number\"\n min={0}\n placeholder=\"Timeout in seconds\"\n aria-label=\"Timeout in seconds\"\n value={config.jsonData.timeout}\n onChange={onTimeoutChange}\n />\n </InlineField>\n </ConfigSubSection>\n );\n};\n"],"names":[],"mappings":";;;;;;AAYO,MAAM,uBAAoF,CAAC;AAAA,EAChG,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,
|
|
1
|
+
{"version":3,"file":"AdvancedHttpSettings.js","sources":["../../../../../src/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.tsx"],"sourcesContent":["import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineField, Input, TagsInput } from '@grafana/ui';\nimport { ConfigSubSection } from '../ConfigSection';\nimport { type Config, type OnChangeHandler } from '../types';\n\nexport type Props<C extends Config = Config> = {\n config: C;\n onChange: OnChangeHandler<C>;\n className?: string;\n};\n\nexport const AdvancedHttpSettings: <C extends Config = Config>(props: Props<C>) => JSX.Element = ({\n config,\n onChange,\n className,\n}) => {\n const onCookiesChange = (cookies: string[]) => {\n onChange({\n ...config,\n jsonData: {\n ...config.jsonData,\n keepCookies: cookies,\n },\n });\n };\n\n const onTimeoutChange = (event: React.FormEvent<HTMLInputElement>) => {\n onChange({\n ...config,\n jsonData: {\n ...config.jsonData,\n timeout: parseInt(event.currentTarget.value, 10),\n },\n });\n };\n\n const styles = {\n container: css({\n maxWidth: 578,\n }),\n };\n\n return (\n <ConfigSubSection title=\"Advanced HTTP settings\" className={cx(styles.container, className)}>\n <InlineField\n htmlFor=\"advanced-http-cookies\"\n label=\"Allowed cookies\"\n labelWidth={24}\n tooltip=\"Grafana proxy deletes forwarded cookies by default. Specify cookies by name that should be forwarded to the data source.\"\n disabled={config.readOnly}\n grow\n >\n <TagsInput\n id=\"advanced-http-cookies\"\n placeholder=\"New cookie (hit enter to add)\"\n tags={config.jsonData.keepCookies}\n onChange={onCookiesChange}\n />\n </InlineField>\n\n <InlineField\n htmlFor=\"advanced-http-timeout\"\n label=\"Timeout\"\n labelWidth={24}\n tooltip=\"HTTP request timeout in seconds\"\n disabled={config.readOnly}\n grow\n >\n <Input\n id=\"advanced-http-timeout\"\n type=\"number\"\n min={0}\n placeholder=\"Timeout in seconds\"\n aria-label=\"Timeout in seconds\"\n value={config.jsonData.timeout}\n onChange={onTimeoutChange}\n />\n </InlineField>\n </ConfigSubSection>\n );\n};\n"],"names":[],"mappings":";;;;;;AAYO,MAAM,uBAAoF,CAAC;AAAA,EAChG,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,eAAA,GAAkB,CAAC,OAAA,KAAsB;AAC7C,IAAA,QAAA,CAAS;AAAA,MACP,GAAG,MAAA;AAAA,MACH,QAAA,EAAU;AAAA,QACR,GAAG,MAAA,CAAO,QAAA;AAAA,QACV,WAAA,EAAa;AAAA;AACf,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,KAAA,KAA6C;AACpE,IAAA,QAAA,CAAS;AAAA,MACP,GAAG,MAAA;AAAA,MACH,QAAA,EAAU;AAAA,QACR,GAAG,MAAA,CAAO,QAAA;AAAA,QACV,OAAA,EAAS,QAAA,CAAS,KAAA,CAAM,aAAA,CAAc,OAAO,EAAE;AAAA;AACjD,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,WAAW,GAAA,CAAI;AAAA,MACb,QAAA,EAAU;AAAA,KACX;AAAA,GACH;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,oBAAiB,KAAA,EAAM,wBAAA,EAAyB,WAAW,EAAA,CAAG,MAAA,CAAO,SAAA,EAAW,SAAS,CAAA,EAAA,kBACxF,KAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,uBAAA;AAAA,MACR,KAAA,EAAM,iBAAA;AAAA,MACN,UAAA,EAAY,EAAA;AAAA,MACZ,OAAA,EAAQ,0HAAA;AAAA,MACR,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,IAAA,EAAI;AAAA,KAAA;AAAA,oBAEJ,KAAA,CAAA,aAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,uBAAA;AAAA,QACH,WAAA,EAAY,+BAAA;AAAA,QACZ,IAAA,EAAM,OAAO,QAAA,CAAS,WAAA;AAAA,QACtB,QAAA,EAAU;AAAA;AAAA;AACZ,GACF,kBAEA,KAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,uBAAA;AAAA,MACR,KAAA,EAAM,SAAA;AAAA,MACN,UAAA,EAAY,EAAA;AAAA,MACZ,OAAA,EAAQ,iCAAA;AAAA,MACR,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,IAAA,EAAI;AAAA,KAAA;AAAA,oBAEJ,KAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,uBAAA;AAAA,QACH,IAAA,EAAK,QAAA;AAAA,QACL,GAAA,EAAK,CAAA;AAAA,QACL,WAAA,EAAY,oBAAA;AAAA,QACZ,YAAA,EAAW,oBAAA;AAAA,QACX,KAAA,EAAO,OAAO,QAAA,CAAS,OAAA;AAAA,QACvB,QAAA,EAAU;AAAA;AAAA;AACZ,GAEJ,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Auth.js","sources":["../../../../../src/components/ConfigEditor/Auth/Auth.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from '@emotion/css';\nimport { type AuthMethod, type AuthMethodSelectOption, type CustomMethod, type CustomMethodId } from './types';\nimport { AuthMethodSettings } from './auth-method/AuthMethodSettings';\nimport { TLSSettings, type Props as TLSSettingsProps } from './tls/TLSSettings';\nimport { type Props as BasicAuthProps } from './auth-method/BasicAuth';\nimport { CustomHeaders, type Props as CustomHeadersProps } from './custom-headers/CustomHeaders';\nimport { ConfigSection } from '../ConfigSection';\n\nexport type Props = {\n selectedMethod: AuthMethod | CustomMethodId;\n mostCommonMethod?: AuthMethod | CustomMethodId;\n visibleMethods?: Array<AuthMethod | CustomMethodId>;\n defaultOptionsOverrides?: Partial<Record<AuthMethod, AuthMethodSelectOption>>;\n customMethods?: CustomMethod[];\n onAuthMethodSelect: (authType: AuthMethod | CustomMethodId) => void;\n basicAuth?: Omit<BasicAuthProps, 'readOnly'>;\n TLS?: Omit<TLSSettingsProps, 'readOnly'>;\n customHeaders?: Omit<CustomHeadersProps, 'readOnly'>;\n readOnly?: boolean;\n};\n\nexport const Auth = ({\n selectedMethod,\n mostCommonMethod,\n visibleMethods,\n defaultOptionsOverrides,\n customMethods,\n onAuthMethodSelect,\n basicAuth,\n TLS,\n customHeaders,\n readOnly = false,\n}: Props) => {\n const styles = {\n container: css({\n maxWidth: 578,\n }),\n };\n\n return (\n <div className={styles.container}>\n <ConfigSection title=\"Authentication\">\n <AuthMethodSettings\n selectedMethod={selectedMethod}\n mostCommonMethod={mostCommonMethod}\n customMethods={customMethods}\n visibleMethods={visibleMethods}\n defaultOptionsOverrides={defaultOptionsOverrides}\n onAuthMethodSelect={onAuthMethodSelect}\n basicAuth={basicAuth}\n readOnly={readOnly}\n />\n {TLS && <TLSSettings {...TLS} readOnly={readOnly} />}\n {customHeaders && <CustomHeaders {...customHeaders} readOnly={readOnly} />}\n </ConfigSection>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAsBO,MAAM,OAAO,CAAC;AAAA,EACnB,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,uBAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,aAAA;AAAA,EACA,
|
|
1
|
+
{"version":3,"file":"Auth.js","sources":["../../../../../src/components/ConfigEditor/Auth/Auth.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from '@emotion/css';\nimport { type AuthMethod, type AuthMethodSelectOption, type CustomMethod, type CustomMethodId } from './types';\nimport { AuthMethodSettings } from './auth-method/AuthMethodSettings';\nimport { TLSSettings, type Props as TLSSettingsProps } from './tls/TLSSettings';\nimport { type Props as BasicAuthProps } from './auth-method/BasicAuth';\nimport { CustomHeaders, type Props as CustomHeadersProps } from './custom-headers/CustomHeaders';\nimport { ConfigSection } from '../ConfigSection';\n\nexport type Props = {\n selectedMethod: AuthMethod | CustomMethodId;\n mostCommonMethod?: AuthMethod | CustomMethodId;\n visibleMethods?: Array<AuthMethod | CustomMethodId>;\n defaultOptionsOverrides?: Partial<Record<AuthMethod, AuthMethodSelectOption>>;\n customMethods?: CustomMethod[];\n onAuthMethodSelect: (authType: AuthMethod | CustomMethodId) => void;\n basicAuth?: Omit<BasicAuthProps, 'readOnly'>;\n TLS?: Omit<TLSSettingsProps, 'readOnly'>;\n customHeaders?: Omit<CustomHeadersProps, 'readOnly'>;\n readOnly?: boolean;\n};\n\nexport const Auth = ({\n selectedMethod,\n mostCommonMethod,\n visibleMethods,\n defaultOptionsOverrides,\n customMethods,\n onAuthMethodSelect,\n basicAuth,\n TLS,\n customHeaders,\n readOnly = false,\n}: Props) => {\n const styles = {\n container: css({\n maxWidth: 578,\n }),\n };\n\n return (\n <div className={styles.container}>\n <ConfigSection title=\"Authentication\">\n <AuthMethodSettings\n selectedMethod={selectedMethod}\n mostCommonMethod={mostCommonMethod}\n customMethods={customMethods}\n visibleMethods={visibleMethods}\n defaultOptionsOverrides={defaultOptionsOverrides}\n onAuthMethodSelect={onAuthMethodSelect}\n basicAuth={basicAuth}\n readOnly={readOnly}\n />\n {TLS && <TLSSettings {...TLS} readOnly={readOnly} />}\n {customHeaders && <CustomHeaders {...customHeaders} readOnly={readOnly} />}\n </ConfigSection>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAsBO,MAAM,OAAO,CAAC;AAAA,EACnB,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,uBAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,KAAa;AACX,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,WAAW,GAAA,CAAI;AAAA,MACb,QAAA,EAAU;AAAA,KACX;AAAA,GACH;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAW,MAAA,CAAO,6BACrB,KAAA,CAAA,aAAA,CAAC,aAAA,EAAA,EAAc,OAAM,gBAAA,EAAA,kBACnB,KAAA,CAAA,aAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,cAAA;AAAA,MACA,gBAAA;AAAA,MACA,aAAA;AAAA,MACA,cAAA;AAAA,MACA,uBAAA;AAAA,MACA,kBAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA;AAAA,GACF,EACC,GAAA,oBAAO,KAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAa,GAAG,GAAA,EAAK,QAAA,EAAoB,CAAA,EACjD,aAAA,wCAAkB,aAAA,EAAA,EAAe,GAAG,aAAA,EAAe,QAAA,EAAoB,CAC1E,CACF,CAAA;AAEJ;;;;"}
|
|
@@ -48,7 +48,7 @@ const AuthMethodSettings = ({
|
|
|
48
48
|
AuthMethod.BasicAuth,
|
|
49
49
|
AuthMethod.OAuthForward,
|
|
50
50
|
AuthMethod.NoAuth,
|
|
51
|
-
...(_a2 = customMethods == null ?
|
|
51
|
+
...(_a2 = customMethods == null ? void 0 : customMethods.map((m) => m.id)) != null ? _a2 : []
|
|
52
52
|
];
|
|
53
53
|
},
|
|
54
54
|
[customMethods, visibleMethodsFromProps]
|
|
@@ -56,7 +56,7 @@ const AuthMethodSettings = ({
|
|
|
56
56
|
const hasSelect = visibleMethods.length > 1;
|
|
57
57
|
const preparedOptions = useMemo(() => {
|
|
58
58
|
var _a2;
|
|
59
|
-
const customOptions = (_a2 = customMethods == null ?
|
|
59
|
+
const customOptions = (_a2 = customMethods == null ? void 0 : customMethods.reduce((acc, method) => {
|
|
60
60
|
acc[method.id] = {
|
|
61
61
|
label: method.label,
|
|
62
62
|
value: method.id,
|
|
@@ -69,7 +69,7 @@ const AuthMethodSettings = ({
|
|
|
69
69
|
for (k in defaultOptions) {
|
|
70
70
|
preparedDefaultOptions[k] = {
|
|
71
71
|
...defaultOptions[k],
|
|
72
|
-
...defaultOptionsOverrides == null ?
|
|
72
|
+
...defaultOptionsOverrides == null ? void 0 : defaultOptionsOverrides[k]
|
|
73
73
|
};
|
|
74
74
|
}
|
|
75
75
|
const allOptions = {
|
|
@@ -97,7 +97,7 @@ const AuthMethodSettings = ({
|
|
|
97
97
|
if (selected === AuthMethod.BasicAuth && basicAuth) {
|
|
98
98
|
AuthFieldsComponent = /* @__PURE__ */ React.createElement(BasicAuth, { ...basicAuth, readOnly });
|
|
99
99
|
} else if (selected.startsWith("custom-")) {
|
|
100
|
-
AuthFieldsComponent = (_b = (_a = customMethods == null ?
|
|
100
|
+
AuthFieldsComponent = (_b = (_a = customMethods == null ? void 0 : customMethods.find((m) => m.id === selected)) == null ? void 0 : _a.component) != null ? _b : null;
|
|
101
101
|
}
|
|
102
102
|
const title = hasSelect ? "Authentication methods" : (_c = preparedOptions[0].label) != null ? _c : "";
|
|
103
103
|
const description = hasSelect ? "Choose an authentication method to access the data source" : (_d = preparedOptions[0].description) != null ? _d : "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthMethodSettings.js","sources":["../../../../../../src/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.tsx"],"sourcesContent":["import React, { type ReactElement, useMemo, useState } from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, Select, Field } from '@grafana/ui';\nimport { type SelectableValue } from '@grafana/data';\nimport { BasicAuth, type Props as BasicAuthProps } from './BasicAuth';\nimport { ConfigSubSection } from '../../ConfigSection';\nimport { AuthMethod, type CustomMethod, type CustomMethodId, type AuthMethodSelectOption } from '../types';\n\nconst defaultOptions: Record<AuthMethod, SelectableValue<AuthMethod>> = {\n [AuthMethod.BasicAuth]: {\n label: 'Basic authentication',\n value: AuthMethod.BasicAuth,\n description: 'Authenticate with your data source username and password',\n },\n [AuthMethod.CrossSiteCredentials]: {\n label: 'Enable cross-site access control requests',\n value: AuthMethod.CrossSiteCredentials,\n description:\n 'Allow cross-site Access-Control requests with your existing credentials and cookies. This enables the server to authenticate the user and perform authorized requests on their behalf on other domains.',\n },\n [AuthMethod.OAuthForward]: {\n label: 'Forward OAuth Identity',\n value: AuthMethod.OAuthForward,\n description:\n 'Forward the OAuth access token (and if available: the OIDC ID token) of the user querying to the data source',\n },\n [AuthMethod.NoAuth]: {\n label: 'No Authentication',\n value: AuthMethod.NoAuth,\n description: 'Data source is available without authentication',\n },\n};\n\nexport type Props = {\n selectedMethod: AuthMethod | CustomMethodId;\n mostCommonMethod?: AuthMethod | CustomMethodId;\n visibleMethods?: Array<AuthMethod | CustomMethodId>;\n defaultOptionsOverrides?: Partial<Record<AuthMethod, AuthMethodSelectOption>>;\n customMethods?: CustomMethod[];\n onAuthMethodSelect: (authType: AuthMethod | CustomMethodId) => void;\n basicAuth?: Omit<BasicAuthProps, 'readOnly'>;\n readOnly: boolean;\n};\n\nexport const AuthMethodSettings = ({\n selectedMethod,\n mostCommonMethod,\n visibleMethods: visibleMethodsFromProps,\n defaultOptionsOverrides,\n customMethods,\n onAuthMethodSelect,\n basicAuth,\n readOnly,\n}: Props) => {\n const [authMethodChanged, setAuthMethodChanged] = useState(false);\n const { colors, spacing } = useTheme2();\n const visibleMethods: Array<AuthMethod | CustomMethodId> = useMemo(\n () =>\n visibleMethodsFromProps ?? [\n AuthMethod.BasicAuth,\n AuthMethod.OAuthForward,\n AuthMethod.NoAuth,\n ...(customMethods?.map((m) => m.id) ?? []),\n ],\n [customMethods, visibleMethodsFromProps]\n );\n const hasSelect = visibleMethods.length > 1;\n\n const preparedOptions = useMemo(() => {\n const customOptions =\n customMethods?.reduce<Record<CustomMethodId, SelectableValue<CustomMethodId>>>((acc, method) => {\n acc[method.id] = {\n label: method.label,\n value: method.id,\n description: method.description,\n };\n return acc;\n }, {}) ?? {};\n\n const preparedDefaultOptions = {} as Record<AuthMethod, SelectableValue<AuthMethod>>;\n let k: keyof typeof AuthMethod;\n for (k in defaultOptions) {\n preparedDefaultOptions[k] = {\n ...defaultOptions[k],\n ...defaultOptionsOverrides?.[k],\n };\n }\n\n const allOptions: Record<AuthMethod | CustomMethodId, SelectableValue<AuthMethod | CustomMethodId>> = {\n ...customOptions,\n ...preparedDefaultOptions,\n };\n\n return visibleMethods\n .filter((method) => Boolean(allOptions[method]))\n .map((method) => {\n const option = allOptions[method];\n if (method === mostCommonMethod && hasSelect) {\n return {\n ...option,\n label: `${option.label} (most common)`,\n };\n }\n return option;\n });\n }, [visibleMethods, customMethods, defaultOptionsOverrides, mostCommonMethod, hasSelect]);\n\n let selected = selectedMethod;\n if (!hasSelect) {\n selected = visibleMethods[0];\n } else if (selectedMethod === AuthMethod.NoAuth && mostCommonMethod && !authMethodChanged) {\n selected = mostCommonMethod;\n }\n\n let AuthFieldsComponent: ReactElement | null = null;\n if (selected === AuthMethod.BasicAuth && basicAuth) {\n AuthFieldsComponent = <BasicAuth {...basicAuth} readOnly={readOnly} />;\n } else if (selected.startsWith('custom-')) {\n AuthFieldsComponent = customMethods?.find((m) => m.id === selected)?.component ?? null;\n }\n\n const title = hasSelect ? 'Authentication methods' : (preparedOptions[0].label ?? '');\n\n const description = hasSelect\n ? 'Choose an authentication method to access the data source'\n : (preparedOptions[0].description ?? '');\n\n const styles = {\n authMethods: css({\n marginTop: spacing(2.5),\n ...(hasSelect && {\n padding: spacing(2),\n border: `1px solid ${colors.border.weak}`,\n }),\n }),\n selectedMethodFields: css({\n marginTop: spacing(1.5),\n }),\n };\n\n return (\n <ConfigSubSection title={title} description={description}>\n <div className={styles.authMethods}>\n {hasSelect && (\n <Field label=\"Authentication method\">\n <Select\n inputId=\"auth-method-select\"\n options={preparedOptions}\n value={selected}\n onChange={(option) => {\n setAuthMethodChanged(true);\n onAuthMethodSelect(option.value!);\n }}\n disabled={readOnly}\n />\n </Field>\n )}\n {AuthFieldsComponent && <div className={styles.selectedMethodFields}>{AuthFieldsComponent}</div>}\n </div>\n </ConfigSubSection>\n );\n};\n"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AuthMethodSettings.js","sources":["../../../../../../src/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.tsx"],"sourcesContent":["import React, { type ReactElement, useMemo, useState } from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, Select, Field } from '@grafana/ui';\nimport { type SelectableValue } from '@grafana/data';\nimport { BasicAuth, type Props as BasicAuthProps } from './BasicAuth';\nimport { ConfigSubSection } from '../../ConfigSection';\nimport { AuthMethod, type CustomMethod, type CustomMethodId, type AuthMethodSelectOption } from '../types';\n\nconst defaultOptions: Record<AuthMethod, SelectableValue<AuthMethod>> = {\n [AuthMethod.BasicAuth]: {\n label: 'Basic authentication',\n value: AuthMethod.BasicAuth,\n description: 'Authenticate with your data source username and password',\n },\n [AuthMethod.CrossSiteCredentials]: {\n label: 'Enable cross-site access control requests',\n value: AuthMethod.CrossSiteCredentials,\n description:\n 'Allow cross-site Access-Control requests with your existing credentials and cookies. This enables the server to authenticate the user and perform authorized requests on their behalf on other domains.',\n },\n [AuthMethod.OAuthForward]: {\n label: 'Forward OAuth Identity',\n value: AuthMethod.OAuthForward,\n description:\n 'Forward the OAuth access token (and if available: the OIDC ID token) of the user querying to the data source',\n },\n [AuthMethod.NoAuth]: {\n label: 'No Authentication',\n value: AuthMethod.NoAuth,\n description: 'Data source is available without authentication',\n },\n};\n\nexport type Props = {\n selectedMethod: AuthMethod | CustomMethodId;\n mostCommonMethod?: AuthMethod | CustomMethodId;\n visibleMethods?: Array<AuthMethod | CustomMethodId>;\n defaultOptionsOverrides?: Partial<Record<AuthMethod, AuthMethodSelectOption>>;\n customMethods?: CustomMethod[];\n onAuthMethodSelect: (authType: AuthMethod | CustomMethodId) => void;\n basicAuth?: Omit<BasicAuthProps, 'readOnly'>;\n readOnly: boolean;\n};\n\nexport const AuthMethodSettings = ({\n selectedMethod,\n mostCommonMethod,\n visibleMethods: visibleMethodsFromProps,\n defaultOptionsOverrides,\n customMethods,\n onAuthMethodSelect,\n basicAuth,\n readOnly,\n}: Props) => {\n const [authMethodChanged, setAuthMethodChanged] = useState(false);\n const { colors, spacing } = useTheme2();\n const visibleMethods: Array<AuthMethod | CustomMethodId> = useMemo(\n () =>\n visibleMethodsFromProps ?? [\n AuthMethod.BasicAuth,\n AuthMethod.OAuthForward,\n AuthMethod.NoAuth,\n ...(customMethods?.map((m) => m.id) ?? []),\n ],\n [customMethods, visibleMethodsFromProps]\n );\n const hasSelect = visibleMethods.length > 1;\n\n const preparedOptions = useMemo(() => {\n const customOptions =\n customMethods?.reduce<Record<CustomMethodId, SelectableValue<CustomMethodId>>>((acc, method) => {\n acc[method.id] = {\n label: method.label,\n value: method.id,\n description: method.description,\n };\n return acc;\n }, {}) ?? {};\n\n const preparedDefaultOptions = {} as Record<AuthMethod, SelectableValue<AuthMethod>>;\n let k: keyof typeof AuthMethod;\n for (k in defaultOptions) {\n preparedDefaultOptions[k] = {\n ...defaultOptions[k],\n ...defaultOptionsOverrides?.[k],\n };\n }\n\n const allOptions: Record<AuthMethod | CustomMethodId, SelectableValue<AuthMethod | CustomMethodId>> = {\n ...customOptions,\n ...preparedDefaultOptions,\n };\n\n return visibleMethods\n .filter((method) => Boolean(allOptions[method]))\n .map((method) => {\n const option = allOptions[method];\n if (method === mostCommonMethod && hasSelect) {\n return {\n ...option,\n label: `${option.label} (most common)`,\n };\n }\n return option;\n });\n }, [visibleMethods, customMethods, defaultOptionsOverrides, mostCommonMethod, hasSelect]);\n\n let selected = selectedMethod;\n if (!hasSelect) {\n selected = visibleMethods[0];\n } else if (selectedMethod === AuthMethod.NoAuth && mostCommonMethod && !authMethodChanged) {\n selected = mostCommonMethod;\n }\n\n let AuthFieldsComponent: ReactElement | null = null;\n if (selected === AuthMethod.BasicAuth && basicAuth) {\n AuthFieldsComponent = <BasicAuth {...basicAuth} readOnly={readOnly} />;\n } else if (selected.startsWith('custom-')) {\n AuthFieldsComponent = customMethods?.find((m) => m.id === selected)?.component ?? null;\n }\n\n const title = hasSelect ? 'Authentication methods' : (preparedOptions[0].label ?? '');\n\n const description = hasSelect\n ? 'Choose an authentication method to access the data source'\n : (preparedOptions[0].description ?? '');\n\n const styles = {\n authMethods: css({\n marginTop: spacing(2.5),\n ...(hasSelect && {\n padding: spacing(2),\n border: `1px solid ${colors.border.weak}`,\n }),\n }),\n selectedMethodFields: css({\n marginTop: spacing(1.5),\n }),\n };\n\n return (\n <ConfigSubSection title={title} description={description}>\n <div className={styles.authMethods}>\n {hasSelect && (\n <Field label=\"Authentication method\">\n <Select\n inputId=\"auth-method-select\"\n options={preparedOptions}\n value={selected}\n onChange={(option) => {\n setAuthMethodChanged(true);\n onAuthMethodSelect(option.value!);\n }}\n disabled={readOnly}\n />\n </Field>\n )}\n {AuthFieldsComponent && <div className={styles.selectedMethodFields}>{AuthFieldsComponent}</div>}\n </div>\n </ConfigSubSection>\n );\n};\n"],"names":["_a"],"mappings":";;;;;;;;AAQA,MAAM,cAAA,GAAkE;AAAA,EACtE,CAAC,UAAA,CAAW,SAAS,GAAG;AAAA,IACtB,KAAA,EAAO,sBAAA;AAAA,IACP,OAAO,UAAA,CAAW,SAAA;AAAA,IAClB,WAAA,EAAa;AAAA,GACf;AAAA,EACA,CAAC,UAAA,CAAW,oBAAoB,GAAG;AAAA,IACjC,KAAA,EAAO,2CAAA;AAAA,IACP,OAAO,UAAA,CAAW,oBAAA;AAAA,IAClB,WAAA,EACE;AAAA,GACJ;AAAA,EACA,CAAC,UAAA,CAAW,YAAY,GAAG;AAAA,IACzB,KAAA,EAAO,wBAAA;AAAA,IACP,OAAO,UAAA,CAAW,YAAA;AAAA,IAClB,WAAA,EACE;AAAA,GACJ;AAAA,EACA,CAAC,UAAA,CAAW,MAAM,GAAG;AAAA,IACnB,KAAA,EAAO,mBAAA;AAAA,IACP,OAAO,UAAA,CAAW,MAAA;AAAA,IAClB,WAAA,EAAa;AAAA;AAEjB,CAAA;AAaO,MAAM,qBAAqB,CAAC;AAAA,EACjC,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA,EAAgB,uBAAA;AAAA,EAChB,uBAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,KAAa;AArDb,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAsDE,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAI,SAAS,KAAK,CAAA;AAChE,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI,SAAA,EAAU;AACtC,EAAA,MAAM,cAAA,GAAqD,OAAA;AAAA,IACzD,MAAG;AAzDP,MAAA,IAAAA,GAAAA;AA0DM,MAAA,OAAA,uBAAA,IAAA,IAAA,GAAA,uBAAA,GAA2B;AAAA,QACzB,UAAA,CAAW,SAAA;AAAA,QACX,UAAA,CAAW,YAAA;AAAA,QACX,UAAA,CAAW,MAAA;AAAA,QACX,GAAA,CAAIA,GAAAA,GAAA,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,EAAA,CAAA,KAA5B,IAAA,GAAAA,GAAAA,GAAmC;AAAC,OAC1C;AAAA,IAAA,CAAA;AAAA,IACF,CAAC,eAAe,uBAAuB;AAAA,GACzC;AACA,EAAA,MAAM,SAAA,GAAY,eAAe,MAAA,GAAS,CAAA;AAE1C,EAAA,MAAM,eAAA,GAAkB,QAAQ,MAAM;AApExC,IAAA,IAAAA,GAAAA;AAqEI,IAAA,MAAM,iBACJA,GAAAA,GAAA,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,MAAA,CAAgE,CAAC,KAAK,MAAA,KAAW;AAC9F,MAAA,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA,GAAI;AAAA,QACf,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,OAAO,MAAA,CAAO,EAAA;AAAA,QACd,aAAa,MAAA,CAAO;AAAA,OACtB;AACA,MAAA,OAAO,GAAA;AAAA,IACT,CAAA,EAAG,EAAC,CAAA,KAPJ,IAAA,GAAAA,MAOU,EAAC;AAEb,IAAA,MAAM,yBAAyB,EAAC;AAChC,IAAA,IAAI,CAAA;AACJ,IAAA,KAAK,KAAK,cAAA,EAAgB;AACxB,MAAA,sBAAA,CAAuB,CAAC,CAAA,GAAI;AAAA,QAC1B,GAAG,eAAe,CAAC,CAAA;AAAA,QACnB,GAAG,uBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,uBAAA,CAA0B,CAAA;AAAA,OAC/B;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GAAgG;AAAA,MACpG,GAAG,aAAA;AAAA,MACH,GAAG;AAAA,KACL;AAEA,IAAA,OAAO,cAAA,CACJ,MAAA,CAAO,CAAC,MAAA,KAAW,OAAA,CAAQ,UAAA,CAAW,MAAM,CAAC,CAAC,CAAA,CAC9C,GAAA,CAAI,CAAC,MAAA,KAAW;AACf,MAAA,MAAM,MAAA,GAAS,WAAW,MAAM,CAAA;AAChC,MAAA,IAAI,MAAA,KAAW,oBAAoB,SAAA,EAAW;AAC5C,QAAA,OAAO;AAAA,UACL,GAAG,MAAA;AAAA,UACH,KAAA,EAAO,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,cAAA;AAAA,SACxB;AAAA,MACF;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACL,GAAG,CAAC,cAAA,EAAgB,eAAe,uBAAA,EAAyB,gBAAA,EAAkB,SAAS,CAAC,CAAA;AAExF,EAAA,IAAI,QAAA,GAAW,cAAA;AACf,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,QAAA,GAAW,eAAe,CAAC,CAAA;AAAA,EAC7B,WAAW,cAAA,KAAmB,UAAA,CAAW,MAAA,IAAU,gBAAA,IAAoB,CAAC,iBAAA,EAAmB;AACzF,IAAA,QAAA,GAAW,gBAAA;AAAA,EACb;AAEA,EAAA,IAAI,mBAAA,GAA2C,IAAA;AAC/C,EAAA,IAAI,QAAA,KAAa,UAAA,CAAW,SAAA,IAAa,SAAA,EAAW;AAClD,IAAA,mBAAA,mBAAsB,KAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAW,GAAG,SAAA,EAAW,QAAA,EAAoB,CAAA;AAAA,EACtE,CAAA,MAAA,IAAW,QAAA,CAAS,UAAA,CAAW,SAAS,CAAA,EAAG;AACzC,IAAA,mBAAA,GAAA,CAAsB,EAAA,GAAA,CAAA,EAAA,GAAA,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAe,KAAK,CAAC,CAAA,KAAM,EAAE,EAAA,KAAO,QAAA,CAAA,KAApC,IAAA,GAAA,MAAA,GAAA,EAAA,CAA+C,SAAA,KAA/C,IAAA,GAAA,EAAA,GAA4D,IAAA;AAAA,EACpF;AAEA,EAAA,MAAM,QAAQ,SAAA,GAAY,wBAAA,GAAA,CAA4B,qBAAgB,CAAC,CAAA,CAAE,UAAnB,IAAA,GAAA,EAAA,GAA4B,EAAA;AAElF,EAAA,MAAM,cAAc,SAAA,GAChB,2DAAA,GAAA,CACC,qBAAgB,CAAC,CAAA,CAAE,gBAAnB,IAAA,GAAA,EAAA,GAAkC,EAAA;AAEvC,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,aAAa,GAAA,CAAI;AAAA,MACf,SAAA,EAAW,QAAQ,GAAG,CAAA;AAAA,MACtB,GAAI,SAAA,IAAa;AAAA,QACf,OAAA,EAAS,QAAQ,CAAC,CAAA;AAAA,QAClB,MAAA,EAAQ,CAAA,UAAA,EAAa,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAAA;AACzC,KACD,CAAA;AAAA,IACD,sBAAsB,GAAA,CAAI;AAAA,MACxB,SAAA,EAAW,QAAQ,GAAG;AAAA,KACvB;AAAA,GACH;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,gBAAA,EAAA,EAAiB,KAAA,EAAc,WAAA,EAAA,kBAC9B,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,WAAA,EAAA,EACpB,SAAA,oBACC,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,OAAM,uBAAA,EAAA,kBACX,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAQ,oBAAA;AAAA,MACR,OAAA,EAAS,eAAA;AAAA,MACT,KAAA,EAAO,QAAA;AAAA,MACP,QAAA,EAAU,CAAC,MAAA,KAAW;AACpB,QAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,QAAA,kBAAA,CAAmB,OAAO,KAAM,CAAA;AAAA,MAClC,CAAA;AAAA,MACA,QAAA,EAAU;AAAA;AAAA,GAEd,CAAA,EAED,mBAAA,oBAAuB,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAW,MAAA,CAAO,oBAAA,EAAA,EAAuB,mBAAoB,CAC5F,CACF,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BasicAuth.js","sources":["../../../../../../src/components/ConfigEditor/Auth/auth-method/BasicAuth.tsx"],"sourcesContent":["import React from 'react';\nimport { cx, css } from '@emotion/css';\nimport { InlineField, Input, type PopoverContent, SecretInput } from '@grafana/ui';\nimport { useCommonStyles } from '../styles';\n\nexport type Props = {\n user?: string;\n passwordConfigured: boolean;\n userLabel?: string;\n userTooltip?: PopoverContent;\n userPlaceholder?: string;\n passwordLabel?: string;\n passwordTooltip?: PopoverContent;\n passwordPlaceholder?: string;\n onUserChange: (user: string) => void;\n onPasswordChange: (password: string) => void;\n onPasswordReset: () => void;\n readOnly: boolean;\n};\n\nexport const BasicAuth = ({\n user,\n passwordConfigured,\n userLabel = 'User',\n userTooltip = 'The username of the data source account',\n userPlaceholder = 'User',\n passwordLabel = 'Password',\n passwordTooltip = 'The password of the data source account',\n passwordPlaceholder = 'Password',\n onUserChange,\n onPasswordChange,\n onPasswordReset,\n readOnly,\n}: Props) => {\n const commonStyles = useCommonStyles();\n const styles = {\n lastInlineField: css({\n marginBottom: 0,\n }),\n };\n return (\n <>\n <InlineField\n className={commonStyles.inlineFieldNoMarginRight}\n label={userLabel}\n labelWidth={24}\n tooltip={userTooltip}\n required\n htmlFor=\"basic-auth-user-input\"\n interactive\n grow\n disabled={readOnly}\n >\n <Input\n id=\"basic-auth-user-input\"\n placeholder={userPlaceholder}\n value={user}\n onChange={(e) => onUserChange(e.currentTarget.value)}\n required\n />\n </InlineField>\n <InlineField\n className={cx(\n commonStyles.inlineFieldNoMarginRight,\n commonStyles.inlineFieldWithSecret,\n styles.lastInlineField\n )}\n label={passwordLabel}\n labelWidth={24}\n tooltip={passwordTooltip}\n required\n htmlFor=\"basic-auth-password-input\"\n interactive\n grow\n disabled={readOnly}\n >\n <SecretInput\n id=\"basic-auth-password-input\"\n isConfigured={passwordConfigured}\n onReset={readOnly ? () => {} : onPasswordReset}\n placeholder={passwordPlaceholder}\n onChange={(e) => onPasswordChange(e.currentTarget.value)}\n required\n />\n </InlineField>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;AAoBO,MAAM,YAAY,CAAC;AAAA,EACxB,IAAA;AAAA,EACA,kBAAA;AAAA,EACA,
|
|
1
|
+
{"version":3,"file":"BasicAuth.js","sources":["../../../../../../src/components/ConfigEditor/Auth/auth-method/BasicAuth.tsx"],"sourcesContent":["import React from 'react';\nimport { cx, css } from '@emotion/css';\nimport { InlineField, Input, type PopoverContent, SecretInput } from '@grafana/ui';\nimport { useCommonStyles } from '../styles';\n\nexport type Props = {\n user?: string;\n passwordConfigured: boolean;\n userLabel?: string;\n userTooltip?: PopoverContent;\n userPlaceholder?: string;\n passwordLabel?: string;\n passwordTooltip?: PopoverContent;\n passwordPlaceholder?: string;\n onUserChange: (user: string) => void;\n onPasswordChange: (password: string) => void;\n onPasswordReset: () => void;\n readOnly: boolean;\n};\n\nexport const BasicAuth = ({\n user,\n passwordConfigured,\n userLabel = 'User',\n userTooltip = 'The username of the data source account',\n userPlaceholder = 'User',\n passwordLabel = 'Password',\n passwordTooltip = 'The password of the data source account',\n passwordPlaceholder = 'Password',\n onUserChange,\n onPasswordChange,\n onPasswordReset,\n readOnly,\n}: Props) => {\n const commonStyles = useCommonStyles();\n const styles = {\n lastInlineField: css({\n marginBottom: 0,\n }),\n };\n return (\n <>\n <InlineField\n className={commonStyles.inlineFieldNoMarginRight}\n label={userLabel}\n labelWidth={24}\n tooltip={userTooltip}\n required\n htmlFor=\"basic-auth-user-input\"\n interactive\n grow\n disabled={readOnly}\n >\n <Input\n id=\"basic-auth-user-input\"\n placeholder={userPlaceholder}\n value={user}\n onChange={(e) => onUserChange(e.currentTarget.value)}\n required\n />\n </InlineField>\n <InlineField\n className={cx(\n commonStyles.inlineFieldNoMarginRight,\n commonStyles.inlineFieldWithSecret,\n styles.lastInlineField\n )}\n label={passwordLabel}\n labelWidth={24}\n tooltip={passwordTooltip}\n required\n htmlFor=\"basic-auth-password-input\"\n interactive\n grow\n disabled={readOnly}\n >\n <SecretInput\n id=\"basic-auth-password-input\"\n isConfigured={passwordConfigured}\n onReset={readOnly ? () => {} : onPasswordReset}\n placeholder={passwordPlaceholder}\n onChange={(e) => onPasswordChange(e.currentTarget.value)}\n required\n />\n </InlineField>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;AAoBO,MAAM,YAAY,CAAC;AAAA,EACxB,IAAA;AAAA,EACA,kBAAA;AAAA,EACA,SAAA,GAAY,MAAA;AAAA,EACZ,WAAA,GAAc,yCAAA;AAAA,EACd,eAAA,GAAkB,MAAA;AAAA,EAClB,aAAA,GAAgB,UAAA;AAAA,EAChB,eAAA,GAAkB,yCAAA;AAAA,EAClB,mBAAA,GAAsB,UAAA;AAAA,EACtB,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,KAAa;AACX,EAAA,MAAM,eAAe,eAAA,EAAgB;AACrC,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,iBAAiB,GAAA,CAAI;AAAA,MACnB,YAAA,EAAc;AAAA,KACf;AAAA,GACH;AACA,EAAA,uBACE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,WAAW,YAAA,CAAa,wBAAA;AAAA,MACxB,KAAA,EAAO,SAAA;AAAA,MACP,UAAA,EAAY,EAAA;AAAA,MACZ,OAAA,EAAS,WAAA;AAAA,MACT,QAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAQ,uBAAA;AAAA,MACR,WAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAI,IAAA;AAAA,MACJ,QAAA,EAAU;AAAA,KAAA;AAAA,oBAEV,KAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,uBAAA;AAAA,QACH,WAAA,EAAa,eAAA;AAAA,QACb,KAAA,EAAO,IAAA;AAAA,QACP,UAAU,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,CAAE,cAAc,KAAK,CAAA;AAAA,QACnD,QAAA,EAAQ;AAAA;AAAA;AACV,GACF,kBACA,KAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA;AAAA,QACT,YAAA,CAAa,wBAAA;AAAA,QACb,YAAA,CAAa,qBAAA;AAAA,QACb,MAAA,CAAO;AAAA,OACT;AAAA,MACA,KAAA,EAAO,aAAA;AAAA,MACP,UAAA,EAAY,EAAA;AAAA,MACZ,OAAA,EAAS,eAAA;AAAA,MACT,QAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAQ,2BAAA;AAAA,MACR,WAAA,EAAW,IAAA;AAAA,MACX,IAAA,EAAI,IAAA;AAAA,MACJ,QAAA,EAAU;AAAA,KAAA;AAAA,oBAEV,KAAA,CAAA,aAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAG,2BAAA;AAAA,QACH,YAAA,EAAc,kBAAA;AAAA,QACd,OAAA,EAAS,WAAW,MAAM;AAAA,QAAC,CAAA,GAAI,eAAA;AAAA,QAC/B,WAAA,EAAa,mBAAA;AAAA,QACb,UAAU,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAA,CAAE,cAAc,KAAK,CAAA;AAAA,QACvD,QAAA,EAAQ;AAAA;AAAA;AACV,GAEJ,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomHeader.js","sources":["../../../../../../src/components/ConfigEditor/Auth/custom-headers/CustomHeader.tsx"],"sourcesContent":["import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineFieldRow, InlineField, Input, IconButton, useTheme2, SecretInput } from '@grafana/ui';\nimport type { LocalHeader } from '../types';\nimport { useCommonStyles } from '../styles';\n\nexport type Props = {\n header: LocalHeader;\n onChange: (header: LocalHeader) => void;\n onBlur: () => void;\n onDelete: () => void;\n readOnly: boolean;\n};\n\nexport const CustomHeader = ({ header, onChange, onBlur, onDelete, readOnly }: Props) => {\n const { spacing } = useTheme2();\n const commonStyles = useCommonStyles();\n const styles = {\n container: css({\n alignItems: 'center',\n }),\n input: css({\n minWidth: '100%',\n }),\n headerNameField: css({\n width: '40%',\n marginRight: 0,\n paddingRight: spacing(1),\n }),\n headerValueField: css({\n width: '45%',\n marginRight: 0,\n }),\n removeHeaderBtn: css({\n margin: `0 0 3px 10px`,\n }),\n };\n\n return (\n <>\n <InlineFieldRow className={styles.container}>\n <InlineField\n label=\"Header\"\n labelWidth={9}\n grow\n className={styles.headerNameField}\n htmlFor={`custom-header-${header.id}-name-input`}\n disabled={readOnly}\n >\n <Input\n id={`custom-header-${header.id}-name-input`}\n placeholder=\"X-Custom-Header\"\n value={header.name}\n width={12}\n onChange={(e) => onChange({ ...header, name: e.currentTarget.value })}\n onBlur={onBlur}\n className={styles.input}\n />\n </InlineField>\n <InlineField\n label=\"Value\"\n labelWidth={9}\n grow\n className={cx(commonStyles.inlineFieldWithSecret, styles.headerValueField)}\n htmlFor={`custom-header-${header.id}-value-input`}\n disabled={readOnly}\n >\n <SecretInput\n id={`custom-header-${header.id}-value-input`}\n isConfigured={header.configured}\n placeholder=\"Header value\"\n value={header.value}\n width={12}\n onChange={(e) => onChange({ ...header, value: e.currentTarget.value })}\n onReset={readOnly ? () => {} : () => onChange({ ...header, configured: false, value: '' })}\n onBlur={onBlur}\n className={styles.input}\n />\n </InlineField>\n <IconButton\n name=\"trash-alt\"\n tooltip=\"Remove header\"\n tooltipPlacement=\"top\"\n className={styles.removeHeaderBtn}\n onClick={onDelete}\n type=\"button\"\n disabled={readOnly}\n />\n </InlineFieldRow>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"CustomHeader.js","sources":["../../../../../../src/components/ConfigEditor/Auth/custom-headers/CustomHeader.tsx"],"sourcesContent":["import React from 'react';\nimport { css, cx } from '@emotion/css';\nimport { InlineFieldRow, InlineField, Input, IconButton, useTheme2, SecretInput } from '@grafana/ui';\nimport type { LocalHeader } from '../types';\nimport { useCommonStyles } from '../styles';\n\nexport type Props = {\n header: LocalHeader;\n onChange: (header: LocalHeader) => void;\n onBlur: () => void;\n onDelete: () => void;\n readOnly: boolean;\n};\n\nexport const CustomHeader = ({ header, onChange, onBlur, onDelete, readOnly }: Props) => {\n const { spacing } = useTheme2();\n const commonStyles = useCommonStyles();\n const styles = {\n container: css({\n alignItems: 'center',\n }),\n input: css({\n minWidth: '100%',\n }),\n headerNameField: css({\n width: '40%',\n marginRight: 0,\n paddingRight: spacing(1),\n }),\n headerValueField: css({\n width: '45%',\n marginRight: 0,\n }),\n removeHeaderBtn: css({\n margin: `0 0 3px 10px`,\n }),\n };\n\n return (\n <>\n <InlineFieldRow className={styles.container}>\n <InlineField\n label=\"Header\"\n labelWidth={9}\n grow\n className={styles.headerNameField}\n htmlFor={`custom-header-${header.id}-name-input`}\n disabled={readOnly}\n >\n <Input\n id={`custom-header-${header.id}-name-input`}\n placeholder=\"X-Custom-Header\"\n value={header.name}\n width={12}\n onChange={(e) => onChange({ ...header, name: e.currentTarget.value })}\n onBlur={onBlur}\n className={styles.input}\n />\n </InlineField>\n <InlineField\n label=\"Value\"\n labelWidth={9}\n grow\n className={cx(commonStyles.inlineFieldWithSecret, styles.headerValueField)}\n htmlFor={`custom-header-${header.id}-value-input`}\n disabled={readOnly}\n >\n <SecretInput\n id={`custom-header-${header.id}-value-input`}\n isConfigured={header.configured}\n placeholder=\"Header value\"\n value={header.value}\n width={12}\n onChange={(e) => onChange({ ...header, value: e.currentTarget.value })}\n onReset={readOnly ? () => {} : () => onChange({ ...header, configured: false, value: '' })}\n onBlur={onBlur}\n className={styles.input}\n />\n </InlineField>\n <IconButton\n name=\"trash-alt\"\n tooltip=\"Remove header\"\n tooltipPlacement=\"top\"\n className={styles.removeHeaderBtn}\n onClick={onDelete}\n type=\"button\"\n disabled={readOnly}\n />\n </InlineFieldRow>\n </>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ const CustomHeaders = ({ headers: headersFromProps, onChange, readOnly }) => {
|
|
|
19
19
|
let changed = false;
|
|
20
20
|
const newHeaders = headers2.map((header) => {
|
|
21
21
|
var _a;
|
|
22
|
-
const configured = (_a = headersFromProps.find((h) => h.name === header.name)) == null ?
|
|
22
|
+
const configured = (_a = headersFromProps.find((h) => h.name === header.name)) == null ? void 0 : _a.configured;
|
|
23
23
|
if (typeof configured !== "undefined" && header.configured !== configured) {
|
|
24
24
|
changed = true;
|
|
25
25
|
return { ...header, configured };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomHeaders.js","sources":["../../../../../../src/components/ConfigEditor/Auth/custom-headers/CustomHeaders.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { css } from '@emotion/css';\nimport { Button, useTheme2 } from '@grafana/ui';\nimport { CustomHeader } from './CustomHeader';\nimport { ConfigSubSection } from '../../ConfigSection';\nimport type { Header, HeaderWithValue, LocalHeader } from '../types';\n\nexport type Props = {\n headers: Header[];\n onChange: (headers: HeaderWithValue[]) => void;\n readOnly: boolean;\n};\n\nexport const CustomHeaders = ({ headers: headersFromProps, onChange, readOnly }: Props) => {\n const { spacing } = useTheme2();\n\n const [headers, setHeaders] = useState<LocalHeader[]>(\n headersFromProps.map((header) => ({\n ...header,\n id: uniqueId(),\n value: '',\n }))\n );\n\n useEffect(() => {\n setHeaders((headers) => {\n let changed = false;\n const newHeaders = headers.map<LocalHeader>((header) => {\n const configured = headersFromProps.find((h) => h.name === header.name)?.configured;\n if (typeof configured !== 'undefined' && header.configured !== configured) {\n changed = true;\n return { ...header, configured };\n }\n return header;\n });\n\n if (changed) {\n return newHeaders;\n }\n\n return headers;\n });\n }, [headersFromProps]);\n\n const onHeaderAdd = () => {\n setHeaders([...headers, { id: uniqueId(), name: '', value: '', configured: false }]);\n };\n\n const onHeaderChange = (id: string, header: LocalHeader) => {\n setHeaders(headers.map((h) => (h.id === id ? { ...header } : h)));\n };\n\n const onHeaderDelete = (id: string) => {\n const index = headers.findIndex((h) => h.id === id);\n if (index === -1) {\n return;\n }\n const newHeaders = [...headers];\n newHeaders.splice(index, 1);\n setHeaders(newHeaders);\n onChange(\n newHeaders.map(({ name, value, configured }) => ({\n name,\n value,\n configured,\n }))\n );\n };\n\n const onBlur = () => {\n onChange(\n headers.map(({ name, value, configured }) => ({\n name,\n value,\n configured,\n }))\n );\n };\n\n const styles = {\n container: css({\n marginTop: spacing(3),\n }),\n addHeaderButton: css({\n marginTop: spacing(1.5),\n }),\n };\n\n return (\n <div className={styles.container}>\n <ConfigSubSection\n title=\"HTTP headers\"\n description=\"Pass along additional context and metadata about the request/response\"\n isCollapsible\n isInitiallyOpen={headers.length > 0}\n >\n <div>\n {headers.map((header) => (\n <CustomHeader\n key={header.id}\n header={header}\n onChange={(header) => onHeaderChange(header.id, header)}\n onDelete={() => onHeaderDelete(header.id)}\n onBlur={onBlur}\n readOnly={readOnly}\n />\n ))}\n </div>\n <div className={styles.addHeaderButton}>\n <Button icon=\"plus\" variant=\"secondary\" fill=\"outline\" onClick={onHeaderAdd} disabled={readOnly}>\n {headers.length === 0 ? 'Add header' : 'Add another header'}\n </Button>\n </div>\n </ConfigSubSection>\n </div>\n );\n};\n\nfunction uniqueId(): string {\n return Math.random().toString(16).slice(2);\n}\n"],"names":["headers","header"],"mappings":";;;;;;;AAaO,MAAM,gBAAgB,CAAC,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"CustomHeaders.js","sources":["../../../../../../src/components/ConfigEditor/Auth/custom-headers/CustomHeaders.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { css } from '@emotion/css';\nimport { Button, useTheme2 } from '@grafana/ui';\nimport { CustomHeader } from './CustomHeader';\nimport { ConfigSubSection } from '../../ConfigSection';\nimport type { Header, HeaderWithValue, LocalHeader } from '../types';\n\nexport type Props = {\n headers: Header[];\n onChange: (headers: HeaderWithValue[]) => void;\n readOnly: boolean;\n};\n\nexport const CustomHeaders = ({ headers: headersFromProps, onChange, readOnly }: Props) => {\n const { spacing } = useTheme2();\n\n const [headers, setHeaders] = useState<LocalHeader[]>(\n headersFromProps.map((header) => ({\n ...header,\n id: uniqueId(),\n value: '',\n }))\n );\n\n useEffect(() => {\n setHeaders((headers) => {\n let changed = false;\n const newHeaders = headers.map<LocalHeader>((header) => {\n const configured = headersFromProps.find((h) => h.name === header.name)?.configured;\n if (typeof configured !== 'undefined' && header.configured !== configured) {\n changed = true;\n return { ...header, configured };\n }\n return header;\n });\n\n if (changed) {\n return newHeaders;\n }\n\n return headers;\n });\n }, [headersFromProps]);\n\n const onHeaderAdd = () => {\n setHeaders([...headers, { id: uniqueId(), name: '', value: '', configured: false }]);\n };\n\n const onHeaderChange = (id: string, header: LocalHeader) => {\n setHeaders(headers.map((h) => (h.id === id ? { ...header } : h)));\n };\n\n const onHeaderDelete = (id: string) => {\n const index = headers.findIndex((h) => h.id === id);\n if (index === -1) {\n return;\n }\n const newHeaders = [...headers];\n newHeaders.splice(index, 1);\n setHeaders(newHeaders);\n onChange(\n newHeaders.map(({ name, value, configured }) => ({\n name,\n value,\n configured,\n }))\n );\n };\n\n const onBlur = () => {\n onChange(\n headers.map(({ name, value, configured }) => ({\n name,\n value,\n configured,\n }))\n );\n };\n\n const styles = {\n container: css({\n marginTop: spacing(3),\n }),\n addHeaderButton: css({\n marginTop: spacing(1.5),\n }),\n };\n\n return (\n <div className={styles.container}>\n <ConfigSubSection\n title=\"HTTP headers\"\n description=\"Pass along additional context and metadata about the request/response\"\n isCollapsible\n isInitiallyOpen={headers.length > 0}\n >\n <div>\n {headers.map((header) => (\n <CustomHeader\n key={header.id}\n header={header}\n onChange={(header) => onHeaderChange(header.id, header)}\n onDelete={() => onHeaderDelete(header.id)}\n onBlur={onBlur}\n readOnly={readOnly}\n />\n ))}\n </div>\n <div className={styles.addHeaderButton}>\n <Button icon=\"plus\" variant=\"secondary\" fill=\"outline\" onClick={onHeaderAdd} disabled={readOnly}>\n {headers.length === 0 ? 'Add header' : 'Add another header'}\n </Button>\n </div>\n </ConfigSubSection>\n </div>\n );\n};\n\nfunction uniqueId(): string {\n return Math.random().toString(16).slice(2);\n}\n"],"names":["headers","header"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sources":["../../../../../src/components/ConfigEditor/Auth/styles.ts"],"sourcesContent":["import { css } from '@emotion/css';\n\nexport const useCommonStyles = () => {\n return {\n inlineFieldNoMarginRight: css({\n marginRight: 0,\n }),\n // This is dirty hack to make configured secret input grow\n inlineFieldWithSecret: css({\n '[class$=\"layoutChildrenWrapper\"]:first-child': {\n flexGrow: 1,\n },\n }),\n };\n};\n"],"names":[],"mappings":";;AAEO,MAAM,kBAAkB,MAAM;AACnC,
|
|
1
|
+
{"version":3,"file":"styles.js","sources":["../../../../../src/components/ConfigEditor/Auth/styles.ts"],"sourcesContent":["import { css } from '@emotion/css';\n\nexport const useCommonStyles = () => {\n return {\n inlineFieldNoMarginRight: css({\n marginRight: 0,\n }),\n // This is dirty hack to make configured secret input grow\n inlineFieldWithSecret: css({\n '[class$=\"layoutChildrenWrapper\"]:first-child': {\n flexGrow: 1,\n },\n }),\n };\n};\n"],"names":[],"mappings":";;AAEO,MAAM,kBAAkB,MAAM;AACnC,EAAA,OAAO;AAAA,IACL,0BAA0B,GAAA,CAAI;AAAA,MAC5B,WAAA,EAAa;AAAA,KACd,CAAA;AAAA;AAAA,IAED,uBAAuB,GAAA,CAAI;AAAA,MACzB,8CAAA,EAAgD;AAAA,QAC9C,QAAA,EAAU;AAAA;AACZ,KACD;AAAA,GACH;AACF;;;;"}
|
|
@@ -29,7 +29,7 @@ const SelfSignedCertificate = ({
|
|
|
29
29
|
{
|
|
30
30
|
label: "CA Certificate",
|
|
31
31
|
labelWidth: 24,
|
|
32
|
-
tooltip: (_a = tooltips == null ?
|
|
32
|
+
tooltip: (_a = tooltips == null ? void 0 : tooltips.certificateLabel) != null ? _a : "Your self-signed certificate",
|
|
33
33
|
required: true,
|
|
34
34
|
htmlFor: "self-signed-certificate-input",
|
|
35
35
|
interactive: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelfSignedCertificate.js","sources":["../../../../../../src/components/ConfigEditor/Auth/tls/SelfSignedCertificate.tsx"],"sourcesContent":["import React from 'react';\nimport { cx } from '@emotion/css';\nimport { InlineField, SecretTextArea } from '@grafana/ui';\nimport { TLSSettingsSection } from './TLSSettingsSection';\nimport { useCommonStyles } from '../styles';\n\nexport type Props = {\n enabled: boolean;\n onToggle: (enabled: boolean) => void;\n certificateConfigured: boolean;\n onCertificateChange: (certificate: string) => void;\n onCertificateReset: () => void;\n tooltips?: {\n certificateLabel?: string;\n };\n readOnly: boolean;\n};\n\nexport const SelfSignedCertificate = ({\n enabled,\n certificateConfigured,\n onToggle,\n onCertificateChange,\n onCertificateReset,\n tooltips,\n readOnly,\n}: Props) => {\n const commonStyles = useCommonStyles();\n\n return (\n <TLSSettingsSection\n enabled={enabled}\n label=\"Add self-signed certificate\"\n tooltipText=\"Add your own Certificate Authority (CA) certificate on top of one generated by the certificate authorities for additional security measures\"\n onToggle={(newEnabled) => onToggle(newEnabled)}\n readOnly={readOnly}\n >\n <InlineField\n label=\"CA Certificate\"\n labelWidth={24}\n tooltip={tooltips?.certificateLabel ?? 'Your self-signed certificate'}\n required\n htmlFor=\"self-signed-certificate-input\"\n interactive\n grow\n className={cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret)}\n disabled={readOnly}\n >\n <SecretTextArea\n id=\"self-signed-certificate-input\"\n isConfigured={certificateConfigured}\n onChange={(e) => onCertificateChange(e.currentTarget.value)}\n onReset={readOnly ? () => {} : onCertificateReset}\n placeholder=\"Begins with --- BEGIN CERTIFICATE ---\"\n rows={6}\n required\n />\n </InlineField>\n </TLSSettingsSection>\n );\n};\n"],"names":[],"mappings":";;;;;;AAkBO,MAAM,wBAAwB,CAAC;AAAA,EACpC,OAAA;AAAA,EACA,qBAAA;AAAA,EACA,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,
|
|
1
|
+
{"version":3,"file":"SelfSignedCertificate.js","sources":["../../../../../../src/components/ConfigEditor/Auth/tls/SelfSignedCertificate.tsx"],"sourcesContent":["import React from 'react';\nimport { cx } from '@emotion/css';\nimport { InlineField, SecretTextArea } from '@grafana/ui';\nimport { TLSSettingsSection } from './TLSSettingsSection';\nimport { useCommonStyles } from '../styles';\n\nexport type Props = {\n enabled: boolean;\n onToggle: (enabled: boolean) => void;\n certificateConfigured: boolean;\n onCertificateChange: (certificate: string) => void;\n onCertificateReset: () => void;\n tooltips?: {\n certificateLabel?: string;\n };\n readOnly: boolean;\n};\n\nexport const SelfSignedCertificate = ({\n enabled,\n certificateConfigured,\n onToggle,\n onCertificateChange,\n onCertificateReset,\n tooltips,\n readOnly,\n}: Props) => {\n const commonStyles = useCommonStyles();\n\n return (\n <TLSSettingsSection\n enabled={enabled}\n label=\"Add self-signed certificate\"\n tooltipText=\"Add your own Certificate Authority (CA) certificate on top of one generated by the certificate authorities for additional security measures\"\n onToggle={(newEnabled) => onToggle(newEnabled)}\n readOnly={readOnly}\n >\n <InlineField\n label=\"CA Certificate\"\n labelWidth={24}\n tooltip={tooltips?.certificateLabel ?? 'Your self-signed certificate'}\n required\n htmlFor=\"self-signed-certificate-input\"\n interactive\n grow\n className={cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret)}\n disabled={readOnly}\n >\n <SecretTextArea\n id=\"self-signed-certificate-input\"\n isConfigured={certificateConfigured}\n onChange={(e) => onCertificateChange(e.currentTarget.value)}\n onReset={readOnly ? () => {} : onCertificateReset}\n placeholder=\"Begins with --- BEGIN CERTIFICATE ---\"\n rows={6}\n required\n />\n </InlineField>\n </TLSSettingsSection>\n );\n};\n"],"names":[],"mappings":";;;;;;AAkBO,MAAM,wBAAwB,CAAC;AAAA,EACpC,OAAA;AAAA,EACA,qBAAA;AAAA,EACA,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,kBAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAAa;AA1Bb,EAAA,IAAA,EAAA;AA2BE,EAAA,MAAM,eAAe,eAAA,EAAgB;AAErC,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,KAAA,EAAM,6BAAA;AAAA,MACN,WAAA,EAAY,6IAAA;AAAA,MACZ,QAAA,EAAU,CAAC,UAAA,KAAe,QAAA,CAAS,UAAU,CAAA;AAAA,MAC7C;AAAA,KAAA;AAAA,oBAEA,KAAA,CAAA,aAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAM,gBAAA;AAAA,QACN,UAAA,EAAY,EAAA;AAAA,QACZ,OAAA,EAAA,CAAS,EAAA,GAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,gBAAA,KAAV,IAAA,GAAA,EAAA,GAA8B,8BAAA;AAAA,QACvC,QAAA,EAAQ,IAAA;AAAA,QACR,OAAA,EAAQ,+BAAA;AAAA,QACR,WAAA,EAAW,IAAA;AAAA,QACX,IAAA,EAAI,IAAA;AAAA,QACJ,SAAA,EAAW,EAAA,CAAG,YAAA,CAAa,wBAAA,EAA0B,aAAa,qBAAqB,CAAA;AAAA,QACvF,QAAA,EAAU;AAAA,OAAA;AAAA,sBAEV,KAAA,CAAA,aAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAG,+BAAA;AAAA,UACH,YAAA,EAAc,qBAAA;AAAA,UACd,UAAU,CAAC,CAAA,KAAM,mBAAA,CAAoB,CAAA,CAAE,cAAc,KAAK,CAAA;AAAA,UAC1D,OAAA,EAAS,WAAW,MAAM;AAAA,UAAC,CAAA,GAAI,kBAAA;AAAA,UAC/B,WAAA,EAAY,uCAAA;AAAA,UACZ,IAAA,EAAM,CAAA;AAAA,UACN,QAAA,EAAQ;AAAA;AAAA;AACV;AACF,GACF;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkipTLSVerification.js","sources":["../../../../../../src/components/ConfigEditor/Auth/tls/SkipTLSVerification.tsx"],"sourcesContent":["import React from 'react';\nimport { TLSSettingsSection } from './TLSSettingsSection';\n\nexport type Props = {\n enabled: boolean;\n onToggle: (enabled: boolean) => void;\n readOnly: boolean;\n};\n\nexport const SkipTLSVerification = ({ enabled, onToggle, readOnly }: Props) => {\n return (\n <TLSSettingsSection\n enabled={enabled}\n label=\"Skip TLS certificate validation\"\n tooltipText=\"Skipping TLS certificate validation is not recommended unless absolutely necessary or for testing\"\n onToggle={(newEnabled) => onToggle(newEnabled)}\n readOnly={readOnly}\n />\n );\n};\n"],"names":[],"mappings":";;;AASO,MAAM,sBAAsB,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"SkipTLSVerification.js","sources":["../../../../../../src/components/ConfigEditor/Auth/tls/SkipTLSVerification.tsx"],"sourcesContent":["import React from 'react';\nimport { TLSSettingsSection } from './TLSSettingsSection';\n\nexport type Props = {\n enabled: boolean;\n onToggle: (enabled: boolean) => void;\n readOnly: boolean;\n};\n\nexport const SkipTLSVerification = ({ enabled, onToggle, readOnly }: Props) => {\n return (\n <TLSSettingsSection\n enabled={enabled}\n label=\"Skip TLS certificate validation\"\n tooltipText=\"Skipping TLS certificate validation is not recommended unless absolutely necessary or for testing\"\n onToggle={(newEnabled) => onToggle(newEnabled)}\n readOnly={readOnly}\n />\n );\n};\n"],"names":[],"mappings":";;;AASO,MAAM,sBAAsB,CAAC,EAAE,OAAA,EAAS,QAAA,EAAU,UAAS,KAAa;AAC7E,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,KAAA,EAAM,iCAAA;AAAA,MACN,WAAA,EAAY,mGAAA;AAAA,MACZ,QAAA,EAAU,CAAC,UAAA,KAAe,QAAA,CAAS,UAAU,CAAA;AAAA,MAC7C;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -34,7 +34,7 @@ const TLSClientAuth = ({
|
|
|
34
34
|
{
|
|
35
35
|
label: "ServerName",
|
|
36
36
|
labelWidth: 24,
|
|
37
|
-
tooltip: (_a = tooltips == null ?
|
|
37
|
+
tooltip: (_a = tooltips == null ? void 0 : tooltips.serverNameLabel) != null ? _a : "A Servername is used to verify the hostname on the returned certificate",
|
|
38
38
|
required: true,
|
|
39
39
|
htmlFor: "client-auth-servername-input",
|
|
40
40
|
interactive: true,
|
|
@@ -58,7 +58,7 @@ const TLSClientAuth = ({
|
|
|
58
58
|
{
|
|
59
59
|
label: "Client Certificate",
|
|
60
60
|
labelWidth: 24,
|
|
61
|
-
tooltip: (_b = tooltips == null ?
|
|
61
|
+
tooltip: (_b = tooltips == null ? void 0 : tooltips.certificateLabel) != null ? _b : "The client certificate can be generated from a Certificate Authority or be self-signed",
|
|
62
62
|
required: true,
|
|
63
63
|
htmlFor: "client-auth-client-certificate-input",
|
|
64
64
|
interactive: true,
|
|
@@ -85,7 +85,7 @@ const TLSClientAuth = ({
|
|
|
85
85
|
{
|
|
86
86
|
label: "Client Key",
|
|
87
87
|
labelWidth: 24,
|
|
88
|
-
tooltip: (_c = tooltips == null ?
|
|
88
|
+
tooltip: (_c = tooltips == null ? void 0 : tooltips.keyLabel) != null ? _c : "The client key can be generated from a Certificate Authority or be self-signed",
|
|
89
89
|
required: true,
|
|
90
90
|
htmlFor: "client-auth-client-key-input",
|
|
91
91
|
interactive: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TLSClientAuth.js","sources":["../../../../../../src/components/ConfigEditor/Auth/tls/TLSClientAuth.tsx"],"sourcesContent":["import React from 'react';\nimport { cx } from '@emotion/css';\nimport { InlineField, Input, SecretTextArea } from '@grafana/ui';\nimport { TLSSettingsSection } from './TLSSettingsSection';\nimport { useCommonStyles } from '../styles';\n\nexport type Props = {\n enabled: boolean;\n onToggle: (enabled: boolean) => void;\n serverName: string;\n clientCertificateConfigured: boolean;\n clientKeyConfigured: boolean;\n onServerNameChange: (serverName: string) => void;\n onClientCertificateChange: (clientCertificate: string) => void;\n onClientKeyChange: (clientKey: string) => void;\n onClientCertificateReset: () => void;\n onClientKeyReset: () => void;\n tooltips?: {\n serverNameLabel?: string;\n certificateLabel?: string;\n keyLabel?: string;\n };\n readOnly: boolean;\n};\n\nexport const TLSClientAuth = ({\n enabled,\n serverName,\n clientCertificateConfigured,\n clientKeyConfigured,\n onToggle,\n onServerNameChange,\n onClientCertificateChange,\n onClientKeyChange,\n onClientCertificateReset,\n onClientKeyReset,\n tooltips,\n readOnly,\n}: Props) => {\n const commonStyles = useCommonStyles();\n\n return (\n <TLSSettingsSection\n enabled={enabled}\n label=\"TLS Client Authentication\"\n tooltipText=\"Validate using TLS client authentication, in which the server authenticates the client\"\n onToggle={(newEnabled) => onToggle(newEnabled)}\n readOnly={readOnly}\n >\n <InlineField\n label=\"ServerName\"\n labelWidth={24}\n tooltip={tooltips?.serverNameLabel ?? 'A Servername is used to verify the hostname on the returned certificate'}\n required\n htmlFor=\"client-auth-servername-input\"\n interactive\n grow\n className={commonStyles.inlineFieldNoMarginRight}\n disabled={readOnly}\n >\n <Input\n id=\"client-auth-servername-input\"\n placeholder=\"domain.example.com\"\n value={serverName}\n onChange={(e) => onServerNameChange(e.currentTarget.value)}\n required\n />\n </InlineField>\n <InlineField\n label=\"Client Certificate\"\n labelWidth={24}\n tooltip={\n tooltips?.certificateLabel ??\n 'The client certificate can be generated from a Certificate Authority or be self-signed'\n }\n required\n htmlFor=\"client-auth-client-certificate-input\"\n interactive\n grow\n className={cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret)}\n disabled={readOnly}\n >\n <SecretTextArea\n id=\"client-auth-client-certificate-input\"\n isConfigured={clientCertificateConfigured}\n onChange={(e) => onClientCertificateChange(e.currentTarget.value)}\n onReset={readOnly ? () => {} : onClientCertificateReset}\n placeholder=\"Begins with --- BEGIN CERTIFICATE ---\"\n rows={6}\n required\n />\n </InlineField>\n <InlineField\n label=\"Client Key\"\n labelWidth={24}\n tooltip={tooltips?.keyLabel ?? 'The client key can be generated from a Certificate Authority or be self-signed'}\n required\n htmlFor=\"client-auth-client-key-input\"\n interactive\n grow\n className={cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret)}\n disabled={readOnly}\n >\n <SecretTextArea\n id=\"client-auth-client-key-input\"\n isConfigured={clientKeyConfigured}\n onChange={(e) => onClientKeyChange(e.currentTarget.value)}\n onReset={readOnly ? () => {} : onClientKeyReset}\n placeholder={`Begins with --- RSA PRIVATE KEY CERTIFICATE ---`}\n rows={6}\n required\n />\n </InlineField>\n </TLSSettingsSection>\n );\n};\n"],"names":[],"mappings":";;;;;;AAyBO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,OAAA;AAAA,EACA,UAAA;AAAA,EACA,2BAAA;AAAA,EACA,mBAAA;AAAA,EACA,QAAA;AAAA,EACA,kBAAA;AAAA,EACA,yBAAA;AAAA,EACA,iBAAA;AAAA,EACA,wBAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,
|
|
1
|
+
{"version":3,"file":"TLSClientAuth.js","sources":["../../../../../../src/components/ConfigEditor/Auth/tls/TLSClientAuth.tsx"],"sourcesContent":["import React from 'react';\nimport { cx } from '@emotion/css';\nimport { InlineField, Input, SecretTextArea } from '@grafana/ui';\nimport { TLSSettingsSection } from './TLSSettingsSection';\nimport { useCommonStyles } from '../styles';\n\nexport type Props = {\n enabled: boolean;\n onToggle: (enabled: boolean) => void;\n serverName: string;\n clientCertificateConfigured: boolean;\n clientKeyConfigured: boolean;\n onServerNameChange: (serverName: string) => void;\n onClientCertificateChange: (clientCertificate: string) => void;\n onClientKeyChange: (clientKey: string) => void;\n onClientCertificateReset: () => void;\n onClientKeyReset: () => void;\n tooltips?: {\n serverNameLabel?: string;\n certificateLabel?: string;\n keyLabel?: string;\n };\n readOnly: boolean;\n};\n\nexport const TLSClientAuth = ({\n enabled,\n serverName,\n clientCertificateConfigured,\n clientKeyConfigured,\n onToggle,\n onServerNameChange,\n onClientCertificateChange,\n onClientKeyChange,\n onClientCertificateReset,\n onClientKeyReset,\n tooltips,\n readOnly,\n}: Props) => {\n const commonStyles = useCommonStyles();\n\n return (\n <TLSSettingsSection\n enabled={enabled}\n label=\"TLS Client Authentication\"\n tooltipText=\"Validate using TLS client authentication, in which the server authenticates the client\"\n onToggle={(newEnabled) => onToggle(newEnabled)}\n readOnly={readOnly}\n >\n <InlineField\n label=\"ServerName\"\n labelWidth={24}\n tooltip={tooltips?.serverNameLabel ?? 'A Servername is used to verify the hostname on the returned certificate'}\n required\n htmlFor=\"client-auth-servername-input\"\n interactive\n grow\n className={commonStyles.inlineFieldNoMarginRight}\n disabled={readOnly}\n >\n <Input\n id=\"client-auth-servername-input\"\n placeholder=\"domain.example.com\"\n value={serverName}\n onChange={(e) => onServerNameChange(e.currentTarget.value)}\n required\n />\n </InlineField>\n <InlineField\n label=\"Client Certificate\"\n labelWidth={24}\n tooltip={\n tooltips?.certificateLabel ??\n 'The client certificate can be generated from a Certificate Authority or be self-signed'\n }\n required\n htmlFor=\"client-auth-client-certificate-input\"\n interactive\n grow\n className={cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret)}\n disabled={readOnly}\n >\n <SecretTextArea\n id=\"client-auth-client-certificate-input\"\n isConfigured={clientCertificateConfigured}\n onChange={(e) => onClientCertificateChange(e.currentTarget.value)}\n onReset={readOnly ? () => {} : onClientCertificateReset}\n placeholder=\"Begins with --- BEGIN CERTIFICATE ---\"\n rows={6}\n required\n />\n </InlineField>\n <InlineField\n label=\"Client Key\"\n labelWidth={24}\n tooltip={tooltips?.keyLabel ?? 'The client key can be generated from a Certificate Authority or be self-signed'}\n required\n htmlFor=\"client-auth-client-key-input\"\n interactive\n grow\n className={cx(commonStyles.inlineFieldNoMarginRight, commonStyles.inlineFieldWithSecret)}\n disabled={readOnly}\n >\n <SecretTextArea\n id=\"client-auth-client-key-input\"\n isConfigured={clientKeyConfigured}\n onChange={(e) => onClientKeyChange(e.currentTarget.value)}\n onReset={readOnly ? () => {} : onClientKeyReset}\n placeholder={`Begins with --- RSA PRIVATE KEY CERTIFICATE ---`}\n rows={6}\n required\n />\n </InlineField>\n </TLSSettingsSection>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TLSSettings.js","sources":["../../../../../../src/components/ConfigEditor/Auth/tls/TLSSettings.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2 } from '@grafana/ui';\nimport { SelfSignedCertificate, type Props as SelfSignedCertificateProps } from './SelfSignedCertificate';\nimport { TLSClientAuth as TLSClientAuthComponent, type Props as TLSClientAuthProps } from './TLSClientAuth';\nimport { SkipTLSVerification, type Props as SkipTLSVerificationProps } from './SkipTLSVerification';\nimport { ConfigSubSection } from '../../ConfigSection';\n\nexport type Props = {\n selfSignedCertificate: Omit<SelfSignedCertificateProps, 'readOnly'>;\n TLSClientAuth: Omit<TLSClientAuthProps, 'readOnly'>;\n skipTLSVerification: Omit<SkipTLSVerificationProps, 'readOnly'>;\n readOnly: boolean;\n};\n\nexport const TLSSettings = ({ selfSignedCertificate, TLSClientAuth, skipTLSVerification, readOnly }: Props) => {\n const { spacing } = useTheme2();\n\n const styles = {\n container: css({\n marginTop: spacing(3),\n }),\n };\n\n return (\n <ConfigSubSection\n className={styles.container}\n title=\"TLS settings\"\n description=\"Additional security measures that can be applied on top of authentication\"\n >\n <SelfSignedCertificate {...selfSignedCertificate} readOnly={readOnly} />\n <TLSClientAuthComponent {...TLSClientAuth} readOnly={readOnly} />\n <SkipTLSVerification {...skipTLSVerification} readOnly={readOnly} />\n </ConfigSubSection>\n );\n};\n"],"names":["TLSClientAuth","TLSClientAuthComponent"],"mappings":";;;;;;;;;AAeO,MAAM,cAAc,CAAC,EAAE,sCAAuBA,
|
|
1
|
+
{"version":3,"file":"TLSSettings.js","sources":["../../../../../../src/components/ConfigEditor/Auth/tls/TLSSettings.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2 } from '@grafana/ui';\nimport { SelfSignedCertificate, type Props as SelfSignedCertificateProps } from './SelfSignedCertificate';\nimport { TLSClientAuth as TLSClientAuthComponent, type Props as TLSClientAuthProps } from './TLSClientAuth';\nimport { SkipTLSVerification, type Props as SkipTLSVerificationProps } from './SkipTLSVerification';\nimport { ConfigSubSection } from '../../ConfigSection';\n\nexport type Props = {\n selfSignedCertificate: Omit<SelfSignedCertificateProps, 'readOnly'>;\n TLSClientAuth: Omit<TLSClientAuthProps, 'readOnly'>;\n skipTLSVerification: Omit<SkipTLSVerificationProps, 'readOnly'>;\n readOnly: boolean;\n};\n\nexport const TLSSettings = ({ selfSignedCertificate, TLSClientAuth, skipTLSVerification, readOnly }: Props) => {\n const { spacing } = useTheme2();\n\n const styles = {\n container: css({\n marginTop: spacing(3),\n }),\n };\n\n return (\n <ConfigSubSection\n className={styles.container}\n title=\"TLS settings\"\n description=\"Additional security measures that can be applied on top of authentication\"\n >\n <SelfSignedCertificate {...selfSignedCertificate} readOnly={readOnly} />\n <TLSClientAuthComponent {...TLSClientAuth} readOnly={readOnly} />\n <SkipTLSVerification {...skipTLSVerification} readOnly={readOnly} />\n </ConfigSubSection>\n );\n};\n"],"names":["TLSClientAuth","TLSClientAuthComponent"],"mappings":";;;;;;;;;AAeO,MAAM,cAAc,CAAC,EAAE,sCAAuBA,eAAA,EAAe,mBAAA,EAAqB,UAAS,KAAa;AAC7G,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,SAAA,EAAU;AAE9B,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,WAAW,GAAA,CAAI;AAAA,MACb,SAAA,EAAW,QAAQ,CAAC;AAAA,KACrB;AAAA,GACH;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,KAAA,EAAM,cAAA;AAAA,MACN,WAAA,EAAY;AAAA,KAAA;AAAA,oBAEZ,KAAA,CAAA,aAAA,CAAC,qBAAA,EAAA,EAAuB,GAAG,qBAAA,EAAuB,QAAA,EAAoB,CAAA;AAAA,oBACtE,KAAA,CAAA,aAAA,CAACC,aAAA,EAAA,EAAwB,GAAGD,eAAA,EAAe,QAAA,EAAoB,CAAA;AAAA,oBAC/D,KAAA,CAAA,aAAA,CAAC,mBAAA,EAAA,EAAqB,GAAG,mBAAA,EAAqB,QAAA,EAAoB;AAAA,GACpE;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TLSSettingsSection.js","sources":["../../../../../../src/components/ConfigEditor/Auth/tls/TLSSettingsSection.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from '@emotion/css';\nimport { Checkbox, Tooltip, Icon, useTheme2 } from '@grafana/ui';\n\nexport type Props = {\n enabled: boolean;\n label: string;\n tooltipText: string;\n onToggle: (enabled: boolean) => void;\n readOnly: boolean;\n};\n\nexport const TLSSettingsSection = ({\n children,\n enabled,\n label,\n tooltipText,\n onToggle,\n readOnly,\n}: React.PropsWithChildren<Props>) => {\n const { colors, spacing } = useTheme2();\n const styles = {\n container: css({\n marginTop: 3,\n }),\n checkboxContainer: css({\n display: 'flex',\n alignItems: 'center',\n }),\n infoIcon: css({\n marginTop: -2,\n marginLeft: 5,\n color: colors.text.secondary,\n }),\n content: css({\n margin: spacing(1, 0, 2, 3),\n }),\n };\n\n return (\n <div className={styles.container}>\n <div className={styles.checkboxContainer}>\n <Checkbox value={enabled} label={label} onChange={() => onToggle(!enabled)} disabled={readOnly} />\n <Tooltip placement=\"top\" content={tooltipText} interactive>\n <Icon name=\"info-circle\" className={styles.infoIcon} size=\"sm\" />\n </Tooltip>\n </div>\n {enabled && children && <div className={styles.content}>{children}</div>}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;AAYO,MAAM,qBAAqB,CAAC;AAAA,EACjC,QAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,
|
|
1
|
+
{"version":3,"file":"TLSSettingsSection.js","sources":["../../../../../../src/components/ConfigEditor/Auth/tls/TLSSettingsSection.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from '@emotion/css';\nimport { Checkbox, Tooltip, Icon, useTheme2 } from '@grafana/ui';\n\nexport type Props = {\n enabled: boolean;\n label: string;\n tooltipText: string;\n onToggle: (enabled: boolean) => void;\n readOnly: boolean;\n};\n\nexport const TLSSettingsSection = ({\n children,\n enabled,\n label,\n tooltipText,\n onToggle,\n readOnly,\n}: React.PropsWithChildren<Props>) => {\n const { colors, spacing } = useTheme2();\n const styles = {\n container: css({\n marginTop: 3,\n }),\n checkboxContainer: css({\n display: 'flex',\n alignItems: 'center',\n }),\n infoIcon: css({\n marginTop: -2,\n marginLeft: 5,\n color: colors.text.secondary,\n }),\n content: css({\n margin: spacing(1, 0, 2, 3),\n }),\n };\n\n return (\n <div className={styles.container}>\n <div className={styles.checkboxContainer}>\n <Checkbox value={enabled} label={label} onChange={() => onToggle(!enabled)} disabled={readOnly} />\n <Tooltip placement=\"top\" content={tooltipText} interactive>\n <Icon name=\"info-circle\" className={styles.infoIcon} size=\"sm\" />\n </Tooltip>\n </div>\n {enabled && children && <div className={styles.content}>{children}</div>}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;AAYO,MAAM,qBAAqB,CAAC;AAAA,EACjC,QAAA;AAAA,EACA,OAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAAsC;AACpC,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAQ,GAAI,SAAA,EAAU;AACtC,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,WAAW,GAAA,CAAI;AAAA,MACb,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,IACD,mBAAmB,GAAA,CAAI;AAAA,MACrB,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,IACD,UAAU,GAAA,CAAI;AAAA,MACZ,SAAA,EAAW,EAAA;AAAA,MACX,UAAA,EAAY,CAAA;AAAA,MACZ,KAAA,EAAO,OAAO,IAAA,CAAK;AAAA,KACpB,CAAA;AAAA,IACD,SAAS,GAAA,CAAI;AAAA,MACX,MAAA,EAAQ,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC;AAAA,KAC3B;AAAA,GACH;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,SAAA,EAAA,sCACpB,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,iBAAA,EAAA,kBACrB,KAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAS,OAAO,OAAA,EAAS,KAAA,EAAc,QAAA,EAAU,MAAM,QAAA,CAAS,CAAC,OAAO,CAAA,EAAG,QAAA,EAAU,QAAA,EAAU,CAAA,kBAChG,KAAA,CAAA,aAAA,CAAC,OAAA,EAAA,EAAQ,WAAU,KAAA,EAAM,OAAA,EAAS,WAAA,EAAa,WAAA,EAAW,IAAA,EAAA,kBACxD,KAAA,CAAA,aAAA,CAAC,QAAK,IAAA,EAAK,aAAA,EAAc,SAAA,EAAW,MAAA,CAAO,QAAA,EAAU,IAAA,EAAK,MAAK,CACjE,CACF,CAAA,EACC,OAAA,IAAW,QAAA,oBAAY,KAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAW,MAAA,CAAO,OAAA,EAAA,EAAU,QAAS,CACpE,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../../../../../src/components/ConfigEditor/Auth/types.ts"],"sourcesContent":["import { type ReactElement } from 'react';\n\nexport enum AuthMethod {\n NoAuth = 'NoAuth',\n BasicAuth = 'BasicAuth',\n OAuthForward = 'OAuthForward',\n CrossSiteCredentials = 'CrossSiteCredentials',\n}\n\nexport interface AuthMethodSelectOption {\n label?: string;\n description?: string;\n}\n\nexport type CustomMethodId = `custom-${string}`;\n\nexport type CustomMethod = {\n id: CustomMethodId;\n label: string;\n description: string;\n component: ReactElement;\n};\n\nexport type Header = {\n name: string;\n configured: boolean;\n};\n\nexport type HeaderWithValue = Header & { value: string };\n\nexport type LocalHeader = HeaderWithValue & { id: string };\n"],"names":["AuthMethod"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../../../src/components/ConfigEditor/Auth/types.ts"],"sourcesContent":["import { type ReactElement } from 'react';\n\nexport enum AuthMethod {\n NoAuth = 'NoAuth',\n BasicAuth = 'BasicAuth',\n OAuthForward = 'OAuthForward',\n CrossSiteCredentials = 'CrossSiteCredentials',\n}\n\nexport interface AuthMethodSelectOption {\n label?: string;\n description?: string;\n}\n\nexport type CustomMethodId = `custom-${string}`;\n\nexport type CustomMethod = {\n id: CustomMethodId;\n label: string;\n description: string;\n component: ReactElement;\n};\n\nexport type Header = {\n name: string;\n configured: boolean;\n};\n\nexport type HeaderWithValue = Header & { value: string };\n\nexport type LocalHeader = HeaderWithValue & { id: string };\n"],"names":["AuthMethod"],"mappings":";;AAEO,IAAK,UAAA,qBAAAA,WAAAA,KAAL;AACL,EAAAA,YAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,YAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,YAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,YAAA,sBAAA,CAAA,GAAuB,sBAAA;AAJb,EAAA,OAAAA,WAAAA;AAAA,CAAA,EAAA,UAAA,IAAA,EAAA;;;;"}
|