@grafana/aws-sdk 0.3.4 → 0.4.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.
@@ -1,12 +1,12 @@
1
1
  import React, { useState, useMemo, useEffect } from 'react';
2
- import { FieldSet, InlineField, Select, Input, ButtonGroup, ToolbarButton, Collapse } from '@grafana/ui';
2
+ import { Field, 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
5
  import { standardRegions } from '../regions.js';
6
6
  import { AwsAuthType } from '../types.js';
7
7
  import { awsAuthProviderOptions } from '../providers.js';
8
- import { NewConnectionConfig } from './NewConnectionConfig.js';
9
8
  import { assumeRoleInstructionsStyle } from './ConnectionConfig.styles.js';
9
+ import { ConfigSection, ConfigSubSection } from '@grafana/experimental';
10
10
 
11
11
  var __defProp = Object.defineProperty;
12
12
  var __defProps = Object.defineProperties;
@@ -37,8 +37,7 @@ const ConnectionConfig = (props) => {
37
37
  var _a, _b, _c, _d, _e, _f, _g, _h;
38
38
  const [isARNInstructionsOpen, setIsARNInstructionsOpen] = useState(false);
39
39
  const [regions, setRegions] = useState((props.standardRegions || standardRegions).map(toOption));
40
- const { loadRegions, onOptionsChange, skipHeader = false, skipEndpoint = false } = props;
41
- const { labelWidth = DEFAULT_LABEL_WIDTH, options, inExperimentalAuthComponent } = props;
40
+ const { loadRegions, onOptionsChange, skipHeader = false, skipEndpoint = false, options } = props;
42
41
  let profile = options.jsonData.profile;
43
42
  if (profile === void 0) {
44
43
  profile = options.database;
@@ -65,30 +64,18 @@ const ConnectionConfig = (props) => {
65
64
  }
66
65
  loadRegions().then((regions2) => setRegions(regions2.map(toOption)));
67
66
  }, [loadRegions]);
68
- const inputWidth = inExperimentalAuthComponent ? "width-20" : "width-30";
69
- return /* @__PURE__ */ React.createElement(React.Fragment, null, props.newFormStylingEnabled ? /* @__PURE__ */ React.createElement(
70
- NewConnectionConfig,
71
- __spreadValues({
72
- currentProvider,
73
- awsAllowedAuthProviders,
74
- isARNInstructionsOpen,
75
- setIsARNInstructionsOpen,
76
- awsAssumeRoleEnabled,
77
- regions
78
- }, props)
79
- ) : /* @__PURE__ */ React.createElement(FieldSet, { label: skipHeader ? "" : "Connection Details", "data-testid": "connection-config" }, /* @__PURE__ */ React.createElement(
80
- InlineField,
67
+ 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(
68
+ Field,
81
69
  {
82
70
  label: "Authentication Provider",
83
- labelWidth,
84
- tooltip: "Specify which AWS credentials chain to use.",
85
- htmlFor: "authenticationProvider"
71
+ description: "Specify which AWS credentials chain to use.",
72
+ htmlFor: "authProvider"
86
73
  },
87
74
  /* @__PURE__ */ React.createElement(
88
75
  Select,
89
76
  {
90
- inputId: "authenticationProvider",
91
- className: inputWidth,
77
+ "aria-label": "Authentication Provider",
78
+ inputId: "authProvider",
92
79
  value: currentProvider,
93
80
  options: awsAuthProviderOptions.filter((opt) => awsAllowedAuthProviders.includes(opt.value)),
94
81
  defaultValue: options.jsonData.authType,
@@ -99,24 +86,22 @@ const ConnectionConfig = (props) => {
99
86
  }
100
87
  )
101
88
  ), options.jsonData.authType === "credentials" && /* @__PURE__ */ React.createElement(
102
- InlineField,
89
+ Field,
103
90
  {
104
91
  label: "Credentials Profile Name",
105
- labelWidth,
106
- tooltip: "Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.",
92
+ description: "Credentials profile name, as specified in ~/.aws/credentials, leave blank for default.",
107
93
  htmlFor: "credentialsProfileName"
108
94
  },
109
95
  /* @__PURE__ */ React.createElement(
110
96
  Input,
111
97
  {
112
98
  id: "credentialsProfileName",
113
- className: inputWidth,
114
99
  placeholder: "default",
115
- value: profile,
100
+ value: options.jsonData.profile,
116
101
  onChange: onUpdateDatasourceJsonDataOption(props, "profile")
117
102
  }
118
103
  )
119
- ), options.jsonData.authType === "keys" && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(InlineField, { label: "Access Key ID", htmlFor: "accessKeyId", labelWidth }, ((_b = props.options.secureJsonFields) == null ? void 0 : _b.accessKey) ? /* @__PURE__ */ React.createElement(ButtonGroup, { className: inputWidth }, /* @__PURE__ */ React.createElement(Input, { disabled: true, placeholder: "Configured" }), /* @__PURE__ */ React.createElement(
104
+ ), options.jsonData.authType === "keys" && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Field, { label: "Access Key ID", htmlFor: "accessKeyId" }, ((_b = props.options.secureJsonFields) == null ? void 0 : _b.accessKey) ? /* @__PURE__ */ React.createElement(ButtonGroup, null, /* @__PURE__ */ React.createElement(Input, { disabled: true, placeholder: "Configured", id: "accessKeyId" }), /* @__PURE__ */ React.createElement(
120
105
  ToolbarButton,
121
106
  {
122
107
  icon: "edit",
@@ -128,13 +113,13 @@ const ConnectionConfig = (props) => {
128
113
  Input,
129
114
  {
130
115
  id: "accessKeyId",
131
- className: inputWidth,
132
116
  value: (_d = (_c = options.secureJsonData) == null ? void 0 : _c.accessKey) != null ? _d : "",
133
117
  onChange: onUpdateDatasourceSecureJsonDataOption(props, "accessKey")
134
118
  }
135
- )), /* @__PURE__ */ React.createElement(InlineField, { label: "Secret Access Key", htmlFor: "secretAccessKey", labelWidth }, ((_e = props.options.secureJsonFields) == null ? void 0 : _e.secretKey) ? /* @__PURE__ */ React.createElement(ButtonGroup, { className: inputWidth }, /* @__PURE__ */ React.createElement(Input, { disabled: true, placeholder: "Configured" }), /* @__PURE__ */ React.createElement(
119
+ )), /* @__PURE__ */ React.createElement(Field, { label: "Secret Access Key", htmlFor: "secretKey" }, ((_e = props.options.secureJsonFields) == null ? void 0 : _e.secretKey) ? /* @__PURE__ */ React.createElement(ButtonGroup, null, /* @__PURE__ */ React.createElement(Input, { disabled: true, placeholder: "Configured" }), /* @__PURE__ */ React.createElement(
136
120
  ToolbarButton,
137
121
  {
122
+ id: "secretKey",
138
123
  icon: "edit",
139
124
  type: "button",
140
125
  tooltip: "Edit Secret Access Key",
@@ -143,12 +128,11 @@ const ConnectionConfig = (props) => {
143
128
  )) : /* @__PURE__ */ React.createElement(
144
129
  Input,
145
130
  {
146
- id: "secretAccessKey",
147
- className: inputWidth,
131
+ id: "secretKey",
148
132
  value: (_g = (_f = options.secureJsonData) == null ? void 0 : _f.secretKey) != null ? _g : "",
149
133
  onChange: onUpdateDatasourceSecureJsonDataOption(props, "secretKey")
150
134
  }
151
- ))), options.jsonData.authType === AwsAuthType.GrafanaAssumeRole && /* @__PURE__ */ React.createElement("div", { className: assumeRoleInstructionsStyle }, /* @__PURE__ */ React.createElement(
135
+ )))), /* @__PURE__ */ React.createElement(ConfigSubSection, { title: "Assume Role" }, options.jsonData.authType === AwsAuthType.GrafanaAssumeRole && /* @__PURE__ */ React.createElement("div", { className: assumeRoleInstructionsStyle }, /* @__PURE__ */ React.createElement(
152
136
  Collapse,
153
137
  {
154
138
  label: "How to create an IAM role for grafana to assume:",
@@ -156,7 +140,7 @@ const ConnectionConfig = (props) => {
156
140
  isOpen: isARNInstructionsOpen,
157
141
  onToggle: () => setIsARNInstructionsOpen(!isARNInstructionsOpen)
158
142
  },
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, "AWS account"), " as the Trusted entity, and select ", /* @__PURE__ */ React.createElement("code", null, "Another AWS account"), " as the account.")), /* @__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(
143
+ /* @__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(
160
144
  "a",
161
145
  {
162
146
  href: "https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/",
@@ -166,72 +150,64 @@ const ConnectionConfig = (props) => {
166
150
  "read through our documentation"
167
151
  ), ".")), /* @__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.")))
168
152
  )), awsAssumeRoleEnabled && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
169
- InlineField,
153
+ Field,
170
154
  {
155
+ htmlFor: "assumeRoleArn",
171
156
  label: "Assume Role ARN",
172
- labelWidth,
173
- 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",
174
- htmlFor: "assumeRoleArn"
157
+ 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."
175
158
  },
176
159
  /* @__PURE__ */ React.createElement(
177
160
  Input,
178
161
  {
179
162
  id: "assumeRoleArn",
180
- className: inputWidth,
181
163
  placeholder: "arn:aws:iam:*",
182
164
  value: options.jsonData.assumeRoleArn || "",
183
165
  onChange: onUpdateDatasourceJsonDataOption(props, "assumeRoleArn")
184
166
  }
185
167
  )
186
168
  ), options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && /* @__PURE__ */ React.createElement(
187
- InlineField,
169
+ Field,
188
170
  {
171
+ htmlFor: "externalId",
189
172
  label: "External ID",
190
- labelWidth,
191
- tooltip: "If you are assuming a role in another account, that has been created with an external ID, specify the external ID here.",
192
- htmlFor: "externalId"
173
+ description: "If you are assuming a role in another account, that has been created with an external ID, specify the external ID here."
193
174
  },
194
175
  /* @__PURE__ */ React.createElement(
195
176
  Input,
196
177
  {
197
178
  id: "externalId",
198
- className: inputWidth,
199
179
  placeholder: "External ID",
200
180
  value: options.jsonData.externalId || "",
201
181
  onChange: onUpdateDatasourceJsonDataOption(props, "externalId")
202
182
  }
203
183
  )
204
- )), !skipEndpoint && options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && /* @__PURE__ */ React.createElement(
205
- InlineField,
184
+ ))), /* @__PURE__ */ React.createElement(ConfigSubSection, { title: "Additional Settings" }, !skipEndpoint && options.jsonData.authType !== AwsAuthType.GrafanaAssumeRole && /* @__PURE__ */ React.createElement(
185
+ Field,
206
186
  {
207
187
  label: "Endpoint",
208
- labelWidth,
209
- tooltip: "Optionally, specify a custom endpoint for the service",
188
+ description: "Optionally, specify a custom endpoint for the service",
210
189
  htmlFor: "endpoint"
211
190
  },
212
191
  /* @__PURE__ */ React.createElement(
213
192
  Input,
214
193
  {
215
194
  id: "endpoint",
216
- className: inputWidth,
217
195
  placeholder: (_h = props.defaultEndpoint) != null ? _h : "https://{service}.{region}.amazonaws.com",
218
196
  value: options.jsonData.endpoint || "",
219
197
  onChange: onUpdateDatasourceJsonDataOption(props, "endpoint")
220
198
  }
221
199
  )
222
200
  ), /* @__PURE__ */ React.createElement(
223
- InlineField,
201
+ Field,
224
202
  {
225
203
  label: "Default Region",
226
- labelWidth,
227
- tooltip: "Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.",
204
+ description: "Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.",
228
205
  htmlFor: "defaultRegion"
229
206
  },
230
207
  /* @__PURE__ */ React.createElement(
231
208
  Select,
232
209
  {
233
210
  inputId: "defaultRegion",
234
- className: inputWidth,
235
211
  value: regions.find((region) => region.value === options.jsonData.defaultRegion),
236
212
  options: regions,
237
213
  defaultValue: options.jsonData.defaultRegion,
@@ -241,7 +217,7 @@ const ConnectionConfig = (props) => {
241
217
  menuShouldPortal: true
242
218
  }
243
219
  )
244
- ), props.children));
220
+ )), props.children));
245
221
  };
246
222
 
247
223
  export { ConnectionConfig, DEFAULT_LABEL_WIDTH };
@@ -1 +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 } from '@grafana/ui';\nimport {\n onUpdateDatasourceJsonDataOptionSelect,\n onUpdateDatasourceResetOption,\n onUpdateDatasourceJsonDataOption,\n onUpdateDatasourceSecureJsonDataOption,\n} from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { standardRegions } from '../regions';\nimport { AwsAuthType, ConnectionConfigProps } from '../types';\nimport { awsAuthProviderOptions } from '../providers';\nimport { NewConnectionConfig } from './NewConnectionConfig';\nimport { assumeRoleInstructionsStyle } from './ConnectionConfig.styles';\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};\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\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 {...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 htmlFor=\"authenticationProvider\"\n >\n <Select\n inputId=\"authenticationProvider\"\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 htmlFor=\"credentialsProfileName\"\n >\n <Input\n id=\"credentialsProfileName\"\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\" htmlFor=\"accessKeyId\" 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 id=\"accessKeyId\"\n className={inputWidth}\n value={options.secureJsonData?.accessKey ?? ''}\n onChange={onUpdateDatasourceSecureJsonDataOption(props, 'accessKey')}\n />\n )}\n </InlineField>\n\n <InlineField label=\"Secret Access Key\" htmlFor=\"secretAccessKey\" 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 id=\"secretAccessKey\"\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={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>AWS account</code> as the Trusted\n entity, and select <code>Another AWS account</code> as the account.\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 htmlFor=\"assumeRoleArn\"\n >\n <Input\n id=\"assumeRoleArn\"\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 htmlFor=\"externalId\"\n >\n <Input\n id=\"externalId\"\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 htmlFor=\"endpoint\"\n >\n <Input\n id=\"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 htmlFor=\"defaultRegion\"\n >\n <Select\n inputId=\"defaultRegion\"\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"],"names":["regions"],"mappings":"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"}
1
+ {"version":3,"file":"ConnectionConfig.js","sources":["../../../src/components/ConnectionConfig.tsx"],"sourcesContent":["import React, { FC, useEffect, useMemo, useState } from 'react';\nimport { Input, Select, ButtonGroup, ToolbarButton, Collapse, Field } from '@grafana/ui';\nimport {\n onUpdateDatasourceJsonDataOptionSelect,\n onUpdateDatasourceResetOption,\n onUpdateDatasourceJsonDataOption,\n onUpdateDatasourceSecureJsonDataOption,\n} from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { standardRegions } from '../regions';\nimport { AwsAuthType, ConnectionConfigProps } from '../types';\nimport { awsAuthProviderOptions } from '../providers';\nimport { assumeRoleInstructionsStyle } from './ConnectionConfig.styles';\nimport { ConfigSection, ConfigSubSection } from '@grafana/experimental';\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};\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, options } = 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\n return <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 aria-label='Authentication Provider'\n inputId=\"authProvider\"\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 {!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 inputId=\"defaultRegion\"\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"],"names":["regions"],"mappings":"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"}
@@ -40,7 +40,6 @@ function ConfigSelect(props) {
40
40
  ResourceSelector,
41
41
  __spreadValues({
42
42
  id: props.id,
43
- newFormStylingEnabled: props.newFormStylingEnabled,
44
43
  label: props.label,
45
44
  "data-testid": props["data-testid"],
46
45
  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 '../../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
+ {"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}\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 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":";;;;;;;;;;;;;;;;;;;;AA4CO,SAAS,aAAa,KAA0B,EAAA;AA5CvD,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AA6CE,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,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,5 +1,5 @@
1
1
  import React from 'react';
2
- import { Select, Input, InlineField } from '@grafana/ui';
2
+ import { Select, Input } from '@grafana/ui';
3
3
  import { EditorField } from '@grafana/experimental';
4
4
 
5
5
  var __defProp = Object.defineProperty;
@@ -42,8 +42,8 @@ const SelectableFillValueOptions = [
42
42
  }
43
43
  ];
44
44
  function FillValueSelect(props) {
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(
45
+ var _a, _b, _c;
46
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(EditorField, { label: "Fill with", tooltip: "value to fill missing points", htmlFor: "fillWith" }, /* @__PURE__ */ React.createElement(
47
47
  Select,
48
48
  {
49
49
  id: "fillWith",
@@ -78,40 +78,7 @@ function FillValueSelect(props) {
78
78
  return (_a2 = props.onRunQuery) == null ? void 0 : _a2.call(props);
79
79
  }
80
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
- },
94
- className: "width-12",
95
- menuShouldPortal: true
96
- }
97
- )), ((_f = props.query.fillMode) == null ? void 0 : _f.mode) === 2 /* Value */ && /* @__PURE__ */ React.createElement(InlineField, { label: "Value", labelWidth: 11 }, /* @__PURE__ */ React.createElement(
98
- Input,
99
- {
100
- type: "number",
101
- "aria-label": "Value",
102
- value: props.query.fillMode.value,
103
- onChange: ({ currentTarget }) => props.onChange(__spreadProps(__spreadValues({}, props.query), {
104
- fillMode: {
105
- mode: 2 /* Value */,
106
- value: currentTarget.valueAsNumber
107
- }
108
- })),
109
- onBlur: () => {
110
- var _a2;
111
- return (_a2 = props.onRunQuery) == null ? void 0 : _a2.call(props);
112
- }
113
- }
114
- ))));
81
+ )));
115
82
  }
