@grafana/plugin-ui 0.11.0 → 0.12.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.
Files changed (30) hide show
  1. package/README.md +20 -0
  2. package/dist/cjs/index.cjs +79 -122
  3. package/dist/cjs/index.cjs.map +1 -1
  4. package/dist/cjs/index.d.cts +9 -17
  5. package/dist/esm/components/QueryEditor/CatalogSelector.js +0 -1
  6. package/dist/esm/components/QueryEditor/CatalogSelector.js.map +1 -1
  7. package/dist/esm/components/QueryEditor/DatasetSelector.js +9 -4
  8. package/dist/esm/components/QueryEditor/DatasetSelector.js.map +1 -1
  9. package/dist/esm/components/QueryEditor/QueryEditor.js +5 -2
  10. package/dist/esm/components/QueryEditor/QueryEditor.js.map +1 -1
  11. package/dist/esm/components/QueryEditor/QueryHeader.js +35 -49
  12. package/dist/esm/components/QueryEditor/QueryHeader.js.map +1 -1
  13. package/dist/esm/components/QueryEditor/TableSelector.js +3 -6
  14. package/dist/esm/components/QueryEditor/TableSelector.js.map +1 -1
  15. package/dist/esm/components/QueryEditor/types.js.map +1 -1
  16. package/dist/esm/components/QueryEditor/utils/sql.utils.js +7 -9
  17. package/dist/esm/components/QueryEditor/utils/sql.utils.js.map +1 -1
  18. package/dist/esm/components/QueryEditor/utils/useSqlChange.js +7 -1
  19. package/dist/esm/components/QueryEditor/utils/useSqlChange.js.map +1 -1
  20. package/dist/esm/components/SQLEditor/types.js.map +1 -1
  21. package/dist/esm/components/SQLEditor/utils/tokenUtils.js +2 -0
  22. package/dist/esm/components/SQLEditor/utils/tokenUtils.js.map +1 -1
  23. package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js +11 -2
  24. package/dist/esm/components/VisualQueryBuilder/components/QueryOptionGroup.js.map +1 -1
  25. package/dist/esm/index.d.ts +9 -17
  26. package/dist/esm/index.js +0 -1
  27. package/dist/esm/index.js.map +1 -1
  28. package/package.json +2 -1
  29. package/dist/esm/components/QueryEditor/SchemaSelector.js +0 -56
  30. package/dist/esm/components/QueryEditor/SchemaSelector.js.map +0 -1
