@grafana/plugin-ui 0.10.9 → 0.11.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.
- package/dist/cjs/index.cjs +1799 -1325
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +94 -46
- package/dist/esm/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.js +42 -38
- package/dist/esm/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/Auth.js +19 -14
- package/dist/esm/components/ConfigEditor/Auth/Auth.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js +19 -15
- package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/auth-method/BasicAuth.js +52 -49
- package/dist/esm/components/ConfigEditor/Auth/auth-method/BasicAuth.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeader.js +59 -55
- package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeader.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js +20 -17
- package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js +28 -28
- package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/SkipTLSVerification.js +2 -2
- package/dist/esm/components/ConfigEditor/Auth/tls/SkipTLSVerification.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js +84 -82
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettings.js +10 -7
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettingsSection.js +8 -2
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettingsSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/utils.js +2 -1
- package/dist/esm/components/ConfigEditor/Auth/utils.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js +14 -11
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSection.js +2 -2
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSubSection.js +2 -2
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSubSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/GenericConfigSection.js +19 -11
- package/dist/esm/components/ConfigEditor/ConfigSection/GenericConfigSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js +24 -19
- package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/DataSourceDescription.js +12 -2
- package/dist/esm/components/ConfigEditor/DataSourceDescription.js.map +1 -1
- package/dist/esm/components/ConfigEditor/SecureSocksProxyToggle.js +24 -20
- package/dist/esm/components/ConfigEditor/SecureSocksProxyToggle.js.map +1 -1
- package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js +69 -60
- package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js.map +1 -1
- package/dist/esm/components/DataLinks/DataLink.js +104 -89
- package/dist/esm/components/DataLinks/DataLink.js.map +1 -1
- package/dist/esm/components/DataLinks/DataLinks.js +48 -41
- package/dist/esm/components/DataLinks/DataLinks.js.map +1 -1
- package/dist/esm/components/DataSourcePicker/DataSourcePicker.js +9 -4
- package/dist/esm/components/DataSourcePicker/DataSourcePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/DatePicker.js +6 -5
- package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/esm/components/DatePickerWithInput/DatePickerWithInput.js +19 -15
- package/dist/esm/components/DatePickerWithInput/DatePickerWithInput.js.map +1 -1
- package/dist/esm/components/DebounceInput/DebounceInput.js +6 -5
- package/dist/esm/components/DebounceInput/DebounceInput.js.map +1 -1
- package/dist/esm/components/Plugins/PluginSignatureBadge.js +3 -2
- package/dist/esm/components/Plugins/PluginSignatureBadge.js.map +1 -1
- package/dist/esm/components/QueryEditor/AccessoryButton.js +2 -2
- package/dist/esm/components/QueryEditor/AccessoryButton.js.map +1 -1
- package/dist/esm/components/QueryEditor/CatalogSelector.js +54 -0
- package/dist/esm/components/QueryEditor/CatalogSelector.js.map +1 -0
- package/dist/esm/components/QueryEditor/ConfirmModal.js +18 -8
- package/dist/esm/components/QueryEditor/ConfirmModal.js.map +1 -1
- package/dist/esm/components/QueryEditor/DatasetSelector.js +3 -2
- package/dist/esm/components/QueryEditor/DatasetSelector.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorField.js +11 -3
- package/dist/esm/components/QueryEditor/EditorField.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorFieldGroup.js +2 -2
- package/dist/esm/components/QueryEditor/EditorFieldGroup.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorHeader.js +2 -2
- package/dist/esm/components/QueryEditor/EditorHeader.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorList.js +11 -7
- package/dist/esm/components/QueryEditor/EditorList.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorRow.js +2 -2
- package/dist/esm/components/QueryEditor/EditorRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorRows.js +2 -2
- package/dist/esm/components/QueryEditor/EditorRows.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorStack.js +2 -2
- package/dist/esm/components/QueryEditor/EditorStack.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorSwitch.js +3 -2
- package/dist/esm/components/QueryEditor/EditorSwitch.js.map +1 -1
- package/dist/esm/components/QueryEditor/FlexItem.js +2 -2
- package/dist/esm/components/QueryEditor/FlexItem.js.map +1 -1
- package/dist/esm/components/QueryEditor/InlineSelect.js +12 -4
- package/dist/esm/components/QueryEditor/InlineSelect.js.map +1 -1
- package/dist/esm/components/QueryEditor/InputGroup.js +3 -2
- package/dist/esm/components/QueryEditor/InputGroup.js.map +1 -1
- package/dist/esm/components/QueryEditor/QueryEditor.js +44 -37
- package/dist/esm/components/QueryEditor/QueryEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/QueryHeader.js +172 -95
- package/dist/esm/components/QueryEditor/QueryHeader.js.map +1 -1
- package/dist/esm/components/QueryEditor/RunQueryButton.js +13 -9
- package/dist/esm/components/QueryEditor/RunQueryButton.js.map +1 -1
- package/dist/esm/components/QueryEditor/SchemaSelector.js +56 -0
- package/dist/esm/components/QueryEditor/SchemaSelector.js.map +1 -0
- package/dist/esm/components/QueryEditor/Space.js +2 -2
- package/dist/esm/components/QueryEditor/Space.js.map +1 -1
- package/dist/esm/components/QueryEditor/TableSelector.js +21 -7
- package/dist/esm/components/QueryEditor/TableSelector.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryEditorRaw.js +6 -5
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryEditorRaw.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js +26 -18
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js +19 -2
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js +42 -38
- package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/types.js +1 -0
- package/dist/esm/components/QueryEditor/types.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js +8 -8
- package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js +11 -3
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRows.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRows.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js +16 -12
- package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js +29 -20
- package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js +7 -4
- package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLGroupByRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLGroupByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLSelectRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLSelectRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLWhereRow.js +4 -4
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLWhereRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js +52 -44
- package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/VisualEditor.js +11 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/VisualEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/WhereRow.js +4 -3
- package/dist/esm/components/QueryEditor/visual-query-builder/WhereRow.js.map +1 -1
- package/dist/esm/components/QueryEditorRow/QueryEditorRow.js +6 -2
- package/dist/esm/components/QueryEditorRow/QueryEditorRow.js.map +1 -1
- package/dist/esm/components/SQLEditor/components/SQLEditor.js +40 -34
- package/dist/esm/components/SQLEditor/components/SQLEditor.js.map +1 -1
- package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js +16 -0
- package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js.map +1 -0
- package/dist/esm/components/SQLEditor/standardSql/definition.js +1 -0
- package/dist/esm/components/SQLEditor/standardSql/definition.js.map +1 -1
- package/dist/esm/components/Segment/Segment.js +4 -3
- package/dist/esm/components/Segment/Segment.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js +105 -99
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js +28 -27
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js +31 -26
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js +70 -55
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js +11 -2
- package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js +75 -62
- package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js +39 -28
- package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationList.js +38 -31
- package/dist/esm/components/VisualQueryBuilder/components/OperationList.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js +15 -14
- package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js +35 -31
- package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js +3 -2
- package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js +12 -9
- package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryEditorModeToggle.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/QueryEditorModeToggle.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js +6 -2
- package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js +20 -12
- package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js.map +1 -1
- package/dist/esm/index.d.ts +94 -46
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useId, useCallback } from 'react';
|
|
2
3
|
import { useCopyToClipboard } from 'react-use';
|
|
3
4
|
import '@grafana/data';
|
|
4
5
|
import { ConfirmModal } from './ConfirmModal.js';
|
|
5
6
|
import { DatasetSelector } from './DatasetSelector.js';
|
|
7
|
+
import { CatalogSelector } from './CatalogSelector.js';
|
|
8
|
+
import { SchemaSelector } from './SchemaSelector.js';
|
|
6
9
|
import { TableSelector } from './TableSelector.js';
|
|
7
10
|
import { InlineSwitch, RadioButtonGroup } from '@grafana/ui';
|
|
8
11
|
import { EditorMode, QUERY_FORMAT_OPTIONS, QueryFormat } from './types.js';
|
|
@@ -23,6 +26,7 @@ function QueryHeader({
|
|
|
23
26
|
db,
|
|
24
27
|
defaultDataset,
|
|
25
28
|
enableDatasets,
|
|
29
|
+
enableCatalogs,
|
|
26
30
|
query,
|
|
27
31
|
queryRowFilter,
|
|
28
32
|
onChange,
|
|
@@ -36,6 +40,7 @@ function QueryHeader({
|
|
|
36
40
|
const [showConfirm, setShowConfirm] = useState(false);
|
|
37
41
|
const toRawSql = getRawSqlFn(db);
|
|
38
42
|
const htmlId = useId();
|
|
43
|
+
const catalogsEnabled = enableCatalogs != null ? enableCatalogs : db.disableCatalogs === false;
|
|
39
44
|
const onEditorModeChange = useCallback(
|
|
40
45
|
(newEditorMode) => {
|
|
41
46
|
if (editorMode === EditorMode.Code) {
|
|
@@ -63,6 +68,33 @@ function QueryHeader({
|
|
|
63
68
|
};
|
|
64
69
|
onChange(next);
|
|
65
70
|
};
|
|
71
|
+
const onCatalogChange = (catalog) => {
|
|
72
|
+
if (catalog === query.catalog) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const next = {
|
|
76
|
+
...query,
|
|
77
|
+
catalog: catalog || undefined,
|
|
78
|
+
schema: undefined,
|
|
79
|
+
table: undefined,
|
|
80
|
+
sql: undefined,
|
|
81
|
+
rawSql: ""
|
|
82
|
+
};
|
|
83
|
+
onChange(next);
|
|
84
|
+
};
|
|
85
|
+
const onSchemaChange = (schema) => {
|
|
86
|
+
if (schema === query.schema) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const next = {
|
|
90
|
+
...query,
|
|
91
|
+
schema: schema || undefined,
|
|
92
|
+
table: undefined,
|
|
93
|
+
sql: undefined,
|
|
94
|
+
rawSql: ""
|
|
95
|
+
};
|
|
96
|
+
onChange(next);
|
|
97
|
+
};
|
|
66
98
|
const onTableChange = (e) => {
|
|
67
99
|
if (e.value === query.table) {
|
|
68
100
|
return;
|
|
@@ -75,100 +107,145 @@ function QueryHeader({
|
|
|
75
107
|
};
|
|
76
108
|
onChange(next);
|
|
77
109
|
};
|
|
78
|
-
return /* @__PURE__ */
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
110
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
111
|
+
/* @__PURE__ */ jsxs(EditorHeader, { children: [
|
|
112
|
+
/* @__PURE__ */ jsx(
|
|
113
|
+
InlineSelect,
|
|
114
|
+
{
|
|
115
|
+
label: "Format",
|
|
116
|
+
value: query.format,
|
|
117
|
+
placeholder: "Select format",
|
|
118
|
+
menuShouldPortal: true,
|
|
119
|
+
onChange: onFormatChange,
|
|
120
|
+
options: QUERY_FORMAT_OPTIONS
|
|
121
|
+
}
|
|
122
|
+
),
|
|
123
|
+
editorMode === EditorMode.Builder && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
124
|
+
/* @__PURE__ */ jsx(
|
|
125
|
+
InlineSwitch,
|
|
126
|
+
{
|
|
127
|
+
id: `sql-filter-${htmlId}`,
|
|
128
|
+
label: "Filter",
|
|
129
|
+
transparent: true,
|
|
130
|
+
showLabel: true,
|
|
131
|
+
value: queryRowFilter.filter,
|
|
132
|
+
onChange: (ev) => ev.target instanceof HTMLInputElement && onQueryRowChange({ ...queryRowFilter, filter: ev.target.checked })
|
|
133
|
+
}
|
|
134
|
+
),
|
|
135
|
+
/* @__PURE__ */ jsx(
|
|
136
|
+
InlineSwitch,
|
|
137
|
+
{
|
|
138
|
+
id: `sql-group-${htmlId}`,
|
|
139
|
+
label: "Group",
|
|
140
|
+
transparent: true,
|
|
141
|
+
showLabel: true,
|
|
142
|
+
value: queryRowFilter.group,
|
|
143
|
+
onChange: (ev) => ev.target instanceof HTMLInputElement && onQueryRowChange({ ...queryRowFilter, group: ev.target.checked })
|
|
144
|
+
}
|
|
145
|
+
),
|
|
146
|
+
/* @__PURE__ */ jsx(
|
|
147
|
+
InlineSwitch,
|
|
148
|
+
{
|
|
149
|
+
id: `sql-order-${htmlId}`,
|
|
150
|
+
label: "Order",
|
|
151
|
+
transparent: true,
|
|
152
|
+
showLabel: true,
|
|
153
|
+
value: queryRowFilter.order,
|
|
154
|
+
onChange: (ev) => ev.target instanceof HTMLInputElement && onQueryRowChange({ ...queryRowFilter, order: ev.target.checked })
|
|
155
|
+
}
|
|
156
|
+
),
|
|
157
|
+
/* @__PURE__ */ jsx(
|
|
158
|
+
InlineSwitch,
|
|
159
|
+
{
|
|
160
|
+
id: `sql-preview-${htmlId}`,
|
|
161
|
+
label: "Preview",
|
|
162
|
+
transparent: true,
|
|
163
|
+
showLabel: true,
|
|
164
|
+
value: queryRowFilter.preview,
|
|
165
|
+
onChange: (ev) => ev.target instanceof HTMLInputElement && onQueryRowChange({ ...queryRowFilter, preview: ev.target.checked })
|
|
166
|
+
}
|
|
167
|
+
)
|
|
168
|
+
] }),
|
|
169
|
+
/* @__PURE__ */ jsx(FlexItem, { grow: 1 }),
|
|
170
|
+
/* @__PURE__ */ jsx(RunQueryButton, { queryInvalid: !isQueryRunnable, onClick: () => onRunQuery() }),
|
|
171
|
+
/* @__PURE__ */ jsx(RadioButtonGroup, { options: editorModes, size: "sm", value: editorMode, onChange: onEditorModeChange }),
|
|
172
|
+
/* @__PURE__ */ jsx(
|
|
173
|
+
ConfirmModal,
|
|
174
|
+
{
|
|
175
|
+
isOpen: showConfirm,
|
|
176
|
+
onCopy: () => {
|
|
177
|
+
setShowConfirm(false);
|
|
178
|
+
copyToClipboard(query.rawSql);
|
|
179
|
+
onChange({
|
|
180
|
+
...query,
|
|
181
|
+
rawSql: toRawSql(query),
|
|
182
|
+
editorMode: EditorMode.Builder
|
|
183
|
+
});
|
|
184
|
+
},
|
|
185
|
+
onDiscard: () => {
|
|
186
|
+
setShowConfirm(false);
|
|
187
|
+
onChange({
|
|
188
|
+
...query,
|
|
189
|
+
rawSql: toRawSql(query),
|
|
190
|
+
editorMode: EditorMode.Builder
|
|
191
|
+
});
|
|
192
|
+
},
|
|
193
|
+
onCancel: () => setShowConfirm(false)
|
|
194
|
+
}
|
|
195
|
+
)
|
|
196
|
+
] }),
|
|
197
|
+
editorMode === EditorMode.Builder && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
198
|
+
/* @__PURE__ */ jsx(Space, { v: 0.5 }),
|
|
199
|
+
/* @__PURE__ */ jsxs(EditorRow, { children: [
|
|
200
|
+
enableDatasets === true && !catalogsEnabled && /* @__PURE__ */ jsx(EditorField, { label: labels.get("dataset") || "Dataset", width: 25, children: /* @__PURE__ */ jsx(
|
|
201
|
+
DatasetSelector,
|
|
202
|
+
{
|
|
203
|
+
db,
|
|
204
|
+
inputId: `sql-dataset-${htmlId}`,
|
|
205
|
+
dataset: defaultDataset,
|
|
206
|
+
value: query.dataset === undefined ? null : query.dataset,
|
|
207
|
+
onChange: onDatasetChange
|
|
208
|
+
}
|
|
209
|
+
) }),
|
|
210
|
+
catalogsEnabled && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
211
|
+
/* @__PURE__ */ jsx(EditorField, { label: labels.get("catalog") || "Catalog", width: 25, children: /* @__PURE__ */ jsx(
|
|
212
|
+
CatalogSelector,
|
|
213
|
+
{
|
|
214
|
+
db,
|
|
215
|
+
inputId: `sql-catalog-${htmlId}`,
|
|
216
|
+
value: query.catalog === undefined ? null : query.catalog,
|
|
217
|
+
onChange: onCatalogChange
|
|
218
|
+
}
|
|
219
|
+
) }),
|
|
220
|
+
/* @__PURE__ */ jsx(EditorField, { label: labels.get("schema") || "Schema", width: 25, children: /* @__PURE__ */ jsx(
|
|
221
|
+
SchemaSelector,
|
|
222
|
+
{
|
|
223
|
+
db,
|
|
224
|
+
inputId: `sql-schema-${htmlId}`,
|
|
225
|
+
catalog: query.catalog,
|
|
226
|
+
value: query.schema === undefined ? null : query.schema,
|
|
227
|
+
onChange: onSchemaChange
|
|
228
|
+
}
|
|
229
|
+
) })
|
|
230
|
+
] }),
|
|
231
|
+
/* @__PURE__ */ jsx(EditorField, { label: "Table", width: 25, children: /* @__PURE__ */ jsx(
|
|
232
|
+
TableSelector,
|
|
233
|
+
{
|
|
234
|
+
db,
|
|
235
|
+
inputId: `sql-table-${htmlId}`,
|
|
236
|
+
dataset: catalogsEnabled ? undefined : query.dataset || defaultDataset,
|
|
237
|
+
catalog: catalogsEnabled ? query.catalog : undefined,
|
|
238
|
+
schema: catalogsEnabled ? query.schema : undefined,
|
|
239
|
+
query,
|
|
240
|
+
value: query.table === undefined ? null : query.table,
|
|
241
|
+
onChange: onTableChange,
|
|
242
|
+
enableCatalogs: catalogsEnabled,
|
|
243
|
+
applyDefault: true
|
|
244
|
+
}
|
|
245
|
+
) })
|
|
246
|
+
] })
|
|
247
|
+
] })
|
|
248
|
+
] });
|
|
172
249
|
}
|
|
173
250
|
|
|
174
251
|
export { QueryHeader };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryHeader.js","sources":["../../../../src/components/QueryEditor/QueryHeader.tsx"],"sourcesContent":["import React, { useCallback, useState, useId } from 'react';\nimport { useCopyToClipboard } from 'react-use';\n\nimport { type SelectableValue } from '@grafana/data';\n\nimport { ConfirmModal } from './ConfirmModal';\nimport { DatasetSelector } from './DatasetSelector';\nimport { TableSelector } from './TableSelector';\nimport { InlineSwitch, RadioButtonGroup } from '@grafana/ui';\nimport { type QueryWithDefaults } from './defaults';\nimport { EditorField } from './EditorField';\nimport { EditorHeader } from './EditorHeader';\nimport { EditorRow } from './EditorRow';\nimport { FlexItem } from './FlexItem';\nimport { InlineSelect } from './InlineSelect';\nimport { Space } from './Space';\nimport { RunQueryButton } from './RunQueryButton';\nimport { type DB, type SQLQuery, type QueryRowFilter, EditorMode, QueryFormat, QUERY_FORMAT_OPTIONS } from './types';\nimport { getRawSqlFn } from './utils/sql.utils';\n\ninterface QueryHeaderProps {\n db: DB;\n defaultDataset: string;\n enableDatasets: boolean;\n query: QueryWithDefaults;\n onChange: (query: SQLQuery) => void;\n onRunQuery: () => void;\n onQueryRowChange: (queryRowFilter: QueryRowFilter) => void;\n queryRowFilter: QueryRowFilter;\n isQueryRunnable: boolean;\n labels?: Map<string, string>;\n}\n\nconst editorModes = [\n { label: 'Builder', value: EditorMode.Builder },\n { label: 'Code', value: EditorMode.Code },\n];\n\nexport function QueryHeader({\n db,\n defaultDataset,\n enableDatasets,\n query,\n queryRowFilter,\n onChange,\n onRunQuery,\n onQueryRowChange,\n isQueryRunnable,\n labels = new Map([['dataset', 'Dataset']]),\n}: QueryHeaderProps) {\n const { editorMode } = query;\n const [_, copyToClipboard] = useCopyToClipboard();\n const [showConfirm, setShowConfirm] = useState(false);\n const toRawSql = getRawSqlFn(db);\n const htmlId = useId();\n\n const onEditorModeChange = useCallback(\n (newEditorMode: EditorMode) => {\n if (editorMode === EditorMode.Code) {\n setShowConfirm(true);\n return;\n }\n onChange({ ...query, editorMode: newEditorMode });\n },\n [editorMode, onChange, query]\n );\n\n const onFormatChange = (e: SelectableValue) => {\n const next = { ...query, format: e.value !== undefined ? e.value : QueryFormat.Table };\n onChange(next);\n };\n\n const onDatasetChange = (e: SelectableValue) => {\n if (e.value === query.dataset) {\n return;\n }\n\n const next = {\n ...query,\n dataset: e.value,\n table: undefined,\n sql: undefined,\n rawSql: '',\n };\n\n onChange(next);\n };\n\n const onTableChange = (e: SelectableValue) => {\n if (e.value === query.table) {\n return;\n }\n\n const next: SQLQuery = {\n ...query,\n table: e.value,\n sql: undefined,\n rawSql: '',\n };\n onChange(next);\n };\n\n return (\n <>\n <EditorHeader>\n <InlineSelect\n label=\"Format\"\n value={query.format}\n placeholder=\"Select format\"\n menuShouldPortal\n onChange={onFormatChange}\n options={QUERY_FORMAT_OPTIONS}\n />\n {editorMode === EditorMode.Builder && (\n <>\n <InlineSwitch\n id={`sql-filter-${htmlId}`}\n label=\"Filter\"\n transparent={true}\n showLabel={true}\n value={queryRowFilter.filter}\n onChange={(ev) =>\n ev.target instanceof HTMLInputElement &&\n onQueryRowChange({ ...queryRowFilter, filter: ev.target.checked })\n }\n />\n\n <InlineSwitch\n id={`sql-group-${htmlId}`}\n label=\"Group\"\n transparent={true}\n showLabel={true}\n value={queryRowFilter.group}\n onChange={(ev) =>\n ev.target instanceof HTMLInputElement &&\n onQueryRowChange({ ...queryRowFilter, group: ev.target.checked })\n }\n />\n\n <InlineSwitch\n id={`sql-order-${htmlId}`}\n label=\"Order\"\n transparent={true}\n showLabel={true}\n value={queryRowFilter.order}\n onChange={(ev) =>\n ev.target instanceof HTMLInputElement &&\n onQueryRowChange({ ...queryRowFilter, order: ev.target.checked })\n }\n />\n\n <InlineSwitch\n id={`sql-preview-${htmlId}`}\n label=\"Preview\"\n transparent={true}\n showLabel={true}\n value={queryRowFilter.preview}\n onChange={(ev) =>\n ev.target instanceof HTMLInputElement &&\n onQueryRowChange({ ...queryRowFilter, preview: ev.target.checked })\n }\n />\n </>\n )}\n\n <FlexItem grow={1} />\n\n <RunQueryButton queryInvalid={!isQueryRunnable} onClick={() => onRunQuery()} />\n\n <RadioButtonGroup options={editorModes} size=\"sm\" value={editorMode} onChange={onEditorModeChange} />\n\n <ConfirmModal\n isOpen={showConfirm}\n onCopy={() => {\n setShowConfirm(false);\n copyToClipboard(query.rawSql!);\n onChange({\n ...query,\n rawSql: toRawSql(query),\n editorMode: EditorMode.Builder,\n });\n }}\n onDiscard={() => {\n setShowConfirm(false);\n onChange({\n ...query,\n rawSql: toRawSql(query),\n editorMode: EditorMode.Builder,\n });\n }}\n onCancel={() => setShowConfirm(false)}\n />\n </EditorHeader>\n\n {editorMode === EditorMode.Builder && (\n <>\n <Space v={0.5} />\n\n <EditorRow>\n {enableDatasets === true && (\n <EditorField label={labels.get('dataset') || 'Dataset'} width={25}>\n <DatasetSelector\n db={db}\n inputId={`sql-dataset-${htmlId}`}\n dataset={defaultDataset}\n value={query.dataset === undefined ? null : query.dataset}\n onChange={onDatasetChange}\n />\n </EditorField>\n )}\n\n <EditorField label=\"Table\" width={25}>\n <TableSelector\n db={db}\n inputId={`sql-table-${htmlId}`}\n dataset={query.dataset || defaultDataset}\n query={query}\n value={query.table === undefined ? null : query.table}\n onChange={onTableChange}\n applyDefault\n />\n </EditorField>\n </EditorRow>\n </>\n )}\n </>\n );\n}\n"],"names":["React"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QueryHeader.js","sources":["../../../../src/components/QueryEditor/QueryHeader.tsx"],"sourcesContent":["import { useCallback, useState, useId } from 'react';\nimport { useCopyToClipboard } from 'react-use';\n\nimport { type SelectableValue } from '@grafana/data';\n\nimport { ConfirmModal } from './ConfirmModal';\nimport { DatasetSelector } from './DatasetSelector';\nimport { CatalogSelector } from './CatalogSelector';\nimport { SchemaSelector } from './SchemaSelector';\nimport { TableSelector } from './TableSelector';\nimport { InlineSwitch, RadioButtonGroup } from '@grafana/ui';\nimport { type QueryWithDefaults } from './defaults';\nimport { EditorField } from './EditorField';\nimport { EditorHeader } from './EditorHeader';\nimport { EditorRow } from './EditorRow';\nimport { FlexItem } from './FlexItem';\nimport { InlineSelect } from './InlineSelect';\nimport { Space } from './Space';\nimport { RunQueryButton } from './RunQueryButton';\nimport { type DB, type SQLQuery, type QueryRowFilter, EditorMode, QueryFormat, QUERY_FORMAT_OPTIONS } from './types';\nimport { getRawSqlFn } from './utils/sql.utils';\n\ninterface QueryHeaderProps {\n db: DB;\n defaultDataset: string;\n enableDatasets: boolean;\n enableCatalogs?: boolean;\n query: QueryWithDefaults;\n onChange: (query: SQLQuery) => void;\n onRunQuery: () => void;\n onQueryRowChange: (queryRowFilter: QueryRowFilter) => void;\n queryRowFilter: QueryRowFilter;\n isQueryRunnable: boolean;\n labels?: Map<string, string>;\n}\n\nconst editorModes = [\n { label: 'Builder', value: EditorMode.Builder },\n { label: 'Code', value: EditorMode.Code },\n];\n\nexport function QueryHeader({\n db,\n defaultDataset,\n enableDatasets,\n enableCatalogs,\n query,\n queryRowFilter,\n onChange,\n onRunQuery,\n onQueryRowChange,\n isQueryRunnable,\n labels = new Map([['dataset', 'Dataset']]),\n}: QueryHeaderProps) {\n const { editorMode } = query;\n const [_, copyToClipboard] = useCopyToClipboard();\n const [showConfirm, setShowConfirm] = useState(false);\n const toRawSql = getRawSqlFn(db);\n const htmlId = useId();\n\n // Derive enableCatalogs from db.disableCatalogs when not explicitly provided\n // Catalogs are disabled by default (when disableCatalogs is undefined or true)\n const catalogsEnabled = enableCatalogs ?? db.disableCatalogs === false;\n\n const onEditorModeChange = useCallback(\n (newEditorMode: EditorMode) => {\n if (editorMode === EditorMode.Code) {\n setShowConfirm(true);\n return;\n }\n onChange({ ...query, editorMode: newEditorMode });\n },\n [editorMode, onChange, query]\n );\n\n const onFormatChange = (e: SelectableValue) => {\n const next = { ...query, format: e.value !== undefined ? e.value : QueryFormat.Table };\n onChange(next);\n };\n\n const onDatasetChange = (e: SelectableValue) => {\n if (e.value === query.dataset) {\n return;\n }\n\n const next = {\n ...query,\n dataset: e.value,\n table: undefined,\n sql: undefined,\n rawSql: '',\n };\n\n onChange(next);\n };\n\n const onCatalogChange = (catalog: string | null) => {\n if (catalog === query.catalog) {\n return;\n }\n\n const next: SQLQuery = {\n ...query,\n catalog: catalog || undefined,\n schema: undefined,\n table: undefined,\n sql: undefined,\n rawSql: '',\n };\n onChange(next);\n };\n\n const onSchemaChange = (schema: string | null) => {\n if (schema === query.schema) {\n return;\n }\n\n const next: SQLQuery = {\n ...query,\n schema: schema || undefined,\n table: undefined,\n sql: undefined,\n rawSql: '',\n };\n onChange(next);\n };\n\n const onTableChange = (e: SelectableValue) => {\n if (e.value === query.table) {\n return;\n }\n\n const next: SQLQuery = {\n ...query,\n table: e.value,\n sql: undefined,\n rawSql: '',\n };\n onChange(next);\n };\n\n return (\n <>\n <EditorHeader>\n <InlineSelect\n label=\"Format\"\n value={query.format}\n placeholder=\"Select format\"\n menuShouldPortal\n onChange={onFormatChange}\n options={QUERY_FORMAT_OPTIONS}\n />\n {editorMode === EditorMode.Builder && (\n <>\n <InlineSwitch\n id={`sql-filter-${htmlId}`}\n label=\"Filter\"\n transparent={true}\n showLabel={true}\n value={queryRowFilter.filter}\n onChange={(ev) =>\n ev.target instanceof HTMLInputElement &&\n onQueryRowChange({ ...queryRowFilter, filter: ev.target.checked })\n }\n />\n\n <InlineSwitch\n id={`sql-group-${htmlId}`}\n label=\"Group\"\n transparent={true}\n showLabel={true}\n value={queryRowFilter.group}\n onChange={(ev) =>\n ev.target instanceof HTMLInputElement &&\n onQueryRowChange({ ...queryRowFilter, group: ev.target.checked })\n }\n />\n\n <InlineSwitch\n id={`sql-order-${htmlId}`}\n label=\"Order\"\n transparent={true}\n showLabel={true}\n value={queryRowFilter.order}\n onChange={(ev) =>\n ev.target instanceof HTMLInputElement &&\n onQueryRowChange({ ...queryRowFilter, order: ev.target.checked })\n }\n />\n\n <InlineSwitch\n id={`sql-preview-${htmlId}`}\n label=\"Preview\"\n transparent={true}\n showLabel={true}\n value={queryRowFilter.preview}\n onChange={(ev) =>\n ev.target instanceof HTMLInputElement &&\n onQueryRowChange({ ...queryRowFilter, preview: ev.target.checked })\n }\n />\n </>\n )}\n\n <FlexItem grow={1} />\n\n <RunQueryButton queryInvalid={!isQueryRunnable} onClick={() => onRunQuery()} />\n\n <RadioButtonGroup options={editorModes} size=\"sm\" value={editorMode} onChange={onEditorModeChange} />\n\n <ConfirmModal\n isOpen={showConfirm}\n onCopy={() => {\n setShowConfirm(false);\n copyToClipboard(query.rawSql!);\n onChange({\n ...query,\n rawSql: toRawSql(query),\n editorMode: EditorMode.Builder,\n });\n }}\n onDiscard={() => {\n setShowConfirm(false);\n onChange({\n ...query,\n rawSql: toRawSql(query),\n editorMode: EditorMode.Builder,\n });\n }}\n onCancel={() => setShowConfirm(false)}\n />\n </EditorHeader>\n\n {editorMode === EditorMode.Builder && (\n <>\n <Space v={0.5} />\n\n <EditorRow>\n {enableDatasets === true && !catalogsEnabled && (\n <EditorField label={labels.get('dataset') || 'Dataset'} width={25}>\n <DatasetSelector\n db={db}\n inputId={`sql-dataset-${htmlId}`}\n dataset={defaultDataset}\n value={query.dataset === undefined ? null : query.dataset}\n onChange={onDatasetChange}\n />\n </EditorField>\n )}\n\n {catalogsEnabled && (\n <>\n <EditorField label={labels.get('catalog') || 'Catalog'} width={25}>\n <CatalogSelector\n db={db}\n inputId={`sql-catalog-${htmlId}`}\n value={query.catalog === undefined ? null : query.catalog}\n onChange={onCatalogChange}\n />\n </EditorField>\n\n <EditorField label={labels.get('schema') || 'Schema'} width={25}>\n <SchemaSelector\n db={db}\n inputId={`sql-schema-${htmlId}`}\n catalog={query.catalog}\n value={query.schema === undefined ? null : query.schema}\n onChange={onSchemaChange}\n />\n </EditorField>\n </>\n )}\n\n <EditorField label=\"Table\" width={25}>\n <TableSelector\n db={db}\n inputId={`sql-table-${htmlId}`}\n dataset={catalogsEnabled ? undefined : query.dataset || defaultDataset}\n catalog={catalogsEnabled ? query.catalog : undefined}\n schema={catalogsEnabled ? query.schema : undefined}\n query={query}\n value={query.table === undefined ? null : query.table}\n onChange={onTableChange}\n enableCatalogs={catalogsEnabled}\n applyDefault\n />\n </EditorField>\n </EditorRow>\n </>\n )}\n </>\n );\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
2
|
import { Tooltip, Button } from '@grafana/ui';
|
|
3
3
|
|
|
4
4
|
const RunQueryButton = ({
|
|
@@ -14,7 +14,7 @@ const RunQueryButton = ({
|
|
|
14
14
|
if (queryRunning) {
|
|
15
15
|
icon = "fa fa-spinner";
|
|
16
16
|
}
|
|
17
|
-
const RunButton = /* @__PURE__ */
|
|
17
|
+
const RunButton = /* @__PURE__ */ jsx(
|
|
18
18
|
Button,
|
|
19
19
|
{
|
|
20
20
|
"aria-label": ariaLabel,
|
|
@@ -23,18 +23,22 @@ const RunQueryButton = ({
|
|
|
23
23
|
icon,
|
|
24
24
|
disabled: disabled || queryRunning,
|
|
25
25
|
onClick,
|
|
26
|
-
"data-testid": dataTestId
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
"data-testid": dataTestId,
|
|
27
|
+
children: "Run query"
|
|
28
|
+
}
|
|
29
29
|
);
|
|
30
|
-
return queryInvalid ? /* @__PURE__ */
|
|
30
|
+
return queryInvalid ? /* @__PURE__ */ jsx(
|
|
31
31
|
Tooltip,
|
|
32
32
|
{
|
|
33
33
|
theme: "error",
|
|
34
34
|
placement: "top",
|
|
35
|
-
content: invalidQueryTooltip != null ? invalidQueryTooltip : /* @__PURE__ */
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
content: invalidQueryTooltip != null ? invalidQueryTooltip : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
36
|
+
"Your query is invalid. Check below for details. ",
|
|
37
|
+
/* @__PURE__ */ jsx("br", {}),
|
|
38
|
+
"However, you can still run this query."
|
|
39
|
+
] }),
|
|
40
|
+
children: RunButton
|
|
41
|
+
}
|
|
38
42
|
) : RunButton;
|
|
39
43
|
};
|
|
40
44
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunQueryButton.js","sources":["../../../../src/components/QueryEditor/RunQueryButton.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"RunQueryButton.js","sources":["../../../../src/components/QueryEditor/RunQueryButton.tsx"],"sourcesContent":["import { Button, type IconName, type PopoverContent, Tooltip } from '@grafana/ui';\n\ntype RunQueryButtonProps = {\n ariaLabel?: string;\n queryInvalid?: boolean;\n invalidQueryTooltip?: PopoverContent;\n disabled?: boolean;\n queryRunning?: boolean;\n onClick: () => void;\n dataTestId?: string;\n};\n\nexport const RunQueryButton = ({\n ariaLabel = 'Query editor Run button',\n queryRunning = false,\n queryInvalid = false,\n invalidQueryTooltip,\n disabled = false,\n onClick,\n dataTestId,\n}: RunQueryButtonProps) => {\n let icon: IconName | undefined = queryInvalid ? 'exclamation-triangle' : undefined;\n if (queryRunning) {\n icon = 'fa fa-spinner';\n }\n\n const RunButton = (\n <Button\n aria-label={ariaLabel}\n size=\"sm\"\n variant=\"secondary\"\n icon={icon}\n disabled={disabled || queryRunning}\n onClick={onClick}\n data-testid={dataTestId}\n >\n Run query\n </Button>\n );\n\n return queryInvalid ? (\n <Tooltip\n theme=\"error\"\n placement=\"top\"\n content={\n invalidQueryTooltip ?? (\n <>\n Your query is invalid. Check below for details. <br />\n However, you can still run this query.\n </>\n )\n }\n >\n {RunButton}\n </Tooltip>\n ) : (\n RunButton\n );\n};\n"],"names":[],"mappings":";;;AAYO,MAAM,iBAAiB,CAAC;AAAA,EAC7B,SAAY,GAAA,yBAAA;AAAA,EACZ,YAAe,GAAA,KAAA;AAAA,EACf,YAAe,GAAA,KAAA;AAAA,EACf,mBAAA;AAAA,EACA,QAAW,GAAA,KAAA;AAAA,EACX,OAAA;AAAA,EACA;AACF,CAA2B,KAAA;AACzB,EAAI,IAAA,IAAA,GAA6B,eAAe,sBAAyB,GAAA,SAAA;AACzE,EAAA,IAAI,YAAc,EAAA;AAChB,IAAO,IAAA,GAAA,eAAA;AAAA;AAGT,EAAA,MAAM,SACJ,mBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,YAAY,EAAA,SAAA;AAAA,MACZ,IAAK,EAAA,IAAA;AAAA,MACL,OAAQ,EAAA,WAAA;AAAA,MACR,IAAA;AAAA,MACA,UAAU,QAAY,IAAA,YAAA;AAAA,MACtB,OAAA;AAAA,MACA,aAAa,EAAA,UAAA;AAAA,MACd,QAAA,EAAA;AAAA;AAAA,GAED;AAGF,EAAA,OAAO,YACL,mBAAA,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,KAAM,EAAA,OAAA;AAAA,MACN,SAAU,EAAA,KAAA;AAAA,MACV,OAAA,EACE,oEACI,IAAA,CAAA,QAAA,EAAA,EAAA,QAAA,EAAA;AAAA,QAAA,kDAAA;AAAA,4BACiD,IAAG,EAAA,EAAA,CAAA;AAAA,QAAE;AAAA,OAExD,EAAA,CAAA;AAAA,MAIH,QAAA,EAAA;AAAA;AAAA,GAGH,GAAA,SAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useCallback, useEffect } from 'react';
|
|
3
|
+
import { Select } from '@grafana/ui';
|
|
4
|
+
import '@grafana/data';
|
|
5
|
+
import './types.js';
|
|
6
|
+
|
|
7
|
+
const SchemaSelector = ({ db, inputId, catalog, value, onChange }) => {
|
|
8
|
+
const [schemas, setSchemas] = useState([]);
|
|
9
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
10
|
+
const loadSchemas = useCallback(async () => {
|
|
11
|
+
if (!db.schemas || !catalog) {
|
|
12
|
+
setSchemas([]);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
setIsLoading(true);
|
|
16
|
+
try {
|
|
17
|
+
const schemaList = await db.schemas(catalog);
|
|
18
|
+
const schemaOptions = schemaList.map((schema) => ({
|
|
19
|
+
label: schema,
|
|
20
|
+
value: schema
|
|
21
|
+
}));
|
|
22
|
+
setSchemas(schemaOptions);
|
|
23
|
+
} catch (error) {
|
|
24
|
+
console.error("Error loading schemas:", error);
|
|
25
|
+
setSchemas([]);
|
|
26
|
+
} finally {
|
|
27
|
+
setIsLoading(false);
|
|
28
|
+
}
|
|
29
|
+
}, [db, catalog]);
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
loadSchemas();
|
|
32
|
+
}, [db, catalog, loadSchemas]);
|
|
33
|
+
const handleChange = (selectable) => {
|
|
34
|
+
onChange((selectable == null ? undefined : selectable.value) || null);
|
|
35
|
+
};
|
|
36
|
+
const selectedValue = schemas.find((schema) => schema.value === value) || null;
|
|
37
|
+
const isDisabled = isLoading || !catalog;
|
|
38
|
+
return /* @__PURE__ */ jsx(
|
|
39
|
+
Select,
|
|
40
|
+
{
|
|
41
|
+
inputId,
|
|
42
|
+
options: schemas,
|
|
43
|
+
value: selectedValue,
|
|
44
|
+
onChange: handleChange,
|
|
45
|
+
isLoading,
|
|
46
|
+
placeholder: "Select schema",
|
|
47
|
+
isClearable: true,
|
|
48
|
+
allowCustomValue: true,
|
|
49
|
+
disabled: isDisabled,
|
|
50
|
+
menuShouldPortal: true
|
|
51
|
+
}
|
|
52
|
+
);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export { SchemaSelector };
|
|
56
|
+
//# sourceMappingURL=SchemaSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SchemaSelector.js","sources":["../../../../src/components/QueryEditor/SchemaSelector.tsx"],"sourcesContent":["import { useState, useEffect, useCallback } from 'react';\nimport { Select } from '@grafana/ui';\nimport { type SelectableValue } from '@grafana/data';\nimport { type DB } from './types';\n\nexport interface SchemaSelectorProps {\n db: DB;\n inputId?: string;\n catalog?: string;\n value: string | null;\n onChange: (schema: string | null) => void;\n}\n\nexport const SchemaSelector = ({ db, inputId, catalog, value, onChange }: SchemaSelectorProps) => {\n const [schemas, setSchemas] = useState<Array<SelectableValue<string>>>([]);\n const [isLoading, setIsLoading] = useState(false);\n\n const loadSchemas = useCallback(async () => {\n if (!db.schemas || !catalog) {\n setSchemas([]);\n return;\n }\n\n setIsLoading(true);\n try {\n const schemaList = await db.schemas(catalog);\n const schemaOptions = schemaList.map((schema: string) => ({\n label: schema,\n value: schema,\n }));\n setSchemas(schemaOptions);\n } catch (error) {\n console.error('Error loading schemas:', error);\n setSchemas([]);\n } finally {\n setIsLoading(false);\n }\n }, [db, catalog]);\n\n useEffect(() => {\n loadSchemas();\n }, [db, catalog, loadSchemas]);\n\n const handleChange = (selectable: SelectableValue<string>) => {\n onChange(selectable?.value || null);\n };\n\n const selectedValue = schemas.find((schema) => schema.value === value) || null;\n\n const isDisabled = isLoading || !catalog;\n\n return (\n <Select\n inputId={inputId}\n options={schemas}\n value={selectedValue}\n onChange={handleChange}\n isLoading={isLoading}\n placeholder=\"Select schema\"\n isClearable\n allowCustomValue\n disabled={isDisabled}\n menuShouldPortal={true}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;AAaa,MAAA,cAAA,GAAiB,CAAC,EAAE,EAAA,EAAI,SAAS,OAAS,EAAA,KAAA,EAAO,UAAoC,KAAA;AAChG,EAAA,MAAM,CAAC,OAAS,EAAA,UAAU,CAAI,GAAA,QAAA,CAAyC,EAAE,CAAA;AACzE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAEhD,EAAM,MAAA,WAAA,GAAc,YAAY,YAAY;AAC1C,IAAA,IAAI,CAAC,EAAA,CAAG,OAAW,IAAA,CAAC,OAAS,EAAA;AAC3B,MAAA,UAAA,CAAW,EAAE,CAAA;AACb,MAAA;AAAA;AAGF,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAI,IAAA;AACF,MAAA,MAAM,UAAa,GAAA,MAAM,EAAG,CAAA,OAAA,CAAQ,OAAO,CAAA;AAC3C,MAAA,MAAM,aAAgB,GAAA,UAAA,CAAW,GAAI,CAAA,CAAC,MAAoB,MAAA;AAAA,QACxD,KAAO,EAAA,MAAA;AAAA,QACP,KAAO,EAAA;AAAA,OACP,CAAA,CAAA;AACF,MAAA,UAAA,CAAW,aAAa,CAAA;AAAA,aACjB,KAAO,EAAA;AACd,MAAQ,OAAA,CAAA,KAAA,CAAM,0BAA0B,KAAK,CAAA;AAC7C,MAAA,UAAA,CAAW,EAAE,CAAA;AAAA,KACb,SAAA;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA;AACpB,GACC,EAAA,CAAC,EAAI,EAAA,OAAO,CAAC,CAAA;AAEhB,EAAA,SAAA,CAAU,MAAM;AACd,IAAY,WAAA,EAAA;AAAA,GACX,EAAA,CAAC,EAAI,EAAA,OAAA,EAAS,WAAW,CAAC,CAAA;AAE7B,EAAM,MAAA,YAAA,GAAe,CAAC,UAAwC,KAAA;AAC5D,IAAS,QAAA,CAAA,CAAA,UAAA,IAAA,IAAA,GAAA,SAAA,GAAA,UAAA,CAAY,UAAS,IAAI,CAAA;AAAA,GACpC;AAEA,EAAM,MAAA,aAAA,GAAgB,QAAQ,IAAK,CAAA,CAAC,WAAW,MAAO,CAAA,KAAA,KAAU,KAAK,CAAK,IAAA,IAAA;AAE1E,EAAM,MAAA,UAAA,GAAa,aAAa,CAAC,OAAA;AAEjC,EACE,uBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,OAAS,EAAA,OAAA;AAAA,MACT,KAAO,EAAA,aAAA;AAAA,MACP,QAAU,EAAA,YAAA;AAAA,MACV,SAAA;AAAA,MACA,WAAY,EAAA,eAAA;AAAA,MACZ,WAAW,EAAA,IAAA;AAAA,MACX,gBAAgB,EAAA,IAAA;AAAA,MAChB,QAAU,EAAA,UAAA;AAAA,MACV,gBAAkB,EAAA;AAAA;AAAA,GACpB;AAEJ;;;;"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
1
2
|
import { css, cx } from '@emotion/css';
|
|
2
|
-
import React__default from 'react';
|
|
3
3
|
import '@grafana/data';
|
|
4
4
|
import { stylesFactory, useTheme2 } from '@grafana/ui';
|
|
5
5
|
|
|
6
6
|
const Space = (props) => {
|
|
7
7
|
const theme = useTheme2();
|
|
8
8
|
const styles = getStyles(theme, props);
|
|
9
|
-
return /* @__PURE__ */
|
|
9
|
+
return /* @__PURE__ */ jsx("span", { className: cx(styles.wrapper) });
|
|
10
10
|
};
|
|
11
11
|
Space.defaultProps = {
|
|
12
12
|
v: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Space.js","sources":["../../../../src/components/QueryEditor/Space.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\
|
|
1
|
+
{"version":3,"file":"Space.js","sources":["../../../../src/components/QueryEditor/Space.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useTheme2, stylesFactory } from '@grafana/ui';\n\nexport interface SpaceProps {\n v?: number;\n h?: number;\n layout?: 'block' | 'inline';\n}\n\nexport const Space = (props: SpaceProps) => {\n const theme = useTheme2();\n const styles = getStyles(theme, props);\n\n return <span className={cx(styles.wrapper)} />;\n};\n\nSpace.defaultProps = {\n v: 0,\n h: 0,\n layout: 'block',\n};\n\nconst getStyles = stylesFactory((theme: GrafanaTheme2, props: SpaceProps) => ({\n wrapper: css([\n {\n paddingRight: theme.spacing(props.h ?? 0),\n paddingBottom: theme.spacing(props.v ?? 0),\n },\n props.layout === 'inline' && {\n display: 'inline-block',\n },\n props.layout === 'block' && {\n display: 'block',\n },\n ]),\n}));\n"],"names":[],"mappings":";;;;;AAWa,MAAA,KAAA,GAAQ,CAAC,KAAsB,KAAA;AAC1C,EAAA,MAAM,QAAQ,SAAU,EAAA;AACxB,EAAM,MAAA,MAAA,GAAS,SAAU,CAAA,KAAA,EAAO,KAAK,CAAA;AAErC,EAAA,2BAAQ,MAAK,EAAA,EAAA,SAAA,EAAW,EAAG,CAAA,MAAA,CAAO,OAAO,CAAG,EAAA,CAAA;AAC9C;AAEA,KAAA,CAAM,YAAe,GAAA;AAAA,EACnB,CAAG,EAAA,CAAA;AAAA,EACH,CAAG,EAAA,CAAA;AAAA,EACH,MAAQ,EAAA;AACV,CAAA;AAEA,MAAM,SAAY,GAAA,aAAA,CAAc,CAAC,KAAA,EAAsB,KAAmB,KAAA;AAxB1E,EAAA,IAAA,EAAA,EAAA,EAAA;AAwB8E,EAAA,OAAA;AAAA,IAC5E,SAAS,GAAI,CAAA;AAAA,MACX;AAAA,QACE,cAAc,KAAM,CAAA,OAAA,CAAA,CAAQ,EAAM,GAAA,KAAA,CAAA,CAAA,KAAN,YAAW,CAAC,CAAA;AAAA,QACxC,eAAe,KAAM,CAAA,OAAA,CAAA,CAAQ,EAAM,GAAA,KAAA,CAAA,CAAA,KAAN,YAAW,CAAC;AAAA,OAC3C;AAAA,MACA,KAAA,CAAM,WAAW,QAAY,IAAA;AAAA,QAC3B,OAAS,EAAA;AAAA,OACX;AAAA,MACA,KAAA,CAAM,WAAW,OAAW,IAAA;AAAA,QAC1B,OAAS,EAAA;AAAA;AACX,KACD;AAAA,GACH;AAAA,CAAE,CAAA;;;;"}
|
|
@@ -1,24 +1,38 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useAsync } from 'react-use';
|
|
3
3
|
import { toOption } from '@grafana/data';
|
|
4
4
|
import { Select } from '@grafana/ui';
|
|
5
5
|
import './types.js';
|
|
6
6
|
import 'lodash';
|
|
7
7
|
|
|
8
|
-
const TableSelector = ({
|
|
8
|
+
const TableSelector = ({
|
|
9
|
+
db,
|
|
10
|
+
dataset,
|
|
11
|
+
catalog,
|
|
12
|
+
schema,
|
|
13
|
+
value,
|
|
14
|
+
className,
|
|
15
|
+
onChange,
|
|
16
|
+
inputId,
|
|
17
|
+
enableCatalogs
|
|
18
|
+
}) => {
|
|
9
19
|
const state = useAsync(async () => {
|
|
10
|
-
if (!dataset) {
|
|
20
|
+
if (!dataset && !catalog) {
|
|
11
21
|
return [];
|
|
12
22
|
}
|
|
13
|
-
|
|
23
|
+
if (enableCatalogs && (!catalog || !schema)) {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
const tables = await db.tables(dataset, catalog, schema);
|
|
14
27
|
return tables.map(toOption);
|
|
15
|
-
}, [dataset]);
|
|
16
|
-
|
|
28
|
+
}, [dataset, catalog, schema, enableCatalogs]);
|
|
29
|
+
const isDisabled = state.loading || enableCatalogs && (!catalog || !schema);
|
|
30
|
+
return /* @__PURE__ */ jsx(
|
|
17
31
|
Select,
|
|
18
32
|
{
|
|
19
33
|
inputId,
|
|
20
34
|
className,
|
|
21
|
-
disabled:
|
|
35
|
+
disabled: isDisabled,
|
|
22
36
|
"aria-label": "Table selector",
|
|
23
37
|
value,
|
|
24
38
|
options: state.value,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableSelector.js","sources":["../../../../src/components/QueryEditor/TableSelector.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"TableSelector.js","sources":["../../../../src/components/QueryEditor/TableSelector.tsx"],"sourcesContent":["import { useAsync } from 'react-use';\n\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { Select } from '@grafana/ui';\nimport { type DB, type ResourceSelectorProps } from './types';\nimport { type QueryWithDefaults } from './defaults';\n\ninterface TableSelectorProps extends ResourceSelectorProps {\n db: DB;\n dataset?: string;\n catalog?: string;\n schema?: string;\n value: string | null;\n query: QueryWithDefaults;\n onChange: (v: SelectableValue) => void;\n inputId?: string;\n enableCatalogs?: boolean;\n}\n\nexport const TableSelector = ({\n db,\n dataset,\n catalog,\n schema,\n value,\n className,\n onChange,\n inputId,\n enableCatalogs,\n}: TableSelectorProps) => {\n const state = useAsync(async () => {\n if (!dataset && !catalog) {\n return [];\n }\n\n // When catalogs are enabled, we need both catalog and schema to load tables\n if (enableCatalogs && (!catalog || !schema)) {\n return [];\n }\n\n const tables = await db.tables(dataset, catalog, schema);\n return tables.map(toOption);\n }, [dataset, catalog, schema, enableCatalogs]);\n\n // Determine if the selector should be disabled\n const isDisabled = state.loading || (enableCatalogs && (!catalog || !schema));\n\n return (\n <Select\n inputId={inputId}\n className={className}\n disabled={isDisabled}\n aria-label=\"Table selector\"\n value={value}\n options={state.value}\n onChange={onChange}\n isLoading={state.loading}\n menuShouldPortal={true}\n placeholder={state.loading ? 'Loading tables' : 'Select table'}\n />\n );\n};\n"],"names":[],"mappings":";;;;;;;AAmBO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,EAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAA0B,KAAA;AACxB,EAAM,MAAA,KAAA,GAAQ,SAAS,YAAY;AACjC,IAAI,IAAA,CAAC,OAAW,IAAA,CAAC,OAAS,EAAA;AACxB,MAAA,OAAO,EAAC;AAAA;AAIV,IAAA,IAAI,cAAmB,KAAA,CAAC,OAAW,IAAA,CAAC,MAAS,CAAA,EAAA;AAC3C,MAAA,OAAO,EAAC;AAAA;AAGV,IAAA,MAAM,SAAS,MAAM,EAAA,CAAG,MAAO,CAAA,OAAA,EAAS,SAAS,MAAM,CAAA;AACvD,IAAO,OAAA,MAAA,CAAO,IAAI,QAAQ,CAAA;AAAA,KACzB,CAAC,OAAA,EAAS,OAAS,EAAA,MAAA,EAAQ,cAAc,CAAC,CAAA;AAG7C,EAAA,MAAM,aAAa,KAAM,CAAA,OAAA,IAAY,cAAmB,KAAA,CAAC,WAAW,CAAC,MAAA,CAAA;AAErE,EACE,uBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,SAAA;AAAA,MACA,QAAU,EAAA,UAAA;AAAA,MACV,YAAW,EAAA,gBAAA;AAAA,MACX,KAAA;AAAA,MACA,SAAS,KAAM,CAAA,KAAA;AAAA,MACf,QAAA;AAAA,MACA,WAAW,KAAM,CAAA,OAAA;AAAA,MACjB,gBAAkB,EAAA,IAAA;AAAA,MAClB,WAAA,EAAa,KAAM,CAAA,OAAA,GAAU,gBAAmB,GAAA;AAAA;AAAA,GAClD;AAEJ;;;;"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useRef, useEffect, useCallback } from 'react';
|
|
2
3
|
import '../types.js';
|
|
3
4
|
import { formatSQL } from '../utils/formatSQL.js';
|
|
4
5
|
import { SQLEditor } from '../../SQLEditor/components/SQLEditor.js';
|
|
@@ -23,16 +24,16 @@ function QueryEditorRaw({ children, onChange, query, width, height, completionPr
|
|
|
23
24
|
},
|
|
24
25
|
[onChange]
|
|
25
26
|
);
|
|
26
|
-
return /* @__PURE__ */
|
|
27
|
+
return /* @__PURE__ */ jsx(
|
|
27
28
|
SQLEditor,
|
|
28
29
|
{
|
|
29
30
|
width,
|
|
30
31
|
height,
|
|
31
32
|
query: query.rawSql,
|
|
32
33
|
onChange: onRawQueryChange,
|
|
33
|
-
language: { id: "sql", completionProvider, formatter: formatSQL }
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
language: { id: "sql", completionProvider, formatter: formatSQL },
|
|
35
|
+
children
|
|
36
|
+
}
|
|
36
37
|
);
|
|
37
38
|
}
|
|
38
39
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryEditorRaw.js","sources":["../../../../../src/components/QueryEditor/query-editor-raw/QueryEditorRaw.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"QueryEditorRaw.js","sources":["../../../../../src/components/QueryEditor/query-editor-raw/QueryEditorRaw.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\n\nimport { type SQLQuery } from '../types';\n\nimport { formatSQL } from '../utils/formatSQL';\nimport { type LanguageCompletionProvider, SQLEditor } from '../../SQLEditor';\n\ntype Props = {\n query: SQLQuery;\n onChange: (value: SQLQuery, processQuery: boolean) => void;\n children?: (props: { formatQuery: () => void }) => React.ReactNode;\n width?: number;\n height?: number;\n completionProvider: LanguageCompletionProvider;\n};\n\nexport function QueryEditorRaw({ children, onChange, query, width, height, completionProvider }: Props) {\n // We need to pass query via ref to SQLEditor as onChange is executed via monacoEditor.onDidChangeModelContent callback, not onChange property\n const queryRef = useRef<SQLQuery>(query);\n useEffect(() => {\n queryRef.current = query;\n }, [query]);\n\n const onRawQueryChange = useCallback(\n (rawSql: string, processQuery: boolean) => {\n const newQuery = {\n ...queryRef.current,\n rawQuery: true,\n rawSql,\n };\n onChange(newQuery, processQuery);\n },\n [onChange]\n );\n\n return (\n <SQLEditor\n width={width}\n height={height}\n query={query.rawSql!}\n onChange={onRawQueryChange}\n language={{ id: 'sql', completionProvider, formatter: formatSQL }}\n >\n {children}\n </SQLEditor>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;AAgBgB,SAAA,cAAA,CAAe,EAAE,QAAU,EAAA,QAAA,EAAU,OAAO,KAAO,EAAA,MAAA,EAAQ,oBAA6B,EAAA;AAEtG,EAAM,MAAA,QAAA,GAAW,OAAiB,KAAK,CAAA;AACvC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,QAAA,CAAS,OAAU,GAAA,KAAA;AAAA,GACrB,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,gBAAmB,GAAA,WAAA;AAAA,IACvB,CAAC,QAAgB,YAA0B,KAAA;AACzC,MAAA,MAAM,QAAW,GAAA;AAAA,QACf,GAAG,QAAS,CAAA,OAAA;AAAA,QACZ,QAAU,EAAA,IAAA;AAAA,QACV;AAAA,OACF;AACA,MAAA,QAAA,CAAS,UAAU,YAAY,CAAA;AAAA,KACjC;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EACE,uBAAA,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAO,KAAM,CAAA,MAAA;AAAA,MACb,QAAU,EAAA,gBAAA;AAAA,MACV,UAAU,EAAE,EAAA,EAAI,KAAO,EAAA,kBAAA,EAAoB,WAAW,SAAU,EAAA;AAAA,MAE/D;AAAA;AAAA,GACH;AAEJ;;;;"}
|