@grafana/plugin-ui 0.13.0 → 0.14.0-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +214 -224
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +2 -9
- package/dist/cjs/test-utils.cjs +2 -2
- package/dist/cjs/test-utils.cjs.map +1 -1
- package/dist/cjs/test-utils.d.cts +1 -1
- package/dist/esm/components/ConfigEditor/AdvancedSettings/AdvancedHttpSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/Auth.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js +4 -4
- package/dist/esm/components/ConfigEditor/Auth/auth-method/AuthMethodSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/auth-method/BasicAuth.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeader.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js +1 -1
- package/dist/esm/components/ConfigEditor/Auth/custom-headers/CustomHeaders.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/styles.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/SelfSignedCertificate.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/SkipTLSVerification.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js +3 -3
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSClientAuth.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/tls/TLSSettingsSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/types.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Auth/utils.js +3 -3
- package/dist/esm/components/ConfigEditor/Auth/utils.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js +2 -2
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/ConfigSubSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/ConfigSection/GenericConfigSection.js.map +1 -1
- package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js +1 -1
- package/dist/esm/components/ConfigEditor/Connection/ConnectionSettings.js.map +1 -1
- package/dist/esm/components/ConfigEditor/DataSourceDescription.js.map +1 -1
- package/dist/esm/components/ConfigEditor/SecureSocksProxyToggle.js.map +1 -1
- package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js +11 -11
- package/dist/esm/components/CustomHeadersSettings/CustomHeadersSettings.js.map +1 -1
- package/dist/esm/components/DataLinks/DataLink.js +4 -4
- package/dist/esm/components/DataLinks/DataLink.js.map +1 -1
- package/dist/esm/components/DataLinks/DataLinks.js +3 -3
- package/dist/esm/components/DataLinks/DataLinks.js.map +1 -1
- package/dist/esm/components/DataSourcePicker/DataSourcePicker.js +8 -8
- package/dist/esm/components/DataSourcePicker/DataSourcePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/DatePicker.js.map +1 -1
- package/dist/esm/components/DatePicker/styles.js +2 -2
- package/dist/esm/components/DatePicker/styles.js.map +1 -1
- package/dist/esm/components/DatePickerWithInput/DatePickerWithInput.js.map +1 -1
- package/dist/esm/components/DatePickerWithInput/styles.js +2 -2
- package/dist/esm/components/DatePickerWithInput/styles.js.map +1 -1
- package/dist/esm/components/DebounceInput/DebounceInput.js.map +1 -1
- package/dist/esm/components/Plugins/PluginSignatureBadge.js.map +1 -1
- package/dist/esm/components/QueryEditor/AccessoryButton.js.map +1 -1
- package/dist/esm/components/QueryEditor/CatalogSelector.js +1 -1
- package/dist/esm/components/QueryEditor/CatalogSelector.js.map +1 -1
- package/dist/esm/components/QueryEditor/ConfirmModal.js +1 -1
- package/dist/esm/components/QueryEditor/ConfirmModal.js.map +1 -1
- package/dist/esm/components/QueryEditor/DatasetSelector.js +1 -1
- package/dist/esm/components/QueryEditor/DatasetSelector.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorField.js +5 -5
- package/dist/esm/components/QueryEditor/EditorField.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorFieldGroup.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorHeader.js +2 -2
- package/dist/esm/components/QueryEditor/EditorHeader.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorList.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorRow.js +4 -4
- package/dist/esm/components/QueryEditor/EditorRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorRows.js +2 -2
- package/dist/esm/components/QueryEditor/EditorRows.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorStack.js +1 -1
- package/dist/esm/components/QueryEditor/EditorStack.js.map +1 -1
- package/dist/esm/components/QueryEditor/EditorSwitch.js +2 -2
- package/dist/esm/components/QueryEditor/EditorSwitch.js.map +1 -1
- package/dist/esm/components/QueryEditor/FlexItem.js.map +1 -1
- package/dist/esm/components/QueryEditor/InlineSelect.js.map +1 -1
- package/dist/esm/components/QueryEditor/InputGroup.js +2 -2
- package/dist/esm/components/QueryEditor/InputGroup.js.map +1 -1
- package/dist/esm/components/QueryEditor/QueryEditor.js +7 -7
- package/dist/esm/components/QueryEditor/QueryEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/QueryHeader.js +18 -18
- package/dist/esm/components/QueryEditor/QueryHeader.js.map +1 -1
- package/dist/esm/components/QueryEditor/RunQueryButton.js +1 -1
- package/dist/esm/components/QueryEditor/RunQueryButton.js.map +1 -1
- package/dist/esm/components/QueryEditor/Space.js +17 -26
- package/dist/esm/components/QueryEditor/Space.js.map +1 -1
- package/dist/esm/components/QueryEditor/TableSelector.js.map +1 -1
- package/dist/esm/components/QueryEditor/defaults.js +7 -7
- package/dist/esm/components/QueryEditor/defaults.js.map +1 -1
- package/dist/esm/components/QueryEditor/expressions.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryEditorRaw.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryToolbox.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js +4 -4
- package/dist/esm/components/QueryEditor/query-editor-raw/QueryValidator.js.map +1 -1
- package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js +3 -3
- package/dist/esm/components/QueryEditor/query-editor-raw/RawEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/types.js.map +1 -1
- package/dist/esm/components/QueryEditor/utils/formatSQL.js.map +1 -1
- package/dist/esm/components/QueryEditor/utils/sql.utils.js +8 -8
- package/dist/esm/components/QueryEditor/utils/sql.utils.js.map +1 -1
- package/dist/esm/components/QueryEditor/utils/useSqlChange.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js +26 -27
- package/dist/esm/components/QueryEditor/visual-query-builder/AwesomeQueryBuilder.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js +3 -3
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorField.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/EditorRows.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/GroupByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js +4 -4
- package/dist/esm/components/QueryEditor/visual-query-builder/OrderByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/Preview.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLGroupByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js +2 -2
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLOrderByRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLSelectRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SQLWhereRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js +9 -9
- package/dist/esm/components/QueryEditor/visual-query-builder/SelectRow.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/VisualEditor.js.map +1 -1
- package/dist/esm/components/QueryEditor/visual-query-builder/WhereRow.js.map +1 -1
- package/dist/esm/components/QueryEditorRow/QueryEditorRow.js.map +1 -1
- package/dist/esm/components/SQLEditor/components/SQLEditor.js +13 -13
- package/dist/esm/components/SQLEditor/components/SQLEditor.js.map +1 -1
- package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js +1 -1
- package/dist/esm/components/SQLEditor/hooks/useLatestCallback.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/Monaco.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/TextModel.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQuery.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/multiLineFullQueryWithAggregation.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/multiLineMultipleColumns.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineEmptyQuery.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQuery.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineFullQueryWithAggregation.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineMultipleColumns.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueries.js.map +1 -1
- package/dist/esm/components/SQLEditor/mocks/queries/singleLineTwoQueriesWithAggregation.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/definition.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js +2 -2
- package/dist/esm/components/SQLEditor/standardSql/getStandardSuggestions.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js +3 -3
- package/dist/esm/components/SQLEditor/standardSql/getStatementPosition.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/language.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/macros.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js +2 -2
- package/dist/esm/components/SQLEditor/standardSql/standardSQLCompletionItemProvider.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js +1 -1
- package/dist/esm/components/SQLEditor/standardSql/standardSuggestionsRegistry.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js +25 -25
- package/dist/esm/components/SQLEditor/standardSql/statementPositionResolversRegistry.js.map +1 -1
- package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js +1 -1
- package/dist/esm/components/SQLEditor/standardSql/suggestionsKindRegistry.js.map +1 -1
- package/dist/esm/components/SQLEditor/test-utils/index.js.map +1 -1
- package/dist/esm/components/SQLEditor/test-utils/statementPosition.js.map +1 -1
- package/dist/esm/components/SQLEditor/types.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/LinkedToken.js +7 -7
- package/dist/esm/components/SQLEditor/utils/LinkedToken.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/commands.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/debugger.js +1 -1
- package/dist/esm/components/SQLEditor/utils/debugger.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/getSuggestionKind.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js +1 -1
- package/dist/esm/components/SQLEditor/utils/linkedTokenBuilder.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/toCompletionItem.js +1 -1
- package/dist/esm/components/SQLEditor/utils/toCompletionItem.js.map +1 -1
- package/dist/esm/components/SQLEditor/utils/tokenUtils.js +9 -9
- package/dist/esm/components/SQLEditor/utils/tokenUtils.js.map +1 -1
- package/dist/esm/components/Segment/Segment.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/QueryModellerBase.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js +11 -11
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilterItem.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/LabelFilters.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js +4 -4
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditor.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js +2 -3
- package/dist/esm/components/VisualQueryBuilder/components/OperationEditorBody.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js +3 -3
- package/dist/esm/components/VisualQueryBuilder/components/OperationExplainedBox.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/OperationHeader.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/OperationInfoButton.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationList.js +3 -4
- package/dist/esm/components/VisualQueryBuilder/components/OperationList.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/OperationListExplained.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js +5 -6
- package/dist/esm/components/VisualQueryBuilder/components/OperationParamEditor.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js +2 -3
- package/dist/esm/components/VisualQueryBuilder/components/OperationsEditorRow.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js +8 -8
- package/dist/esm/components/VisualQueryBuilder/components/QueryBuilderHints.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryEditorModeToggle.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js +2 -3
- package/dist/esm/components/VisualQueryBuilder/components/QueryHeaderSwitch.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js +0 -1
- package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js +2 -2
- package/dist/esm/components/VisualQueryBuilder/components/RawQuery.js.map +1 -1
- package/dist/esm/components/VisualQueryBuilder/types.js.map +1 -1
- package/dist/esm/datasource/SqlDatasource.js +14 -14
- package/dist/esm/datasource/SqlDatasource.js.map +1 -1
- package/dist/esm/datasource/constants.js.map +1 -1
- package/dist/esm/hooks/useDebounce.js.map +1 -1
- package/dist/esm/index.d.ts +2 -9
- package/dist/esm/test/mocks/DataQuery.js.map +1 -1
- package/dist/esm/test/mocks/Datasource.js +1 -1
- package/dist/esm/test/mocks/Datasource.js.map +1 -1
- package/dist/esm/test/mocks/Plugin.js +1 -1
- package/dist/esm/test/mocks/Plugin.js.map +1 -1
- package/dist/esm/test/mocks/QueryEditorProps.js.map +1 -1
- package/dist/esm/test/mocks/utils.js +2 -2
- package/dist/esm/test/mocks/utils.js.map +1 -1
- package/dist/esm/test-utils.d.ts +1 -1
- package/package.json +13 -29
|
@@ -37,9 +37,9 @@ function OrderByRow({ sql, onSqlChange, columns, showOffset }) {
|
|
|
37
37
|
);
|
|
38
38
|
const onOrderByChange = useCallback(
|
|
39
39
|
(item) => {
|
|
40
|
-
const newSql = { ...sql, orderBy: setPropertyField(item == null ?
|
|
40
|
+
const newSql = { ...sql, orderBy: setPropertyField(item == null ? void 0 : item.value) };
|
|
41
41
|
if (item === null) {
|
|
42
|
-
newSql.orderByDirection =
|
|
42
|
+
newSql.orderByDirection = void 0;
|
|
43
43
|
}
|
|
44
44
|
onSqlChange(newSql);
|
|
45
45
|
},
|
|
@@ -50,7 +50,7 @@ function OrderByRow({ sql, onSqlChange, columns, showOffset }) {
|
|
|
50
50
|
{
|
|
51
51
|
"aria-label": "Order by",
|
|
52
52
|
options: columns,
|
|
53
|
-
value: ((_a = sql.orderBy) == null ?
|
|
53
|
+
value: ((_a = sql.orderBy) == null ? void 0 : _a.property.name) ? toOption(sql.orderBy.property.name) : null,
|
|
54
54
|
isClearable: true,
|
|
55
55
|
menuShouldPortal: true,
|
|
56
56
|
onChange: onOrderByChange
|
|
@@ -59,7 +59,7 @@ function OrderByRow({ sql, onSqlChange, columns, showOffset }) {
|
|
|
59
59
|
RadioButtonGroup,
|
|
60
60
|
{
|
|
61
61
|
options: sortOrderOptions,
|
|
62
|
-
disabled: !((_b = sql == null ?
|
|
62
|
+
disabled: !((_b = sql == null ? void 0 : sql.orderBy) == null ? void 0 : _b.property.name),
|
|
63
63
|
value: sql.orderByDirection,
|
|
64
64
|
onChange: onSortOrderChange
|
|
65
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrderByRow.js","sources":["../../../../../src/components/QueryEditor/visual-query-builder/OrderByRow.tsx"],"sourcesContent":["import { uniqueId } from 'lodash';\nimport React, { useCallback } from 'react';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { Input, RadioButtonGroup, Select } from '@grafana/ui';\nimport { type SQLExpression } from '../types';\nimport { setPropertyField } from '../utils/sql.utils';\nimport { Space } from '../Space';\nimport { EditorField } from '../EditorField';\nimport { InputGroup } from '../InputGroup';\n\ntype OrderByRowProps = {\n sql: SQLExpression;\n onSqlChange: (sql: SQLExpression) => void;\n columns?: Array<SelectableValue<string>>;\n showOffset?: boolean;\n};\n\nconst sortOrderOptions = [\n { description: 'Sort by ascending', value: 'ASC', icon: 'sort-amount-up' } as const,\n { description: 'Sort by descending', value: 'DESC', icon: 'sort-amount-down' } as const,\n];\n\nexport function OrderByRow({ sql, onSqlChange, columns, showOffset }: OrderByRowProps) {\n const onSortOrderChange = useCallback(\n (item: 'ASC' | 'DESC') => {\n const newSql: SQLExpression = { ...sql, orderByDirection: item };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const onLimitChange = useCallback(\n (event: React.FormEvent<HTMLInputElement>) => {\n const newSql: SQLExpression = { ...sql, limit: Number.parseInt(event.currentTarget.value, 10) };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const onOffsetChange = useCallback(\n (event: React.FormEvent<HTMLInputElement>) => {\n const newSql: SQLExpression = { ...sql, offset: Number.parseInt(event.currentTarget.value, 10) };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const onOrderByChange = useCallback(\n (item: SelectableValue<string>) => {\n const newSql: SQLExpression = { ...sql, orderBy: setPropertyField(item?.value) };\n if (item === null) {\n newSql.orderByDirection = undefined;\n }\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n return (\n <>\n <EditorField label=\"Order by\" width={25}>\n <InputGroup>\n <Select\n aria-label=\"Order by\"\n options={columns}\n value={sql.orderBy?.property.name ? toOption(sql.orderBy.property.name) : null}\n isClearable\n menuShouldPortal\n onChange={onOrderByChange}\n />\n\n <Space h={1.5} />\n\n <RadioButtonGroup\n options={sortOrderOptions}\n disabled={!sql?.orderBy?.property.name}\n value={sql.orderByDirection}\n onChange={onSortOrderChange}\n />\n </InputGroup>\n </EditorField>\n <EditorField label=\"Limit\" optional width={25}>\n <Input type=\"number\" min={0} id={uniqueId('limit-')} value={sql.limit || ''} onChange={onLimitChange} />\n </EditorField>\n {showOffset && (\n <EditorField label=\"Offset\" optional width={25}>\n <Input type=\"number\" id={uniqueId('offset-')} value={sql.offset || ''} onChange={onOffsetChange} />\n </EditorField>\n )}\n </>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;AAiBA,MAAM,
|
|
1
|
+
{"version":3,"file":"OrderByRow.js","sources":["../../../../../src/components/QueryEditor/visual-query-builder/OrderByRow.tsx"],"sourcesContent":["import { uniqueId } from 'lodash';\nimport React, { useCallback } from 'react';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { Input, RadioButtonGroup, Select } from '@grafana/ui';\nimport { type SQLExpression } from '../types';\nimport { setPropertyField } from '../utils/sql.utils';\nimport { Space } from '../Space';\nimport { EditorField } from '../EditorField';\nimport { InputGroup } from '../InputGroup';\n\ntype OrderByRowProps = {\n sql: SQLExpression;\n onSqlChange: (sql: SQLExpression) => void;\n columns?: Array<SelectableValue<string>>;\n showOffset?: boolean;\n};\n\nconst sortOrderOptions = [\n { description: 'Sort by ascending', value: 'ASC', icon: 'sort-amount-up' } as const,\n { description: 'Sort by descending', value: 'DESC', icon: 'sort-amount-down' } as const,\n];\n\nexport function OrderByRow({ sql, onSqlChange, columns, showOffset }: OrderByRowProps) {\n const onSortOrderChange = useCallback(\n (item: 'ASC' | 'DESC') => {\n const newSql: SQLExpression = { ...sql, orderByDirection: item };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const onLimitChange = useCallback(\n (event: React.FormEvent<HTMLInputElement>) => {\n const newSql: SQLExpression = { ...sql, limit: Number.parseInt(event.currentTarget.value, 10) };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const onOffsetChange = useCallback(\n (event: React.FormEvent<HTMLInputElement>) => {\n const newSql: SQLExpression = { ...sql, offset: Number.parseInt(event.currentTarget.value, 10) };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const onOrderByChange = useCallback(\n (item: SelectableValue<string>) => {\n const newSql: SQLExpression = { ...sql, orderBy: setPropertyField(item?.value) };\n if (item === null) {\n newSql.orderByDirection = undefined;\n }\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n return (\n <>\n <EditorField label=\"Order by\" width={25}>\n <InputGroup>\n <Select\n aria-label=\"Order by\"\n options={columns}\n value={sql.orderBy?.property.name ? toOption(sql.orderBy.property.name) : null}\n isClearable\n menuShouldPortal\n onChange={onOrderByChange}\n />\n\n <Space h={1.5} />\n\n <RadioButtonGroup\n options={sortOrderOptions}\n disabled={!sql?.orderBy?.property.name}\n value={sql.orderByDirection}\n onChange={onSortOrderChange}\n />\n </InputGroup>\n </EditorField>\n <EditorField label=\"Limit\" optional width={25}>\n <Input type=\"number\" min={0} id={uniqueId('limit-')} value={sql.limit || ''} onChange={onLimitChange} />\n </EditorField>\n {showOffset && (\n <EditorField label=\"Offset\" optional width={25}>\n <Input type=\"number\" id={uniqueId('offset-')} value={sql.offset || ''} onChange={onOffsetChange} />\n </EditorField>\n )}\n </>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;AAiBA,MAAM,gBAAA,GAAmB;AAAA,EACvB,EAAE,WAAA,EAAa,mBAAA,EAAqB,KAAA,EAAO,KAAA,EAAO,MAAM,gBAAA,EAAiB;AAAA,EACzE,EAAE,WAAA,EAAa,oBAAA,EAAsB,KAAA,EAAO,MAAA,EAAQ,MAAM,kBAAA;AAC5D,CAAA;AAEO,SAAS,WAAW,EAAE,GAAA,EAAK,WAAA,EAAa,OAAA,EAAS,YAAW,EAAoB;AAtBvF,EAAA,IAAA,EAAA,EAAA,EAAA;AAuBE,EAAA,MAAM,iBAAA,GAAoB,WAAA;AAAA,IACxB,CAAC,IAAA,KAAyB;AACxB,MAAA,MAAM,MAAA,GAAwB,EAAE,GAAG,GAAA,EAAK,kBAAkB,IAAA,EAAK;AAC/D,MAAA,WAAA,CAAY,MAAM,CAAA;AAAA,IACpB,CAAA;AAAA,IACA,CAAC,aAAa,GAAG;AAAA,GACnB;AAEA,EAAA,MAAM,aAAA,GAAgB,WAAA;AAAA,IACpB,CAAC,KAAA,KAA6C;AAC5C,MAAA,MAAM,MAAA,GAAwB,EAAE,GAAG,GAAA,EAAK,KAAA,EAAO,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,aAAA,CAAc,KAAA,EAAO,EAAE,CAAA,EAAE;AAC9F,MAAA,WAAA,CAAY,MAAM,CAAA;AAAA,IACpB,CAAA;AAAA,IACA,CAAC,aAAa,GAAG;AAAA,GACnB;AAEA,EAAA,MAAM,cAAA,GAAiB,WAAA;AAAA,IACrB,CAAC,KAAA,KAA6C;AAC5C,MAAA,MAAM,MAAA,GAAwB,EAAE,GAAG,GAAA,EAAK,MAAA,EAAQ,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,aAAA,CAAc,KAAA,EAAO,EAAE,CAAA,EAAE;AAC/F,MAAA,WAAA,CAAY,MAAM,CAAA;AAAA,IACpB,CAAA;AAAA,IACA,CAAC,aAAa,GAAG;AAAA,GACnB;AAEA,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,CAAC,IAAA,KAAkC;AACjC,MAAA,MAAM,MAAA,GAAwB,EAAE,GAAG,GAAA,EAAK,SAAS,gBAAA,CAAiB,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,KAAK,CAAA,EAAE;AAC/E,MAAA,IAAI,SAAS,IAAA,EAAM;AACjB,QAAA,MAAA,CAAO,gBAAA,GAAmB,MAAA;AAAA,MAC5B;AACA,MAAA,WAAA,CAAY,MAAM,CAAA;AAAA,IACpB,CAAA;AAAA,IACA,CAAC,aAAa,GAAG;AAAA,GACnB;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,sCACG,WAAA,EAAA,EAAY,KAAA,EAAM,YAAW,KAAA,EAAO,EAAA,EAAA,sCAClC,UAAA,EAAA,IAAA,kBACC,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAW,UAAA;AAAA,MACX,OAAA,EAAS,OAAA;AAAA,MACT,KAAA,EAAA,CAAA,CAAO,EAAA,GAAA,GAAA,CAAI,OAAA,KAAJ,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,QAAA,CAAS,IAAA,IAAO,QAAA,CAAS,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA,GAAI,IAAA;AAAA,MAC1E,WAAA,EAAW,IAAA;AAAA,MACX,gBAAA,EAAgB,IAAA;AAAA,MAChB,QAAA,EAAU;AAAA;AAAA,GACZ,kBAEA,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,CAAA,EAAG,KAAK,CAAA,kBAEf,KAAA,CAAA,aAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,gBAAA;AAAA,MACT,QAAA,EAAU,EAAA,CAAC,EAAA,GAAA,GAAA,IAAA,IAAA,GAAA,MAAA,GAAA,GAAA,CAAK,OAAA,KAAL,mBAAc,QAAA,CAAS,IAAA,CAAA;AAAA,MAClC,OAAO,GAAA,CAAI,gBAAA;AAAA,MACX,QAAA,EAAU;AAAA;AAAA,GAEd,CACF,CAAA,kBACA,KAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,OAAM,OAAA,EAAQ,QAAA,EAAQ,IAAA,EAAC,KAAA,EAAO,EAAA,EAAA,kBACzC,KAAA,CAAA,aAAA,CAAC,SAAM,IAAA,EAAK,QAAA,EAAS,GAAA,EAAK,CAAA,EAAG,EAAA,EAAI,QAAA,CAAS,QAAQ,CAAA,EAAG,KAAA,EAAO,GAAA,CAAI,KAAA,IAAS,EAAA,EAAI,QAAA,EAAU,eAAe,CACxG,CAAA,EACC,UAAA,oBACC,KAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAM,UAAS,QAAA,EAAQ,IAAA,EAAC,KAAA,EAAO,EAAA,EAAA,kBAC1C,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAM,MAAK,QAAA,EAAS,EAAA,EAAI,QAAA,CAAS,SAAS,CAAA,EAAG,KAAA,EAAO,GAAA,CAAI,MAAA,IAAU,EAAA,EAAI,QAAA,EAAU,cAAA,EAAgB,CACnG,CAEJ,CAAA;AAEJ;;;;"}
|
|
@@ -7,7 +7,7 @@ import { formatSQL } from '../utils/formatSQL.js';
|
|
|
7
7
|
|
|
8
8
|
function Preview({ rawSql }) {
|
|
9
9
|
const [_, copyToClipboard] = useCopyToClipboard();
|
|
10
|
-
const styles = useStyles2(getStyles);
|
|
10
|
+
const styles = useStyles2(getStyles$g);
|
|
11
11
|
const labelElement = /* @__PURE__ */ React.createElement("div", { className: styles.labelWrapper }, /* @__PURE__ */ React.createElement("label", { className: styles.label }, "Preview"), /* @__PURE__ */ React.createElement(IconButton, { tooltip: "Copy to clipboard", onClick: () => copyToClipboard(rawSql), name: "copy" }));
|
|
12
12
|
return /* @__PURE__ */ React.createElement(Field, { label: labelElement, className: styles.grow }, /* @__PURE__ */ React.createElement(
|
|
13
13
|
CodeEditor,
|
|
@@ -21,7 +21,7 @@ function Preview({ rawSql }) {
|
|
|
21
21
|
}
|
|
22
22
|
));
|
|
23
23
|
}
|
|
24
|
-
function getStyles(theme) {
|
|
24
|
+
function getStyles$g(theme) {
|
|
25
25
|
return {
|
|
26
26
|
grow: css({ flexGrow: 1 }),
|
|
27
27
|
label: css({ fontSize: 12, fontWeight: theme.typography.fontWeightMedium }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Preview.js","sources":["../../../../../src/components/QueryEditor/visual-query-builder/Preview.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from '@emotion/css';\nimport { useCopyToClipboard } from 'react-use';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { CodeEditor, Field, IconButton, useStyles2 } from '@grafana/ui';\n\nimport { formatSQL } from '../utils/formatSQL';\n\ntype PreviewProps = {\n rawSql: string;\n};\n\nexport function Preview({ rawSql }: PreviewProps) {\n // TODO: use zero index to give feedback about copy success\n const [_, copyToClipboard] = useCopyToClipboard();\n const styles = useStyles2(getStyles);\n\n const labelElement = (\n <div className={styles.labelWrapper}>\n <label className={styles.label}>Preview</label>\n <IconButton tooltip=\"Copy to clipboard\" onClick={() => copyToClipboard(rawSql)} name=\"copy\" />\n </div>\n );\n\n return (\n <Field label={labelElement} className={styles.grow}>\n <CodeEditor\n language=\"sql\"\n height={80}\n value={formatSQL(rawSql)}\n monacoOptions={{ scrollbar: { vertical: 'hidden' }, scrollBeyondLastLine: false }}\n readOnly={true}\n showMiniMap={false}\n />\n </Field>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n grow: css({ flexGrow: 1 }),\n label: css({ fontSize: 12, fontWeight: theme.typography.fontWeightMedium }),\n labelWrapper: css({ display: 'flex', justifyContent: 'space-between', paddingBottom: theme.spacing(0.5) }),\n };\n}\n"],"names":[],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"Preview.js","sources":["../../../../../src/components/QueryEditor/visual-query-builder/Preview.tsx"],"sourcesContent":["import React from 'react';\nimport { css } from '@emotion/css';\nimport { useCopyToClipboard } from 'react-use';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { CodeEditor, Field, IconButton, useStyles2 } from '@grafana/ui';\n\nimport { formatSQL } from '../utils/formatSQL';\n\ntype PreviewProps = {\n rawSql: string;\n};\n\nexport function Preview({ rawSql }: PreviewProps) {\n // TODO: use zero index to give feedback about copy success\n const [_, copyToClipboard] = useCopyToClipboard();\n const styles = useStyles2(getStyles);\n\n const labelElement = (\n <div className={styles.labelWrapper}>\n <label className={styles.label}>Preview</label>\n <IconButton tooltip=\"Copy to clipboard\" onClick={() => copyToClipboard(rawSql)} name=\"copy\" />\n </div>\n );\n\n return (\n <Field label={labelElement} className={styles.grow}>\n <CodeEditor\n language=\"sql\"\n height={80}\n value={formatSQL(rawSql)}\n monacoOptions={{ scrollbar: { vertical: 'hidden' }, scrollBeyondLastLine: false }}\n readOnly={true}\n showMiniMap={false}\n />\n </Field>\n );\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n grow: css({ flexGrow: 1 }),\n label: css({ fontSize: 12, fontWeight: theme.typography.fontWeightMedium }),\n labelWrapper: css({ display: 'flex', justifyContent: 'space-between', paddingBottom: theme.spacing(0.5) }),\n };\n}\n"],"names":["getStyles"],"mappings":";;;;;;;AAaO,SAAS,OAAA,CAAQ,EAAE,MAAA,EAAO,EAAiB;AAEhD,EAAA,MAAM,CAAC,CAAA,EAAG,eAAe,CAAA,GAAI,kBAAA,EAAmB;AAChD,EAAA,MAAM,MAAA,GAAS,WAAWA,WAAS,CAAA;AAEnC,EAAA,MAAM,YAAA,mBACJ,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,MAAA,CAAO,gCACrB,KAAA,CAAA,aAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAW,MAAA,CAAO,KAAA,EAAA,EAAO,SAAO,mBACvC,KAAA,CAAA,aAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,mBAAA,EAAoB,OAAA,EAAS,MAAM,gBAAgB,MAAM,CAAA,EAAG,IAAA,EAAK,MAAA,EAAO,CAC9F,CAAA;AAGF,EAAA,2CACG,KAAA,EAAA,EAAM,KAAA,EAAO,YAAA,EAAc,SAAA,EAAW,OAAO,IAAA,EAAA,kBAC5C,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAS,KAAA;AAAA,MACT,MAAA,EAAQ,EAAA;AAAA,MACR,KAAA,EAAO,UAAU,MAAM,CAAA;AAAA,MACvB,aAAA,EAAe,EAAE,SAAA,EAAW,EAAE,UAAU,QAAA,EAAS,EAAG,sBAAsB,KAAA,EAAM;AAAA,MAChF,QAAA,EAAU,IAAA;AAAA,MACV,WAAA,EAAa;AAAA;AAAA,GAEjB,CAAA;AAEJ;AAEA,SAASA,YAAU,KAAA,EAAsB;AACvC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,GAAA,CAAI,EAAE,QAAA,EAAU,GAAG,CAAA;AAAA,IACzB,KAAA,EAAO,IAAI,EAAE,QAAA,EAAU,IAAI,UAAA,EAAY,KAAA,CAAM,UAAA,CAAW,gBAAA,EAAkB,CAAA;AAAA,IAC1E,YAAA,EAAc,GAAA,CAAI,EAAE,OAAA,EAAS,MAAA,EAAQ,cAAA,EAAgB,eAAA,EAAiB,aAAA,EAAe,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AAAA,GAC3G;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SQLGroupByRow.js","sources":["../../../../../src/components/QueryEditor/visual-query-builder/SQLGroupByRow.tsx"],"sourcesContent":["import React from 'react';\nimport { type SelectableValue } from '@grafana/data';\n\nimport { GroupByRow } from './GroupByRow';\nimport { type QueryWithDefaults } from '../defaults';\nimport { type SQLQuery, type DB } from '../types';\nimport { useSqlChange } from '../utils/useSqlChange';\n\ninterface SQLGroupByRowProps {\n fields: SelectableValue[];\n query: QueryWithDefaults;\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n}\n\nexport function SQLGroupByRow({ fields, query, onQueryChange, db }: SQLGroupByRowProps) {\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n\n return <GroupByRow columns={fields} sql={query.sql!} onSqlChange={onSqlChange} />;\n}\n"],"names":[],"mappings":";;;;;;;AAeO,SAAS,cAAc,EAAE,MAAA,EAAQ,
|
|
1
|
+
{"version":3,"file":"SQLGroupByRow.js","sources":["../../../../../src/components/QueryEditor/visual-query-builder/SQLGroupByRow.tsx"],"sourcesContent":["import React from 'react';\nimport { type SelectableValue } from '@grafana/data';\n\nimport { GroupByRow } from './GroupByRow';\nimport { type QueryWithDefaults } from '../defaults';\nimport { type SQLQuery, type DB } from '../types';\nimport { useSqlChange } from '../utils/useSqlChange';\n\ninterface SQLGroupByRowProps {\n fields: SelectableValue[];\n query: QueryWithDefaults;\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n}\n\nexport function SQLGroupByRow({ fields, query, onQueryChange, db }: SQLGroupByRowProps) {\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n\n return <GroupByRow columns={fields} sql={query.sql!} onSqlChange={onSqlChange} />;\n}\n"],"names":[],"mappings":";;;;;;;AAeO,SAAS,cAAc,EAAE,MAAA,EAAQ,KAAA,EAAO,aAAA,EAAe,IAAG,EAAuB;AACtF,EAAA,MAAM,EAAE,aAAY,GAAI,YAAA,CAAa,EAAE,KAAA,EAAO,aAAA,EAAe,IAAI,CAAA;AAEjE,EAAA,2CAAQ,UAAA,EAAA,EAAW,OAAA,EAAS,QAAQ,GAAA,EAAK,KAAA,CAAM,KAAM,WAAA,EAA0B,CAAA;AACjF;;;;"}
|
|
@@ -10,9 +10,9 @@ function SQLOrderByRow({ fields, query, onQueryChange, db }) {
|
|
|
10
10
|
const { onSqlChange } = useSqlChange({ query, onQueryChange, db });
|
|
11
11
|
let columnsWithIndices = [];
|
|
12
12
|
if (fields) {
|
|
13
|
-
const options = (_b = (_a = query.sql) == null ?
|
|
13
|
+
const options = (_b = (_a = query.sql) == null ? void 0 : _a.columns) == null ? void 0 : _b.map((c, i) => {
|
|
14
14
|
var _a2, _b2;
|
|
15
|
-
const value = c.name ? `${c.name}(${(_a2 = c.parameters) == null ?
|
|
15
|
+
const value = c.name ? `${c.name}(${(_a2 = c.parameters) == null ? void 0 : _a2.map((p) => p.name)})` : (_b2 = c.parameters) == null ? void 0 : _b2.map((p) => p.name);
|
|
16
16
|
return {
|
|
17
17
|
value,
|
|
18
18
|
label: `${i + 1} - ${value}`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SQLOrderByRow.js","sources":["../../../../../src/components/QueryEditor/visual-query-builder/SQLOrderByRow.tsx"],"sourcesContent":["import React from 'react';\nimport { type SelectableValue } from '@grafana/data';\nimport { OrderByRow } from './OrderByRow';\nimport { type QueryWithDefaults } from '../defaults';\nimport { type SQLQuery, type DB } from '../types';\nimport { useSqlChange } from '../utils/useSqlChange';\n\ntype SQLOrderByRowProps = {\n fields: SelectableValue[];\n query: QueryWithDefaults;\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n};\n\nexport function SQLOrderByRow({ fields, query, onQueryChange, db }: SQLOrderByRowProps) {\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n let columnsWithIndices: SelectableValue[] = [];\n\n if (fields) {\n const options = query.sql?.columns?.map((c, i) => {\n const value = c.name ? `${c.name}(${c.parameters?.map((p) => p.name)})` : c.parameters?.map((p) => p.name);\n return {\n value,\n label: `${i + 1} - ${value}`,\n };\n });\n columnsWithIndices = [\n {\n value: '',\n label: 'Selected columns',\n options,\n expanded: true,\n },\n ...fields,\n ];\n }\n\n return <OrderByRow sql={query.sql!} onSqlChange={onSqlChange} columns={columnsWithIndices} />;\n}\n"],"names":["_a","_b"],"mappings":";;;;;;;AAcO,SAAS,cAAc,EAAE,MAAA,EAAQ,
|
|
1
|
+
{"version":3,"file":"SQLOrderByRow.js","sources":["../../../../../src/components/QueryEditor/visual-query-builder/SQLOrderByRow.tsx"],"sourcesContent":["import React from 'react';\nimport { type SelectableValue } from '@grafana/data';\nimport { OrderByRow } from './OrderByRow';\nimport { type QueryWithDefaults } from '../defaults';\nimport { type SQLQuery, type DB } from '../types';\nimport { useSqlChange } from '../utils/useSqlChange';\n\ntype SQLOrderByRowProps = {\n fields: SelectableValue[];\n query: QueryWithDefaults;\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n};\n\nexport function SQLOrderByRow({ fields, query, onQueryChange, db }: SQLOrderByRowProps) {\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n let columnsWithIndices: SelectableValue[] = [];\n\n if (fields) {\n const options = query.sql?.columns?.map((c, i) => {\n const value = c.name ? `${c.name}(${c.parameters?.map((p) => p.name)})` : c.parameters?.map((p) => p.name);\n return {\n value,\n label: `${i + 1} - ${value}`,\n };\n });\n columnsWithIndices = [\n {\n value: '',\n label: 'Selected columns',\n options,\n expanded: true,\n },\n ...fields,\n ];\n }\n\n return <OrderByRow sql={query.sql!} onSqlChange={onSqlChange} columns={columnsWithIndices} />;\n}\n"],"names":["_a","_b"],"mappings":";;;;;;;AAcO,SAAS,cAAc,EAAE,MAAA,EAAQ,KAAA,EAAO,aAAA,EAAe,IAAG,EAAuB;AAdxF,EAAA,IAAA,EAAA,EAAA,EAAA;AAeE,EAAA,MAAM,EAAE,aAAY,GAAI,YAAA,CAAa,EAAE,KAAA,EAAO,aAAA,EAAe,IAAI,CAAA;AACjE,EAAA,IAAI,qBAAwC,EAAC;AAE7C,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAM,OAAA,GAAA,CAAU,iBAAM,GAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAW,YAAX,IAAA,GAAA,MAAA,GAAA,EAAA,CAAoB,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM;AAnBtD,MAAA,IAAAA,GAAAA,EAAAC,GAAAA;AAoBM,MAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,IAAA,GAAO,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAA,CAAID,GAAAA,GAAA,CAAA,CAAE,UAAA,KAAF,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAc,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,CAAA,CAAA,CAAA,GAAA,CAAMC,GAAAA,GAAA,CAAA,CAAE,UAAA,KAAF,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAc,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAA;AACrG,MAAA,OAAO;AAAA,QACL,KAAA;AAAA,QACA,KAAA,EAAO,CAAA,EAAG,CAAA,GAAI,CAAC,MAAM,KAAK,CAAA;AAAA,OAC5B;AAAA,IACF,CAAA,CAAA;AACA,IAAA,kBAAA,GAAqB;AAAA,MACnB;AAAA,QACE,KAAA,EAAO,EAAA;AAAA,QACP,KAAA,EAAO,kBAAA;AAAA,QACP,OAAA;AAAA,QACA,QAAA,EAAU;AAAA,OACZ;AAAA,MACA,GAAG;AAAA,KACL;AAAA,EACF;AAEA,EAAA,2CAAQ,UAAA,EAAA,EAAW,GAAA,EAAK,MAAM,GAAA,EAAM,WAAA,EAA0B,SAAS,kBAAA,EAAoB,CAAA;AAC7F;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SQLSelectRow.js","sources":["../../../../../src/components/QueryEditor/visual-query-builder/SQLSelectRow.tsx"],"sourcesContent":["import React from 'react';\nimport { useAsync } from 'react-use';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { SelectRow } from './SelectRow';\nimport { type QueryWithDefaults } from '../defaults';\nimport { type SQLQuery, type DB } from '../types';\nimport { useSqlChange } from '../utils/useSqlChange';\n\ninterface SQLSelectRowProps {\n fields: SelectableValue[];\n query: QueryWithDefaults;\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n}\n\nexport function SQLSelectRow({ fields, query, onQueryChange, db }: SQLSelectRowProps) {\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n\n const state = useAsync(async () => {\n const functions = await db.functions();\n return functions.map((f) => toOption(f.name));\n }, [db]);\n\n return <SelectRow columns={fields} sql={query.sql!} functions={state.value} onSqlChange={onSqlChange} />;\n}\n"],"names":[],"mappings":";;;;;;;;AAeO,SAAS,aAAa,EAAE,MAAA,EAAQ,
|
|
1
|
+
{"version":3,"file":"SQLSelectRow.js","sources":["../../../../../src/components/QueryEditor/visual-query-builder/SQLSelectRow.tsx"],"sourcesContent":["import React from 'react';\nimport { useAsync } from 'react-use';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { SelectRow } from './SelectRow';\nimport { type QueryWithDefaults } from '../defaults';\nimport { type SQLQuery, type DB } from '../types';\nimport { useSqlChange } from '../utils/useSqlChange';\n\ninterface SQLSelectRowProps {\n fields: SelectableValue[];\n query: QueryWithDefaults;\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n}\n\nexport function SQLSelectRow({ fields, query, onQueryChange, db }: SQLSelectRowProps) {\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n\n const state = useAsync(async () => {\n const functions = await db.functions();\n return functions.map((f) => toOption(f.name));\n }, [db]);\n\n return <SelectRow columns={fields} sql={query.sql!} functions={state.value} onSqlChange={onSqlChange} />;\n}\n"],"names":[],"mappings":";;;;;;;;AAeO,SAAS,aAAa,EAAE,MAAA,EAAQ,KAAA,EAAO,aAAA,EAAe,IAAG,EAAsB;AACpF,EAAA,MAAM,EAAE,aAAY,GAAI,YAAA,CAAa,EAAE,KAAA,EAAO,aAAA,EAAe,IAAI,CAAA;AAEjE,EAAA,MAAM,KAAA,GAAQ,SAAS,YAAY;AACjC,IAAA,MAAM,SAAA,GAAY,MAAM,EAAA,CAAG,SAAA,EAAU;AACrC,IAAA,OAAO,UAAU,GAAA,CAAI,CAAC,MAAM,QAAA,CAAS,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EAC9C,CAAA,EAAG,CAAC,EAAE,CAAC,CAAA;AAEP,EAAA,uBAAO,KAAA,CAAA,aAAA,CAAC,SAAA,EAAA,EAAU,OAAA,EAAS,MAAA,EAAQ,GAAA,EAAK,MAAM,GAAA,EAAM,SAAA,EAAW,KAAA,CAAM,KAAA,EAAO,WAAA,EAA0B,CAAA;AACxG;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SQLWhereRow.js","sources":["../../../../../src/components/QueryEditor/visual-query-builder/SQLWhereRow.tsx"],"sourcesContent":["import React from 'react';\nimport { useAsync } from 'react-use';\nimport { type SelectableValue } from '@grafana/data';\nimport { type Config } from './AwesomeQueryBuilder';\nimport { WhereRow } from './WhereRow';\nimport { type QueryWithDefaults } from '../defaults';\nimport { type SQLQuery, type DB, type SQLExpression, type SQLSelectableValue } from '../types';\nimport { useSqlChange } from '../utils/useSqlChange';\n\ninterface WhereRowProps {\n query: QueryWithDefaults;\n fields: SelectableValue[];\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n}\n\nexport function SQLWhereRow({ query, fields, onQueryChange, db }: WhereRowProps) {\n const state = useAsync(async () => {\n return mapFieldsToTypes(fields);\n }, [fields]);\n\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n\n return (\n <WhereRow\n // TODO: fix key that's used to force clean render or SQLWhereRow - otherwise it doesn't render operators correctly\n key={JSON.stringify(state.value)}\n config={{ fields: state.value || {} }}\n sql={query.sql!}\n onSqlChange={(val: SQLExpression) => {\n onSqlChange(val);\n }}\n />\n );\n}\n\n// needed for awesome query builder\nfunction mapFieldsToTypes(columns: SQLSelectableValue[]) {\n const fields: Config['fields'] = {};\n for (const col of columns) {\n fields[col.value] = {\n type: col.raqbFieldType || 'text',\n valueSources: ['value'],\n mainWidgetProps: { customProps: { icon: col.icon } },\n };\n }\n return fields;\n}\n"],"names":[],"mappings":";;;;;;;;;AAgBO,SAAS,YAAY,EAAE,KAAA,EAAO,
|
|
1
|
+
{"version":3,"file":"SQLWhereRow.js","sources":["../../../../../src/components/QueryEditor/visual-query-builder/SQLWhereRow.tsx"],"sourcesContent":["import React from 'react';\nimport { useAsync } from 'react-use';\nimport { type SelectableValue } from '@grafana/data';\nimport { type Config } from './AwesomeQueryBuilder';\nimport { WhereRow } from './WhereRow';\nimport { type QueryWithDefaults } from '../defaults';\nimport { type SQLQuery, type DB, type SQLExpression, type SQLSelectableValue } from '../types';\nimport { useSqlChange } from '../utils/useSqlChange';\n\ninterface WhereRowProps {\n query: QueryWithDefaults;\n fields: SelectableValue[];\n onQueryChange: (query: SQLQuery) => void;\n db: DB;\n}\n\nexport function SQLWhereRow({ query, fields, onQueryChange, db }: WhereRowProps) {\n const state = useAsync(async () => {\n return mapFieldsToTypes(fields);\n }, [fields]);\n\n const { onSqlChange } = useSqlChange({ query, onQueryChange, db });\n\n return (\n <WhereRow\n // TODO: fix key that's used to force clean render or SQLWhereRow - otherwise it doesn't render operators correctly\n key={JSON.stringify(state.value)}\n config={{ fields: state.value || {} }}\n sql={query.sql!}\n onSqlChange={(val: SQLExpression) => {\n onSqlChange(val);\n }}\n />\n );\n}\n\n// needed for awesome query builder\nfunction mapFieldsToTypes(columns: SQLSelectableValue[]) {\n const fields: Config['fields'] = {};\n for (const col of columns) {\n fields[col.value] = {\n type: col.raqbFieldType || 'text',\n valueSources: ['value'],\n mainWidgetProps: { customProps: { icon: col.icon } },\n };\n }\n return fields;\n}\n"],"names":[],"mappings":";;;;;;;;;AAgBO,SAAS,YAAY,EAAE,KAAA,EAAO,MAAA,EAAQ,aAAA,EAAe,IAAG,EAAkB;AAC/E,EAAA,MAAM,KAAA,GAAQ,SAAS,YAAY;AACjC,IAAA,OAAO,iBAAiB,MAAM,CAAA;AAAA,EAChC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,EAAE,aAAY,GAAI,YAAA,CAAa,EAAE,KAAA,EAAO,aAAA,EAAe,IAAI,CAAA;AAEjE,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MAEC,GAAA,EAAK,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,KAAK,CAAA;AAAA,MAC/B,QAAQ,EAAE,MAAA,EAAQ,KAAA,CAAM,KAAA,IAAS,EAAC,EAAE;AAAA,MACpC,KAAK,KAAA,CAAM,GAAA;AAAA,MACX,WAAA,EAAa,CAAC,GAAA,KAAuB;AACnC,QAAA,WAAA,CAAY,GAAG,CAAA;AAAA,MACjB;AAAA;AAAA,GACF;AAEJ;AAGA,SAAS,iBAAiB,OAAA,EAA+B;AACvD,EAAA,MAAM,SAA2B,EAAC;AAClC,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,IAAA,MAAA,CAAO,GAAA,CAAI,KAAK,CAAA,GAAI;AAAA,MAClB,IAAA,EAAM,IAAI,aAAA,IAAiB,MAAA;AAAA,MAC3B,YAAA,EAAc,CAAC,OAAO,CAAA;AAAA,MACtB,iBAAiB,EAAE,WAAA,EAAa,EAAE,IAAA,EAAM,GAAA,CAAI,MAAK;AAAE,KACrD;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;;;;"}
|
|
@@ -12,13 +12,13 @@ import { EditorStack } from '../EditorStack.js';
|
|
|
12
12
|
const asteriskValue = { label: "*", value: "*" };
|
|
13
13
|
function SelectRow({ sql, columns, onSqlChange, functions }) {
|
|
14
14
|
var _a;
|
|
15
|
-
const styles = useStyles2(getStyles);
|
|
15
|
+
const styles = useStyles2(getStyles$f);
|
|
16
16
|
const columnsWithAsterisk = [asteriskValue, ...columns || []];
|
|
17
17
|
const onColumnChange = useCallback(
|
|
18
18
|
(item, index) => (column) => {
|
|
19
19
|
var _a2, _b;
|
|
20
20
|
let modifiedItem = { ...item };
|
|
21
|
-
if (!((_a2 = item.parameters) == null ?
|
|
21
|
+
if (!((_a2 = item.parameters) == null ? void 0 : _a2.length)) {
|
|
22
22
|
modifiedItem.parameters = [{ type: QueryEditorExpressionType.FunctionParameter, name: column.value }];
|
|
23
23
|
} else {
|
|
24
24
|
modifiedItem.parameters = item.parameters.map(
|
|
@@ -27,7 +27,7 @@ function SelectRow({ sql, columns, onSqlChange, functions }) {
|
|
|
27
27
|
}
|
|
28
28
|
const newSql = {
|
|
29
29
|
...sql,
|
|
30
|
-
columns: (_b = sql.columns) == null ?
|
|
30
|
+
columns: (_b = sql.columns) == null ? void 0 : _b.map((c, i) => i === index ? modifiedItem : c)
|
|
31
31
|
};
|
|
32
32
|
onSqlChange(newSql);
|
|
33
33
|
},
|
|
@@ -38,11 +38,11 @@ function SelectRow({ sql, columns, onSqlChange, functions }) {
|
|
|
38
38
|
var _a2;
|
|
39
39
|
const newItem = {
|
|
40
40
|
...item,
|
|
41
|
-
name: aggregation == null ?
|
|
41
|
+
name: aggregation == null ? void 0 : aggregation.value
|
|
42
42
|
};
|
|
43
43
|
const newSql = {
|
|
44
44
|
...sql,
|
|
45
|
-
columns: (_a2 = sql.columns) == null ?
|
|
45
|
+
columns: (_a2 = sql.columns) == null ? void 0 : _a2.map((c, i) => i === index ? newItem : c)
|
|
46
46
|
};
|
|
47
47
|
onSqlChange(newSql);
|
|
48
48
|
},
|
|
@@ -64,7 +64,7 @@ function SelectRow({ sql, columns, onSqlChange, functions }) {
|
|
|
64
64
|
const newSql = { ...sql, columns: [...sql.columns, createFunctionField()] };
|
|
65
65
|
onSqlChange(newSql);
|
|
66
66
|
}, [onSqlChange, sql]);
|
|
67
|
-
return /* @__PURE__ */ React.createElement(EditorStack, { gap: 2, alignItems: "end", direction: "column" }, (_a = sql.columns) == null ?
|
|
67
|
+
return /* @__PURE__ */ React.createElement(EditorStack, { gap: 2, alignItems: "end", direction: "column" }, (_a = sql.columns) == null ? void 0 : _a.map((item, index) => /* @__PURE__ */ React.createElement("div", { key: index }, /* @__PURE__ */ React.createElement(EditorStack, { gap: 2, alignItems: "end" }, /* @__PURE__ */ React.createElement(EditorField, { label: "Column", width: 25 }, /* @__PURE__ */ React.createElement(
|
|
68
68
|
Select,
|
|
69
69
|
{
|
|
70
70
|
value: getColumnValue(item),
|
|
@@ -108,12 +108,12 @@ function SelectRow({ sql, columns, onSqlChange, functions }) {
|
|
|
108
108
|
}
|
|
109
109
|
));
|
|
110
110
|
}
|
|
111
|
-
const getStyles = () => {
|
|
111
|
+
const getStyles$f = () => {
|
|
112
112
|
return { addButton: css({ alignSelf: "flex-start" }) };
|
|
113
113
|
};
|
|
114
114
|
function getColumnValue({ parameters }) {
|
|
115
|
-
const column = parameters == null ?
|
|
116
|
-
if (column == null ?
|
|
115
|
+
const column = parameters == null ? void 0 : parameters.find((p) => p.type === QueryEditorExpressionType.FunctionParameter);
|
|
116
|
+
if (column == null ? void 0 : column.name) {
|
|
117
117
|
return toOption(column.name);
|
|
118
118
|
}
|
|
119
119
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelectRow.js","sources":["../../../../../src/components/QueryEditor/visual-query-builder/SelectRow.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { uniqueId } from 'lodash';\nimport React, { useCallback } from 'react';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { Button, Select, useStyles2 } from '@grafana/ui';\nimport { EditorField } from '../EditorField';\nimport { type QueryEditorFunctionExpression, QueryEditorExpressionType } from '../expressions';\nimport { type SQLExpression } from '../types';\nimport { createFunctionField } from '../utils/sql.utils';\nimport { EditorStack } from '../EditorStack';\n\ninterface SelectRowProps {\n sql: SQLExpression;\n onSqlChange: (sql: SQLExpression) => void;\n columns?: Array<SelectableValue<string>>;\n functions?: Array<SelectableValue<string>>;\n}\n\nconst asteriskValue = { label: '*', value: '*' };\n\nexport function SelectRow({ sql, columns, onSqlChange, functions }: SelectRowProps) {\n const styles = useStyles2(getStyles);\n const columnsWithAsterisk = [asteriskValue, ...(columns || [])];\n\n const onColumnChange = useCallback(\n (item: QueryEditorFunctionExpression, index: number) => (column: SelectableValue<string>) => {\n let modifiedItem = { ...item };\n if (!item.parameters?.length) {\n modifiedItem.parameters = [{ type: QueryEditorExpressionType.FunctionParameter, name: column.value } as const];\n } else {\n modifiedItem.parameters = item.parameters.map((p) =>\n p.type === QueryEditorExpressionType.FunctionParameter ? { ...p, name: column.value } : p\n );\n }\n\n const newSql: SQLExpression = {\n ...sql,\n columns: sql.columns?.map((c, i) => (i === index ? modifiedItem : c)),\n };\n\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const onAggregationChange = useCallback(\n (item: QueryEditorFunctionExpression, index: number) => (aggregation: SelectableValue<string>) => {\n const newItem = {\n ...item,\n name: aggregation?.value,\n };\n const newSql: SQLExpression = {\n ...sql,\n columns: sql.columns?.map((c, i) => (i === index ? newItem : c)),\n };\n\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const removeColumn = useCallback(\n (index: number) => () => {\n const clone = [...sql.columns!];\n clone.splice(index, 1);\n const newSql: SQLExpression = {\n ...sql,\n columns: clone,\n };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const addColumn = useCallback(() => {\n const newSql: SQLExpression = { ...sql, columns: [...sql.columns!, createFunctionField()] };\n onSqlChange(newSql);\n }, [onSqlChange, sql]);\n\n return (\n <EditorStack gap={2} alignItems=\"end\" direction=\"column\">\n {sql.columns?.map((item, index) => (\n <div key={index}>\n <EditorStack gap={2} alignItems=\"end\">\n <EditorField label=\"Column\" width={25}>\n <Select\n value={getColumnValue(item)}\n options={columnsWithAsterisk}\n inputId={`select-column-${index}-${uniqueId()}`}\n menuShouldPortal\n allowCustomValue\n onChange={onColumnChange(item, index)}\n />\n </EditorField>\n\n <EditorField label=\"Aggregation\" optional width={25}>\n <Select\n value={item.name ? toOption(item.name) : null}\n inputId={`select-aggregation-${index}-${uniqueId()}`}\n isClearable\n menuShouldPortal\n allowCustomValue\n options={functions}\n onChange={onAggregationChange(item, index)}\n />\n </EditorField>\n <Button\n aria-label=\"Remove\"\n type=\"button\"\n icon=\"trash-alt\"\n variant=\"secondary\"\n size=\"md\"\n onClick={removeColumn(index)}\n />\n </EditorStack>\n </div>\n ))}\n <Button\n type=\"button\"\n onClick={addColumn}\n variant=\"secondary\"\n size=\"md\"\n icon=\"plus\"\n aria-label=\"Add\"\n className={styles.addButton}\n />\n </EditorStack>\n );\n}\n\nconst getStyles = () => {\n return { addButton: css({ alignSelf: 'flex-start' }) };\n};\n\nfunction getColumnValue({ parameters }: QueryEditorFunctionExpression): SelectableValue<string> | null {\n const column = parameters?.find((p) => p.type === QueryEditorExpressionType.FunctionParameter);\n if (column?.name) {\n return toOption(column.name);\n }\n return null;\n}\n"],"names":["_a"],"mappings":";;;;;;;;;;;AAkBA,MAAM,
|
|
1
|
+
{"version":3,"file":"SelectRow.js","sources":["../../../../../src/components/QueryEditor/visual-query-builder/SelectRow.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { uniqueId } from 'lodash';\nimport React, { useCallback } from 'react';\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { Button, Select, useStyles2 } from '@grafana/ui';\nimport { EditorField } from '../EditorField';\nimport { type QueryEditorFunctionExpression, QueryEditorExpressionType } from '../expressions';\nimport { type SQLExpression } from '../types';\nimport { createFunctionField } from '../utils/sql.utils';\nimport { EditorStack } from '../EditorStack';\n\ninterface SelectRowProps {\n sql: SQLExpression;\n onSqlChange: (sql: SQLExpression) => void;\n columns?: Array<SelectableValue<string>>;\n functions?: Array<SelectableValue<string>>;\n}\n\nconst asteriskValue = { label: '*', value: '*' };\n\nexport function SelectRow({ sql, columns, onSqlChange, functions }: SelectRowProps) {\n const styles = useStyles2(getStyles);\n const columnsWithAsterisk = [asteriskValue, ...(columns || [])];\n\n const onColumnChange = useCallback(\n (item: QueryEditorFunctionExpression, index: number) => (column: SelectableValue<string>) => {\n let modifiedItem = { ...item };\n if (!item.parameters?.length) {\n modifiedItem.parameters = [{ type: QueryEditorExpressionType.FunctionParameter, name: column.value } as const];\n } else {\n modifiedItem.parameters = item.parameters.map((p) =>\n p.type === QueryEditorExpressionType.FunctionParameter ? { ...p, name: column.value } : p\n );\n }\n\n const newSql: SQLExpression = {\n ...sql,\n columns: sql.columns?.map((c, i) => (i === index ? modifiedItem : c)),\n };\n\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const onAggregationChange = useCallback(\n (item: QueryEditorFunctionExpression, index: number) => (aggregation: SelectableValue<string>) => {\n const newItem = {\n ...item,\n name: aggregation?.value,\n };\n const newSql: SQLExpression = {\n ...sql,\n columns: sql.columns?.map((c, i) => (i === index ? newItem : c)),\n };\n\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const removeColumn = useCallback(\n (index: number) => () => {\n const clone = [...sql.columns!];\n clone.splice(index, 1);\n const newSql: SQLExpression = {\n ...sql,\n columns: clone,\n };\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n const addColumn = useCallback(() => {\n const newSql: SQLExpression = { ...sql, columns: [...sql.columns!, createFunctionField()] };\n onSqlChange(newSql);\n }, [onSqlChange, sql]);\n\n return (\n <EditorStack gap={2} alignItems=\"end\" direction=\"column\">\n {sql.columns?.map((item, index) => (\n <div key={index}>\n <EditorStack gap={2} alignItems=\"end\">\n <EditorField label=\"Column\" width={25}>\n <Select\n value={getColumnValue(item)}\n options={columnsWithAsterisk}\n inputId={`select-column-${index}-${uniqueId()}`}\n menuShouldPortal\n allowCustomValue\n onChange={onColumnChange(item, index)}\n />\n </EditorField>\n\n <EditorField label=\"Aggregation\" optional width={25}>\n <Select\n value={item.name ? toOption(item.name) : null}\n inputId={`select-aggregation-${index}-${uniqueId()}`}\n isClearable\n menuShouldPortal\n allowCustomValue\n options={functions}\n onChange={onAggregationChange(item, index)}\n />\n </EditorField>\n <Button\n aria-label=\"Remove\"\n type=\"button\"\n icon=\"trash-alt\"\n variant=\"secondary\"\n size=\"md\"\n onClick={removeColumn(index)}\n />\n </EditorStack>\n </div>\n ))}\n <Button\n type=\"button\"\n onClick={addColumn}\n variant=\"secondary\"\n size=\"md\"\n icon=\"plus\"\n aria-label=\"Add\"\n className={styles.addButton}\n />\n </EditorStack>\n );\n}\n\nconst getStyles = () => {\n return { addButton: css({ alignSelf: 'flex-start' }) };\n};\n\nfunction getColumnValue({ parameters }: QueryEditorFunctionExpression): SelectableValue<string> | null {\n const column = parameters?.find((p) => p.type === QueryEditorExpressionType.FunctionParameter);\n if (column?.name) {\n return toOption(column.name);\n }\n return null;\n}\n"],"names":["getStyles","_a"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VisualEditor.js","sources":["../../../../../src/components/QueryEditor/visual-query-builder/VisualEditor.tsx"],"sourcesContent":["import React from 'react';\nimport { useAsync } from 'react-use';\nimport { type DB, type QueryEditorProps, type QueryRowFilter, type SQLQuery } from '../types';\nimport { QueryToolbox } from '../query-editor-raw/QueryToolbox';\nimport { Preview } from './Preview';\nimport { SQLGroupByRow } from './SQLGroupByRow';\nimport { SQLOrderByRow } from './SQLOrderByRow';\nimport { SQLSelectRow } from './SQLSelectRow';\nimport { SQLWhereRow } from './SQLWhereRow';\nimport { type TimeRange } from '@grafana/data';\nimport { EditorRow } from './EditorRow';\nimport { EditorField } from './EditorField';\nimport { EditorRows } from './EditorRows';\n\ninterface VisualEditorProps extends QueryEditorProps {\n query: SQLQuery;\n db: DB;\n queryRowFilter: QueryRowFilter;\n onChange: (q: SQLQuery) => void;\n onValidate: (isValid: boolean) => void;\n range?: TimeRange;\n}\n\nexport const VisualEditor = ({ query, db, queryRowFilter, onChange, onValidate, range }: VisualEditorProps) => {\n const state = useAsync(async () => {\n const fields = await db.fields(query);\n return fields;\n }, [db, query.dataset, query.table]);\n\n return (\n <>\n <EditorRows>\n <EditorRow>\n <SQLSelectRow fields={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorRow>\n {queryRowFilter.filter && (\n <EditorRow>\n <EditorField label=\"Filter by column value\" optional>\n <SQLWhereRow fields={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorField>\n </EditorRow>\n )}\n {queryRowFilter.group && (\n <EditorRow>\n <EditorField label=\"Group by column\">\n <SQLGroupByRow fields={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorField>\n </EditorRow>\n )}\n {queryRowFilter.order && (\n <EditorRow>\n <SQLOrderByRow fields={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorRow>\n )}\n {queryRowFilter.preview && query.rawSql && (\n <EditorRow>\n <Preview rawSql={query.rawSql} />\n </EditorRow>\n )}\n </EditorRows>\n <QueryToolbox db={db} query={query} onValidate={onValidate} range={range} />\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"VisualEditor.js","sources":["../../../../../src/components/QueryEditor/visual-query-builder/VisualEditor.tsx"],"sourcesContent":["import React from 'react';\nimport { useAsync } from 'react-use';\nimport { type DB, type QueryEditorProps, type QueryRowFilter, type SQLQuery } from '../types';\nimport { QueryToolbox } from '../query-editor-raw/QueryToolbox';\nimport { Preview } from './Preview';\nimport { SQLGroupByRow } from './SQLGroupByRow';\nimport { SQLOrderByRow } from './SQLOrderByRow';\nimport { SQLSelectRow } from './SQLSelectRow';\nimport { SQLWhereRow } from './SQLWhereRow';\nimport { type TimeRange } from '@grafana/data';\nimport { EditorRow } from './EditorRow';\nimport { EditorField } from './EditorField';\nimport { EditorRows } from './EditorRows';\n\ninterface VisualEditorProps extends QueryEditorProps {\n query: SQLQuery;\n db: DB;\n queryRowFilter: QueryRowFilter;\n onChange: (q: SQLQuery) => void;\n onValidate: (isValid: boolean) => void;\n range?: TimeRange;\n}\n\nexport const VisualEditor = ({ query, db, queryRowFilter, onChange, onValidate, range }: VisualEditorProps) => {\n const state = useAsync(async () => {\n const fields = await db.fields(query);\n return fields;\n }, [db, query.dataset, query.table]);\n\n return (\n <>\n <EditorRows>\n <EditorRow>\n <SQLSelectRow fields={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorRow>\n {queryRowFilter.filter && (\n <EditorRow>\n <EditorField label=\"Filter by column value\" optional>\n <SQLWhereRow fields={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorField>\n </EditorRow>\n )}\n {queryRowFilter.group && (\n <EditorRow>\n <EditorField label=\"Group by column\">\n <SQLGroupByRow fields={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorField>\n </EditorRow>\n )}\n {queryRowFilter.order && (\n <EditorRow>\n <SQLOrderByRow fields={state.value || []} query={query} onQueryChange={onChange} db={db} />\n </EditorRow>\n )}\n {queryRowFilter.preview && query.rawSql && (\n <EditorRow>\n <Preview rawSql={query.rawSql} />\n </EditorRow>\n )}\n </EditorRows>\n <QueryToolbox db={db} query={query} onValidate={onValidate} range={range} />\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;AAuBO,MAAM,YAAA,GAAe,CAAC,EAAE,KAAA,EAAO,IAAI,cAAA,EAAgB,QAAA,EAAU,UAAA,EAAY,KAAA,EAAM,KAAyB;AAC7G,EAAA,MAAM,KAAA,GAAQ,SAAS,YAAY;AACjC,IAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,MAAA,CAAO,KAAK,CAAA;AACpC,IAAA,OAAO,MAAA;AAAA,EACT,GAAG,CAAC,EAAA,EAAI,MAAM,OAAA,EAAS,KAAA,CAAM,KAAK,CAAC,CAAA;AAEnC,EAAA,uBACE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA,sCACG,UAAA,EAAA,IAAA,kBACC,KAAA,CAAA,aAAA,CAAC,iCACC,KAAA,CAAA,aAAA,CAAC,YAAA,EAAA,EAAa,MAAA,EAAQ,KAAA,CAAM,KAAA,IAAS,IAAI,KAAA,EAAc,aAAA,EAAe,UAAU,EAAA,EAAQ,CAC1F,GACC,cAAA,CAAe,MAAA,oBACd,KAAA,CAAA,aAAA,CAAC,SAAA,EAAA,IAAA,kBACC,KAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,OAAM,wBAAA,EAAyB,QAAA,EAAQ,wBAClD,KAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,QAAQ,KAAA,CAAM,KAAA,IAAS,EAAC,EAAG,KAAA,EAAc,aAAA,EAAe,UAAU,EAAA,EAAQ,CACzF,CACF,CAAA,EAED,cAAA,CAAe,yBACd,KAAA,CAAA,aAAA,CAAC,SAAA,EAAA,IAAA,kBACC,KAAA,CAAA,aAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAM,iBAAA,EAAA,sCAChB,aAAA,EAAA,EAAc,MAAA,EAAQ,MAAM,KAAA,IAAS,IAAI,KAAA,EAAc,aAAA,EAAe,QAAA,EAAU,EAAA,EAAQ,CAC3F,CACF,GAED,cAAA,CAAe,KAAA,wCACb,SAAA,EAAA,IAAA,kBACC,KAAA,CAAA,aAAA,CAAC,iBAAc,MAAA,EAAQ,KAAA,CAAM,KAAA,IAAS,EAAC,EAAG,KAAA,EAAc,eAAe,QAAA,EAAU,EAAA,EAAQ,CAC3F,CAAA,EAED,cAAA,CAAe,WAAW,KAAA,CAAM,MAAA,oBAC/B,KAAA,CAAA,aAAA,CAAC,SAAA,EAAA,IAAA,kBACC,KAAA,CAAA,aAAA,CAAC,OAAA,EAAA,EAAQ,QAAQ,KAAA,CAAM,MAAA,EAAQ,CACjC,CAEJ,CAAA,kBACA,KAAA,CAAA,aAAA,CAAC,gBAAa,EAAA,EAAQ,KAAA,EAAc,UAAA,EAAwB,KAAA,EAAc,CAC5E,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WhereRow.js","sources":["../../../../../src/components/QueryEditor/visual-query-builder/WhereRow.tsx"],"sourcesContent":["import { injectGlobal } from '@emotion/css';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Builder, type Config, type ImmutableTree, Query, Utils } from '@react-awesome-query-builder/ui';\nimport { type SQLExpression } from '../types';\nimport { emptyInitTree, raqbConfig } from './AwesomeQueryBuilder';\n\ninterface SQLBuilderWhereRowProps {\n sql: SQLExpression;\n onSqlChange: (sql: SQLExpression) => void;\n config?: Partial<Config>;\n}\n\nexport function WhereRow({ sql, config, onSqlChange }: SQLBuilderWhereRowProps) {\n const [tree, setTree] = useState<ImmutableTree>();\n const configWithDefaults = useMemo(() => ({ ...raqbConfig, ...config }), [config]);\n\n useEffect(() => {\n // Set the initial tree\n if (!tree) {\n const initTree = Utils.checkTree(Utils.loadTree(sql.whereJsonTree ?? emptyInitTree), configWithDefaults);\n setTree(initTree);\n }\n }, [configWithDefaults, sql.whereJsonTree, tree]);\n\n useEffect(() => {\n if (!sql.whereJsonTree) {\n setTree(Utils.checkTree(Utils.loadTree(emptyInitTree), configWithDefaults));\n }\n }, [configWithDefaults, sql.whereJsonTree]);\n\n const onTreeChange = useCallback(\n (changedTree: ImmutableTree, config: Config) => {\n setTree(changedTree);\n const newSql = {\n ...sql,\n whereJsonTree: Utils.getTree(changedTree),\n whereString: Utils.sqlFormat(changedTree, config),\n };\n\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n if (!tree) {\n return null;\n }\n\n return (\n <Query\n {...configWithDefaults}\n value={tree}\n onChange={onTreeChange}\n renderBuilder={(props) => <Builder {...props} />}\n />\n );\n}\n\nfunction flex(direction: string) {\n return `\n display: flex;\n gap: 8px;\n flex-direction: ${direction};`;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-expressions\ninjectGlobal`\n .group--header {\n ${flex('row')}\n }\n\n .group-or-rule {\n ${flex('column')}\n .rule {\n flex-direction: row;\n }\n }\n\n .rule--body {\n ${flex('row')}\n }\n\n .group--children {\n ${flex('column')}\n }\n\n .group--conjunctions:empty {\n display: none;\n }\n`;\n"],"names":["config"],"mappings":";;;;;;AAYO,SAAS,
|
|
1
|
+
{"version":3,"file":"WhereRow.js","sources":["../../../../../src/components/QueryEditor/visual-query-builder/WhereRow.tsx"],"sourcesContent":["import { injectGlobal } from '@emotion/css';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { Builder, type Config, type ImmutableTree, Query, Utils } from '@react-awesome-query-builder/ui';\nimport { type SQLExpression } from '../types';\nimport { emptyInitTree, raqbConfig } from './AwesomeQueryBuilder';\n\ninterface SQLBuilderWhereRowProps {\n sql: SQLExpression;\n onSqlChange: (sql: SQLExpression) => void;\n config?: Partial<Config>;\n}\n\nexport function WhereRow({ sql, config, onSqlChange }: SQLBuilderWhereRowProps) {\n const [tree, setTree] = useState<ImmutableTree>();\n const configWithDefaults = useMemo(() => ({ ...raqbConfig, ...config }), [config]);\n\n useEffect(() => {\n // Set the initial tree\n if (!tree) {\n const initTree = Utils.checkTree(Utils.loadTree(sql.whereJsonTree ?? emptyInitTree), configWithDefaults);\n setTree(initTree);\n }\n }, [configWithDefaults, sql.whereJsonTree, tree]);\n\n useEffect(() => {\n if (!sql.whereJsonTree) {\n setTree(Utils.checkTree(Utils.loadTree(emptyInitTree), configWithDefaults));\n }\n }, [configWithDefaults, sql.whereJsonTree]);\n\n const onTreeChange = useCallback(\n (changedTree: ImmutableTree, config: Config) => {\n setTree(changedTree);\n const newSql = {\n ...sql,\n whereJsonTree: Utils.getTree(changedTree),\n whereString: Utils.sqlFormat(changedTree, config),\n };\n\n onSqlChange(newSql);\n },\n [onSqlChange, sql]\n );\n\n if (!tree) {\n return null;\n }\n\n return (\n <Query\n {...configWithDefaults}\n value={tree}\n onChange={onTreeChange}\n renderBuilder={(props) => <Builder {...props} />}\n />\n );\n}\n\nfunction flex(direction: string) {\n return `\n display: flex;\n gap: 8px;\n flex-direction: ${direction};`;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-expressions\ninjectGlobal`\n .group--header {\n ${flex('row')}\n }\n\n .group-or-rule {\n ${flex('column')}\n .rule {\n flex-direction: row;\n }\n }\n\n .rule--body {\n ${flex('row')}\n }\n\n .group--children {\n ${flex('column')}\n }\n\n .group--conjunctions:empty {\n display: none;\n }\n`;\n"],"names":["config"],"mappings":";;;;;;AAYO,SAAS,QAAA,CAAS,EAAE,GAAA,EAAK,MAAA,EAAQ,aAAY,EAA4B;AAC9E,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAI,QAAA,EAAwB;AAChD,EAAA,MAAM,kBAAA,GAAqB,OAAA,CAAQ,OAAO,EAAE,GAAG,UAAA,EAAY,GAAG,MAAA,EAAO,CAAA,EAAI,CAAC,MAAM,CAAC,CAAA;AAEjF,EAAA,SAAA,CAAU,MAAM;AAhBlB,IAAA,IAAA,EAAA;AAkBI,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,SAAA,CAAU,KAAA,CAAM,QAAA,CAAA,CAAS,SAAI,aAAA,KAAJ,IAAA,GAAA,EAAA,GAAqB,aAAa,CAAA,EAAG,kBAAkB,CAAA;AACvG,MAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,kBAAA,EAAoB,GAAA,CAAI,aAAA,EAAe,IAAI,CAAC,CAAA;AAEhD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,IAAI,aAAA,EAAe;AACtB,MAAA,OAAA,CAAQ,MAAM,SAAA,CAAU,KAAA,CAAM,SAAS,aAAa,CAAA,EAAG,kBAAkB,CAAC,CAAA;AAAA,IAC5E;AAAA,EACF,CAAA,EAAG,CAAC,kBAAA,EAAoB,GAAA,CAAI,aAAa,CAAC,CAAA;AAE1C,EAAA,MAAM,YAAA,GAAe,WAAA;AAAA,IACnB,CAAC,aAA4BA,OAAAA,KAAmB;AAC9C,MAAA,OAAA,CAAQ,WAAW,CAAA;AACnB,MAAA,MAAM,MAAA,GAAS;AAAA,QACb,GAAG,GAAA;AAAA,QACH,aAAA,EAAe,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA;AAAA,QACxC,WAAA,EAAa,KAAA,CAAM,SAAA,CAAU,WAAA,EAAaA,OAAM;AAAA,OAClD;AAEA,MAAA,WAAA,CAAY,MAAM,CAAA;AAAA,IACpB,CAAA;AAAA,IACA,CAAC,aAAa,GAAG;AAAA,GACnB;AAEA,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,kBAAA;AAAA,MACJ,KAAA,EAAO,IAAA;AAAA,MACP,QAAA,EAAU,YAAA;AAAA,MACV,eAAe,CAAC,KAAA,qBAAU,KAAA,CAAA,aAAA,CAAC,OAAA,EAAA,EAAS,GAAG,KAAA,EAAO;AAAA;AAAA,GAChD;AAEJ;AAEA,SAAS,KAAK,SAAA,EAAmB;AAC/B,EAAA,OAAO;AAAA;AAAA;AAAA,oBAAA,EAGa,SAAS,CAAA,CAAA,CAAA;AAC/B;AAGA,YAAA;AAAA;AAAA,IAAA,EAEM,IAAA,CAAK,KAAK,CAAC;AAAA;;AAAA;AAAA,IAAA,EAIX,IAAA,CAAK,QAAQ,CAAC;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,IAAA,EAOd,IAAA,CAAK,KAAK,CAAC;AAAA;;AAAA;AAAA,IAAA,EAIX,IAAA,CAAK,QAAQ,CAAC;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryEditorRow.js","sources":["../../../../src/components/QueryEditorRow/QueryEditorRow.tsx"],"sourcesContent":["import React from 'react';\nexport interface QueryEditorRowProps {\n label?: string;\n className?: string;\n noFillEnd?: boolean;\n children?: React.ReactNode;\n}\n\nexport const QueryEditorRow = (props: QueryEditorRowProps) => {\n const className: string = props.className ?? 'width-8';\n const noFillEnd: boolean = props.noFillEnd ?? false;\n\n return (\n <div className=\"gf-form\">\n {props.label && <label className={`gf-form-label query-keyword ${className}`}>{props.label}</label>}\n {props.children}\n\n <div className={'gf-form--grow'}>{noFillEnd || <div className={'gf-form-label gf-form-label--grow'}></div>}</div>\n </div>\n );\n};\n"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"QueryEditorRow.js","sources":["../../../../src/components/QueryEditorRow/QueryEditorRow.tsx"],"sourcesContent":["import React from 'react';\nexport interface QueryEditorRowProps {\n label?: string;\n className?: string;\n noFillEnd?: boolean;\n children?: React.ReactNode;\n}\n\nexport const QueryEditorRow = (props: QueryEditorRowProps) => {\n const className: string = props.className ?? 'width-8';\n const noFillEnd: boolean = props.noFillEnd ?? false;\n\n return (\n <div className=\"gf-form\">\n {props.label && <label className={`gf-form-label query-keyword ${className}`}>{props.label}</label>}\n {props.children}\n\n <div className={'gf-form--grow'}>{noFillEnd || <div className={'gf-form-label gf-form-label--grow'}></div>}</div>\n </div>\n );\n};\n"],"names":[],"mappings":";;AAQO,MAAM,cAAA,GAAiB,CAAC,KAAA,KAA+B;AAR9D,EAAA,IAAA,EAAA,EAAA,EAAA;AASE,EAAA,MAAM,SAAA,GAAA,CAAoB,EAAA,GAAA,KAAA,CAAM,SAAA,KAAN,IAAA,GAAA,EAAA,GAAmB,SAAA;AAC7C,EAAA,MAAM,SAAA,GAAA,CAAqB,EAAA,GAAA,KAAA,CAAM,SAAA,KAAN,IAAA,GAAA,EAAA,GAAmB,KAAA;AAE9C,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EAAA,EACZ,KAAA,CAAM,KAAA,oBAAS,KAAA,CAAA,aAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAW,CAAA,4BAAA,EAA+B,SAAS,CAAA,CAAA,EAAA,EAAK,KAAA,CAAM,KAAM,CAAA,EAC1F,KAAA,CAAM,QAAA,kBAEP,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,eAAA,EAAA,EAAkB,SAAA,oBAAa,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,mCAAA,EAAqC,CAAO,CAC7G,CAAA;AAEJ;;;;"}
|
|
@@ -3,7 +3,7 @@ import React, { useRef, useMemo, useEffect, useCallback } from 'react';
|
|
|
3
3
|
import { getStatementPosition } from '../standardSql/getStatementPosition.js';
|
|
4
4
|
import { getStandardSuggestions } from '../standardSql/getStandardSuggestions.js';
|
|
5
5
|
import { initSuggestionsKindRegistry } from '../standardSql/suggestionsKindRegistry.js';
|
|
6
|
-
import { SuggestionKind,
|
|
6
|
+
import { SuggestionKind, CompletionItemPriority, CompletionItemKind, CompletionItemInsertTextRule } from '../types.js';
|
|
7
7
|
import { getSuggestionKinds } from '../utils/getSuggestionKind.js';
|
|
8
8
|
import { linkedTokenBuilder } from '../utils/linkedTokenBuilder.js';
|
|
9
9
|
import { getTableToken, defaultTableNameParser } from '../utils/tokenUtils.js';
|
|
@@ -59,7 +59,7 @@ const SQLEditor = ({
|
|
|
59
59
|
CodeEditor,
|
|
60
60
|
{
|
|
61
61
|
height: height || "240px",
|
|
62
|
-
width: width ? `${width - 2}px` :
|
|
62
|
+
width: width ? `${width - 2}px` : void 0,
|
|
63
63
|
language: id,
|
|
64
64
|
value: query,
|
|
65
65
|
onBlur: onSqlBlur,
|
|
@@ -90,12 +90,12 @@ const SQLEditor = ({
|
|
|
90
90
|
), children && children({ formatQuery }));
|
|
91
91
|
};
|
|
92
92
|
const resolveLanguage = (monaco, languageDefinitionProp) => {
|
|
93
|
-
if ((languageDefinitionProp == null ?
|
|
94
|
-
sqlEditorLog(`Loading language '${languageDefinitionProp == null ?
|
|
93
|
+
if ((languageDefinitionProp == null ? void 0 : languageDefinitionProp.id) !== STANDARD_SQL_LANGUAGE && !languageDefinitionProp.loader) {
|
|
94
|
+
sqlEditorLog(`Loading language '${languageDefinitionProp == null ? void 0 : languageDefinitionProp.id}' from Monaco registry`, false);
|
|
95
95
|
const allLangs = monaco.languages.getLanguages();
|
|
96
|
-
const custom = allLangs.find(({ id }) => id === (languageDefinitionProp == null ?
|
|
96
|
+
const custom = allLangs.find(({ id }) => id === (languageDefinitionProp == null ? void 0 : languageDefinitionProp.id));
|
|
97
97
|
if (!custom) {
|
|
98
|
-
throw Error(`Unknown Monaco language ${languageDefinitionProp == null ?
|
|
98
|
+
throw Error(`Unknown Monaco language ${languageDefinitionProp == null ? void 0 : languageDefinitionProp.id}`);
|
|
99
99
|
}
|
|
100
100
|
return { completionProvider: getStandardSQLCompletionProvider, ...custom, ...languageDefinitionProp };
|
|
101
101
|
}
|
|
@@ -117,7 +117,7 @@ const registerLanguageAndSuggestions = async (monaco, l, lid) => {
|
|
|
117
117
|
monaco.languages.registerDocumentFormattingEditProvider(lid, {
|
|
118
118
|
provideDocumentFormattingEdits: (model) => {
|
|
119
119
|
var _a;
|
|
120
|
-
const formatted = (_a = l.formatter) == null ?
|
|
120
|
+
const formatted = (_a = l.formatter) == null ? void 0 : _a.call(l, model.getValue());
|
|
121
121
|
return [
|
|
122
122
|
{
|
|
123
123
|
range: model.getFullModelRange(),
|
|
@@ -224,7 +224,7 @@ function extendStandardRegistries(id, lid, customProvider) {
|
|
|
224
224
|
}
|
|
225
225
|
if (customProvider.customSuggestionKinds) {
|
|
226
226
|
for (const kind of customProvider.customSuggestionKinds()) {
|
|
227
|
-
(_a = kind.applyTo) == null ?
|
|
227
|
+
(_a = kind.applyTo) == null ? void 0 : _a.forEach((applyTo) => {
|
|
228
228
|
const exists = languageRegistries.suggestionKinds.getIfExists(applyTo);
|
|
229
229
|
if (exists) {
|
|
230
230
|
if (exists.kind.indexOf(kind.id) === -1) {
|
|
@@ -234,7 +234,7 @@ function extendStandardRegistries(id, lid, customProvider) {
|
|
|
234
234
|
});
|
|
235
235
|
if (kind.overrideDefault) {
|
|
236
236
|
const stbBehavior = instanceSuggestionsRegistry.get(kind.id);
|
|
237
|
-
if (stbBehavior !==
|
|
237
|
+
if (stbBehavior !== void 0) {
|
|
238
238
|
stbBehavior.suggestions = kind.suggestionsResolver;
|
|
239
239
|
continue;
|
|
240
240
|
}
|
|
@@ -276,9 +276,9 @@ function extendStandardRegistries(id, lid, customProvider) {
|
|
|
276
276
|
var _a2, _b, _c, _d, _e;
|
|
277
277
|
const o = await s(ctx, m);
|
|
278
278
|
const tableToken = getTableToken(ctx.currentToken);
|
|
279
|
-
const tableNameParser = (_b = (_a2 = customProvider.tables) == null ?
|
|
279
|
+
const tableNameParser = (_b = (_a2 = customProvider.tables) == null ? void 0 : _a2.parseName) != null ? _b : defaultTableNameParser;
|
|
280
280
|
const tableIdentifier = tableNameParser(tableToken);
|
|
281
|
-
const oo = ((_e = await ((_d = (_c = customProvider.tables) == null ?
|
|
281
|
+
const oo = ((_e = await ((_d = (_c = customProvider.tables) == null ? void 0 : _c.resolve) == null ? void 0 : _d.call(_c, tableIdentifier))) != null ? _e : []).map((x) => {
|
|
282
282
|
var _a3;
|
|
283
283
|
return {
|
|
284
284
|
label: x.name,
|
|
@@ -301,13 +301,13 @@ function extendStandardRegistries(id, lid, customProvider) {
|
|
|
301
301
|
const o = await s(ctx, m);
|
|
302
302
|
const tableToken = getTableToken(ctx.currentToken);
|
|
303
303
|
let tableIdentifier;
|
|
304
|
-
const tableNameParser = (_b = (_a2 = customProvider.tables) == null ?
|
|
304
|
+
const tableNameParser = (_b = (_a2 = customProvider.tables) == null ? void 0 : _a2.parseName) != null ? _b : defaultTableNameParser;
|
|
305
305
|
if (tableToken && tableToken.value) {
|
|
306
306
|
tableIdentifier = tableNameParser(tableToken);
|
|
307
307
|
}
|
|
308
308
|
let oo = [];
|
|
309
309
|
if (tableIdentifier) {
|
|
310
|
-
const columns = await ((_c = customProvider.columns) == null ?
|
|
310
|
+
const columns = await ((_c = customProvider.columns) == null ? void 0 : _c.resolve(tableIdentifier));
|
|
311
311
|
oo = columns ? columns.map((x) => {
|
|
312
312
|
var _a3;
|
|
313
313
|
return {
|