116
83
 
117
84
  export { FillValueOptions, FillValueSelect, SelectableFillValueOptions };
@@ -1 +1 @@
1
- {"version":3,"file":"FillValueSelect.js","sources":["../../../../src/sql/QueryEditor/FillValueSelect.tsx"],"sourcesContent":["import React from 'react';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { InlineField, Input, Select } from '@grafana/ui';\nimport { EditorField } from '@grafana/experimental';\n\nexport enum FillValueOptions {\n Previous,\n Null,\n Value,\n}\n\nexport const SelectableFillValueOptions: Array<SelectableValue<FillValueOptions>> = [\n {\n label: 'Previous Value',\n value: FillValueOptions.Previous,\n },\n {\n label: 'NULL',\n value: FillValueOptions.Null,\n },\n {\n label: 'Value',\n value: FillValueOptions.Value,\n },\n];\n\nexport type FillValueSelectProps<TQuery extends DataQuery> = {\n query: TQuery;\n onChange: (value: TQuery) => void;\n newFormStylingEnabled?: boolean;\n onRunQuery?: () => void;\n};\n\nexport function FillValueSelect<TQuery extends DataQuery & Record<string, any>>(props: FillValueSelectProps<TQuery>) {\n return (\n <>\n {props.newFormStylingEnabled ? (\n <>\n <EditorField label=\"Fill with\" tooltip=\"value to fill missing points\" htmlFor=\"fillWith\">\n <Select\n id=\"fillWith\"\n aria-label=\"Fill with\"\n data-testid=\"table-fill-with-select\"\n options={SelectableFillValueOptions}\n value={props.query.fillMode?.mode ?? FillValueOptions.Previous}\n onChange={({ value }) => {\n props.onChange({\n ...props.query,\n // Keep the fillMode.value in case FillValueOptions.Value mode is selected back\n fillMode: { ...props.query.fillMode, mode: value },\n });\n props.onRunQuery?.();\n }}\n menuShouldPortal={true}\n />\n </EditorField>\n {props.query.fillMode?.mode === FillValueOptions.Value && (\n <EditorField label=\"Value\" htmlFor=\"valueToFill\" width={6}>\n <Input\n id=\"valueToFill\"\n aria-label=\"Value\"\n type=\"number\"\n value={props.query.fillMode.value}\n onChange={({ currentTarget }: React.FormEvent<HTMLInputElement>) =>\n props.onChange({\n ...props.query,\n fillMode: {\n mode: FillValueOptions.Value,\n value: currentTarget.valueAsNumber,\n },\n })\n }\n onBlur={() => props.onRunQuery?.()}\n />\n </EditorField>\n )}\n </>\n ) : (\n <>\n <InlineField label=\"Fill value\" tooltip=\"value to fill missing points\">\n <Select\n aria-label=\"Fill value\"\n options={SelectableFillValueOptions}\n value={props.query.fillMode?.mode ?? FillValueOptions.Previous}\n onChange={({ value }) => {\n props.onChange({\n ...props.query,\n // Keep the fillMode.value in case FillValueOptions.Value mode is selected back\n fillMode: { ...props.query.fillMode, mode: value },\n });\n props.onRunQuery?.();\n }}\n className=\"width-12\"\n menuShouldPortal={true}\n />\n </InlineField>\n {props.query.fillMode?.mode === FillValueOptions.Value && (\n <InlineField label=\"Value\" labelWidth={11}>\n <Input\n type=\"number\"\n aria-label=\"Value\"\n value={props.query.fillMode.value}\n onChange={({ currentTarget }: React.FormEvent<HTMLInputElement>) =>\n props.onChange({\n ...props.query,\n fillMode: {\n mode: FillValueOptions.Value,\n value: currentTarget.valueAsNumber,\n },\n })\n }\n onBlur={() => props.onRunQuery?.()}\n />\n </InlineField>\n )}\n </>\n )}\n </>\n );\n}\n"],"names":["FillValueOptions","_a"],"mappings":"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"}
1
+ {"version":3,"file":"FillValueSelect.js","sources":["../../../../src/sql/QueryEditor/FillValueSelect.tsx"],"sourcesContent":["import React from 'react';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { Input, Select } from '@grafana/ui';\nimport { EditorField } from '@grafana/experimental';\n\nexport enum FillValueOptions {\n Previous,\n Null,\n Value,\n}\n\nexport const SelectableFillValueOptions: Array<SelectableValue<FillValueOptions>> = [\n {\n label: 'Previous Value',\n value: FillValueOptions.Previous,\n },\n {\n label: 'NULL',\n value: FillValueOptions.Null,\n },\n {\n label: 'Value',\n value: FillValueOptions.Value,\n },\n];\n\nexport type FillValueSelectProps<TQuery extends DataQuery> = {\n query: TQuery;\n onChange: (value: TQuery) => void;\n onRunQuery?: () => void;\n};\n\nexport function FillValueSelect<TQuery extends DataQuery & Record<string, any>>(props: FillValueSelectProps<TQuery>) {\n return (\n <>\n <EditorField label=\"Fill with\" tooltip=\"value to fill missing points\" htmlFor=\"fillWith\">\n <Select\n id=\"fillWith\"\n aria-label=\"Fill with\"\n data-testid=\"table-fill-with-select\"\n options={SelectableFillValueOptions}\n value={props.query.fillMode?.mode ?? FillValueOptions.Previous}\n onChange={({ value }) => {\n props.onChange({\n ...props.query,\n // Keep the fillMode.value in case FillValueOptions.Value mode is selected back\n fillMode: { ...props.query.fillMode, mode: value },\n });\n props.onRunQuery?.();\n }}\n menuShouldPortal={true}\n />\n </EditorField>\n {props.query.fillMode?.mode === FillValueOptions.Value && (\n <EditorField label=\"Value\" htmlFor=\"valueToFill\" width={6}>\n <Input\n id=\"valueToFill\"\n aria-label=\"Value\"\n type=\"number\"\n value={props.query.fillMode.value}\n onChange={({ currentTarget }: React.FormEvent<HTMLInputElement>) =>\n props.onChange({\n ...props.query,\n fillMode: {\n mode: FillValueOptions.Value,\n value: currentTarget.valueAsNumber,\n },\n })\n }\n onBlur={() => props.onRunQuery?.()}\n />\n </EditorField>\n )}\n </>\n );\n}\n"],"names":["FillValueOptions","_a"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAKY,IAAA,gBAAA,qBAAAA,iBAAL,KAAA;AACL,EAAAA,iBAAA,CAAA,iBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAA,CAAA;AACA,EAAAA,iBAAA,CAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA,CAAA;AACA,EAAAA,iBAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAA,CAAA;AAHU,EAAAA,OAAAA,iBAAAA,CAAAA;AAAA,CAAA,EAAA,gBAAA,IAAA,EAAA,EAAA;AAML,MAAM,0BAAuE,GAAA;AAAA,EAClF;AAAA,IACE,KAAO,EAAA,gBAAA;AAAA,IACP,KAAO,EAAA,CAAA;AAAA,GACT;AAAA,EACA;AAAA,IACE,KAAO,EAAA,MAAA;AAAA,IACP,KAAO,EAAA,CAAA;AAAA,GACT;AAAA,EACA;AAAA,IACE,KAAO,EAAA,OAAA;AAAA,IACP,KAAO,EAAA,CAAA;AAAA,GACT;AACF,EAAA;AAQO,SAAS,gBAAgE,KAAqC,EAAA;AAhCrH,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAiCE,EACM,uBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,sCACG,WAAY,EAAA,EAAA,KAAA,EAAM,aAAY,OAAQ,EAAA,8BAAA,EAA+B,SAAQ,UAC5E,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,EAAG,EAAA,UAAA;AAAA,MACH,YAAW,EAAA,WAAA;AAAA,MACX,aAAY,EAAA,wBAAA;AAAA,MACZ,OAAS,EAAA,0BAAA;AAAA,MACT,QAAO,EAAM,GAAA,CAAA,EAAA,GAAA,KAAA,CAAA,KAAA,CAAM,QAAZ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAsB,SAAtB,IAA8B,GAAA,EAAA,GAAA,CAAA;AAAA,MACrC,QAAU,EAAA,CAAC,EAAE,KAAA,EAAY,KAAA;AA1CvC,QAAAC,IAAAA,GAAAA,CAAAA;AA2CgB,QAAM,KAAA,CAAA,QAAA,CAAS,aACV,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAM,KADI,CAAA,EAAA;AAAA,UAGb,UAAU,aAAK,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAM,MAAM,QAAjB,CAAA,EAAA,EAA2B,MAAM,KAAM,EAAA,CAAA;AAAA,SAClD,CAAA,CAAA,CAAA;AACD,QAAA,CAAAA,GAAA,GAAA,KAAA,CAAM,UAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,GAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA;AAAA,OACF;AAAA,MACA,gBAAkB,EAAA,IAAA;AAAA,KAAA;AAAA,GAEtB,CAAA,EAAA,CAAA,CACC,EAAM,GAAA,KAAA,CAAA,KAAA,CAAM,aAAZ,IAAsB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,MAAS,CAC9B,gCAAA,KAAA,CAAA,aAAA,CAAC,eAAY,KAAM,EAAA,OAAA,EAAQ,OAAQ,EAAA,aAAA,EAAc,OAAO,CACtD,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,EAAG,EAAA,aAAA;AAAA,MACH,YAAW,EAAA,OAAA;AAAA,MACX,IAAK,EAAA,QAAA;AAAA,MACL,KAAA,EAAO,KAAM,CAAA,KAAA,CAAM,QAAS,CAAA,KAAA;AAAA,MAC5B,QAAA,EAAU,CAAC,EAAE,aAAA,OACX,KAAM,CAAA,QAAA,CAAS,aACV,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAM,KADI,CAAA,EAAA;AAAA,QAEb,QAAU,EAAA;AAAA,UACR,IAAM,EAAA,CAAA;AAAA,UACN,OAAO,aAAc,CAAA,aAAA;AAAA,SACvB;AAAA,OACD,CAAA,CAAA;AAAA,MAEH,QAAQ,MAAG;AArE3B,QAAAA,IAAAA,GAAAA,CAAAA;AAqE8B,QAAA,OAAA,CAAAA,GAAA,GAAA,KAAA,CAAM,UAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,GAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAAA,GAElB,CAEJ,CAAA,CAAA;AAER;;;;"}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { Select, InlineField } from '@grafana/ui';
2
+ import { Select } from '@grafana/ui';
3
3
 
4
4
  var __defProp = Object.defineProperty;
5
5
  var __defProps = Object.defineProperties;
@@ -29,7 +29,7 @@ function FormatSelect(props) {
29
29
  }));
