@grafana/aws-sdk 0.2.0 → 0.3.0

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.
@@ -2,10 +2,11 @@ import React, { useState, useMemo, useEffect } from 'react';
2
2
  import { useStyles2, FieldSet, InlineField, Select, Input, ButtonGroup, ToolbarButton, Collapse } from '@grafana/ui';
3
3
  import { onUpdateDatasourceJsonDataOptionSelect, onUpdateDatasourceJsonDataOption, onUpdateDatasourceResetOption, onUpdateDatasourceSecureJsonDataOption } from '@grafana/data';
4
4
  import { config } from '@grafana/runtime';
5
- import { standardRegions } from './regions.js';
6
- import { AwsAuthType } from './types.js';
7
- import { awsAuthProviderOptions } from './providers.js';
8
- import { css } from '../node_modules/@emotion/css/dist/emotion-css.esm.js';
5
+ import { standardRegions } from '../regions.js';
6
+ import { AwsAuthType } from '../types.js';
7
+ import { awsAuthProviderOptions } from '../providers.js';
8
+ import { css } from '../../node_modules/@emotion/css/dist/emotion-css.esm.js';
9
+ import { NewConnectionConfig } from './NewConnectionConfig.js';
9
10
 
10
11
  var __defProp = Object.defineProperty;
11
12
  var __defProps = Object.defineProperties;
@@ -66,7 +67,18 @@ const ConnectionConfig = (props) => {
66
67
  }, [loadRegions]);
67
68
  const inputWidth = inExperimentalAuthComponent ? "width-20" : "width-30";
68
69
  const styles = useStyles2(getStyles);
69
- return /* @__PURE__ */ React.createElement(FieldSet, { label: skipHeader ? "" : "Connection Details", "data-testid": "connection-config" }, /* @__PURE__ */ React.createElement(
70
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, props.newFormStylingEnabled ? /* @__PURE__ */ React.createElement(
71
+ NewConnectionConfig,
72
+ __spreadValues({
73
+ currentProvider,
74
+ awsAllowedAuthProviders,
75
+ isARNInstructionsOpen,
76
+ setIsARNInstructionsOpen,
77
+ awsAssumeRoleEnabled,
78
+ regions,
79
+ assumeRoleInstructionsStyle: styles.assumeRoleInstructions
80
+ }, props)
81
+ ) : /* @__PURE__ */ React.createElement(FieldSet, { label: skipHeader ? "" : "Connection Details", "data-testid": "connection-config" }, /* @__PURE__ */ React.createElement(
70
82
  InlineField,
71
83
  {
72
84
  label: "Authentication Provider",
@@ -144,7 +156,7 @@ const ConnectionConfig = (props) => {
144
156
  isOpen: isARNInstructionsOpen,
145
157
  onToggle: () => setIsARNInstructionsOpen(!isARNInstructionsOpen)
146
158
  },
147
- /* @__PURE__ */ React.createElement("ol", null, /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "1. Create a new IAM role in the AWS console, and select ", /* @__PURE__ */ React.createElement("code", null, "Another AWS account"), " as the", " ", /* @__PURE__ */ React.createElement("code", null, "Trusted entity"), ".")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "2. Enter the account ID of the Grafana account that has permission to assume this role:", /* @__PURE__ */ React.createElement("code", null, " 008923505280 "), " and check the ", /* @__PURE__ */ React.createElement("code", null, "Require external ID"), " box.")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "3. Enter the following external ID:", " ", /* @__PURE__ */ React.createElement("code", null, props.externalId || "External Id is currently unavailable"), " and click ", /* @__PURE__ */ React.createElement("code", null, "Next"), ".")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "4. Add any required permissions you would like Grafana to be able to access on your behalf. For more details on our permissions please", " ", /* @__PURE__ */ React.createElement(
159
+ /* @__PURE__ */ React.createElement("ol", null, /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "1. Create a new IAM role in the AWS console, and select ", /* @__PURE__ */ React.createElement("code", null, "Another AWS account"), " as the", " ", /* @__PURE__ */ React.createElement("code", null, "Trusted entity"), ".")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "2. Enter the account ID of the Grafana account that has permission to assume this role:", /* @__PURE__ */ React.createElement("code", null, " 008923505280 "), " and check the ", /* @__PURE__ */ React.createElement("code", null, "Require external ID"), " box.")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "3. Enter the following external ID:", " ", /* @__PURE__ */ React.createElement("code", null, props.externalId || "External Id is currently unavailable"), " and click", " ", /* @__PURE__ */ React.createElement("code", null, "Next"), ".")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "4. Add any required permissions you would like Grafana to be able to access on your behalf. For more details on our permissions please", " ", /* @__PURE__ */ React.createElement(
148
160
  "a",
149
161
  {
150
162
  href: "https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/",
@@ -152,7 +164,7 @@ const ConnectionConfig = (props) => {
152
164
  rel: "noreferrer"
153
165
  },
154
166
  "read through our documentation"
155
- ), ".")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "5. Give the role a name and description, and click ", /* @__PURE__ */ React.createElement("code", null, "Create role"), ".")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "6. Copy the ARN of the role you just created and paste it into the ", /* @__PURE__ */ React.createElement("code", null, "Assume Role ARN"), " field below.")))
167
+ ), ".")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "5. Give the role a name and description, and click ", /* @__PURE__ */ React.createElement("code", null, "Create role"), ".")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "6. Copy the ARN of the role you just created and paste it into the ", /* @__PURE__ */ React.createElement("code", null, "Assume Role ARN"), " ", "field below.")))
156
168
  )), awsAssumeRoleEnabled && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
157
169
  InlineField,
158
170
  {
@@ -225,7 +237,7 @@ const ConnectionConfig = (props) => {
225
237
  menuShouldPortal: true
226
238
  }
227
239
  )
228
- ), props.children);
240
+ ), props.children));
229
241
  };