@@ -6,7 +6,13 @@ function useSqlChange({ query, onQueryChange, db }) {
6
6
  const onSqlChange = useCallback(
7
7
  (sql) => {
8
8
  const toRawSql = getRawSqlFn(db);
9
- const rawSql = toRawSql({ sql, dataset: query.dataset, table: query.table, refId: query.refId });
9
+ const rawSql = toRawSql({
10
+ sql,
11
+ catalog: query.catalog,
12
+ dataset: query.dataset,
13
+ table: query.table,
14
+ refId: query.refId
15
+ });
10
16
  const newQuery = { ...query, sql, rawSql };
11
17
  onQueryChange(newQuery);
12
18
  },
@@ -1 +1 @@
1
- {"version":3,"file":"useSqlChange.js","sources":["../../../../../src/components/QueryEditor/utils/useSqlChange.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { type DB, type SQLExpression, type SQLQuery } from '../types';\n\nimport { getRawSqlFn } from './sql.utils';\n\ninterface UseSqlChange {\n db: DB;\n query: SQLQuery;\n onQueryChange: (query: SQLQuery) => void;\n}\n\nexport function useSqlChange({ query, onQueryChange, db }: UseSqlChange) {\n const onSqlChange = useCallback(\n (sql: SQLExpression) => {\n const toRawSql = getRawSqlFn(db);\n const rawSql = toRawSql({ sql, dataset: query.dataset, table: query.table, refId: query.refId });\n const newQuery: SQLQuery = { ...query, sql, rawSql };\n onQueryChange(newQuery);\n },\n [db, onQueryChange, query]\n );\n\n return { onSqlChange };\n}\n"],"names":[],"mappings":";;;;AAYO,SAAS,YAAa,CAAA,EAAE,KAAO,EAAA,aAAA,EAAe,IAAoB,EAAA;AACvE,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,GAAuB,KAAA;AACtB,MAAM,MAAA,QAAA,GAAW,YAAY,EAAE,CAAA;AAC/B,MAAA,MAAM,MAAS,GAAA,QAAA,CAAS,EAAE,GAAA,EAAK,OAAS,EAAA,KAAA,CAAM,OAAS,EAAA,KAAA,EAAO,KAAM,CAAA,KAAA,EAAO,KAAO,EAAA,KAAA,CAAM,OAAO,CAAA;AAC/F,MAAA,MAAM,QAAqB,GAAA,EAAE,GAAG,KAAA,EAAO,KAAK,MAAO,EAAA;AACnD,MAAA,aAAA,CAAc,QAAQ,CAAA;AAAA,KACxB;AAAA,IACA,CAAC,EAAI,EAAA,aAAA,EAAe,KAAK;AAAA,GAC3B;AAEA,EAAA,OAAO,EAAE,WAAY,EAAA;AACvB;;;;"}
1
+ {"version":3,"file":"useSqlChange.js","sources":["../../../../../src/components/QueryEditor/utils/useSqlChange.ts"],"sourcesContent":["import { useCallback } from 'react';\n\nimport { type DB, type SQLExpression, type SQLQuery } from '../types';\n\nimport { getRawSqlFn } from './sql.utils';\n\ninterface UseSqlChange {\n db: DB;\n query: SQLQuery;\n onQueryChange: (query: SQLQuery) => void;\n}\n\nexport function useSqlChange({ query, onQueryChange, db }: UseSqlChange) {\n const onSqlChange = useCallback(\n (sql: SQLExpression) => {\n const toRawSql = getRawSqlFn(db);\n const rawSql = toRawSql({\n sql,\n catalog: query.catalog,\n dataset: query.dataset,\n table: query.table,\n refId: query.refId,\n });\n const newQuery: SQLQuery = { ...query, sql, rawSql };\n onQueryChange(newQuery);\n },\n [db, onQueryChange, query]\n );\n\n return { onSqlChange };\n}\n"],"names":[],"mappings":";;;;AAYO,SAAS,YAAa,CAAA,EAAE,KAAO,EAAA,aAAA,EAAe,IAAoB,EAAA;AACvE,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,GAAuB,KAAA;AACtB,MAAM,MAAA,QAAA,GAAW,YAAY,EAAE,CAAA;AAC/B,MAAA,MAAM,SAAS,QAAS,CAAA;AAAA,QACtB,GAAA;AAAA,QACA,SAAS,KAAM,CAAA,OAAA;AAAA,QACf,SAAS,KAAM,CAAA,OAAA;AAAA,QACf,OAAO,KAAM,CAAA,KAAA;AAAA,QACb,OAAO,KAAM,CAAA;AAAA,OACd,CAAA;AACD,MAAA,MAAM,QAAqB,GAAA,EAAE,GAAG,KAAA,EAAO,KAAK,MAAO,EAAA;AACnD,MAAA,aAAA,CAAc,QAAQ,CAAA;AAAA,KACxB;AAAA,IACA,CAAC,EAAI,EAAA,aAAA,EAAe,KAAK;AAAA,GAC3B;AAEA,EAAA,OAAO,EAAE,WAAY,EAAA;AACvB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../../src/components/SQLEditor/types.ts"],"sourcesContent":["import { type Monaco, type monacoTypes } from '@grafana/ui';\nimport { type SQLMonarchLanguage, type StatementPositionResolver, type SuggestionsResolver } from './standardSql/types';\nimport { type LinkedToken } from './utils/LinkedToken';\n\n/**\n * Provides a context for suggestions resolver\n * @alpha\n */\nexport interface PositionContext {\n position: monacoTypes.IPosition;\n kind: SuggestionKind[];\n statementPosition: StatementPosition[];\n currentToken: LinkedToken | null;\n range: monacoTypes.IRange;\n}\n\nexport type CustomSuggestion = Partial<monacoTypes.languages.CompletionItem> & { label: string };\n\nexport interface CustomSuggestionKind {\n id: string;\n suggestionsResolver: SuggestionsResolver;\n applyTo?: Array<StatementPosition | string>;\n overrideDefault?: boolean;\n}\n\nexport interface CustomStatementPlacement {\n id: string;\n name?: string;\n resolve: StatementPositionResolver;\n overrideDefault?: boolean;\n}\nexport type StatementPlacementProvider = () => CustomStatementPlacement[];\nexport type SuggestionKindProvider = () => CustomSuggestionKind[];\n\nexport interface ColumnDefinition {\n name: string;\n type?: string;\n description?: string;\n // Text used for autocomplete. If not provided name is used.\n completion?: string;\n}\n\nexport interface SchemaDefinition {\n name: string;\n // Text used for autocomplete. If not provided name is used.\n completion?: string;\n}\n\nexport interface TableDefinition {\n name: string;\n // Text used for autocomplete. If not provided name is used.\n completion?: string;\n}\n\nexport interface Operator {\n id: string;\n operator: string;\n type: OperatorType;\n description?: string;\n}\n\nexport interface TableIdentifier {\n table?: string;\n schema?: string;\n}\n\nexport interface SQLCompletionItemProvider\n extends Omit<monacoTypes.languages.CompletionItemProvider, 'provideCompletionItems'> {\n /**\n * Allows dialect specific functions to be added to the completion list.\n * @alpha\n */\n supportedFunctions?: () => Array<{\n id: string;\n name: string;\n description?: string;\n }>;\n\n /**\n * Allows dialect specific operators to be added to the completion list.\n * @alpha\n */\n supportedOperators?: () => Array<{\n id: string;\n operator: string;\n type: OperatorType;\n description?: string;\n }>;\n\n supportedMacros?: () => Array<{\n id: string;\n text: string;\n type: MacroType;\n args: string[];\n description?: string;\n }>;\n\n /**\n * Allows custom suggestion kinds to be defined and correlate them with <Custom>StatementPosition.\n * @alpha\n */\n customSuggestionKinds?: SuggestionKindProvider;\n\n /**\n * Allows custom statement placement definition.\n * @alpha\n */\n customStatementPlacement?: StatementPlacementProvider;\n\n /**\n * Allows providing a custom function for resolving schemas.\n * It's up to the consumer to decide whether the schemas are resolved via API calls or preloaded in the query editor(i.e. full db schema is preloaded).\n * @alpha\n */\n schemas?: {\n resolve: () => Promise<SchemaDefinition[]>;\n };\n\n /**\n * Allows providing a custom function for resolving db tables.\n * It's up to the consumer to decide whether the columns are resolved via API calls or preloaded in the query editor(i.e. full db schema is preloaded).\n * @alpha\n */\n tables?: {\n resolve: (TableIdentifier: TableIdentifier | null) => Promise<TableDefinition[]>;\n // Allows providing a custom function for calculating the table name from the query. If not specified a default implementation is used.\n parseName?: (token: LinkedToken | null | undefined) => TableIdentifier;\n };\n /**\n * Allows providing a custom function for resolving table.\n * It's up to the consumer to decide whether the columns are resolved via API calls or preloaded in the query editor(i.e. full db schema is preloaded).\n * @alpha\n */\n columns?: {\n resolve: (identifier?: TableIdentifier) => Promise<ColumnDefinition[]>;\n };\n\n /**\n * TODO: Not sure whether or not we need this. Would like to avoid this kind of flexibility.\n * @alpha\n */\n provideCompletionItems?: (\n model: monacoTypes.editor.ITextModel,\n position: monacoTypes.Position,\n context: monacoTypes.languages.CompletionContext,\n token: monacoTypes.CancellationToken,\n positionContext: PositionContext // Decorates original provideCompletionItems function with our custom statement position context\n ) => monacoTypes.languages.CompletionList;\n}\n\nexport type LanguageCompletionProvider = (m: Monaco, l?: SQLMonarchLanguage) => SQLCompletionItemProvider;\n\nexport enum OperatorType {\n Comparison,\n Logical,\n}\n\nexport enum MacroType {\n Value,\n Filter,\n Group,\n Column,\n Table,\n}\n\nexport enum TokenType {\n Parenthesis = 'delimiter.parenthesis.sql',\n Whitespace = 'white.sql',\n Keyword = 'keyword.sql',\n Delimiter = 'delimiter.sql',\n Operator = 'operator.sql',\n Identifier = 'identifier.sql',\n IdentifierQuote = 'identifier.quote.sql',\n Type = 'type.sql',\n Function = 'predefined.sql',\n Number = 'number.sql',\n String = 'string.sql',\n Variable = 'variable.sql',\n}\n\nexport enum StatementPosition {\n Unknown = 'unknown',\n SelectKeyword = 'selectKeyword',\n WithKeyword = 'withKeyword',\n AfterSelectKeyword = 'afterSelectKeyword',\n AfterSelectArguments = 'afterSelectArguments',\n AfterSelectFuncFirstArgument = 'afterSelectFuncFirstArgument',\n SelectAlias = 'selectAlias',\n AfterFromKeyword = 'afterFromKeyword',\n AfterTable = 'afterTable',\n SchemaFuncFirstArgument = 'schemaFuncFirstArgument',\n SchemaFuncExtraArgument = 'schemaFuncExtraArgument',\n FromKeyword = 'fromKeyword',\n AfterFrom = 'afterFrom',\n WhereKeyword = 'whereKeyword',\n WhereComparisonOperator = 'whereComparisonOperator',\n WhereValue = 'whereValue',\n AfterWhereFunctionArgument = 'afterWhereFunctionArgument',\n AfterGroupByFunctionArgument = 'afterGroupByFunctionArgument',\n AfterWhereValue = 'afterWhereValue',\n AfterGroupByKeywords = 'afterGroupByKeywords',\n AfterGroupBy = 'afterGroupBy',\n AfterOrderByKeywords = 'afterOrderByKeywords',\n AfterOrderByFunction = 'afterOrderByFunction',\n AfterOrderByDirection = 'afterOrderByDirection',\n AfterIsOperator = 'afterIsOperator',\n AfterIsNotOperator = 'afterIsNotOperator',\n AfterSchema = 'afterSchema',\n}\n\nexport enum SuggestionKind {\n Schemas = 'schemas',\n Tables = 'tables',\n Columns = 'columns',\n SelectKeyword = 'selectKeyword',\n WithKeyword = 'withKeyword',\n FunctionsWithArguments = 'functionsWithArguments',\n FromKeyword = 'fromKeyword',\n WhereKeyword = 'whereKeyword',\n GroupByKeywords = 'groupByKeywords',\n OrderByKeywords = 'orderByKeywords',\n FunctionsWithoutArguments = 'functionsWithoutArguments',\n LimitKeyword = 'limitKeyword',\n SortOrderDirectionKeyword = 'sortOrderDirectionKeyword',\n ComparisonOperators = 'comparisonOperators',\n LogicalOperators = 'logicalOperators',\n SelectMacro = 'selectMacro',\n TableMacro = 'tableMacro',\n FilterMacro = 'filterMacro',\n GroupMacro = 'groupMacro',\n BoolValues = 'boolValues',\n NullValue = 'nullValue',\n NotKeyword = 'notKeyword',\n TemplateVariables = 'templateVariables',\n StarWildCard = 'starWildCard',\n}\n\n// TODO: export from grafana/ui\nexport enum CompletionItemPriority {\n High = 'a',\n MediumHigh = 'd',\n Medium = 'g',\n MediumLow = 'k',\n Low = 'q',\n}\n\nexport enum CompletionItemKind {\n Method = 0,\n Function = 1,\n Constructor = 2,\n Field = 3,\n Variable = 4,\n Class = 5,\n Struct = 6,\n Interface = 7,\n Module = 8,\n Property = 9,\n Event = 10,\n Operator = 11,\n Unit = 12,\n Value = 13,\n Constant = 14,\n Enum = 15,\n EnumMember = 16,\n Keyword = 17,\n Text = 18,\n Color = 19,\n File = 20,\n Reference = 21,\n Customcolor = 22,\n Folder = 23,\n TypeParameter = 24,\n User = 25,\n Issue = 26,\n Snippet = 27,\n}\n\nexport enum CompletionItemInsertTextRule {\n KeepWhitespace = 1,\n InsertAsSnippet = 4,\n}\n\nexport enum SQLEditorMode {\n Builder = 'builder',\n Code = 'code',\n}\n"],"names":["OperatorType","MacroType","TokenType","StatementPosition","SuggestionKind","CompletionItemPriority","CompletionItemKind","CompletionItemInsertTextRule","SQLEditorMode"],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sources":["../../../../src/components/SQLEditor/types.ts"],"sourcesContent":["import { type Monaco, type monacoTypes } from '@grafana/ui';\nimport { type SQLMonarchLanguage, type StatementPositionResolver, type SuggestionsResolver } from './standardSql/types';\nimport { type LinkedToken } from './utils/LinkedToken';\n\n/**\n * Provides a context for suggestions resolver\n * @alpha\n */\nexport interface PositionContext {\n position: monacoTypes.IPosition;\n kind: SuggestionKind[];\n statementPosition: StatementPosition[];\n currentToken: LinkedToken | null;\n range: monacoTypes.IRange;\n}\n\nexport type CustomSuggestion = Partial<monacoTypes.languages.CompletionItem> & { label: string };\n\nexport interface CustomSuggestionKind {\n id: string;\n suggestionsResolver: SuggestionsResolver;\n applyTo?: Array<StatementPosition | string>;\n overrideDefault?: boolean;\n}\n\nexport interface CustomStatementPlacement {\n id: string;\n name?: string;\n resolve: StatementPositionResolver;\n overrideDefault?: boolean;\n}\nexport type StatementPlacementProvider = () => CustomStatementPlacement[];\nexport type SuggestionKindProvider = () => CustomSuggestionKind[];\n\nexport interface ColumnDefinition {\n name: string;\n type?: string;\n description?: string;\n // Text used for autocomplete. If not provided name is used.\n completion?: string;\n}\n\nexport interface SchemaDefinition {\n name: string;\n // Text used for autocomplete. If not provided name is used.\n completion?: string;\n}\n\nexport interface TableDefinition {\n name: string;\n // Text used for autocomplete. If not provided name is used.\n completion?: string;\n}\n\nexport interface Operator {\n id: string;\n operator: string;\n type: OperatorType;\n description?: string;\n}\n\nexport interface TableIdentifier {\n table?: string;\n schema?: string;\n catalog?: string;\n}\n\nexport interface SQLCompletionItemProvider\n extends Omit<monacoTypes.languages.CompletionItemProvider, 'provideCompletionItems'> {\n /**\n * Allows dialect specific functions to be added to the completion list.\n * @alpha\n */\n supportedFunctions?: () => Array<{\n id: string;\n name: string;\n description?: string;\n }>;\n\n /**\n * Allows dialect specific operators to be added to the completion list.\n * @alpha\n */\n supportedOperators?: () => Array<{\n id: string;\n operator: string;\n type: OperatorType;\n description?: string;\n }>;\n\n supportedMacros?: () => Array<{\n id: string;\n text: string;\n type: MacroType;\n args: string[];\n description?: string;\n }>;\n\n /**\n * Allows custom suggestion kinds to be defined and correlate them with <Custom>StatementPosition.\n * @alpha\n */\n customSuggestionKinds?: SuggestionKindProvider;\n\n /**\n * Allows custom statement placement definition.\n * @alpha\n */\n customStatementPlacement?: StatementPlacementProvider;\n\n /**\n * Allows providing a custom function for resolving schemas.\n * It's up to the consumer to decide whether the schemas are resolved via API calls or preloaded in the query editor(i.e. full db schema is preloaded).\n * @alpha\n */\n schemas?: {\n resolve: () => Promise<SchemaDefinition[]>;\n };\n\n /**\n * Allows providing a custom function for resolving db tables.\n * It's up to the consumer to decide whether the columns are resolved via API calls or preloaded in the query editor(i.e. full db schema is preloaded).\n * @alpha\n */\n tables?: {\n resolve: (TableIdentifier: TableIdentifier | null) => Promise<TableDefinition[]>;\n // Allows providing a custom function for calculating the table name from the query. If not specified a default implementation is used.\n parseName?: (token: LinkedToken | null | undefined) => TableIdentifier;\n };\n /**\n * Allows providing a custom function for resolving table.\n * It's up to the consumer to decide whether the columns are resolved via API calls or preloaded in the query editor(i.e. full db schema is preloaded).\n * @alpha\n */\n columns?: {\n resolve: (identifier?: TableIdentifier) => Promise<ColumnDefinition[]>;\n };\n\n /**\n * TODO: Not sure whether or not we need this. Would like to avoid this kind of flexibility.\n * @alpha\n */\n provideCompletionItems?: (\n model: monacoTypes.editor.ITextModel,\n position: monacoTypes.Position,\n context: monacoTypes.languages.CompletionContext,\n token: monacoTypes.CancellationToken,\n positionContext: PositionContext // Decorates original provideCompletionItems function with our custom statement position context\n ) => monacoTypes.languages.CompletionList;\n}\n\nexport type LanguageCompletionProvider = (m: Monaco, l?: SQLMonarchLanguage) => SQLCompletionItemProvider;\n\nexport enum OperatorType {\n Comparison,\n Logical,\n}\n\nexport enum MacroType {\n Value,\n Filter,\n Group,\n Column,\n Table,\n}\n\nexport enum TokenType {\n Parenthesis = 'delimiter.parenthesis.sql',\n Whitespace = 'white.sql',\n Keyword = 'keyword.sql',\n Delimiter = 'delimiter.sql',\n Operator = 'operator.sql',\n Identifier = 'identifier.sql',\n IdentifierQuote = 'identifier.quote.sql',\n Type = 'type.sql',\n Function = 'predefined.sql',\n Number = 'number.sql',\n String = 'string.sql',\n Variable = 'variable.sql',\n}\n\nexport enum StatementPosition {\n Unknown = 'unknown',\n SelectKeyword = 'selectKeyword',\n WithKeyword = 'withKeyword',\n AfterSelectKeyword = 'afterSelectKeyword',\n AfterSelectArguments = 'afterSelectArguments',\n AfterSelectFuncFirstArgument = 'afterSelectFuncFirstArgument',\n SelectAlias = 'selectAlias',\n AfterFromKeyword = 'afterFromKeyword',\n AfterTable = 'afterTable',\n SchemaFuncFirstArgument = 'schemaFuncFirstArgument',\n SchemaFuncExtraArgument = 'schemaFuncExtraArgument',\n FromKeyword = 'fromKeyword',\n AfterFrom = 'afterFrom',\n WhereKeyword = 'whereKeyword',\n WhereComparisonOperator = 'whereComparisonOperator',\n WhereValue = 'whereValue',\n AfterWhereFunctionArgument = 'afterWhereFunctionArgument',\n AfterGroupByFunctionArgument = 'afterGroupByFunctionArgument',\n AfterWhereValue = 'afterWhereValue',\n AfterGroupByKeywords = 'afterGroupByKeywords',\n AfterGroupBy = 'afterGroupBy',\n AfterOrderByKeywords = 'afterOrderByKeywords',\n AfterOrderByFunction = 'afterOrderByFunction',\n AfterOrderByDirection = 'afterOrderByDirection',\n AfterIsOperator = 'afterIsOperator',\n AfterIsNotOperator = 'afterIsNotOperator',\n AfterSchema = 'afterSchema',\n}\n\nexport enum SuggestionKind {\n Schemas = 'schemas',\n Tables = 'tables',\n Columns = 'columns',\n SelectKeyword = 'selectKeyword',\n WithKeyword = 'withKeyword',\n FunctionsWithArguments = 'functionsWithArguments',\n FromKeyword = 'fromKeyword',\n WhereKeyword = 'whereKeyword',\n GroupByKeywords = 'groupByKeywords',\n OrderByKeywords = 'orderByKeywords',\n FunctionsWithoutArguments = 'functionsWithoutArguments',\n LimitKeyword = 'limitKeyword',\n SortOrderDirectionKeyword = 'sortOrderDirectionKeyword',\n ComparisonOperators = 'comparisonOperators',\n LogicalOperators = 'logicalOperators',\n SelectMacro = 'selectMacro',\n TableMacro = 'tableMacro',\n FilterMacro = 'filterMacro',\n GroupMacro = 'groupMacro',\n BoolValues = 'boolValues',\n NullValue = 'nullValue',\n NotKeyword = 'notKeyword',\n TemplateVariables = 'templateVariables',\n StarWildCard = 'starWildCard',\n}\n\n// TODO: export from grafana/ui\nexport enum CompletionItemPriority {\n High = 'a',\n MediumHigh = 'd',\n Medium = 'g',\n MediumLow = 'k',\n Low = 'q',\n}\n\nexport enum CompletionItemKind {\n Method = 0,\n Function = 1,\n Constructor = 2,\n Field = 3,\n Variable = 4,\n Class = 5,\n Struct = 6,\n Interface = 7,\n Module = 8,\n Property = 9,\n Event = 10,\n Operator = 11,\n Unit = 12,\n Value = 13,\n Constant = 14,\n Enum = 15,\n EnumMember = 16,\n Keyword = 17,\n Text = 18,\n Color = 19,\n File = 20,\n Reference = 21,\n Customcolor = 22,\n Folder = 23,\n TypeParameter = 24,\n User = 25,\n Issue = 26,\n Snippet = 27,\n}\n\nexport enum CompletionItemInsertTextRule {\n KeepWhitespace = 1,\n InsertAsSnippet = 4,\n}\n\nexport enum SQLEditorMode {\n Builder = 'builder',\n Code = 'code',\n}\n"],"names":["OperatorType","MacroType","TokenType","StatementPosition","SuggestionKind","CompletionItemPriority","CompletionItemKind","CompletionItemInsertTextRule","SQLEditorMode"],"mappings":"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"}
@@ -28,6 +28,8 @@ const defaultTableNameParser = (token) => {
28
28
  return { table: parts[0] };
29
29
  } else if ((parts == null ? undefined : parts.length) === 2) {
30
30
  return { schema: parts[0], table: parts[1] };
31
+ } else if ((parts == null ? undefined : parts.length) === 3) {
32
+ return { catalog: parts[0], schema: parts[1], table: parts[2] };
31
33
  }
32
34
  return null;
33
35
  };
@@ -1 +1 @@
1
- {"version":3,"file":"tokenUtils.js","sources":["../../../../../src/components/SQLEditor/utils/tokenUtils.ts"],"sourcesContent":["import { FROM, SCHEMA, SELECT } from '../standardSql/language';\nimport { TokenType } from '../types';\nimport { type LinkedToken } from './LinkedToken';\n\nexport const getSelectToken = (currentToken: LinkedToken | null) =>\n currentToken?.getPreviousOfType(TokenType.Keyword, SELECT) ?? null;\n\nexport const getSelectStatisticToken = (currentToken: LinkedToken | null) => {\n const assumedStatisticToken = getSelectToken(currentToken)?.getNextNonWhiteSpaceToken();\n return assumedStatisticToken?.isVariable() || assumedStatisticToken?.isFunction() ? assumedStatisticToken : null;\n};\n\nexport const getMetricNameToken = (currentToken: LinkedToken | null) => {\n // statistic function is followed by `(` and then an argument\n const assumedMetricNameToken = getSelectStatisticToken(currentToken)?.next?.next;\n return assumedMetricNameToken?.isVariable() || assumedMetricNameToken?.isIdentifier() ? assumedMetricNameToken : null;\n};\n\nexport const getFromKeywordToken = (currentToken: LinkedToken | null) => {\n const selectToken = getSelectToken(currentToken);\n return selectToken?.getNextOfType(TokenType.Keyword, FROM);\n};\n\nexport const getNamespaceToken = (currentToken: LinkedToken | null) => {\n const fromToken = getFromKeywordToken(currentToken);\n const nextNonWhiteSpace = fromToken?.getNextNonWhiteSpaceToken();\n\n if (\n nextNonWhiteSpace?.isDoubleQuotedString() ||\n (nextNonWhiteSpace?.isVariable() && nextNonWhiteSpace?.value.toUpperCase() !== SCHEMA)\n ) {\n // schema is not used\n return nextNonWhiteSpace;\n } else if (nextNonWhiteSpace?.isKeyword() && nextNonWhiteSpace.next?.is(TokenType.Parenthesis, '(')) {\n // schema is specified\n const assumedNamespaceToken = nextNonWhiteSpace.next?.next;\n if (assumedNamespaceToken?.isDoubleQuotedString() || assumedNamespaceToken?.isVariable()) {\n return assumedNamespaceToken;\n }\n }\n return null;\n};\nexport const getTableToken = (currentToken: LinkedToken | null) => {\n const fromToken = getFromKeywordToken(currentToken);\n const nextNonWhiteSpace = fromToken?.getNextNonWhiteSpaceToken();\n if (nextNonWhiteSpace?.isVariable()) {\n // TODO: resolve column from variable?\n return null;\n } else if (nextNonWhiteSpace?.isKeyword() && nextNonWhiteSpace.next?.is(TokenType.Parenthesis, '(')) {\n return null;\n } else {\n return nextNonWhiteSpace;\n }\n};\n\nexport const defaultTableNameParser = (token: LinkedToken | null | undefined) => {\n const parts = token?.value.split('.');\n\n if (parts?.length === 1) {\n return { table: parts[0] };\n } else if (parts?.length === 2) {\n return { schema: parts[0], table: parts[1] };\n }\n\n return null;\n};\n"],"names":[],"mappings":";;;;AAIa,MAAA,cAAA,GAAiB,CAAC,YAAkC,KAAA;AAJjE,EAAA,IAAA,EAAA;AAKE,EAAA,OAAA,CAAA,EAAA,GAAA,YAAA,IAAA,IAAA,GAAA,SAAA,GAAA,YAAA,CAAc,iBAAkB,CAAA,SAAA,CAAU,OAAS,EAAA,MAAA,CAAA,KAAnD,IAA8D,GAAA,EAAA,GAAA,IAAA;AAAA;AAanD,MAAA,mBAAA,GAAsB,CAAC,YAAqC,KAAA;AACvE,EAAM,MAAA,WAAA,GAAc,eAAe,YAAY,CAAA;AAC/C,EAAO,OAAA,WAAA,IAAA,IAAA,GAAA,SAAA,GAAA,WAAA,CAAa,aAAc,CAAA,SAAA,CAAU,OAAS,EAAA,IAAA,CAAA;AACvD;AAqBa,MAAA,aAAA,GAAgB,CAAC,YAAqC,KAAA;AA1CnE,EAAA,IAAA,EAAA;AA2CE,EAAM,MAAA,SAAA,GAAY,oBAAoB,YAAY,CAAA;AAClD,EAAA,MAAM,oBAAoB,SAAW,IAAA,IAAA,GAAA,SAAA,GAAA,SAAA,CAAA,yBAAA,EAAA;AACrC,EAAA,IAAI,0DAAmB,UAAc,EAAA,EAAA;AAEnC,IAAO,OAAA,IAAA;AAAA,GACT,MAAA,IAAA,CAAW,0DAAmB,SAAe,EAAA,MAAA,CAAA,EAAA,GAAA,iBAAA,CAAkB,SAAlB,IAAwB,GAAA,SAAA,GAAA,EAAA,CAAA,EAAA,CAAG,SAAU,CAAA,WAAA,EAAa,GAAM,CAAA,CAAA,EAAA;AACnG,IAAO,OAAA,IAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA,iBAAA;AAAA;AAEX;AAEa,MAAA,sBAAA,GAAyB,CAAC,KAA0C,KAAA;AAC/E,EAAM,MAAA,KAAA,GAAQ,KAAO,IAAA,IAAA,GAAA,SAAA,GAAA,KAAA,CAAA,KAAA,CAAM,KAAM,CAAA,GAAA,CAAA;AAEjC,EAAI,IAAA,CAAA,KAAA,IAAA,IAAA,GAAA,SAAA,GAAA,KAAA,CAAO,YAAW,CAAG,EAAA;AACvB,IAAA,OAAO,EAAE,KAAA,EAAO,KAAM,CAAA,CAAC,CAAE,EAAA;AAAA,GAC3B,MAAA,IAAA,CAAW,KAAO,IAAA,IAAA,GAAA,SAAA,GAAA,KAAA,CAAA,MAAA,MAAW,CAAG,EAAA;AAC9B,IAAO,OAAA,EAAE,QAAQ,KAAM,CAAA,CAAC,GAAG,KAAO,EAAA,KAAA,CAAM,CAAC,CAAE,EAAA;AAAA;AAG7C,EAAO,OAAA,IAAA;AACT;;;;"}
1
+ {"version":3,"file":"tokenUtils.js","sources":["../../../../../src/components/SQLEditor/utils/tokenUtils.ts"],"sourcesContent":["import { FROM, SCHEMA, SELECT } from '../standardSql/language';\nimport { TokenType } from '../types';\nimport { type LinkedToken } from './LinkedToken';\n\nexport const getSelectToken = (currentToken: LinkedToken | null) =>\n currentToken?.getPreviousOfType(TokenType.Keyword, SELECT) ?? null;\n\nexport const getSelectStatisticToken = (currentToken: LinkedToken | null) => {\n const assumedStatisticToken = getSelectToken(currentToken)?.getNextNonWhiteSpaceToken();\n return assumedStatisticToken?.isVariable() || assumedStatisticToken?.isFunction() ? assumedStatisticToken : null;\n};\n\nexport const getMetricNameToken = (currentToken: LinkedToken | null) => {\n // statistic function is followed by `(` and then an argument\n const assumedMetricNameToken = getSelectStatisticToken(currentToken)?.next?.next;\n return assumedMetricNameToken?.isVariable() || assumedMetricNameToken?.isIdentifier() ? assumedMetricNameToken : null;\n};\n\nexport const getFromKeywordToken = (currentToken: LinkedToken | null) => {\n const selectToken = getSelectToken(currentToken);\n return selectToken?.getNextOfType(TokenType.Keyword, FROM);\n};\n\nexport const getNamespaceToken = (currentToken: LinkedToken | null) => {\n const fromToken = getFromKeywordToken(currentToken);\n const nextNonWhiteSpace = fromToken?.getNextNonWhiteSpaceToken();\n\n if (\n nextNonWhiteSpace?.isDoubleQuotedString() ||\n (nextNonWhiteSpace?.isVariable() && nextNonWhiteSpace?.value.toUpperCase() !== SCHEMA)\n ) {\n // schema is not used\n return nextNonWhiteSpace;\n } else if (nextNonWhiteSpace?.isKeyword() && nextNonWhiteSpace.next?.is(TokenType.Parenthesis, '(')) {\n // schema is specified\n const assumedNamespaceToken = nextNonWhiteSpace.next?.next;\n if (assumedNamespaceToken?.isDoubleQuotedString() || assumedNamespaceToken?.isVariable()) {\n return assumedNamespaceToken;\n }\n }\n return null;\n};\nexport const getTableToken = (currentToken: LinkedToken | null) => {\n const fromToken = getFromKeywordToken(currentToken);\n const nextNonWhiteSpace = fromToken?.getNextNonWhiteSpaceToken();\n if (nextNonWhiteSpace?.isVariable()) {\n // TODO: resolve column from variable?\n return null;\n } else if (nextNonWhiteSpace?.isKeyword() && nextNonWhiteSpace.next?.is(TokenType.Parenthesis, '(')) {\n return null;\n } else {\n return nextNonWhiteSpace;\n }\n};\n\nexport const defaultTableNameParser = (token: LinkedToken | null | undefined) => {\n const parts = token?.value.split('.');\n\n if (parts?.length === 1) {\n return { table: parts[0] };\n } else if (parts?.length === 2) {\n return { schema: parts[0], table: parts[1] };\n } else if (parts?.length === 3) {\n return { catalog: parts[0], schema: parts[1], table: parts[2] };\n }\n\n return null;\n};\n"],"names":[],"mappings":";;;;AAIa,MAAA,cAAA,GAAiB,CAAC,YAAkC,KAAA;AAJjE,EAAA,IAAA,EAAA;AAKE,EAAA,OAAA,CAAA,EAAA,GAAA,YAAA,IAAA,IAAA,GAAA,SAAA,GAAA,YAAA,CAAc,iBAAkB,CAAA,SAAA,CAAU,OAAS,EAAA,MAAA,CAAA,KAAnD,IAA8D,GAAA,EAAA,GAAA,IAAA;AAAA;AAanD,MAAA,mBAAA,GAAsB,CAAC,YAAqC,KAAA;AACvE,EAAM,MAAA,WAAA,GAAc,eAAe,YAAY,CAAA;AAC/C,EAAO,OAAA,WAAA,IAAA,IAAA,GAAA,SAAA,GAAA,WAAA,CAAa,aAAc,CAAA,SAAA,CAAU,OAAS,EAAA,IAAA,CAAA;AACvD;AAqBa,MAAA,aAAA,GAAgB,CAAC,YAAqC,KAAA;AA1CnE,EAAA,IAAA,EAAA;AA2CE,EAAM,MAAA,SAAA,GAAY,oBAAoB,YAAY,CAAA;AAClD,EAAA,MAAM,oBAAoB,SAAW,IAAA,IAAA,GAAA,SAAA,GAAA,SAAA,CAAA,yBAAA,EAAA;AACrC,EAAA,IAAI,0DAAmB,UAAc,EAAA,EAAA;AAEnC,IAAO,OAAA,IAAA;AAAA,GACT,MAAA,IAAA,CAAW,0DAAmB,SAAe,EAAA,MAAA,CAAA,EAAA,GAAA,iBAAA,CAAkB,SAAlB,IAAwB,GAAA,SAAA,GAAA,EAAA,CAAA,EAAA,CAAG,SAAU,CAAA,WAAA,EAAa,GAAM,CAAA,CAAA,EAAA;AACnG,IAAO,OAAA,IAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA,iBAAA;AAAA;AAEX;AAEa,MAAA,sBAAA,GAAyB,CAAC,KAA0C,KAAA;AAC/E,EAAM,MAAA,KAAA,GAAQ,KAAO,IAAA,IAAA,GAAA,SAAA,GAAA,KAAA,CAAA,KAAA,CAAM,KAAM,CAAA,GAAA,CAAA;AAEjC,EAAI,IAAA,CAAA,KAAA,IAAA,IAAA,GAAA,SAAA,GAAA,KAAA,CAAO,YAAW,CAAG,EAAA;AACvB,IAAA,OAAO,EAAE,KAAA,EAAO,KAAM,CAAA,CAAC,CAAE,EAAA;AAAA,GAC3B,MAAA,IAAA,CAAW,KAAO,IAAA,IAAA,GAAA,SAAA,GAAA,KAAA,CAAA,MAAA,MAAW,CAAG,EAAA;AAC9B,IAAO,OAAA,EAAE,QAAQ,KAAM,CAAA,CAAC,GAAG,KAAO,EAAA,KAAA,CAAM,CAAC,CAAE,EAAA;AAAA,GAC7C,MAAA,IAAA,CAAW,KAAO,IAAA,IAAA,GAAA,SAAA,GAAA,KAAA,CAAA,MAAA,MAAW,CAAG,EAAA;AAC9B,IAAA,OAAO,EAAE,OAAA,EAAS,KAAM,CAAA,CAAC,CAAG,EAAA,MAAA,EAAQ,KAAM,CAAA,CAAC,CAAG,EAAA,KAAA,EAAO,KAAM,CAAA,CAAC,CAAE,EAAA;AAAA;AAGhE,EAAO,OAAA,IAAA;AACT;;;;"}
@@ -41,8 +41,10 @@ function QueryOptionGroup({ title, children, collapsedInfo, queryStats }) {
41
41
  children: /* @__PURE__ */ jsx("div", { className: styles.body, children })
42
42
  }
43
43
  ),
44
- queryStats && config.featureToggles.lokiQuerySplitting && /* @__PURE__ */ jsx(Tooltip, { content: "Note: the query will be split into multiple parts and executed in sequence. Query limits will only apply each individual part.", children: /* @__PURE__ */ jsx(Icon, { tabIndex: 0, name: "info-circle", className: styles.tooltip, size: "sm" }) }),
45
- queryStats && /* @__PURE__ */ jsx("p", { className: styles.stats, children: generateQueryStats(queryStats) })
44
+ /* @__PURE__ */ jsxs("div", { className: styles.queryStatsWrap, children: [
45
+ queryStats && config.featureToggles.lokiQuerySplitting && /* @__PURE__ */ jsx(Tooltip, { content: "Note: the query will be split into multiple parts and executed in sequence. Query limits will only apply each individual part.", children: /* @__PURE__ */ jsx(Icon, { tabIndex: 0, name: "info-circle", className: styles.tooltip, size: "sm" }) }),
46
+ queryStats && /* @__PURE__ */ jsx("p", { className: styles.stats, children: generateQueryStats(queryStats) })
47
+ ] })
46
48
  ] });