30
30
  (_a2 = props.onRunQuery) == null ? void 0 : _a2.call(props);
31
31
  };
32
- return /* @__PURE__ */ React.createElement(React.Fragment, null, props.newFormStylingEnabled ? /* @__PURE__ */ React.createElement(
32
+ return /* @__PURE__ */ React.createElement(
33
33
  Select,
34
34
  {
35
35
  "aria-label": "Format data frames as",
@@ -39,17 +39,7 @@ function FormatSelect(props) {
39
39
  onChange: onChangeFormat,
40
40
  menuShouldPortal: true
41
41
  }
42
- ) : /* @__PURE__ */ React.createElement(InlineField, { label: "Format as", labelWidth: 11 }, /* @__PURE__ */ React.createElement(
43
- Select,
44
- {
45
- "aria-label": "Format as",
46
- options: props.options,
47
- value: props.query.format,
48
- onChange: onChangeFormat,
49
- className: "width-12",
50
- menuShouldPortal: true
51
- }
52
- )));
42
+ );
53
43
  }
54
44
 
55
45
  export { FormatSelect };
@@ -1 +1 @@
1
- {"version":3,"file":"FormatSelect.js","sources":["../../../../src/sql/QueryEditor/FormatSelect.tsx"],"sourcesContent":["import React from 'react';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { InlineField, Select } from '@grafana/ui';\n\nexport type FormatSelectProps<TQuery extends DataQuery, FormatOptions> = {\n newFormStylingEnabled?: boolean;\n id?: string;\n query: TQuery;\n options: Array<SelectableValue<FormatOptions>>;\n onChange: (value: TQuery) => void;\n onRunQuery?: () => void;\n};\n\nexport function FormatSelect<TQuery extends DataQuery & Record<string, any>, FormatOptions>(\n props: FormatSelectProps<TQuery, FormatOptions>\n) {\n const onChangeFormat = (e: SelectableValue<FormatOptions>) => {\n props.onChange({\n ...props.query,\n format: e.value || 0,\n });\n props.onRunQuery?.();\n };\n return (\n <>\n {props.newFormStylingEnabled ? (\n <Select\n aria-label=\"Format data frames as\"\n id={props.id ?? 'formatAs'}\n options={props.options}\n value={props.query.format}\n onChange={onChangeFormat}\n menuShouldPortal={true}\n />\n ) : (\n <InlineField label=\"Format as\" labelWidth={11}>\n <Select\n aria-label=\"Format as\"\n options={props.options}\n value={props.query.format}\n onChange={onChangeFormat}\n className=\"width-12\"\n menuShouldPortal={true}\n />\n </InlineField>\n )}\n </>\n );\n}\n"],"names":["_a"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAaO,SAAS,aACd,KACA,EAAA;AAfF,EAAA,IAAA,EAAA,CAAA;AAgBE,EAAM,MAAA,cAAA,GAAiB,CAAC,CAAsC,KAAA;AAhBhE,IAAAA,IAAAA,GAAAA,CAAAA;AAiBI,IAAM,KAAA,CAAA,QAAA,CAAS,aACV,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAM,KADI,CAAA,EAAA;AAAA,MAEb,MAAA,EAAQ,EAAE,KAAS,IAAA,CAAA;AAAA,KACpB,CAAA,CAAA,CAAA;AACD,IAAA,CAAAA,GAAA,GAAA,KAAA,CAAM,UAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,GAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA;AAAA,GACF,CAAA;AACA,EACE,uBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,EACG,MAAM,qBACL,mBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,YAAW,EAAA,uBAAA;AAAA,MACX,EAAA,EAAA,CAAI,EAAM,GAAA,KAAA,CAAA,EAAA,KAAN,IAAY,GAAA,EAAA,GAAA,UAAA;AAAA,MAChB,SAAS,KAAM,CAAA,OAAA;AAAA,MACf,KAAA,EAAO,MAAM,KAAM,CAAA,MAAA;AAAA,MACnB,QAAU,EAAA,cAAA;AAAA,MACV,gBAAkB,EAAA,IAAA;AAAA,KAAA;AAAA,sBAGnB,KAAA,CAAA,aAAA,CAAA,WAAA,EAAA,EAAY,KAAM,EAAA,WAAA,EAAY,YAAY,EACzC,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,YAAW,EAAA,WAAA;AAAA,MACX,SAAS,KAAM,CAAA,OAAA;AAAA,MACf,KAAA,EAAO,MAAM,KAAM,CAAA,MAAA;AAAA,MACnB,QAAU,EAAA,cAAA;AAAA,MACV,SAAU,EAAA,UAAA;AAAA,MACV,gBAAkB,EAAA,IAAA;AAAA,KAAA;AAAA,GAEtB,CAEJ,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"FormatSelect.js","sources":["../../../../src/sql/QueryEditor/FormatSelect.tsx"],"sourcesContent":["import React from 'react';\nimport { DataQuery, SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nexport type FormatSelectProps<TQuery extends DataQuery, FormatOptions> = {\n id?: string;\n query: TQuery;\n options: Array<SelectableValue<FormatOptions>>;\n onChange: (value: TQuery) => void;\n onRunQuery?: () => void;\n};\n\nexport function FormatSelect<TQuery extends DataQuery & Record<string, any>, FormatOptions>(\n props: FormatSelectProps<TQuery, FormatOptions>\n) {\n const onChangeFormat = (e: SelectableValue<FormatOptions>) => {\n props.onChange({\n ...props.query,\n format: e.value || 0,\n });\n props.onRunQuery?.();\n };\n return <Select\n aria-label=\"Format data frames as\"\n id={props.id ?? 'formatAs'}\n options={props.options}\n value={props.query.format}\n onChange={onChangeFormat}\n menuShouldPortal={true}\n />\n}\n"],"names":["_a"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAYO,SAAS,aACd,KACA,EAAA;AAdF,EAAA,IAAA,EAAA,CAAA;AAeE,EAAM,MAAA,cAAA,GAAiB,CAAC,CAAsC,KAAA;AAfhE,IAAAA,IAAAA,GAAAA,CAAAA;AAgBI,IAAM,KAAA,CAAA,QAAA,CAAS,aACV,CAAA,cAAA,CAAA,EAAA,EAAA,KAAA,CAAM,KADI,CAAA,EAAA;AAAA,MAEb,MAAA,EAAQ,EAAE,KAAS,IAAA,CAAA;AAAA,KACpB,CAAA,CAAA,CAAA;AACD,IAAA,CAAAA,GAAA,GAAA,KAAA,CAAM,UAAN,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,GAAA,CAAA,IAAA,CAAA,KAAA,CAAA,CAAA;AAAA,GACF,CAAA;AACA,EAAO,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACA,YAAW,EAAA,uBAAA;AAAA,MACX,EAAA,EAAA,CAAI,EAAM,GAAA,KAAA,CAAA,EAAA,KAAN,IAAY,GAAA,EAAA,GAAA,UAAA;AAAA,MAChB,SAAS,KAAM,CAAA,OAAA;AAAA,MACf,KAAA,EAAO,MAAM,KAAM,CAAA,MAAA;AAAA,MACnB,QAAU,EAAA,cAAA;AAAA,MACV,gBAAkB,EAAA,IAAA;AAAA,KAAA;AAAA,GACpB,CAAA;AACR;;;;"}
@@ -1,4 +1,4 @@
1
- import { Select, InlineField } from '@grafana/ui';
1
+ import { Select } from '@grafana/ui';
2
2
  import { isEqual } from 'lodash';
3
3
  import React, { useRef, useState, useMemo, useEffect } from 'react';
4
4
  import { defaultKey } from './types.js';
@@ -102,10 +102,11 @@ function ResourceSelector(props) {
102
102
  setIsLoading(false);
103
103
  }
104
104
  };
105
- return /* @__PURE__ */ React.createElement(React.Fragment, null, props.newFormStylingEnabled ? /* @__PURE__ */ React.createElement(
105
+ return /* @__PURE__ */ React.createElement(
106
106
  Select,
107
107
  __spreadProps(__spreadValues({}, props), {
108
108
  id: props.id,
109
+ inputId: props.id,
109
110
  "aria-label": props.label,
110
111
  options,
111
112
  onChange,
@@ -114,29 +115,7 @@ function ResourceSelector(props) {
114
115
  onOpenMenu: () => props.fetch && onClick(),
115
116
  menuShouldPortal: true
116
117
  })
117
- ) : /* @__PURE__ */ React.createElement(
118
- InlineField,
119
- {
120
- label: props.label,
121
- labelWidth: props.labelWidth,
122
- tooltip: props.tooltip,
123
- hidden: props.hidden,
124
- htmlFor: props.id
125
- },
126
- /* @__PURE__ */ React.createElement("div", { "data-testid": props["data-testid"], title: props.title }, /* @__PURE__ */ React.createElement(
127
- Select,
128
- __spreadProps(__spreadValues({}, props), {
129
- id: props.id,
130
- "aria-label": props.label,
131
- options,
132
- onChange,
133
- isLoading,
134
- className: props.className || "min-width-6",
135
- onOpenMenu: () => props.fetch && onClick(),
136
- menuShouldPortal: true
137
- })
138
- ))
139
- ));
118
+ );
140
119
  }
141
120
 
142
121
  export { ResourceSelector };
@@ -1 +1 @@
1
- {"version":3,"file":"ResourceSelector.js","sources":["../../../src/sql/ResourceSelector.tsx"],"sourcesContent":["import { SelectableValue } from '@grafana/data';\nimport { InlineField, Select, SelectCommonProps } from '@grafana/ui';\nimport { isEqual } from 'lodash';\nimport React, { useEffect, useMemo, useState, DependencyList, useRef } from 'react';\n\nimport { defaultKey } from './types';\n\nexport interface ResourceSelectorProps extends SelectCommonProps<string> {\n // props for old form styling\n tooltip?: string;\n hidden?: boolean;\n\n newFormStylingEnabled?: boolean; // awsDatasourcesNewForStyling feature toggle\n value: string | null;\n dependencies?: DependencyList;\n id: string;\n label: string;\n 'data-testid'?: string;\n // Options only needed for QueryEditor\n default?: string;\n // Options only needed for the ConfigEditor\n title?: string;\n labelWidth?: number;\n saveOptions?: () => Promise<void>;\n // Either set a way of fetching resources or the resource list\n fetch?: () => Promise<Array<string | SelectableValue<string>>>;\n resources?: string[];\n onChange: (e: SelectableValue<string> | null) => void;\n}\n\nexport function ResourceSelector(props: ResourceSelectorProps) {\n const propsDependencies = props.dependencies;\n const propsOnChange = props.onChange;\n\n const dependencies = useRef(props.dependencies);\n const fetched = useRef<boolean>(false);\n const resource = useRef<string | null>(props.value || props.default || null);\n\n const [resources, setResources] = useState<Array<string | SelectableValue>>(\n resource.current ? [resource.current] : []\n );\n const [isLoading, setIsLoading] = useState(false);\n\n const defaultOpts = useMemo(() => {\n const opts: Array<SelectableValue<string>> = [\n {\n label: `default (${props.default})`,\n value: defaultKey,\n description: `Default value set in the data source`,\n },\n ];\n if (props.value && props.value !== defaultKey) {\n opts.push({ label: props.value, value: props.value });\n }\n return opts;\n }, [props.default, props.value]);\n const [options, setOptions] = useState<Array<SelectableValue<string>>>(props.default ? defaultOpts : []);\n useEffect(() => {\n if (props.resources !== undefined) {\n setResources(props.resources);\n }\n }, [props.resources]);\n useEffect(() => {\n const newOptions: Array<SelectableValue<string>> = props.default ? defaultOpts : [];\n if (resources.length) {\n resources.forEach((r) => {\n const value = typeof r === 'string' ? r : r.value;\n if (!newOptions.find((o) => o.value === value)) {\n typeof r === 'string' ? newOptions.push({ label: r, value: r }) : newOptions.push(r);\n }\n });\n setOptions(newOptions);\n } else {\n setOptions([]);\n }\n }, [resources, defaultOpts, props.default]);\n\n useEffect(() => {\n // A change in the dependencies cause a state clean-up\n if (!isEqual(propsDependencies, dependencies.current)) {\n fetched.current = false;\n resource.current = null;\n dependencies.current = propsDependencies;\n propsOnChange(null);\n }\n }, [propsDependencies, propsOnChange]);\n\n const fetch = async () => {\n if (fetched.current) {\n return;\n }\n if (props.saveOptions) {\n await props.saveOptions();\n }\n try {\n const resources = (await props.fetch?.()) || [];\n setResources(resources);\n } finally {\n fetched.current = true;\n }\n };\n\n const onChange = (e: SelectableValue<string>) => {\n propsOnChange(e);\n if (e.value) {\n resource.current = e.value;\n }\n };\n const onClick = async () => {\n setIsLoading(true);\n try {\n await fetch();\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <>\n {props.newFormStylingEnabled ? (\n <Select\n {...props}\n id={props.id}\n aria-label={props.label}\n options={options}\n onChange={onChange}\n isLoading={isLoading}\n className={props.className || 'min-width-6'}\n onOpenMenu={() => props.fetch && onClick()}\n menuShouldPortal={true}\n />\n ) : (\n <InlineField\n label={props.label}\n labelWidth={props.labelWidth}\n tooltip={props.tooltip}\n hidden={props.hidden}\n htmlFor={props.id}\n >\n <div data-testid={props['data-testid']} title={props.title}>\n <Select\n {...props}\n id={props.id}\n aria-label={props.label}\n options={options}\n onChange={onChange}\n isLoading={isLoading}\n className={props.className || 'min-width-6'}\n onOpenMenu={() => props.fetch && onClick()}\n menuShouldPortal={true}\n />\n </div>\n </InlineField>\n )}\n </>\n );\n}\n"],"names":["resources"],"mappings":"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"}
1
+ {"version":3,"file":"ResourceSelector.js","sources":["../../../src/sql/ResourceSelector.tsx"],"sourcesContent":["import { SelectableValue } from '@grafana/data';\nimport { Select, SelectCommonProps } from '@grafana/ui';\nimport { isEqual } from 'lodash';\nimport React, { useEffect, useMemo, useState, DependencyList, useRef } from 'react';\n\nimport { defaultKey } from './types';\n\nexport interface ResourceSelectorProps extends SelectCommonProps<string> {\n // props for old form styling\n tooltip?: string;\n hidden?: boolean;\n\n value: string | null;\n dependencies?: DependencyList;\n id: string;\n label: string;\n 'data-testid'?: string;\n // Options only needed for QueryEditor\n default?: string;\n // Options only needed for the ConfigEditor\n title?: string;\n labelWidth?: number;\n saveOptions?: () => Promise<void>;\n // Either set a way of fetching resources or the resource list\n fetch?: () => Promise<Array<string | SelectableValue<string>>>;\n resources?: string[];\n onChange: (e: SelectableValue<string> | null) => void;\n}\n\nexport function ResourceSelector(props: ResourceSelectorProps) {\n const propsDependencies = props.dependencies;\n const propsOnChange = props.onChange;\n\n const dependencies = useRef(props.dependencies);\n const fetched = useRef<boolean>(false);\n const resource = useRef<string | null>(props.value || props.default || null);\n\n const [resources, setResources] = useState<Array<string | SelectableValue>>(\n resource.current ? [resource.current] : []\n );\n const [isLoading, setIsLoading] = useState(false);\n\n const defaultOpts = useMemo(() => {\n const opts: Array<SelectableValue<string>> = [\n {\n label: `default (${props.default})`,\n value: defaultKey,\n description: `Default value set in the data source`,\n },\n ];\n if (props.value && props.value !== defaultKey) {\n opts.push({ label: props.value, value: props.value });\n }\n return opts;\n }, [props.default, props.value]);\n const [options, setOptions] = useState<Array<SelectableValue<string>>>(props.default ? defaultOpts : []);\n useEffect(() => {\n if (props.resources !== undefined) {\n setResources(props.resources);\n }\n }, [props.resources]);\n useEffect(() => {\n const newOptions: Array<SelectableValue<string>> = props.default ? defaultOpts : [];\n if (resources.length) {\n resources.forEach((r) => {\n const value = typeof r === 'string' ? r : r.value;\n if (!newOptions.find((o) => o.value === value)) {\n typeof r === 'string' ? newOptions.push({ label: r, value: r }) : newOptions.push(r);\n }\n });\n setOptions(newOptions);\n } else {\n setOptions([]);\n }\n }, [resources, defaultOpts, props.default]);\n\n useEffect(() => {\n // A change in the dependencies cause a state clean-up\n if (!isEqual(propsDependencies, dependencies.current)) {\n fetched.current = false;\n resource.current = null;\n dependencies.current = propsDependencies;\n propsOnChange(null);\n }\n }, [propsDependencies, propsOnChange]);\n\n const fetch = async () => {\n if (fetched.current) {\n return;\n }\n if (props.saveOptions) {\n await props.saveOptions();\n }\n try {\n const resources = (await props.fetch?.()) || [];\n setResources(resources);\n } finally {\n fetched.current = true;\n }\n };\n\n const onChange = (e: SelectableValue<string>) => {\n propsOnChange(e);\n if (e.value) {\n resource.current = e.value;\n }\n };\n const onClick = async () => {\n setIsLoading(true);\n try {\n await fetch();\n } finally {\n setIsLoading(false);\n }\n };\n\n return <Select\n {...props}\n id={props.id}\n inputId={props.id}\n aria-label={props.label}\n options={options}\n onChange={onChange}\n isLoading={isLoading}\n className={props.className || 'min-width-6'}\n onOpenMenu={() => props.fetch && onClick()}\n menuShouldPortal={true}\n />\n\n}\n"],"names":["resources"],"mappings":"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"}