230
242
  function getStyles() {
231
243
  return {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConnectionConfig.js","sources":["../../../../src/components/ConnectionConfig.tsx"],"sourcesContent":["import React, { FC, useEffect, useMemo, useState } from 'react';\nimport { Input, Select, InlineField, ButtonGroup, ToolbarButton, FieldSet, Collapse, useStyles2 } from '@grafana/ui';\nimport {\n DataSourcePluginOptionsEditorProps,\n onUpdateDatasourceJsonDataOptionSelect,\n onUpdateDatasourceResetOption,\n onUpdateDatasourceJsonDataOption,\n onUpdateDatasourceSecureJsonDataOption,\n} from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { standardRegions } from '../regions';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData, AwsAuthType } from '../types';\nimport { awsAuthProviderOptions } from '../providers';\nimport { css } from '@emotion/css';\nimport { NewConnectionConfig } from './NewConnectionConfig';\n\nexport const DEFAULT_LABEL_WIDTH = 28;\nconst DS_TYPES_THAT_SUPPORT_TEMP_CREDS = ['cloudwatch', 'grafana-athena-datasource'];\nconst toOption = (value: string) => ({ value, label: value });\nconst isAwsAuthType = (value: any): value is AwsAuthType => {\n return typeof value === 'string' && awsAuthProviderOptions.some((opt) => opt.value === value);\n};\nexport interface ConnectionConfigProps<\n J extends AwsAuthDataSourceJsonData = AwsAuthDataSourceJsonData,\n S = AwsAuthDataSourceSecureJsonData\n> extends DataSourcePluginOptionsEditorProps<J, S> {\n standardRegions?: string[];\n loadRegions?: () => Promise<string[]>;\n defaultEndpoint?: string;\n skipHeader?: boolean;\n skipEndpoint?: boolean;\n children?: React.ReactNode;\n labelWidth?: number;\n inExperimentalAuthComponent?: boolean;\n externalId?: string;\n newFormStylingEnabled?: boolean;\n}\n\nexport const ConnectionConfig: FC<ConnectionConfigProps> = (props: ConnectionConfigProps) => {\n const [isARNInstructionsOpen, setIsARNInstructionsOpen] = useState(false);\n const [regions, setRegions] = useState((props.standardRegions || standardRegions).map(toOption));\n const { loadRegions, onOptionsChange, skipHeader = false, skipEndpoint = false } = props;\n const { labelWidth = DEFAULT_LABEL_WIDTH, options, inExperimentalAuthComponent } = props;\n let profile = options.jsonData.profile;\n if (profile === undefined) {\n profile = options.database;\n }\n const tempCredsFeatureEnabled =\n config.featureToggles.awsDatasourcesTempCredentials && DS_TYPES_THAT_SUPPORT_TEMP_CREDS.includes(options.type);\n const awsAssumeRoleEnabled = config.awsAssumeRoleEnabled ?? true;\n const awsAllowedAuthProviders = useMemo(\n () =>\n config.awsAllowedAuthProviders\n .filter((provider) => (provider === AwsAuthType.GrafanaAssumeRole ? tempCredsFeatureEnabled : true))\n .filter(isAwsAuthType),\n [tempCredsFeatureEnabled]\n );\n const currentProvider = awsAuthProviderOptions.find((p) => p.value === options.jsonData.authType);\n\n useEffect(() => {\n // Make sure a authType exists in the current model\n if (!currentProvider && awsAllowedAuthProviders.length) {\n onOptionsChange({\n ...options,\n jsonData: {\n ...options.jsonData,\n authType: awsAllowedAuthProviders[0],\n },\n });\n }\n }, [currentProvider, options, onOptionsChange, awsAllowedAuthProviders]);\n\n useEffect(() => {\n if (!loadRegions) {\n return;\n }\n\n loadRegions().then((regions) => setRegions(regions.map(toOption)));\n }, [loadRegions]);\n\n const inputWidth = inExperimentalAuthComponent ? 'width-20' : 'width-30';\n const styles = useStyles2(getStyles);\n\n return (\n <>\n {props.newFormStylingEnabled ? (\n <NewConnectionConfig\n currentProvider={currentProvider}\n awsAllowedAuthProviders={awsAllowedAuthProviders}\n isARNInstructionsOpen={isARNInstructionsOpen}\n setIsARNInstructionsOpen={setIsARNInstructionsOpen}\n awsAssumeRoleEnabled={awsAssumeRoleEnabled}\n regions={regions}\n assumeRoleInstructionsStyle={styles.assumeRoleInstructions}\n {...props}\n />\n ) : (\n <FieldSet label={skipHeader ? '' : 'Connection Details'} data-testid=\"connection-config\">\n <InlineField\n label=\"Authentication Provider\"\n labelWidth={labelWidth}\n tooltip=\"Specify which AWS credentials chain to use.\"\n >\n <Select\n aria-label=\"Authentication Provider\"\n className={inputWidth}\n value={currentProvider}\n options={awsAuthProviderOptions.filter((opt) => awsAllowedAuthProviders.includes(opt.value!))}\n defaultValue={options.jsonData.authType}\n onChange={(option) => {\n onUpdateDatasourceJsonDataOptionSelect(props, 'authType')(option);\n }}\n menuShouldPortal={true}\n />\n </InlineField>\n {options.jsonData.authType === 'credentials' && (\n <InlineField\n label=\"Credentials Profile Name\"\n labelWidth={labelWidth}\n tooltip=\"Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.\"\n >\n <Input\n aria-label=\"Credentials Profile Name\"\n className={inputWidth}\n placeholder=\"default\"\n value={profile}\n onChange={onUpdateDatasourceJsonDataOption(props, 'profile')}\n />\n </InlineField>\n )}\n\n {options.jsonData.authType === 'keys' && (\n <>\n <InlineField label=\"Access Key ID\" labelWidth={labelWidth}>\n {props.options.secureJsonFields?.accessKey ? (\n <ButtonGroup className={inputWidth}>\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\n icon=\"edit\"\n tooltip=\"Edit Access Key ID\"\n type=\"button\"\n onClick={onUpdateDatasourceResetOption(props as any, 'accessKey')}\n />\n </ButtonGroup>\n ) : (\n <Input\n aria-label=\"Access Key ID\"\n className={inputWidth}\n value={options.secureJsonData?.accessKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'accessKey')}\n />\n )}\n </InlineField>\n\n <InlineField label=\"Secret Access Key\" labelWidth={labelWidth}>\n {props.options.secureJsonFields?.secretKey ? (\n <ButtonGroup className={inputWidth}>\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\n icon=\"edit\"\n type=\"button\"\n tooltip=\"Edit Secret Access Key\"\n onClick={onUpdateDatasourceResetOption(props as any, 'secretKey')}\n />\n </ButtonGroup>\n ) : (\n <Input\n aria-label=\"Secret Access Key\"\n className={inputWidth}\n value={options.secureJsonData?.secretKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'secretKey')}\n />\n )}\n </InlineField>\n </>\n )}\n\n {options.jsonData.authType === AwsAuthType.GrafanaAssumeRole && (\n <div className={styles.assumeRoleInstructions}>\n <Collapse\n label={'How to create an IAM role for grafana to assume:'}\n collapsible={true}\n isOpen={isARNInstructionsOpen}\n onToggle={() => setIsARNInstructionsOpen(!isARNInstructionsOpen)}\n >\n <ol>\n <li>\n <p>\n 1. Create a new IAM role in the AWS console, and select <code>Another AWS account</code> as the{' '}\n <code>Trusted entity</code>.\n </p>\n </li>\n <li>\n <p>\n 2. Enter the account ID of the Grafana account that has permission to assume this role:\n <code> 008923505280 </code> and check the <code>Require external ID</code> box.\n </p>\n </li>\n <li>\n <p>\n 3. Enter the following external ID:{' '}\n <code>{props.externalId || 'External Id is currently unavailable'}</code> and click{' '}\n <code>Next</code>.\n </p>\n </li>\n <li>\n <p>\n 4. Add any required permissions you would like Grafana to be able to access on your behalf. For\n more details on our permissions please{' '}\n <a\n href=\"https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n read through our documentation\n </a>\n .\n </p>\n </li>\n <li>\n <p>\n 5. Give the role a name and description, and click <code>Create role</code>.\n </p>\n </li>\n <li>\n <p>\n 6. Copy the ARN of the role you just created and paste it into the <code>Assume Role ARN</code>{' '}\n field below.\n </p>\n </li>\n </ol>\n </Collapse>\n </div>\n )}\n\n {awsAssumeRoleEnabled && (\n <>\n <InlineField\n label=\"Assume Role ARN\"\n labelWidth={labelWidth}\n tooltip=\"Optionally, specify the ARN of a role to assume. Specifying a role here will ensure that the selected authentication provider is used to assume the specified role rather than using the credentials directly. Leave blank if you don't need to assume a role at all\"\n >\n <Input\n aria-label=\"Assume Role ARN\"\n className={inputWidth}\n placeholder=\"arn:aws:iam:*\"\n value={options.jsonData.assumeRoleArn || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'assumeRoleArn')}\n />\n </InlineField>\n {options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && (\n <InlineField\n label=\"External ID\"\n labelWidth={labelWidth}\n tooltip=\"If you are assuming a role in another account, that has been created with an external ID, specify the external ID here.\"\n >\n <Input\n aria-label=\"External ID\"\n className={inputWidth}\n placeholder=\"External ID\"\n value={options.jsonData.externalId || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'externalId')}\n />\n </InlineField>\n )}\n </>\n )}\n {!skipEndpoint && options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && (\n <InlineField\n label=\"Endpoint\"\n labelWidth={labelWidth}\n tooltip=\"Optionally, specify a custom endpoint for the service\"\n >\n <Input\n aria-label=\"Endpoint\"\n className={inputWidth}\n placeholder={props.defaultEndpoint ?? 'https://{service}.{region}.amazonaws.com'}\n value={options.jsonData.endpoint || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'endpoint')}\n />\n </InlineField>\n )}\n <InlineField\n label=\"Default Region\"\n labelWidth={labelWidth}\n tooltip=\"Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.\"\n >\n <Select\n aria-label=\"Default Region\"\n className={inputWidth}\n value={regions.find((region) => region.value === options.jsonData.defaultRegion)}\n options={regions}\n defaultValue={options.jsonData.defaultRegion}\n allowCustomValue={true}\n onChange={onUpdateDatasourceJsonDataOptionSelect(props, 'defaultRegion')}\n formatCreateLabel={(r) => `Use region: ${r}`}\n menuShouldPortal={true}\n />\n </InlineField>\n {props.children}\n </FieldSet>\n )}\n </>\n );\n};\n\nfunction getStyles() {\n return {\n assumeRoleInstructions: css({\n maxWidth: '715px',\n }),\n };\n}\n"],"names":["regions"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import { useTheme2 } from '@grafana/ui';
3
+
4
+ function Divider() {
5
+ const theme = useTheme2();
6
+ return /* @__PURE__ */ React.createElement(
7
+ "div",
8
+ {
9
+ style: { borderTop: `1px solid ${theme.colors.border.weak}`, margin: theme.spacing(2, 0), width: "100%" }
10
+ }
11
+ );
12
+ }
13
+
14
+ export { Divider };
15
+ //# sourceMappingURL=Divider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Divider.js","sources":["../../../../src/components/Divider.tsx"],"sourcesContent":["// copied from Azure Data Explorer plugin since there is not Divider component in G<10.1\nimport React from 'react';\nimport { useTheme2 } from '@grafana/ui';\n\nexport function Divider() {\n const theme = useTheme2();\n return (\n <div\n style={{ borderTop: `1px solid ${theme.colors.border.weak}`, margin: theme.spacing(2, 0), width: '100%' }}\n ></div>\n );\n}\n"],"names":[],"mappings":";;;AAIO,SAAS,OAAU,GAAA;AACxB,EAAA,MAAM,QAAQ,SAAU,EAAA,CAAA;AACxB,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,KAAO,EAAA,EAAE,SAAW,EAAA,CAAA,UAAA,EAAa,MAAM,MAAO,CAAA,MAAA,CAAO,IAAQ,CAAA,CAAA,EAAA,MAAA,EAAQ,MAAM,OAAQ,CAAA,CAAA,EAAG,CAAC,CAAA,EAAG,OAAO,MAAO,EAAA;AAAA,KAAA;AAAA,GACzG,CAAA;AAEL;;;;"}
@@ -0,0 +1,203 @@
1
+ import React from 'react';
2
+ import { Field, Select, Input, ButtonGroup, ToolbarButton, Collapse } from '@grafana/ui';
3
+ import { onUpdateDatasourceJsonDataOptionSelect, onUpdateDatasourceJsonDataOption, onUpdateDatasourceResetOption, onUpdateDatasourceSecureJsonDataOption } from '@grafana/data';
4
+ import { AwsAuthType } from '../types.js';
5
+ import { awsAuthProviderOptions } from '../providers.js';
6
+ import { ConfigSection, ConfigSubSection } from '@grafana/experimental';
7
+
8
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
11
+ var __objRest = (source, exclude) => {
12
+ var target = {};
13
+ for (var prop in source)
14
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
15
+ target[prop] = source[prop];
16
+ if (source != null && __getOwnPropSymbols)
17
+ for (var prop of __getOwnPropSymbols(source)) {
18
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
19
+ target[prop] = source[prop];
20
+ }
21
+ return target;
22
+ };
23
+ const NewConnectionConfig = (_a) => {
24
+ var _b = _a, {
25
+ isARNInstructionsOpen,
26
+ setIsARNInstructionsOpen,
27
+ awsAssumeRoleEnabled,
28
+ currentProvider,
29
+ awsAllowedAuthProviders,
30
+ skipHeader,
31
+ regions,
32
+ assumeRoleInstructionsStyle
33
+ } = _b, props = __objRest(_b, [
34
+ "isARNInstructionsOpen",
35
+ "setIsARNInstructionsOpen",
36
+ "awsAssumeRoleEnabled",
37
+ "currentProvider",
38
+ "awsAllowedAuthProviders",
39
+ "skipHeader",
40
+ "regions",
41
+ "assumeRoleInstructionsStyle"
42
+ ]);
43
+ var _a2, _b2, _c, _d, _e, _f, _g;
44
+ const options = props.options;
45
+ return /* @__PURE__ */ React.createElement("div", { "data-testid": "connection-config" }, /* @__PURE__ */ React.createElement(ConfigSection, { title: skipHeader ? "" : "Connection Details", "data-testid": "connection-config" }, /* @__PURE__ */ React.createElement(ConfigSubSection, { title: "Authentication" }, /* @__PURE__ */ React.createElement(
46
+ Field,
47
+ {
48
+ label: "Authentication Provider",
49
+ description: "Specify which AWS credentials chain to use.",
50
+ htmlFor: "authProvider"
51
+ },
52
+ /* @__PURE__ */ React.createElement(
53
+ Select,
54
+ {
55
+ id: "authProvider",
56
+ "aria-label": "Authentication Provider",
57
+ value: currentProvider,
58
+ options: awsAuthProviderOptions.filter((opt) => awsAllowedAuthProviders.includes(opt.value)),
59
+ defaultValue: options.jsonData.authType,
60
+ onChange: (option) => {
61
+ onUpdateDatasourceJsonDataOptionSelect(props, "authType")(option);
62
+ },
63
+ menuShouldPortal: true
64
+ }
65
+ )
66
+ ), options.jsonData.authType === "credentials" && /* @__PURE__ */ React.createElement(
67
+ Field,
68
+ {
69
+ label: "Credentials Profile Name",
70
+ description: "Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.",
71
+ htmlFor: "credentialsProfileName"
72
+ },
73
+ /* @__PURE__ */ React.createElement(
74
+ Input,
75
+ {
76
+ id: "credentialsProfileName",
77
+ placeholder: "default",
78
+ value: options.jsonData.profile,
79
+ onChange: onUpdateDatasourceJsonDataOption(props, "profile")
80
+ }
81
+ )
82
+ ), options.jsonData.authType === "keys" && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Field, { label: "Access Key ID", htmlFor: "accessKeyId" }, ((_a2 = props.options.secureJsonFields) == null ? void 0 : _a2.accessKey) ? /* @__PURE__ */ React.createElement(ButtonGroup, null, /* @__PURE__ */ React.createElement(Input, { disabled: true, placeholder: "Configured", id: "accessKeyId" }), /* @__PURE__ */ React.createElement(
83
+ ToolbarButton,
84
+ {
85
+ icon: "edit",
86
+ tooltip: "Edit Access Key ID",
87
+ type: "button",
88
+ onClick: onUpdateDatasourceResetOption(props, "accessKey")
89
+ }
90
+ )) : /* @__PURE__ */ React.createElement(
91
+ Input,
92
+ {
93
+ id: "accessKeyId",
94
+ value: (_c = (_b2 = options.secureJsonData) == null ? void 0 : _b2.accessKey) != null ? _c : "",
95
+ onChange: onUpdateDatasourceSecureJsonDataOption(props, "accessKey")
96
+ }
97
+ )), /* @__PURE__ */ React.createElement(Field, { label: "Secret Access Key", htmlFor: "secretKey" }, ((_d = props.options.secureJsonFields) == null ? void 0 : _d.secretKey) ? /* @__PURE__ */ React.createElement(ButtonGroup, null, /* @__PURE__ */ React.createElement(Input, { disabled: true, placeholder: "Configured" }), /* @__PURE__ */ React.createElement(
98
+ ToolbarButton,
99
+ {
100
+ id: "secretKey",
101
+ icon: "edit",
102
+ type: "button",
103
+ tooltip: "Edit Secret Access Key",
104
+ onClick: onUpdateDatasourceResetOption(props, "secretKey")
105
+ }
106
+ )) : /* @__PURE__ */ React.createElement(
107
+ Input,
108
+ {
109
+ id: "secretKey",
110
+ value: (_f = (_e = options.secureJsonData) == null ? void 0 : _e.secretKey) != null ? _f : "",
111
+ onChange: onUpdateDatasourceSecureJsonDataOption(props, "secretKey")
112
+ }
113
+ )))), /* @__PURE__ */ React.createElement(ConfigSubSection, { title: "Assume Role" }, options.jsonData.authType === AwsAuthType.GrafanaAssumeRole && /* @__PURE__ */ React.createElement("div", { className: assumeRoleInstructionsStyle }, /* @__PURE__ */ React.createElement(
114
+ Collapse,
115
+ {
116
+ label: "How to create an IAM role for grafana to assume:",
117
+ collapsible: true,
118
+ isOpen: isARNInstructionsOpen,
119
+ onToggle: () => setIsARNInstructionsOpen(!isARNInstructionsOpen)
120
+ },
121
+ /* @__PURE__ */ React.createElement("ol", null, /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "1. Create a new IAM role in the AWS console, and select ", /* @__PURE__ */ React.createElement("code", null, "Another AWS account"), " as the", " ", /* @__PURE__ */ React.createElement("code", null, "Trusted entity"), ".")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "2. Enter the account ID of the Grafana account that has permission to assume this role:", /* @__PURE__ */ React.createElement("code", null, " 008923505280 "), " and check the ", /* @__PURE__ */ React.createElement("code", null, "Require external ID"), " box.")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "3. Enter the following external ID:", " ", /* @__PURE__ */ React.createElement("code", null, props.externalId || "External Id is currently unavailable"), " and click", " ", /* @__PURE__ */ React.createElement("code", null, "Next"), ".")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "4. Add any required permissions you would like Grafana to be able to access on your behalf. For more details on our permissions please", " ", /* @__PURE__ */ React.createElement(
122
+ "a",
123
+ {
124
+ href: "https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/",
125
+ target: "_blank",
126
+ rel: "noreferrer"
127
+ },
128
+ "read through our documentation"
129
+ ), ".")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "5. Give the role a name and description, and click ", /* @__PURE__ */ React.createElement("code", null, "Create role"), ".")), /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("p", null, "6. Copy the ARN of the role you just created and paste it into the ", /* @__PURE__ */ React.createElement("code", null, "Assume Role ARN"), " ", "field below.")))
130
+ )), awsAssumeRoleEnabled && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
131
+ Field,
132
+ {
133
+ htmlFor: "assumeRoleArn",
134
+ label: "Assume Role ARN",
135
+ description: "Optional. Specifying the ARN of a role will ensure that the\n selected authentication provider is used to assume the role rather than the\n credentials directly."
136
+ },
137
+ /* @__PURE__ */ React.createElement(
138
+ Input,
139
+ {
140
+ id: "assumeRoleArn",
141
+ placeholder: "arn:aws:iam:*",
142
+ value: options.jsonData.assumeRoleArn || "",
143
+ onChange: onUpdateDatasourceJsonDataOption(props, "assumeRoleArn")
144
+ }
145
+ )
146
+ ), options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && /* @__PURE__ */ React.createElement(
147
+ Field,
148
+ {
149
+ htmlFor: "externalId",
150
+ label: "External ID",
151
+ description: "If you are assuming a role in another account, that has been created with an external ID, specify the external ID here."
152
+ },
153
+ /* @__PURE__ */ React.createElement(
154
+ Input,
155
+ {
156
+ id: "externalId",
157
+ placeholder: "External ID",
158
+ value: options.jsonData.externalId || "",
159
+ onChange: onUpdateDatasourceJsonDataOption(props, "externalId")
160
+ }
161
+ )
162
+ ))), /* @__PURE__ */ React.createElement(ConfigSubSection, { title: "Additional Settings" }, !props.skipEndpoint && options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && /* @__PURE__ */ React.createElement(
163
+ Field,
164
+ {
165
+ label: "Endpoint",
166
+ description: "Optionally, specify a custom endpoint for the service",
167
+ htmlFor: "endpoint"
168
+ },
169
+ /* @__PURE__ */ React.createElement(
170
+ Input,
171
+ {
172
+ id: "endpoint",
173
+ placeholder: (_g = props.defaultEndpoint) != null ? _g : "https://{service}.{region}.amazonaws.com",
174
+ value: options.jsonData.endpoint || "",
175
+ onChange: onUpdateDatasourceJsonDataOption(props, "endpoint")
176
+ }
177
+ )
178
+ ), /* @__PURE__ */ React.createElement(
179
+ Field,
180
+ {
181
+ label: "Default Region",
182
+ description: "Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.",
183
+ htmlFor: "defaultRegion"
184
+ },
185
+ /* @__PURE__ */ React.createElement(
186
+ Select,
187
+ {
188
+ id: "defaultRegion",
189
+ "aria-label": "Default Region",
190
+ value: regions.find((region) => region.value === options.jsonData.defaultRegion),
191
+ options: regions,
192
+ defaultValue: options.jsonData.defaultRegion,
193
+ allowCustomValue: true,
194
+ onChange: onUpdateDatasourceJsonDataOptionSelect(props, "defaultRegion"),
195
+ formatCreateLabel: (r) => `Use region: ${r}`,
196
+ menuShouldPortal: true
197
+ }
198
+ )
199
+ )), props.children));
200
+ };
201
+
202
+ export { NewConnectionConfig };
203
+ //# sourceMappingURL=NewConnectionConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NewConnectionConfig.js","sources":["../../../../src/components/NewConnectionConfig.tsx"],"sourcesContent":["import React from 'react';\nimport { Input, Select, ButtonGroup, ToolbarButton, Collapse, Field } from '@grafana/ui';\nimport {\n onUpdateDatasourceJsonDataOptionSelect,\n onUpdateDatasourceResetOption,\n onUpdateDatasourceJsonDataOption,\n onUpdateDatasourceSecureJsonDataOption,\n SelectableValue,\n} from '@grafana/data';\nimport { AwsAuthType } from '../types';\nimport { awsAuthProviderOptions } from '../providers';\nimport { ConfigSection, ConfigSubSection } from '@grafana/experimental';\nimport { ConnectionConfigProps } from './ConnectionConfig';\n\ninterface NewConnectionConfigProps extends ConnectionConfigProps {\n currentProvider?: SelectableValue<AwsAuthType> | undefined;\n awsAllowedAuthProviders: string[];\n isARNInstructionsOpen: boolean;\n setIsARNInstructionsOpen: (isOpen: boolean) => void;\n awsAssumeRoleEnabled: boolean;\n regions: SelectableValue[];\n assumeRoleInstructionsStyle: string;\n}\n\nexport const NewConnectionConfig = ({\n isARNInstructionsOpen,\n setIsARNInstructionsOpen,\n awsAssumeRoleEnabled,\n currentProvider,\n awsAllowedAuthProviders,\n skipHeader,\n regions,\n assumeRoleInstructionsStyle,\n ...props\n}: NewConnectionConfigProps) => {\n const options = props.options;\n return (\n <div data-testid=\"connection-config\">\n <ConfigSection title={skipHeader ? '' : 'Connection Details'} data-testid=\"connection-config\">\n <ConfigSubSection title=\"Authentication\">\n <Field\n label=\"Authentication Provider\"\n description=\"Specify which AWS credentials chain to use.\"\n htmlFor=\"authProvider\"\n >\n <Select\n id=\"authProvider\"\n aria-label=\"Authentication Provider\"\n value={currentProvider}\n options={awsAuthProviderOptions.filter((opt) => awsAllowedAuthProviders.includes(opt.value!))}\n defaultValue={options.jsonData.authType}\n onChange={(option) => {\n onUpdateDatasourceJsonDataOptionSelect(props, 'authType')(option);\n }}\n menuShouldPortal={true}\n />\n </Field>\n {options.jsonData.authType === 'credentials' && (\n <Field\n label=\"Credentials Profile Name\"\n description=\"Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.\"\n htmlFor=\"credentialsProfileName\"\n >\n <Input\n id=\"credentialsProfileName\"\n placeholder=\"default\"\n value={options.jsonData.profile}\n onChange={onUpdateDatasourceJsonDataOption(props, 'profile')}\n />\n </Field>\n )}\n {options.jsonData.authType === 'keys' && (\n <>\n <Field label=\"Access Key ID\" htmlFor=\"accessKeyId\">\n {props.options.secureJsonFields?.accessKey ? (\n <ButtonGroup>\n <Input disabled placeholder=\"Configured\" id=\"accessKeyId\" />\n <ToolbarButton\n icon=\"edit\"\n tooltip=\"Edit Access Key ID\"\n type=\"button\"\n onClick={onUpdateDatasourceResetOption(props as any, 'accessKey')}\n />\n </ButtonGroup>\n ) : (\n <Input\n id=\"accessKeyId\"\n value={options.secureJsonData?.accessKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'accessKey')}\n />\n )}\n </Field>\n\n <Field label=\"Secret Access Key\" htmlFor=\"secretKey\">\n {props.options.secureJsonFields?.secretKey ? (\n <ButtonGroup>\n <Input disabled placeholder=\"Configured\" />\n <ToolbarButton\n id=\"secretKey\"\n icon=\"edit\"\n type=\"button\"\n tooltip=\"Edit Secret Access Key\"\n onClick={onUpdateDatasourceResetOption(props as any, 'secretKey')}\n />\n </ButtonGroup>\n ) : (\n <Input\n id=\"secretKey\"\n value={options.secureJsonData?.secretKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'secretKey')}\n />\n )}\n </Field>\n </>\n )}\n </ConfigSubSection>\n\n <ConfigSubSection title=\"Assume Role\">\n {options.jsonData.authType === AwsAuthType.GrafanaAssumeRole && (\n <div className={assumeRoleInstructionsStyle}>\n <Collapse\n label={'How to create an IAM role for grafana to assume:'}\n collapsible={true}\n isOpen={isARNInstructionsOpen}\n onToggle={() => setIsARNInstructionsOpen(!isARNInstructionsOpen)}\n >\n <ol>\n <li>\n <p>\n 1. Create a new IAM role in the AWS console, and select <code>Another AWS account</code> as the{' '}\n <code>Trusted entity</code>.\n </p>\n </li>\n <li>\n <p>\n 2. Enter the account ID of the Grafana account that has permission to assume this role:\n <code> 008923505280 </code> and check the <code>Require external ID</code> box.\n </p>\n </li>\n <li>\n <p>\n 3. Enter the following external ID:{' '}\n <code>{props.externalId || 'External Id is currently unavailable'}</code> and click{' '}\n <code>Next</code>.\n </p>\n </li>\n <li>\n <p>\n 4. Add any required permissions you would like Grafana to be able to access on your behalf. For\n more details on our permissions please{' '}\n <a\n href=\"https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n read through our documentation\n </a>\n .\n </p>\n </li>\n <li>\n <p>\n 5. Give the role a name and description, and click <code>Create role</code>.\n </p>\n </li>\n <li>\n <p>\n 6. Copy the ARN of the role you just created and paste it into the <code>Assume Role ARN</code>{' '}\n field below.\n </p>\n </li>\n </ol>\n </Collapse>\n </div>\n )}\n {awsAssumeRoleEnabled && (\n <>\n <Field\n htmlFor=\"assumeRoleArn\"\n label=\"Assume Role ARN\"\n description=\"Optional. Specifying the ARN of a role will ensure that the\n selected authentication provider is used to assume the role rather than the\n credentials directly.\"\n >\n <Input\n id=\"assumeRoleArn\"\n placeholder=\"arn:aws:iam:*\"\n value={options.jsonData.assumeRoleArn || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'assumeRoleArn')}\n />\n </Field>\n {options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && (\n <Field\n htmlFor=\"externalId\"\n label=\"External ID\"\n description=\"If you are assuming a role in another account, that has been created with an external ID, specify the external ID here.\"\n >\n <Input\n id=\"externalId\"\n placeholder=\"External ID\"\n value={options.jsonData.externalId || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'externalId')}\n />\n </Field>\n )}\n </>\n )}\n </ConfigSubSection>\n <ConfigSubSection title=\"Additional Settings\">\n {!props.skipEndpoint && options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && (\n <Field\n label=\"Endpoint\"\n description=\"Optionally, specify a custom endpoint for the service\"\n htmlFor=\"endpoint\"\n >\n <Input\n id=\"endpoint\"\n placeholder={props.defaultEndpoint ?? 'https://{service}.{region}.amazonaws.com'}\n value={options.jsonData.endpoint || ''}\n onChange={onUpdateDatasourceJsonDataOption(props, 'endpoint')}\n />\n </Field>\n )}\n\n <Field\n label=\"Default Region\"\n description=\"Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.\"\n htmlFor=\"defaultRegion\"\n >\n <Select\n id=\"defaultRegion\"\n aria-label=\"Default Region\"\n value={regions.find((region) => region.value === options.jsonData.defaultRegion)}\n options={regions}\n defaultValue={options.jsonData.defaultRegion}\n allowCustomValue={true}\n onChange={onUpdateDatasourceJsonDataOptionSelect(props, 'defaultRegion')}\n formatCreateLabel={(r) => `Use region: ${r}`}\n menuShouldPortal={true}\n />\n </Field>\n </ConfigSubSection>\n {props.children}\n </ConfigSection>\n </div>\n );\n};\n"],"names":["_a","_b"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SIGV4ConnectionConfig.js","sources":["../../../../src/components/SIGV4ConnectionConfig.tsx"],"sourcesContent":["import React from 'react';\nimport { DataSourcePluginOptionsEditorProps, DataSourceSettings } from '@grafana/data';\nimport { ConnectionConfig, ConnectionConfigProps } from '../components/ConnectionConfig';\n\nimport { AwsAuthDataSourceSecureJsonData, AwsAuthDataSourceJsonData } from '../types';\n\nexport interface SIGV4ConnectionConfigProps extends DataSourcePluginOptionsEditorProps<any, any> {\n inExperimentalAuthComponent?: boolean;\n};\n\nexport const SIGV4ConnectionConfig: React.FC<SIGV4ConnectionConfigProps> = (\n props: SIGV4ConnectionConfigProps\n) => {\n const { onOptionsChange, options } = props;\n\n // Map HttpSettings props to ConnectionConfigProps\n const connectionConfigProps: ConnectionConfigProps<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData> = {\n onOptionsChange: (awsDataSourceSettings) => {\n const dataSourceSettings: DataSourceSettings<any, any> = {\n ...options,\n jsonData: {\n ...options.jsonData,\n sigV4AuthType: awsDataSourceSettings.jsonData.authType,\n sigV4Profile: awsDataSourceSettings.jsonData.profile,\n sigV4AssumeRoleArn: awsDataSourceSettings.jsonData.assumeRoleArn,\n sigV4ExternalId: awsDataSourceSettings.jsonData.externalId,\n sigV4Region: awsDataSourceSettings.jsonData.defaultRegion,\n sigV4Endpoint: awsDataSourceSettings.jsonData.endpoint,\n },\n secureJsonFields: {\n sigV4AccessKey: awsDataSourceSettings.secureJsonFields?.accessKey,\n sigV4SecretKey: awsDataSourceSettings.secureJsonFields?.secretKey,\n },\n secureJsonData: {\n sigV4AccessKey: awsDataSourceSettings.secureJsonData?.accessKey,\n sigV4SecretKey: awsDataSourceSettings.secureJsonData?.secretKey,\n },\n };\n onOptionsChange(dataSourceSettings);\n },\n options: {\n ...options,\n jsonData: {\n ...options.jsonData,\n authType: options.jsonData.sigV4AuthType,\n profile: options.jsonData.sigV4Profile,\n assumeRoleArn: options.jsonData.sigV4AssumeRoleArn,\n externalId: options.jsonData.sigV4ExternalId,\n defaultRegion: options.jsonData.sigV4Region,\n endpoint: options.jsonData.sigV4Endpoint,\n },\n secureJsonFields: {\n accessKey: options.secureJsonFields?.sigV4AccessKey,\n secretKey: options.secureJsonFields?.sigV4SecretKey,\n },\n secureJsonData: {\n accessKey: options.secureJsonData?.sigV4AccessKey,\n secretKey: options.secureJsonData?.sigV4SecretKey,\n },\n },\n inExperimentalAuthComponent: props.inExperimentalAuthComponent,\n };\n\n return (\n <>\n <div className=\"gf-form\">\n <h6>SigV4 Auth Details</h6>\n </div>\n <ConnectionConfig {...connectionConfigProps} skipHeader skipEndpoint></ConnectionConfig>\n </>\n );\n};\n"],"names":["_a","_b","_c","_d"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAUa,MAAA,qBAAA,GAA8D,CACzE,KACG,KAAA;AAZL,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAaE,EAAM,MAAA,EAAE,eAAiB,EAAA,OAAA,EAAY,GAAA,KAAA,CAAA;AAGrC,EAAA,MAAM,qBAA2G,GAAA;AAAA,IAC/G,eAAA,EAAiB,CAAC,qBAA0B,KAAA;AAjBhD,MAAAA,IAAAA,GAAAA,EAAAC,KAAAC,GAAAC,EAAAA,GAAAA,CAAAA;AAkBM,MAAM,MAAA,kBAAA,GAAmD,iCACpD,OADoD,CAAA,EAAA;AAAA,QAEvD,QAAA,EAAU,aACL,CAAA,cAAA,CAAA,EAAA,EAAA,OAAA,CAAQ,QADH,CAAA,EAAA;AAAA,UAER,aAAA,EAAe,sBAAsB,QAAS,CAAA,QAAA;AAAA,UAC9C,YAAA,EAAc,sBAAsB,QAAS,CAAA,OAAA;AAAA,UAC7C,kBAAA,EAAoB,sBAAsB,QAAS,CAAA,aAAA;AAAA,UACnD,eAAA,EAAiB,sBAAsB,QAAS,CAAA,UAAA;AAAA,UAChD,WAAA,EAAa,sBAAsB,QAAS,CAAA,aAAA;AAAA,UAC5C,aAAA,EAAe,sBAAsB,QAAS,CAAA,QAAA;AAAA,SAChD,CAAA;AAAA,QACA,gBAAkB,EAAA;AAAA,UAChB,cAAgBH,EAAAA,CAAAA,GAAAA,GAAA,qBAAsB,CAAA,gBAAA,KAAtB,gBAAAA,GAAwC,CAAA,SAAA;AAAA,UACxD,cAAgBC,EAAAA,CAAAA,GAAAA,GAAA,qBAAsB,CAAA,gBAAA,KAAtB,gBAAAA,GAAwC,CAAA,SAAA;AAAA,SAC1D;AAAA,QACA,cAAgB,EAAA;AAAA,UACd,cAAgBC,EAAAA,CAAAA,GAAAA,GAAA,qBAAsB,CAAA,cAAA,KAAtB,gBAAAA,GAAsC,CAAA,SAAA;AAAA,UACtD,cAAgBC,EAAAA,CAAAA,GAAAA,GAAA,qBAAsB,CAAA,cAAA,KAAtB,gBAAAA,GAAsC,CAAA,SAAA;AAAA,SACxD;AAAA,OACF,CAAA,CAAA;AACA,MAAA,eAAA,CAAgB,kBAAkB,CAAA,CAAA;AAAA,KACpC;AAAA,IACA,OAAA,EAAS,iCACJ,OADI,CAAA,EAAA;AAAA,MAEP,QAAA,EAAU,aACL,CAAA,cAAA,CAAA,EAAA,EAAA,OAAA,CAAQ,QADH,CAAA,EAAA;AAAA,QAER,QAAA,EAAU,QAAQ,QAAS,CAAA,aAAA;AAAA,QAC3B,OAAA,EAAS,QAAQ,QAAS,CAAA,YAAA;AAAA,QAC1B,aAAA,EAAe,QAAQ,QAAS,CAAA,kBAAA;AAAA,QAChC,UAAA,EAAY,QAAQ,QAAS,CAAA,eAAA;AAAA,QAC7B,aAAA,EAAe,QAAQ,QAAS,CAAA,WAAA;AAAA,QAChC,QAAA,EAAU,QAAQ,QAAS,CAAA,aAAA;AAAA,OAC7B,CAAA;AAAA,MACA,gBAAkB,EAAA;AAAA,QAChB,SAAA,EAAA,CAAW,EAAQ,GAAA,OAAA,CAAA,gBAAA,KAAR,IAA0B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,cAAA;AAAA,QACrC,SAAA,EAAA,CAAW,EAAQ,GAAA,OAAA,CAAA,gBAAA,KAAR,IAA0B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,cAAA;AAAA,OACvC;AAAA,MACA,cAAgB,EAAA;AAAA,QACd,SAAA,EAAA,CAAW,EAAQ,GAAA,OAAA,CAAA,cAAA,KAAR,IAAwB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,cAAA;AAAA,QACnC,SAAA,EAAA,CAAW,EAAQ,GAAA,OAAA,CAAA,cAAA,KAAR,IAAwB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,cAAA;AAAA,OACrC;AAAA,KACF,CAAA;AAAA,IACA,6BAA6B,KAAM,CAAA,2BAAA;AAAA,GACrC,CAAA;AAEA,EAAA,iFAEK,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,WAAU,SACb,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,YAAG,oBAAkB,CACxB,CACA,kBAAA,KAAA,CAAA,aAAA,CAAC,mDAAqB,qBAArB,CAAA,EAAA,EAA4C,YAAU,IAAC,EAAA,YAAA,EAAY,OAAC,CACvE,CAAA,CAAA;AAEJ;;;;"}
@@ -1,5 +1,12 @@
1
- export { ConnectionConfig, DEFAULT_LABEL_WIDTH } from './ConnectionConfig.js';
2
- export { SIGV4ConnectionConfig } from './SIGV4ConnectionConfig.js';
1
+ export { ConnectionConfig, DEFAULT_LABEL_WIDTH } from './components/ConnectionConfig.js';
2
+ import 'react';
3
+ import '@grafana/ui';
4
+ import '@grafana/data';
5
+ export { AwsAuthType } from './types.js';
6
+ export { awsAuthProviderOptions } from './providers.js';
7
+ import '@grafana/experimental';
8
+ export { Divider } from './components/Divider.js';
9
+ export { SIGV4ConnectionConfig } from './components/SIGV4ConnectionConfig.js';
3
10
  export { ConfigSelect } from './sql/ConfigEditor/ConfigSelect.js';