47
49
  }
48
50
  const getStyles = (theme) => {
@@ -81,6 +83,13 @@ const getStyles = (theme) => {
81
83
  gap: theme.spacing(2),
82
84
  flexWrap: "wrap"
83
85
  }),
86
+ queryStatsWrap: css({
87
+ display: "flex",
88
+ alignItems: "center",
89
+ alignSelf: "flex-start",
90
+ label: "query-stats-wrap",
91
+ padding: theme.spacing(1)
92
+ }),
84
93
  stats: css({
85
94
  margin: "0px",
86
95
  color: theme.colors.text.secondary,
@@ -1 +1 @@
1
- {"version":3,"file":"QueryOptionGroup.js","sources":["../../../../../src/components/VisualQueryBuilder/components/QueryOptionGroup.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { useToggle } from 'react-use';\n\nimport { getValueFormat, type GrafanaTheme2 } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { Collapse, Icon, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { type QueryStats } from '../types';\nimport { EditorStack } from '../../QueryEditor';\n\ninterface Props {\n title: string;\n collapsedInfo: string[];\n queryStats?: QueryStats | null;\n}\n\nexport function QueryOptionGroup({ title, children, collapsedInfo, queryStats }: React.PropsWithChildren<Props>) {\n const [isOpen, toggleOpen] = useToggle(false);\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.wrapper}>\n <Collapse\n className={styles.collapse}\n collapsible\n isOpen={isOpen}\n onToggle={toggleOpen}\n label={\n <EditorStack gap={0}>\n <h6 className={styles.title}>{title}</h6>\n {!isOpen && (\n <div className={styles.description}>\n {collapsedInfo.map((x, i) => (\n <span key={i}>{x}</span>\n ))}\n </div>\n )}\n </EditorStack>\n }\n >\n <div className={styles.body}>{children}</div>\n </Collapse>\n {/**TODO: This is Loki logic that should eventually be moved to Loki */}\n {queryStats && config.featureToggles.lokiQuerySplitting && (\n <Tooltip content=\"Note: the query will be split into multiple parts and executed in sequence. Query limits will only apply each individual part.\">\n <Icon tabIndex={0} name=\"info-circle\" className={styles.tooltip} size=\"sm\" />\n </Tooltip>\n )}\n\n {queryStats && <p className={styles.stats}>{generateQueryStats(queryStats)}</p>}\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n collapse: css({\n backgroundColor: 'unset',\n border: 'unset',\n marginBottom: 0,\n\n ['> button']: {\n padding: theme.spacing(0, 1),\n },\n }),\n wrapper: css({\n width: '100%',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'baseline',\n }),\n title: css({\n flexGrow: 1,\n overflow: 'hidden',\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.fontWeightMedium,\n margin: 0,\n }),\n description: css({\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.bodySmall.fontWeight,\n paddingLeft: theme.spacing(2),\n gap: theme.spacing(2),\n display: 'flex',\n }),\n body: css({\n display: 'flex',\n gap: theme.spacing(2),\n flexWrap: 'wrap',\n }),\n stats: css({\n margin: '0px',\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n tooltip: css({\n marginRight: theme.spacing(0.25),\n }),\n };\n};\n\nconst generateQueryStats = (queryStats: QueryStats) => {\n if (queryStats.message) {\n return queryStats.message;\n }\n\n return `This query will process approximately ${convertUnits(queryStats)}.`;\n};\n\nconst convertUnits = (queryStats: QueryStats): string => {\n const { text, suffix } = getValueFormat('bytes')(queryStats.bytes, 1);\n return text + suffix;\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QueryOptionGroup.js","sources":["../../../../../src/components/VisualQueryBuilder/components/QueryOptionGroup.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { useToggle } from 'react-use';\n\nimport { getValueFormat, type GrafanaTheme2 } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { Collapse, Icon, Tooltip, useStyles2 } from '@grafana/ui';\n\nimport { type QueryStats } from '../types';\nimport { EditorStack } from '../../QueryEditor';\n\ninterface Props {\n title: string;\n collapsedInfo: string[];\n queryStats?: QueryStats | null;\n}\n\nexport function QueryOptionGroup({ title, children, collapsedInfo, queryStats }: React.PropsWithChildren<Props>) {\n const [isOpen, toggleOpen] = useToggle(false);\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.wrapper}>\n <Collapse\n className={styles.collapse}\n collapsible\n isOpen={isOpen}\n onToggle={toggleOpen}\n label={\n <EditorStack gap={0}>\n <h6 className={styles.title}>{title}</h6>\n {!isOpen && (\n <div className={styles.description}>\n {collapsedInfo.map((x, i) => (\n <span key={i}>{x}</span>\n ))}\n </div>\n )}\n </EditorStack>\n }\n >\n <div className={styles.body}>{children}</div>\n </Collapse>\n <div className={styles.queryStatsWrap}>\n {/**TODO: This is Loki logic that should eventually be moved to Loki */}\n {queryStats && config.featureToggles.lokiQuerySplitting && (\n <Tooltip content=\"Note: the query will be split into multiple parts and executed in sequence. Query limits will only apply each individual part.\">\n <Icon tabIndex={0} name=\"info-circle\" className={styles.tooltip} size=\"sm\" />\n </Tooltip>\n )}\n\n {queryStats && <p className={styles.stats}>{generateQueryStats(queryStats)}</p>}\n </div>\n </div>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n collapse: css({\n backgroundColor: 'unset',\n border: 'unset',\n marginBottom: 0,\n\n ['> button']: {\n padding: theme.spacing(0, 1),\n },\n }),\n wrapper: css({\n width: '100%',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'baseline',\n }),\n title: css({\n flexGrow: 1,\n overflow: 'hidden',\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.fontWeightMedium,\n margin: 0,\n }),\n description: css({\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n fontWeight: theme.typography.bodySmall.fontWeight,\n paddingLeft: theme.spacing(2),\n gap: theme.spacing(2),\n display: 'flex',\n }),\n body: css({\n display: 'flex',\n gap: theme.spacing(2),\n flexWrap: 'wrap',\n }),\n queryStatsWrap: css({\n display: 'flex',\n alignItems: 'center',\n alignSelf: 'flex-start',\n label: 'query-stats-wrap',\n padding: theme.spacing(1),\n }),\n stats: css({\n margin: '0px',\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n tooltip: css({\n marginRight: theme.spacing(0.25),\n }),\n };\n};\n\nconst generateQueryStats = (queryStats: QueryStats) => {\n if (queryStats.message) {\n return queryStats.message;\n }\n\n return `This query will process approximately ${convertUnits(queryStats)}.`;\n};\n\nconst convertUnits = (queryStats: QueryStats): string => {\n const { text, suffix } = getValueFormat('bytes')(queryStats.bytes, 1);\n return text + suffix;\n};\n"],"names":[],"mappings":"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"}
@@ -223,6 +223,7 @@ interface TableDefinition {
223
223
  interface TableIdentifier {
224
224
  table?: string;
225
225
  schema?: string;
226
+ catalog?: string;
226
227
  }
227
228
  interface SQLCompletionItemProvider extends Omit<monacoTypes.languages.CompletionItemProvider, 'provideCompletionItems'> {
228
229
  /**
@@ -536,7 +537,6 @@ interface SQLQuery extends DataQuery {
536
537
  rawSql?: string;
537
538
  dataset?: string;
538
539
  catalog?: string;
539
- schema?: string;
540
540
  table?: string;
541
541
  sql?: SQLExpression;
542
542
  editorMode?: EditorMode;
@@ -597,9 +597,8 @@ interface Aggregate {
597
597
  }
598
598
  interface DB {
599
599
  init?: (datasourceId?: string) => Promise<boolean>;
600
- datasets: () => Promise<string[]>;
600
+ datasets: (catalog?: string) => Promise<string[]>;
601
601
  catalogs?: () => Promise<string[]>;
602
- schemas?: (catalog?: string) => Promise<string[]>;
603
602
  tables: (dataset?: string, catalog?: string, schema?: string) => Promise<string[]>;
604
603
  fields: (query: SQLQuery, order?: boolean) => Promise<SQLSelectableValue[]>;
605
604
  validateQuery: (query: SQLQuery, range?: TimeRange) => Promise<ValidationResults>;
@@ -808,14 +807,17 @@ declare const RunQueryButton: ({ ariaLabel, queryRunning, queryInvalid, invalidQ
808
807
 
809
808
  interface DatasetSelectorProps extends ResourceSelectorProps {
810
809
  db: DB;
811
- dataset: string;
810
+ dataset?: string;
811
+ catalog?: string;
812
812
  value: string | null;
813
813
  applyDefault?: boolean;
814
814
  disabled?: boolean;
815
815
  onChange: (v: SelectableValue) => void;
816
816
  inputId?: string;
817
+ enableCatalogs?: boolean;
818
+ 'data-testid'?: string;
817
819
  }
818
- declare const DatasetSelector: ({ db, dataset, value, onChange, disabled, className, applyDefault, inputId, }: DatasetSelectorProps) => react_jsx_runtime.JSX.Element;
820
+ declare const DatasetSelector: ({ db, dataset, catalog, value, onChange, disabled, className, applyDefault, inputId, enableCatalogs, "data-testid": dataTestId, }: DatasetSelectorProps) => react_jsx_runtime.JSX.Element;
819
821
 
820
822
  interface CatalogSelectorProps {
821
823
  db: DB;
@@ -825,27 +827,17 @@ interface CatalogSelectorProps {
825
827
  }
826
828
  declare const CatalogSelector: ({ db, inputId, value, onChange }: CatalogSelectorProps) => react_jsx_runtime.JSX.Element;
827
829
 
828
- interface SchemaSelectorProps {
829
- db: DB;
830
- inputId?: string;
831
- catalog?: string;
832
- value: string | null;
833
- onChange: (schema: string | null) => void;
834
- }
835
- declare const SchemaSelector: ({ db, inputId, catalog, value, onChange }: SchemaSelectorProps) => react_jsx_runtime.JSX.Element;
836
-
837
830
  interface TableSelectorProps extends ResourceSelectorProps {
838
831
  db: DB;
839
832
  dataset?: string;
840
833
  catalog?: string;
841
- schema?: string;
842
834
  value: string | null;
843
835
  query: QueryWithDefaults;
844
836
  onChange: (v: SelectableValue) => void;
845
837
  inputId?: string;
846
838
  enableCatalogs?: boolean;
847
839
  }
848
- declare const TableSelector: ({ db, dataset, catalog, schema, value, className, onChange, inputId, enableCatalogs, }: TableSelectorProps) => react_jsx_runtime.JSX.Element;
840
+ declare const TableSelector: ({ db, dataset, catalog, value, className, onChange, inputId, enableCatalogs, }: TableSelectorProps) => react_jsx_runtime.JSX.Element;
849
841
 
850
842
  type Props$o = Omit<React.ComponentProps<typeof InlineLabel>, 'children' | 'onChange'> & {
851
843
  dataSourceConfig: DataSourceSettings<any, any>;
@@ -1323,4 +1315,4 @@ declare const openSelect: (container: HTMLElement, optionLabel?: string) => void
1323
1315
  declare const selectOption: (container: HTMLElement, optionLabel: string, typeOptionLabel?: boolean) => Promise<void>;
1324
1316
  declare const generateOptions: () => Array<SelectableValue<string>>;
1325
1317
 
1326
- export { AccessoryButton, AdvancedHttpSettings, type Aggregate, Auth, AuthMethod, type Props$c as AuthProps, BINARY_OPERATIONS_KEY, CatalogSelector, type ColumnDefinition, CompletionItemInsertTextRule, CompletionItemKind, CompletionItemPriority, ConfigDescriptionLink, ConfigSection, ConfigSubSection, ConnectionSettings, CustomHeadersSettings, type DB, DataLink, type DataLinkConfig, DataLinks, DataSourceDescription, DataSourcePicker, DatasetSelector, DatePicker, type DatePickerProps, DatePickerWithInput, type DatePickerWithInputProps, DebounceInput, type DebounceInputProps, EditorField, EditorFieldGroup, EditorHeader, EditorList, EditorMode, EditorRow, EditorRows, EditorStack, EditorSwitch, FlexItem, GroupByRow, InlineSelect, InputGroup, LabelFilters, type LanguageCompletionProvider, type LanguageDefinition, LinkedToken, MacroType, type MetaDefinition, type NameValue, OperationExplainedBox, OperationList, OperationListExplained, OperationsEditorRow, OperatorType, type PositionContext, type Props$s as Props, QUERY_FORMAT_OPTIONS, QueryBuilderHints, type QueryBuilderLabelFilter, type QueryBuilderOperation, type QueryBuilderOperationDefinition, type QueryBuilderOperationParamDef, type QueryBuilderOperationParamEditorProps, type QueryBuilderOperationParamValue, QueryEditorMode, QueryEditorModeToggle, type QueryEditorProps, QueryEditorRow, QueryFormat, QueryHeaderSwitch, QueryModellerBase, QueryOptionGroup, type QueryRowFilter, type QueryStats, type RAQBFieldTypes, RawQuery, type ResourceSelectorProps, type ResponseParser, RunQueryButton, type SQLConnectionLimits, SQLEditor, SQLEditorMode, SQLEditorTestUtils, type SQLExpression, type SQLFilters, type SQLMonarchLanguage, type SQLOptions, type SQLQuery, type SQLSelectableValue, type SchemaDefinition, SchemaSelector, SecureSocksProxyToggle, Segment, type SegmentProps, Space, SqlDatasource, SqlQueryEditor, type SqlQueryForInterpolation, type SqlQueryModel, type State$1 as State, type StatementPlacementProvider, StatementPosition, SuggestionKind, type SuggestionKindProvider, TLSSettings, type Props$f as TLSSettingsProps, type TableDefinition, type TableFieldSchema, type TableIdentifier, type TableSchema, TableSelector, type TestQueryModel, TokenType, type ValidationResults, type VisualQuery, type VisualQueryBinary, type VisualQueryModeller, convertLegacyAuthProps, formatDate, generateArrayOf, generateBoolean, generateOptions, getStandardSQLCompletionProvider, language as grafanaStandardSQLLanguage, conf as grafanaStandardSQLLanguageConf, mockDataQuery, mockDataSourcePluginMeta, mockDatasource, mockDatasourceInstanceSettings, mockLoadingState, mockPluginDependencies, mockPluginInclude, mockPluginIncludeType, mockPluginMeta, mockPluginMetaInfo, mockPluginSignatureStatus, mockPluginState, mockPluginType, mockQueryEditorProps, mockTimeRange, openSelect, selectOption, toOption, undefinedOr };
1318
+ export { AccessoryButton, AdvancedHttpSettings, type Aggregate, Auth, AuthMethod, type Props$c as AuthProps, BINARY_OPERATIONS_KEY, CatalogSelector, type ColumnDefinition, CompletionItemInsertTextRule, CompletionItemKind, CompletionItemPriority, ConfigDescriptionLink, ConfigSection, ConfigSubSection, ConnectionSettings, CustomHeadersSettings, type DB, DataLink, type DataLinkConfig, DataLinks, DataSourceDescription, DataSourcePicker, DatasetSelector, DatePicker, type DatePickerProps, DatePickerWithInput, type DatePickerWithInputProps, DebounceInput, type DebounceInputProps, EditorField, EditorFieldGroup, EditorHeader, EditorList, EditorMode, EditorRow, EditorRows, EditorStack, EditorSwitch, FlexItem, GroupByRow, InlineSelect, InputGroup, LabelFilters, type LanguageCompletionProvider, type LanguageDefinition, LinkedToken, MacroType, type MetaDefinition, type NameValue, OperationExplainedBox, OperationList, OperationListExplained, OperationsEditorRow, OperatorType, type PositionContext, type Props$s as Props, QUERY_FORMAT_OPTIONS, QueryBuilderHints, type QueryBuilderLabelFilter, type QueryBuilderOperation, type QueryBuilderOperationDefinition, type QueryBuilderOperationParamDef, type QueryBuilderOperationParamEditorProps, type QueryBuilderOperationParamValue, QueryEditorMode, QueryEditorModeToggle, type QueryEditorProps, QueryEditorRow, QueryFormat, QueryHeaderSwitch, QueryModellerBase, QueryOptionGroup, type QueryRowFilter, type QueryStats, type RAQBFieldTypes, RawQuery, type ResourceSelectorProps, type ResponseParser, RunQueryButton, type SQLConnectionLimits, SQLEditor, SQLEditorMode, SQLEditorTestUtils, type SQLExpression, type SQLFilters, type SQLMonarchLanguage, type SQLOptions, type SQLQuery, type SQLSelectableValue, type SchemaDefinition, SecureSocksProxyToggle, Segment, type SegmentProps, Space, SqlDatasource, SqlQueryEditor, type SqlQueryForInterpolation, type SqlQueryModel, type State$1 as State, type StatementPlacementProvider, StatementPosition, SuggestionKind, type SuggestionKindProvider, TLSSettings, type Props$f as TLSSettingsProps, type TableDefinition, type TableFieldSchema, type TableIdentifier, type TableSchema, TableSelector, type TestQueryModel, TokenType, type ValidationResults, type VisualQuery, type VisualQueryBinary, type VisualQueryModeller, convertLegacyAuthProps, formatDate, generateArrayOf, generateBoolean, generateOptions, getStandardSQLCompletionProvider, language as grafanaStandardSQLLanguage, conf as grafanaStandardSQLLanguageConf, mockDataQuery, mockDataSourcePluginMeta, mockDatasource, mockDatasourceInstanceSettings, mockLoadingState, mockPluginDependencies, mockPluginInclude, mockPluginIncludeType, mockPluginMeta, mockPluginMetaInfo, mockPluginSignatureStatus, mockPluginState, mockPluginType, mockQueryEditorProps, mockTimeRange, openSelect, selectOption, toOption, undefinedOr };
package/dist/esm/index.js CHANGED
@@ -24,7 +24,6 @@ export { SqlQueryEditor } from './components/QueryEditor/QueryEditor.js';
24
24
  export { RunQueryButton } from './components/QueryEditor/RunQueryButton.js';
25
25
  export { DatasetSelector } from './components/QueryEditor/DatasetSelector.js';
26
26
  export { CatalogSelector } from './components/QueryEditor/CatalogSelector.js';
27
- export { SchemaSelector } from './components/QueryEditor/SchemaSelector.js';
28
27
  export { TableSelector } from './components/QueryEditor/TableSelector.js';
29
28
  export { EditorMode, QUERY_FORMAT_OPTIONS, QueryFormat, toOption } from './components/QueryEditor/types.js';
30
29
  export { SecureSocksProxyToggle } from './components/ConfigEditor/SecureSocksProxyToggle.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grafana/plugin-ui",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+ssh://git@github.com/grafana/plugin-ui.git"
@@ -26,6 +26,7 @@
26
26
  "sideEffects": false,
27
27
  "scripts": {
28
28
  "build": "tsc -p ./tsconfig.build.json && rollup -c rollup.config.ts --configPlugin esbuild",
29
+ "dev": "tsc -p ./tsconfig.build.json && rollup -c rollup.config.ts --configPlugin esbuild -w",
29
30
  "clean": "rm -rf ./dist ./compiled",
30
31
  "test": "jest --watch",
31
32
  "test:ci": "jest --ci",
@@ -1,56 +0,0 @@
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
@@ -1 +0,0 @@
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;;;;"}