4
11
  export { InlineInput } from './sql/ConfigEditor/InlineInput.js';
5
12
  export { ResourceSelector } from './sql/ResourceSelector.js';
@@ -8,7 +15,5 @@ export { QueryEditorHeader } from './sql/QueryEditor/QueryEditorHeader.js';
8
15
  export { FormatSelect } from './sql/QueryEditor/FormatSelect.js';
9
16
  export { FillValueOptions, FillValueSelect } from './sql/QueryEditor/FillValueSelect.js';
10
17
  export { appendTemplateVariablesAsSuggestions, applySQLTemplateVariables, filterSQLQuery } from './sql/utils/utils.js';
11
- export { AwsAuthType } from './types.js';
12
18
  export { standardRegions } from './regions.js';
13
- export { awsAuthProviderOptions } from './providers.js';
14
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { ResourceSelector } from '../ResourceSelector.js';
3
- import { DEFAULT_LABEL_WIDTH } from '../../ConnectionConfig.js';
3
+ import { DEFAULT_LABEL_WIDTH } from '../../components/ConnectionConfig.js';
4
4
 
5
5
  var __defProp = Object.defineProperty;
6
6
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
@@ -39,6 +39,8 @@ function ConfigSelect(props) {
39
39
  return /* @__PURE__ */ React.createElement(
40
40
  ResourceSelector,
41
41
  __spreadValues({
42
+ id: props.id,
43
+ newFormStylingEnabled: props.newFormStylingEnabled,
42
44
  label: props.label,
43
45
  "data-testid": props["data-testid"],
44
46
  onChange: props.onChange,
@@ -1 +1 @@
1
- {"version":3,"file":"ConfigSelect.js","sources":["../../../../../src/sql/ConfigEditor/ConfigSelect.tsx"],"sourcesContent":["import React, { DependencyList } from 'react';\nimport { DataSourcePluginOptionsEditorProps, SelectableValue } from '@grafana/data';\nimport { InputActionMeta } from '@grafana/ui';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { ResourceSelector } from '../ResourceSelector';\nimport { DEFAULT_LABEL_WIDTH } from '../../ConnectionConfig';\n\nexport interface ConfigSelectProps\n extends DataSourcePluginOptionsEditorProps<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData> {\n value: string;\n fetch: () => Promise<Array<string | SelectableValue<string>>>;\n onChange: (e: SelectableValue<string> | null) => void;\n dependencies?: string[];\n label?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n allowCustomValue?: boolean;\n saveOptions: () => Promise<void>;\n autoFocus?: boolean;\n backspaceRemovesValue?: boolean;\n className?: string;\n invalid?: boolean;\n isClearable?: boolean;\n isMulti?: boolean;\n inputId?: string;\n showAllSelectedWhenOpen?: boolean;\n maxMenuHeight?: number;\n minMenuHeight?: number;\n maxVisibleValues?: number;\n menuPlacement?: 'auto' | 'bottom' | 'top';\n menuPosition?: 'fixed' | 'absolute';\n noOptionsMessage?: string;\n onBlur?: () => void;\n onCreateOption?: (value: string) => void;\n onInputChange?: (value: string, actionMeta: InputActionMeta) => void;\n placeholder?: string;\n width?: number;\n isOptionDisabled?: () => boolean;\n labelWidth?: number;\n}\n\nexport function ConfigSelect(props: ConfigSelectProps) {\n const { jsonData } = props.options;\n const commonProps = {\n title: jsonData.defaultRegion ? '' : 'select a default region',\n labelWidth: props.labelWidth ?? DEFAULT_LABEL_WIDTH,\n className: 'width-30',\n };\n // Any change in the AWS connection details will affect selectors\n const dependencies: DependencyList = [\n props.options.jsonData.assumeRoleArn,\n props.options.jsonData.authType,\n props.options.jsonData.defaultRegion,\n props.options.jsonData.endpoint,\n props.options.jsonData.externalId,\n props.options.jsonData.profile,\n props.options.secureJsonData?.accessKey,\n props.options.secureJsonData?.secretKey,\n ].concat(props.dependencies);\n return (\n <ResourceSelector\n label={props.label}\n data-testid={props['data-testid']}\n onChange={props.onChange}\n fetch={props.fetch}\n value={props.value}\n saveOptions={props.saveOptions}\n dependencies={dependencies}\n hidden={props.hidden}\n disabled={props.disabled || !jsonData.defaultRegion}\n allowCustomValue={props.allowCustomValue}\n autoFocus={props.autoFocus}\n backspaceRemovesValue={props.backspaceRemovesValue}\n invalid={props.invalid}\n isClearable={props.isClearable}\n isMulti={props.isMulti}\n inputId={props.inputId}\n showAllSelectedWhenOpen={props.showAllSelectedWhenOpen}\n maxMenuHeight={props.maxMenuHeight}\n minMenuHeight={props.minMenuHeight}\n maxVisibleValues={props.maxVisibleValues}\n menuPlacement={props.menuPlacement}\n menuPosition={props.menuPosition}\n noOptionsMessage={props.noOptionsMessage}\n onBlur={props.onBlur}\n onCreateOption={props.onCreateOption}\n onInputChange={props.onInputChange}\n placeholder={props.placeholder}\n width={props.width}\n isOptionDisabled={props.isOptionDisabled}\n {...commonProps}\n />\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AA0CO,SAAS,aAAa,KAA0B,EAAA;AA1CvD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AA2CE,EAAM,MAAA,EAAE,QAAS,EAAA,GAAI,KAAM,CAAA,OAAA,CAAA;AAC3B,EAAA,MAAM,WAAc,GAAA;AAAA,IAClB,KAAA,EAAO,QAAS,CAAA,aAAA,GAAgB,EAAK,GAAA,yBAAA;AAAA,IACrC,UAAA,EAAA,CAAY,EAAM,GAAA,KAAA,CAAA,UAAA,KAAN,IAAoB,GAAA,EAAA,GAAA,mBAAA;AAAA,IAChC,SAAW,EAAA,UAAA;AAAA,GACb,CAAA;AAEA,EAAA,MAAM,YAA+B,GAAA;AAAA,IACnC,KAAA,CAAM,QAAQ,QAAS,CAAA,aAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAS,CAAA,QAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAS,CAAA,aAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAS,CAAA,QAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAS,CAAA,UAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAS,CAAA,OAAA;AAAA,IACvB,CAAA,EAAA,GAAA,KAAA,CAAM,OAAQ,CAAA,cAAA,KAAd,IAA8B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA;AAAA,IAC9B,CAAA,EAAA,GAAA,KAAA,CAAM,OAAQ,CAAA,cAAA,KAAd,IAA8B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA;AAAA,GAChC,CAAE,MAAO,CAAA,KAAA,CAAM,YAAY,CAAA,CAAA;AAC3B,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,gBAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,OAAO,KAAM,CAAA,KAAA;AAAA,MACb,eAAa,KAAM,CAAA,aAAA,CAAA;AAAA,MACnB,UAAU,KAAM,CAAA,QAAA;AAAA,MAChB,OAAO,KAAM,CAAA,KAAA;AAAA,MACb,OAAO,KAAM,CAAA,KAAA;AAAA,MACb,aAAa,KAAM,CAAA,WAAA;AAAA,MACnB,YAAA;AAAA,MACA,QAAQ,KAAM,CAAA,MAAA;AAAA,MACd,QAAU,EAAA,KAAA,CAAM,QAAY,IAAA,CAAC,QAAS,CAAA,aAAA;AAAA,MACtC,kBAAkB,KAAM,CAAA,gBAAA;AAAA,MACxB,WAAW,KAAM,CAAA,SAAA;AAAA,MACjB,uBAAuB,KAAM,CAAA,qBAAA;AAAA,MAC7B,SAAS,KAAM,CAAA,OAAA;AAAA,MACf,aAAa,KAAM,CAAA,WAAA;AAAA,MACnB,SAAS,KAAM,CAAA,OAAA;AAAA,MACf,SAAS,KAAM,CAAA,OAAA;AAAA,MACf,yBAAyB,KAAM,CAAA,uBAAA;AAAA,MAC/B,eAAe,KAAM,CAAA,aAAA;AAAA,MACrB,eAAe,KAAM,CAAA,aAAA;AAAA,MACrB,kBAAkB,KAAM,CAAA,gBAAA;AAAA,MACxB,eAAe,KAAM,CAAA,aAAA;AAAA,MACrB,cAAc,KAAM,CAAA,YAAA;AAAA,MACpB,kBAAkB,KAAM,CAAA,gBAAA;AAAA,MACxB,QAAQ,KAAM,CAAA,MAAA;AAAA,MACd,gBAAgB,KAAM,CAAA,cAAA;AAAA,MACtB,eAAe,KAAM,CAAA,aAAA;AAAA,MACrB,aAAa,KAAM,CAAA,WAAA;AAAA,MACnB,OAAO,KAAM,CAAA,KAAA;AAAA,MACb,kBAAkB,KAAM,CAAA,gBAAA;AAAA,KACpB,EAAA,WAAA,CAAA;AAAA,GACN,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"ConfigSelect.js","sources":["../../../../../src/sql/ConfigEditor/ConfigSelect.tsx"],"sourcesContent":["import React, { DependencyList } from 'react';\nimport { DataSourcePluginOptionsEditorProps, SelectableValue } from '@grafana/data';\nimport { InputActionMeta } from '@grafana/ui';\nimport { AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { ResourceSelector } from '../ResourceSelector';\nimport { DEFAULT_LABEL_WIDTH } from '../../components/ConnectionConfig';\n\nexport interface ConfigSelectProps\n extends DataSourcePluginOptionsEditorProps<AwsAuthDataSourceJsonData, AwsAuthDataSourceSecureJsonData> {\n value: string;\n fetch: () => Promise<Array<string | SelectableValue<string>>>;\n onChange: (e: SelectableValue<string> | null) => void;\n dependencies?: string[];\n // input id and label necessary for accessibility attributes\n id: string;\n label: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n allowCustomValue?: boolean;\n saveOptions: () => Promise<void>;\n autoFocus?: boolean;\n backspaceRemovesValue?: boolean;\n className?: string;\n invalid?: boolean;\n isClearable?: boolean;\n isMulti?: boolean;\n inputId?: string;\n showAllSelectedWhenOpen?: boolean;\n maxMenuHeight?: number;\n minMenuHeight?: number;\n maxVisibleValues?: number;\n menuPlacement?: 'auto' | 'bottom' | 'top';\n menuPosition?: 'fixed' | 'absolute';\n noOptionsMessage?: string;\n onBlur?: () => void;\n onCreateOption?: (value: string) => void;\n onInputChange?: (value: string, actionMeta: InputActionMeta) => void;\n placeholder?: string;\n width?: number;\n isOptionDisabled?: () => boolean;\n labelWidth?: number;\n newFormStylingEnabled?: boolean;\n}\n\nexport function ConfigSelect(props: ConfigSelectProps) {\n const { jsonData } = props.options;\n const commonProps = {\n title: jsonData.defaultRegion ? '' : 'select a default region',\n labelWidth: props.labelWidth ?? DEFAULT_LABEL_WIDTH,\n className: 'width-30',\n };\n // Any change in the AWS connection details will affect selectors\n const dependencies: DependencyList = [\n props.options.jsonData.assumeRoleArn,\n props.options.jsonData.authType,\n props.options.jsonData.defaultRegion,\n props.options.jsonData.endpoint,\n props.options.jsonData.externalId,\n props.options.jsonData.profile,\n props.options.secureJsonData?.accessKey,\n props.options.secureJsonData?.secretKey,\n ].concat(props.dependencies);\n return (\n <ResourceSelector\n id={props.id}\n newFormStylingEnabled={props.newFormStylingEnabled}\n label={props.label}\n data-testid={props['data-testid']}\n onChange={props.onChange}\n fetch={props.fetch}\n value={props.value}\n saveOptions={props.saveOptions}\n dependencies={dependencies}\n hidden={props.hidden}\n disabled={props.disabled || !jsonData.defaultRegion}\n allowCustomValue={props.allowCustomValue}\n autoFocus={props.autoFocus}\n backspaceRemovesValue={props.backspaceRemovesValue}\n invalid={props.invalid}\n isClearable={props.isClearable}\n isMulti={props.isMulti}\n inputId={props.inputId}\n showAllSelectedWhenOpen={props.showAllSelectedWhenOpen}\n maxMenuHeight={props.maxMenuHeight}\n minMenuHeight={props.minMenuHeight}\n maxVisibleValues={props.maxVisibleValues}\n menuPlacement={props.menuPlacement}\n menuPosition={props.menuPosition}\n noOptionsMessage={props.noOptionsMessage}\n onBlur={props.onBlur}\n onCreateOption={props.onCreateOption}\n onInputChange={props.onInputChange}\n placeholder={props.placeholder}\n width={props.width}\n isOptionDisabled={props.isOptionDisabled}\n {...commonProps}\n />\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AA6CO,SAAS,aAAa,KAA0B,EAAA;AA7CvD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AA8CE,EAAM,MAAA,EAAE,QAAS,EAAA,GAAI,KAAM,CAAA,OAAA,CAAA;AAC3B,EAAA,MAAM,WAAc,GAAA;AAAA,IAClB,KAAA,EAAO,QAAS,CAAA,aAAA,GAAgB,EAAK,GAAA,yBAAA;AAAA,IACrC,UAAA,EAAA,CAAY,EAAM,GAAA,KAAA,CAAA,UAAA,KAAN,IAAoB,GAAA,EAAA,GAAA,mBAAA;AAAA,IAChC,SAAW,EAAA,UAAA;AAAA,GACb,CAAA;AAEA,EAAA,MAAM,YAA+B,GAAA;AAAA,IACnC,KAAA,CAAM,QAAQ,QAAS,CAAA,aAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAS,CAAA,QAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAS,CAAA,aAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAS,CAAA,QAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAS,CAAA,UAAA;AAAA,IACvB,KAAA,CAAM,QAAQ,QAAS,CAAA,OAAA;AAAA,IACvB,CAAA,EAAA,GAAA,KAAA,CAAM,OAAQ,CAAA,cAAA,KAAd,IAA8B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA;AAAA,IAC9B,CAAA,EAAA,GAAA,KAAA,CAAM,OAAQ,CAAA,cAAA,KAAd,IAA8B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,SAAA;AAAA,GAChC,CAAE,MAAO,CAAA,KAAA,CAAM,YAAY,CAAA,CAAA;AAC3B,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,gBAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,IAAI,KAAM,CAAA,EAAA;AAAA,MACV,uBAAuB,KAAM,CAAA,qBAAA;AAAA,MAC7B,OAAO,KAAM,CAAA,KAAA;AAAA,MACb,eAAa,KAAM,CAAA,aAAA,CAAA;AAAA,MACnB,UAAU,KAAM,CAAA,QAAA;AAAA,MAChB,OAAO,KAAM,CAAA,KAAA;AAAA,MACb,OAAO,KAAM,CAAA,KAAA;AAAA,MACb,aAAa,KAAM,CAAA,WAAA;AAAA,MACnB,YAAA;AAAA,MACA,QAAQ,KAAM,CAAA,MAAA;AAAA,MACd,QAAU,EAAA,KAAA,CAAM,QAAY,IAAA,CAAC,QAAS,CAAA,aAAA;AAAA,MACtC,kBAAkB,KAAM,CAAA,gBAAA;AAAA,MACxB,WAAW,KAAM,CAAA,SAAA;AAAA,MACjB,uBAAuB,KAAM,CAAA,qBAAA;AAAA,MAC7B,SAAS,KAAM,CAAA,OAAA;AAAA,MACf,aAAa,KAAM,CAAA,WAAA;AAAA,MACnB,SAAS,KAAM,CAAA,OAAA;AAAA,MACf,SAAS,KAAM,CAAA,OAAA;AAAA,MACf,yBAAyB,KAAM,CAAA,uBAAA;AAAA,MAC/B,eAAe,KAAM,CAAA,aAAA;AAAA,MACrB,eAAe,KAAM,CAAA,aAAA;AAAA,MACrB,kBAAkB,KAAM,CAAA,gBAAA;AAAA,MACxB,eAAe,KAAM,CAAA,aAAA;AAAA,MACrB,cAAc,KAAM,CAAA,YAAA;AAAA,MACpB,kBAAkB,KAAM,CAAA,gBAAA;AAAA,MACxB,QAAQ,KAAM,CAAA,MAAA;AAAA,MACd,gBAAgB,KAAM,CAAA,cAAA;AAAA,MACtB,eAAe,KAAM,CAAA,aAAA;AAAA,MACrB,aAAa,KAAM,CAAA,WAAA;AAAA,MACnB,OAAO,KAAM,CAAA,KAAA;AAAA,MACb,kBAAkB,KAAM,CAAA,gBAAA;AAAA,KACpB,EAAA,WAAA,CAAA;AAAA,GACN,CAAA;AAEJ;;;;"}
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { InlineField, Input } from '@grafana/ui';
3
- import { DEFAULT_LABEL_WIDTH } from '../../ConnectionConfig.js';
3
+ import { DEFAULT_LABEL_WIDTH } from '../../components/ConnectionConfig.js';
4
4
 
5
5
  function InlineInput(props) {
6
6
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"InlineInput.js","sources":["../../../../../src/sql/ConfigEditor/InlineInput.tsx"],"sourcesContent":["import React from 'react';\nimport { DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { InlineField, Input } from '@grafana/ui';\nimport { FormEvent } from 'react-dom/node_modules/@types/react';\nimport { DEFAULT_LABEL_WIDTH } from '../../ConnectionConfig';\n\nexport interface InlineInputProps extends DataSourcePluginOptionsEditorProps<{}, AwsAuthDataSourceSecureJsonData> {\n value: string;\n onChange: (e: FormEvent<HTMLInputElement>) => void;\n label?: string;\n tooltip?: string;\n placeholder?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n labelWidth?: number;\n}\n\nexport function InlineInput(props: InlineInputProps) {\n return (\n <InlineField\n label={props.label}\n labelWidth={props.labelWidth ?? DEFAULT_LABEL_WIDTH}\n tooltip={props.tooltip}\n hidden={props.hidden}\n disabled={props.disabled}\n >\n <Input\n data-testid={props['data-testid']}\n className=\"width-30\"\n value={props.value}\n onChange={props.onChange}\n placeholder={props.placeholder}\n disabled={props.disabled}\n />\n </InlineField>\n );\n}\n"],"names":[],"mappings":";;;;AAmBO,SAAS,YAAY,KAAyB,EAAA;AAnBrD,EAAA,IAAA,EAAA,CAAA;AAoBE,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,OAAO,KAAM,CAAA,KAAA;AAAA,MACb,UAAA,EAAA,CAAY,EAAM,GAAA,KAAA,CAAA,UAAA,KAAN,IAAoB,GAAA,EAAA,GAAA,mBAAA;AAAA,MAChC,SAAS,KAAM,CAAA,OAAA;AAAA,MACf,QAAQ,KAAM,CAAA,MAAA;AAAA,MACd,UAAU,KAAM,CAAA,QAAA;AAAA,KAAA;AAAA,oBAEhB,KAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,eAAa,KAAM,CAAA,aAAA,CAAA;AAAA,QACnB,SAAU,EAAA,UAAA;AAAA,QACV,OAAO,KAAM,CAAA,KAAA;AAAA,QACb,UAAU,KAAM,CAAA,QAAA;AAAA,QAChB,aAAa,KAAM,CAAA,WAAA;AAAA,QACnB,UAAU,KAAM,CAAA,QAAA;AAAA,OAAA;AAAA,KAClB;AAAA,GACF,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"InlineInput.js","sources":["../../../../../src/sql/ConfigEditor/InlineInput.tsx"],"sourcesContent":["import React from 'react';\nimport { DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { AwsAuthDataSourceSecureJsonData } from '../../types';\nimport { InlineField, Input } from '@grafana/ui';\nimport { FormEvent } from 'react-dom/node_modules/@types/react';\nimport { DEFAULT_LABEL_WIDTH } from '../../components/ConnectionConfig';\n\nexport interface InlineInputProps extends DataSourcePluginOptionsEditorProps<{}, AwsAuthDataSourceSecureJsonData> {\n value: string;\n onChange: (e: FormEvent<HTMLInputElement>) => void;\n label?: string;\n tooltip?: string;\n placeholder?: string;\n 'data-testid'?: string;\n hidden?: boolean;\n disabled?: boolean;\n labelWidth?: number;\n}\n\nexport function InlineInput(props: InlineInputProps) {\n return (\n <InlineField\n label={props.label}\n labelWidth={props.labelWidth ?? DEFAULT_LABEL_WIDTH}\n tooltip={props.tooltip}\n hidden={props.hidden}\n disabled={props.disabled}\n >\n <Input\n data-testid={props['data-testid']}\n className=\"width-30\"\n value={props.value}\n onChange={props.onChange}\n placeholder={props.placeholder}\n disabled={props.disabled}\n />\n </InlineField>\n );\n}\n"],"names":[],"mappings":";;;;AAmBO,SAAS,YAAY,KAAyB,EAAA;AAnBrD,EAAA,IAAA,EAAA,CAAA;AAoBE,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,OAAO,KAAM,CAAA,KAAA;AAAA,MACb,UAAA,EAAA,CAAY,EAAM,GAAA,KAAA,CAAA,UAAA,KAAN,IAAoB,GAAA,EAAA,GAAA,mBAAA;AAAA,MAChC,SAAS,KAAM,CAAA,OAAA;AAAA,MACf,QAAQ,KAAM,CAAA,MAAA;AAAA,MACd,UAAU,KAAM,CAAA,QAAA;AAAA,KAAA;AAAA,oBAEhB,KAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,eAAa,KAAM,CAAA,aAAA,CAAA;AAAA,QACnB,SAAU,EAAA,UAAA;AAAA,QACV,OAAO,KAAM,CAAA,KAAA;AAAA,QACb,UAAU,KAAM,CAAA,QAAA;AAAA,QAChB,aAAa,KAAM,CAAA,WAAA;AAAA,QACnB,UAAU,KAAM,CAAA,QAAA;AAAA,OAAA;AAAA,KAClB;AAAA,GACF,CAAA;AAEJ;;;;"}
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
- import { InlineField, Select, Input } from '@grafana/ui';
2
+ import { Select, Input, InlineField } from '@grafana/ui';
3
+ import { EditorField } from '@grafana/experimental';
3
4
 
4
5
  var __defProp = Object.defineProperty;
5
6
  var __defProps = Object.defineProperties;
@@ -41,11 +42,13 @@ const SelectableFillValueOptions = [
41
42
  }
42
43
  ];
43
44
  function FillValueSelect(props) {
44
- var _a, _b, _c;
45
- return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(InlineField, { label: "Fill value", tooltip: "value to fill missing points" }, /* @__PURE__ */ React.createElement(
45
+ var _a, _b, _c, _d, _e, _f;
46
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, props.newFormStylingEnabled ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(EditorField, { label: "Fill with", tooltip: "value to fill missing points", htmlFor: "fillWith" }, /* @__PURE__ */ React.createElement(
46
47
  Select,
47
48
  {
48
- "aria-label": "Fill value",
49
+ id: "fillWith",
50
+ "aria-label": "Fill with",
51
+ "data-testid": "table-fill-with-select",
49
52
  options: SelectableFillValueOptions,
50
53
  value: (_b = (_a = props.query.fillMode) == null ? void 0 : _a.mode) != null ? _b : 0 /* Previous */,
51
54
  onChange: ({ value }) => {
@@ -55,10 +58,43 @@ function FillValueSelect(props) {
55
58
  }));
56
59
  (_a2 = props.onRunQuery) == null ? void 0 : _a2.call(props);
57
60
  },
61
+ menuShouldPortal: true
62
+ }
63
+ )), ((_c = props.query.fillMode) == null ? void 0 : _c.mode) === 2 /* Value */ && /* @__PURE__ */ React.createElement(EditorField, { label: "Value", htmlFor: "valueToFill", width: 6 }, /* @__PURE__ */ React.createElement(
64
+ Input,
65
+ {
66
+ id: "valueToFill",
67
+ "aria-label": "Value",
68
+ type: "number",
69
+ value: props.query.fillMode.value,
70
+ onChange: ({ currentTarget }) => props.onChange(__spreadProps(__spreadValues({}, props.query), {
71
+ fillMode: {
72
+ mode: 2 /* Value */,
73
+ value: currentTarget.valueAsNumber
74
+ }
75
+ })),
76
+ onBlur: () => {
77
+ var _a2;
78
+ return (_a2 = props.onRunQuery) == null ? void 0 : _a2.call(props);
79
+ }
80
+ }
81
+ ))) : /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(InlineField, { label: "Fill value", tooltip: "value to fill missing points" }, /* @__PURE__ */ React.createElement(
82
+ Select,
83
+ {
84
+ "aria-label": "Fill value",
85
+ options: SelectableFillValueOptions,
86
+ value: (_e = (_d = props.query.fillMode) == null ? void 0 : _d.mode) != null ? _e : 0 /* Previous */,
87
+ onChange: ({ value }) => {
88
+ var _a2;
89
+ props.onChange(__spreadProps(__spreadValues({}, props.query), {
90
+ fillMode: __spreadProps(__spreadValues({}, props.query.fillMode), { mode: value })
91
+ }));
92
+ (_a2 = props.onRunQuery) == null ? void 0 : _a2.call(props);
93
+ },
58
94
  className: "width-12",
59
95
  menuShouldPortal: true
60
96
  }
61
- )), ((_c = props.query.fillMode) == null ? void 0 : _c.mode) === 2 /* Value */ && /* @__PURE__ */ React.createElement(InlineField, { label: "Value", labelWidth: 11 }, /* @__PURE__ */ React.createElement(
97
+ )), ((_f = props.query.fillMode) == null ? void 0 : _f.mode) === 2 /* Value */ && /* @__PURE__ */ React.createElement(InlineField, { label: "Value", labelWidth: 11 }, /* @__PURE__ */ React.createElement(
62
98
  Input,
63
99
  {
64
100
  type: "number",
@@ -75,7 +111,7 @@ function FillValueSelect(props) {
75
111
  return (_a2 = props.onRunQuery) == null ? void 0 : _a2.call(props);
76
112
  }
77
113
  }
78
- )));
114
+ ))));
79
115
  }
80
116
 
81
117
  export { FillValueOptions, FillValueSelect, SelectableFillValueOptions };