@grafana/sql 13.0.0-23742986829 → 13.0.0-23743013136
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/ResponseParser.cjs.map +1 -1
- package/dist/cjs/SQLVariableEditor.cjs.map +1 -1
- package/dist/cjs/SQLVariableSupport.cjs.map +1 -1
- package/dist/cjs/SQLVariableUtils.cjs.map +1 -1
- package/dist/cjs/components/ConfirmModal.cjs.map +1 -1
- package/dist/cjs/components/DatasetSelector.cjs.map +1 -1
- package/dist/cjs/components/QueryEditor.cjs.map +1 -1
- package/dist/cjs/components/QueryEditorLazy.cjs.map +1 -1
- package/dist/cjs/components/QueryHeader.cjs.map +1 -1
- package/dist/cjs/components/TableSelector.cjs.map +1 -1
- package/dist/cjs/components/configuration/ConnectionLimits.cjs.map +1 -1
- package/dist/cjs/components/configuration/Divider.cjs.map +1 -1
- package/dist/cjs/components/configuration/MaxLifetimeField.cjs.map +1 -1
- package/dist/cjs/components/configuration/MaxOpenConnectionsField.cjs.map +1 -1
- package/dist/cjs/components/configuration/TLSSecretsConfig.cjs.map +1 -1
- package/dist/cjs/components/configuration/useMigrateDatabaseFields.cjs.map +1 -1
- package/dist/cjs/components/query-editor-raw/QueryEditorRaw.cjs.map +1 -1
- package/dist/cjs/components/query-editor-raw/QueryToolbox.cjs.map +1 -1
- package/dist/cjs/components/query-editor-raw/QueryValidator.cjs.map +1 -1
- package/dist/cjs/components/query-editor-raw/RawEditor.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/AwesomeQueryBuilder.cjs +2 -2
- package/dist/cjs/components/visual-query-builder/AwesomeQueryBuilder.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/GroupByRow.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/OrderByRow.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/Preview.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/SQLGroupByRow.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/SQLOrderByRow.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/SQLWhereRow.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/SelectColumn.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/SelectCustomFunctionParameters.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/SelectFunctionParameters.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/SelectRow.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/VisualEditor.cjs.map +1 -1
- package/dist/cjs/components/visual-query-builder/WhereRow.cjs.map +1 -1
- package/dist/cjs/constants.cjs.map +1 -1
- package/dist/cjs/datasource/SqlDatasource.cjs.map +1 -1
- package/dist/cjs/defaults.cjs.map +1 -1
- package/dist/cjs/loadResources.cjs.map +1 -1
- package/dist/cjs/types.cjs.map +1 -1
- package/dist/cjs/utils/getColumnsWithIndices.cjs.map +1 -1
- package/dist/cjs/utils/logging.cjs.map +1 -1
- package/dist/cjs/utils/migration.cjs.map +1 -1
- package/dist/cjs/utils/sql.utils.cjs.map +1 -1
- package/dist/cjs/utils/testHelpers.cjs.map +1 -1
- package/dist/cjs/utils/useSqlChange.cjs.map +1 -1
- package/dist/esm/ResponseParser.mjs.map +1 -1
- package/dist/esm/SQLVariableEditor.mjs.map +1 -1
- package/dist/esm/SQLVariableSupport.mjs.map +1 -1
- package/dist/esm/SQLVariableUtils.mjs.map +1 -1
- package/dist/esm/components/ConfirmModal.mjs.map +1 -1
- package/dist/esm/components/DatasetSelector.mjs.map +1 -1
- package/dist/esm/components/QueryEditor.mjs.map +1 -1
- package/dist/esm/components/QueryEditorLazy.mjs.map +1 -1
- package/dist/esm/components/QueryHeader.mjs.map +1 -1
- package/dist/esm/components/TableSelector.mjs.map +1 -1
- package/dist/esm/components/configuration/ConnectionLimits.mjs.map +1 -1
- package/dist/esm/components/configuration/Divider.mjs.map +1 -1
- package/dist/esm/components/configuration/MaxLifetimeField.mjs.map +1 -1
- package/dist/esm/components/configuration/MaxOpenConnectionsField.mjs.map +1 -1
- package/dist/esm/components/configuration/TLSSecretsConfig.mjs.map +1 -1
- package/dist/esm/components/configuration/useMigrateDatabaseFields.mjs.map +1 -1
- package/dist/esm/components/query-editor-raw/QueryEditorRaw.mjs.map +1 -1
- package/dist/esm/components/query-editor-raw/QueryToolbox.mjs.map +1 -1
- package/dist/esm/components/query-editor-raw/QueryValidator.mjs.map +1 -1
- package/dist/esm/components/query-editor-raw/RawEditor.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/AwesomeQueryBuilder.mjs +2 -2
- package/dist/esm/components/visual-query-builder/AwesomeQueryBuilder.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/GroupByRow.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/OrderByRow.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/Preview.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/SQLGroupByRow.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/SQLOrderByRow.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/SQLWhereRow.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/SelectColumn.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/SelectCustomFunctionParameters.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/SelectFunctionParameters.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/SelectRow.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/VisualEditor.mjs.map +1 -1
- package/dist/esm/components/visual-query-builder/WhereRow.mjs.map +1 -1
- package/dist/esm/constants.mjs.map +1 -1
- package/dist/esm/datasource/SqlDatasource.mjs.map +1 -1
- package/dist/esm/defaults.mjs.map +1 -1
- package/dist/esm/loadResources.mjs.map +1 -1
- package/dist/esm/types.mjs.map +1 -1
- package/dist/esm/utils/getColumnsWithIndices.mjs.map +1 -1
- package/dist/esm/utils/logging.mjs.map +1 -1
- package/dist/esm/utils/migration.mjs.map +1 -1
- package/dist/esm/utils/sql.utils.mjs.map +1 -1
- package/dist/esm/utils/testHelpers.mjs.map +1 -1
- package/dist/esm/utils/useSqlChange.mjs.map +1 -1
- package/dist/types/ResponseParser.d.ts +1 -1
- package/dist/types/SQLVariableEditor.d.ts +2 -2
- package/dist/types/SQLVariableSupport.d.ts +3 -3
- package/dist/types/SQLVariableUtils.d.ts +1 -1
- package/dist/types/components/DatasetSelector.d.ts +2 -2
- package/dist/types/components/ErrorBoundary.d.ts +1 -1
- package/dist/types/components/QueryEditor.d.ts +4 -4
- package/dist/types/components/QueryHeader.d.ts +2 -2
- package/dist/types/components/SqlComponents.testHelpers.d.ts +3 -3
- package/dist/types/components/TableSelector.d.ts +2 -2
- package/dist/types/components/configuration/ConnectionLimits.d.ts +2 -2
- package/dist/types/components/configuration/MaxLifetimeField.d.ts +1 -1
- package/dist/types/components/configuration/MaxOpenConnectionsField.d.ts +1 -1
- package/dist/types/components/configuration/TLSSecretsConfig.d.ts +1 -1
- package/dist/types/components/configuration/useMigrateDatabaseFields.d.ts +2 -2
- package/dist/types/components/query-editor-raw/QueryEditorRaw.d.ts +2 -2
- package/dist/types/components/query-editor-raw/QueryToolbox.d.ts +1 -1
- package/dist/types/components/query-editor-raw/QueryValidator.d.ts +2 -2
- package/dist/types/components/query-editor-raw/RawEditor.d.ts +1 -1
- package/dist/types/components/visual-query-builder/AwesomeQueryBuilder.d.ts +1 -1
- package/dist/types/components/visual-query-builder/GroupByRow.d.ts +2 -2
- package/dist/types/components/visual-query-builder/OrderByRow.d.ts +2 -2
- package/dist/types/components/visual-query-builder/SQLGroupByRow.d.ts +3 -3
- package/dist/types/components/visual-query-builder/SQLOrderByRow.d.ts +3 -3
- package/dist/types/components/visual-query-builder/SQLWhereRow.d.ts +3 -3
- package/dist/types/components/visual-query-builder/SelectColumn.d.ts +1 -1
- package/dist/types/components/visual-query-builder/SelectCustomFunctionParameters.d.ts +2 -2
- package/dist/types/components/visual-query-builder/SelectFunctionParameters.d.ts +2 -2
- package/dist/types/components/visual-query-builder/SelectRow.d.ts +2 -2
- package/dist/types/components/visual-query-builder/VisualEditor.d.ts +1 -1
- package/dist/types/components/visual-query-builder/WhereRow.d.ts +2 -2
- package/dist/types/constants.d.ts +1 -1
- package/dist/types/datasource/SqlDatasource.d.ts +4 -4
- package/dist/types/defaults.d.ts +1 -1
- package/dist/types/loadResources.d.ts +1 -1
- package/dist/types/types.d.ts +4 -4
- package/dist/types/utils/getColumnsWithIndices.d.ts +2 -2
- package/dist/types/utils/logging.d.ts +1 -1
- package/dist/types/utils/migration.d.ts +2 -2
- package/dist/types/utils/sql.utils.d.ts +3 -3
- package/dist/types/utils/testHelpers.d.ts +1 -1
- package/dist/types/utils/useSqlChange.d.ts +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResponseParser.cjs","sources":["../../src/ResponseParser.ts"],"sourcesContent":["import { uniqBy } from 'lodash';\n\nimport { DataFrame, MetricFindValue } from '@grafana/data';\n\nimport type { ResponseParser as ResponseParserType } from './types';\n\nexport class ResponseParser implements ResponseParserType {\n transformMetricFindResponse(frame: DataFrame): MetricFindValue[] {\n const values: MetricFindValue[] = [];\n const textField = frame.fields.find((f) => f.name === '__text');\n const valueField = frame.fields.find((f) => f.name === '__value');\n\n if (textField && valueField) {\n for (let i = 0; i < textField.values.length; i++) {\n values.push({ text: '' + textField.values[i], value: '' + valueField.values[i] });\n }\n } else {\n for (const field of frame.fields) {\n for (const value of field.values) {\n values.push({ text: value });\n }\n }\n }\n\n return uniqBy(values, 'text');\n }\n}\n"],"names":["uniqBy"],"mappings":";;;;;;;AAMO,MAAM,cAAA,CAA6C;AAAA,EACxD,4BAA4B,KAAA,EAAqC;AAC/D,IAAA,MAAM,SAA4B,EAAC;AACnC,IAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,QAAQ,CAAA;AAC9D,IAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,SAAS,CAAA;AAEhE,IAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AAChD,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,EAAA,GAAK,UAAU,MAAA,CAAO,CAAC,CAAA,EAAG,KAAA,EAAO,EAAA,GAAK,UAAA,CAAW,MAAA,CAAO,CAAC,GAAG,CAAA;AAAA,MAClF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,KAAA,MAAW,KAAA,IAAS,MAAM,MAAA,EAAQ;AAChC,QAAA,KAAA,MAAW,KAAA,IAAS,MAAM,MAAA,EAAQ;AAChC,UAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAOA,aAAA,CAAO,QAAQ,MAAM,CAAA;AAAA,EAC9B;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"ResponseParser.cjs","sources":["../../src/ResponseParser.ts"],"sourcesContent":["import { uniqBy } from 'lodash';\n\nimport { type DataFrame, type MetricFindValue } from '@grafana/data';\n\nimport type { ResponseParser as ResponseParserType } from './types';\n\nexport class ResponseParser implements ResponseParserType {\n transformMetricFindResponse(frame: DataFrame): MetricFindValue[] {\n const values: MetricFindValue[] = [];\n const textField = frame.fields.find((f) => f.name === '__text');\n const valueField = frame.fields.find((f) => f.name === '__value');\n\n if (textField && valueField) {\n for (let i = 0; i < textField.values.length; i++) {\n values.push({ text: '' + textField.values[i], value: '' + valueField.values[i] });\n }\n } else {\n for (const field of frame.fields) {\n for (const value of field.values) {\n values.push({ text: value });\n }\n }\n }\n\n return uniqBy(values, 'text');\n }\n}\n"],"names":["uniqBy"],"mappings":";;;;;;;AAMO,MAAM,cAAA,CAA6C;AAAA,EACxD,4BAA4B,KAAA,EAAqC;AAC/D,IAAA,MAAM,SAA4B,EAAC;AACnC,IAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,QAAQ,CAAA;AAC9D,IAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,SAAS,CAAA;AAEhE,IAAA,IAAI,aAAa,UAAA,EAAY;AAC3B,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AAChD,QAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,EAAA,GAAK,UAAU,MAAA,CAAO,CAAC,CAAA,EAAG,KAAA,EAAO,EAAA,GAAK,UAAA,CAAW,MAAA,CAAO,CAAC,GAAG,CAAA;AAAA,MAClF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,KAAA,MAAW,KAAA,IAAS,MAAM,MAAA,EAAQ;AAChC,QAAA,KAAA,MAAW,KAAA,IAAS,MAAM,MAAA,EAAQ;AAChC,UAAA,MAAA,CAAO,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,CAAA;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAOA,aAAA,CAAO,QAAQ,MAAM,CAAA;AAAA,EAC9B;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SQLVariableEditor.cjs","sources":["../../src/SQLVariableEditor.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\n\nimport { DataQueryRequest, Field } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { EditorRows, EditorRow, EditorField } from '@grafana/plugin-ui';\nimport { Combobox, ComboboxOption } from '@grafana/ui';\n\nimport { migrateVariableQuery } from './SQLVariableUtils';\nimport { SqlQueryEditorProps } from './components/QueryEditor';\nimport { SqlQueryEditorLazy } from './components/QueryEditorLazy';\nimport { type SQLQuery, type SQLQueryMeta, SQLDialect } from './types';\n\ntype SQLVariableQueryEditorProps = SqlQueryEditorProps;\n\nexport const SQLVariablesQueryEditor = <T extends SQLDialect>(props: SQLVariableQueryEditorProps) => {\n const query = useMemo(() => migrateVariableQuery(props.query), [props.query]);\n const dialect = props.queryHeaderProps?.dialect ?? props.datasource.dialect ?? 'other';\n return (\n <>\n <SqlQueryEditorLazy\n {...props}\n query={query}\n queryHeaderProps={{ hideFormatSelector: true, hideRunButton: true, dialect }}\n />\n <FieldMapping {...props} query={query} />\n </>\n );\n};\n\nconst FieldMapping = (props: SQLVariableQueryEditorProps) => {\n const { query, datasource, onChange } = props;\n const [choices, setChoices] = useState<ComboboxOption[]>([]);\n\n // Track the actual SQL content to avoid re-querying when only meta changes\n const queryRef = useRef(query);\n queryRef.current = query;\n\n // Only re-run the query when the SQL content changes, not when meta (valueField/textField) changes\n const queryKey = useMemo(() => JSON.stringify({ rawSql: query.rawSql, sql: query.sql }), [query.rawSql, query.sql]);\n\n useEffect(() => {\n let isActive = true;\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const subscription = datasource.query({ targets: [queryRef.current] } as DataQueryRequest<SQLQuery>).subscribe({\n next: (response) => {\n if (!isActive) {\n return;\n }\n const fieldNames = (response.data[0] || { fields: [] }).fields.map((f: Field) => f.name);\n setChoices(fieldNames.map((f: Field) => ({ value: f, label: f })));\n },\n error: () => {\n if (isActive) {\n setChoices([]);\n }\n },\n });\n return () => {\n isActive = false;\n subscription.unsubscribe();\n };\n }, [datasource, queryKey]);\n const onMetaPropChange = <Key extends keyof SQLQueryMeta, Value extends SQLQueryMeta[Key]>(\n key: Key,\n value: Value,\n meta = query.meta || {}\n ) => {\n onChange({ ...query, meta: { ...meta, [key]: value } });\n };\n return (\n <EditorRows>\n <EditorRow>\n <EditorField label={t('grafana-sql.components.query-meta.variables.valueField', 'Value Field')}>\n <Combobox\n isClearable\n value={query.meta?.valueField}\n onChange={(e) => onMetaPropChange('valueField', e?.value)}\n width={40}\n options={choices}\n />\n </EditorField>\n <EditorField label={t('grafana-sql.components.query-meta.variables.textField', 'Text Field')}>\n <Combobox\n isClearable\n value={query.meta?.textField}\n onChange={(e) => onMetaPropChange('textField', e?.value)}\n width={40}\n options={choices}\n />\n </EditorField>\n </EditorRow>\n </EditorRows>\n );\n};\n"],"names":["useMemo","migrateVariableQuery","jsxs","Fragment","jsx","SqlQueryEditorLazy","useState","useRef","useEffect","EditorRows","EditorRow","EditorField","t","Combobox"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SQLVariableEditor.cjs","sources":["../../src/SQLVariableEditor.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\n\nimport { type DataQueryRequest, type Field } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { EditorRows, EditorRow, EditorField } from '@grafana/plugin-ui';\nimport { Combobox, type ComboboxOption } from '@grafana/ui';\n\nimport { migrateVariableQuery } from './SQLVariableUtils';\nimport { type SqlQueryEditorProps } from './components/QueryEditor';\nimport { SqlQueryEditorLazy } from './components/QueryEditorLazy';\nimport { type SQLQuery, type SQLQueryMeta, type SQLDialect } from './types';\n\ntype SQLVariableQueryEditorProps = SqlQueryEditorProps;\n\nexport const SQLVariablesQueryEditor = <T extends SQLDialect>(props: SQLVariableQueryEditorProps) => {\n const query = useMemo(() => migrateVariableQuery(props.query), [props.query]);\n const dialect = props.queryHeaderProps?.dialect ?? props.datasource.dialect ?? 'other';\n return (\n <>\n <SqlQueryEditorLazy\n {...props}\n query={query}\n queryHeaderProps={{ hideFormatSelector: true, hideRunButton: true, dialect }}\n />\n <FieldMapping {...props} query={query} />\n </>\n );\n};\n\nconst FieldMapping = (props: SQLVariableQueryEditorProps) => {\n const { query, datasource, onChange } = props;\n const [choices, setChoices] = useState<ComboboxOption[]>([]);\n\n // Track the actual SQL content to avoid re-querying when only meta changes\n const queryRef = useRef(query);\n queryRef.current = query;\n\n // Only re-run the query when the SQL content changes, not when meta (valueField/textField) changes\n const queryKey = useMemo(() => JSON.stringify({ rawSql: query.rawSql, sql: query.sql }), [query.rawSql, query.sql]);\n\n useEffect(() => {\n let isActive = true;\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const subscription = datasource.query({ targets: [queryRef.current] } as DataQueryRequest<SQLQuery>).subscribe({\n next: (response) => {\n if (!isActive) {\n return;\n }\n const fieldNames = (response.data[0] || { fields: [] }).fields.map((f: Field) => f.name);\n setChoices(fieldNames.map((f: Field) => ({ value: f, label: f })));\n },\n error: () => {\n if (isActive) {\n setChoices([]);\n }\n },\n });\n return () => {\n isActive = false;\n subscription.unsubscribe();\n };\n }, [datasource, queryKey]);\n const onMetaPropChange = <Key extends keyof SQLQueryMeta, Value extends SQLQueryMeta[Key]>(\n key: Key,\n value: Value,\n meta = query.meta || {}\n ) => {\n onChange({ ...query, meta: { ...meta, [key]: value } });\n };\n return (\n <EditorRows>\n <EditorRow>\n <EditorField label={t('grafana-sql.components.query-meta.variables.valueField', 'Value Field')}>\n <Combobox\n isClearable\n value={query.meta?.valueField}\n onChange={(e) => onMetaPropChange('valueField', e?.value)}\n width={40}\n options={choices}\n />\n </EditorField>\n <EditorField label={t('grafana-sql.components.query-meta.variables.textField', 'Text Field')}>\n <Combobox\n isClearable\n value={query.meta?.textField}\n onChange={(e) => onMetaPropChange('textField', e?.value)}\n width={40}\n options={choices}\n />\n </EditorField>\n </EditorRow>\n </EditorRows>\n );\n};\n"],"names":["useMemo","migrateVariableQuery","jsxs","Fragment","jsx","SqlQueryEditorLazy","useState","useRef","useEffect","EditorRows","EditorRow","EditorField","t","Combobox"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SQLVariableSupport.cjs","sources":["../../src/SQLVariableSupport.ts"],"sourcesContent":["import { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { CustomVariableSupport, DataQueryRequest, DataQueryResponse, DataFrame } from '@grafana/data';\nimport { EditorMode } from '@grafana/plugin-ui';\n\nimport { SQLVariablesQueryEditor } from './SQLVariableEditor';\nimport { migrateVariableQuery, updateFrame, refId } from './SQLVariableUtils';\nimport { SqlDatasource } from './datasource/SqlDatasource';\nimport { applyQueryDefaults } from './defaults';\nimport { QueryFormat, type SQLQuery } from './types';\n\nexport class SQLVariableSupport extends CustomVariableSupport<SqlDatasource, SQLQuery> {\n constructor(readonly datasource: SqlDatasource) {\n super();\n }\n editor = SQLVariablesQueryEditor;\n query(request: DataQueryRequest<SQLQuery>): Observable<DataQueryResponse> {\n if (request.targets.length < 1) {\n throw new Error('no variable query found');\n }\n const updatedQuery = migrateVariableQuery(request.targets[0]);\n return this.datasource.query({ ...request, targets: [updatedQuery] }).pipe(\n map((d: DataQueryResponse) => {\n return {\n ...d,\n data: (d.data || []).map((frame: DataFrame) => updateFrame(frame, updatedQuery.meta)),\n };\n })\n );\n }\n getDefaultQuery(): Partial<SQLQuery> {\n return applyQueryDefaults({ refId, editorMode: EditorMode.Builder, format: QueryFormat.Table });\n }\n}\n"],"names":["CustomVariableSupport","SQLVariablesQueryEditor","migrateVariableQuery","map","updateFrame","applyQueryDefaults","refId","EditorMode","QueryFormat"],"mappings":";;;;;;;;;;;;;AAYO,MAAM,2BAA2BA,0BAAA,CAA+C;AAAA,EACrF,YAAqB,UAAA,EAA2B;AAC9C,IAAA,KAAA,EAAM;AADa,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAGrB,IAAA,IAAA,CAAA,MAAA,GAASC,yCAAA;AAAA,EADT;AAAA,EAEA,MAAM,OAAA,EAAoE;AACxE,IAAA,IAAI,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC9B,MAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,IAC3C;AACA,IAAA,MAAM,YAAA,GAAeC,qCAAA,CAAqB,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA;AAC5D,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,EAAE,GAAG,OAAA,EAAS,OAAA,EAAS,CAAC,YAAY,CAAA,EAAG,CAAA,CAAE,IAAA;AAAA,MACpEC,aAAA,CAAI,CAAC,CAAA,KAAyB;AAC5B,QAAA,OAAO;AAAA,UACL,GAAG,CAAA;AAAA,UACH,IAAA,EAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,KAAqBC,4BAAA,CAAY,KAAA,EAAO,YAAA,CAAa,IAAI,CAAC;AAAA,SACtF;AAAA,MACF,CAAC;AAAA,KACH;AAAA,EACF;AAAA,EACA,eAAA,GAAqC;AACnC,IAAA,OAAOC,2BAAA,CAAmB,SAAEC,sBAAA,EAAO,UAAA,EAAYC,oBAAW,OAAA,EAAS,MAAA,EAAQC,iBAAA,CAAY,KAAA,EAAO,CAAA;AAAA,EAChG;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"SQLVariableSupport.cjs","sources":["../../src/SQLVariableSupport.ts"],"sourcesContent":["import { type Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { CustomVariableSupport, type DataQueryRequest, type DataQueryResponse, type DataFrame } from '@grafana/data';\nimport { EditorMode } from '@grafana/plugin-ui';\n\nimport { SQLVariablesQueryEditor } from './SQLVariableEditor';\nimport { migrateVariableQuery, updateFrame, refId } from './SQLVariableUtils';\nimport { type SqlDatasource } from './datasource/SqlDatasource';\nimport { applyQueryDefaults } from './defaults';\nimport { QueryFormat, type SQLQuery } from './types';\n\nexport class SQLVariableSupport extends CustomVariableSupport<SqlDatasource, SQLQuery> {\n constructor(readonly datasource: SqlDatasource) {\n super();\n }\n editor = SQLVariablesQueryEditor;\n query(request: DataQueryRequest<SQLQuery>): Observable<DataQueryResponse> {\n if (request.targets.length < 1) {\n throw new Error('no variable query found');\n }\n const updatedQuery = migrateVariableQuery(request.targets[0]);\n return this.datasource.query({ ...request, targets: [updatedQuery] }).pipe(\n map((d: DataQueryResponse) => {\n return {\n ...d,\n data: (d.data || []).map((frame: DataFrame) => updateFrame(frame, updatedQuery.meta)),\n };\n })\n );\n }\n getDefaultQuery(): Partial<SQLQuery> {\n return applyQueryDefaults({ refId, editorMode: EditorMode.Builder, format: QueryFormat.Table });\n }\n}\n"],"names":["CustomVariableSupport","SQLVariablesQueryEditor","migrateVariableQuery","map","updateFrame","applyQueryDefaults","refId","EditorMode","QueryFormat"],"mappings":";;;;;;;;;;;;;AAYO,MAAM,2BAA2BA,0BAAA,CAA+C;AAAA,EACrF,YAAqB,UAAA,EAA2B;AAC9C,IAAA,KAAA,EAAM;AADa,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAGrB,IAAA,IAAA,CAAA,MAAA,GAASC,yCAAA;AAAA,EADT;AAAA,EAEA,MAAM,OAAA,EAAoE;AACxE,IAAA,IAAI,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC9B,MAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,IAC3C;AACA,IAAA,MAAM,YAAA,GAAeC,qCAAA,CAAqB,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA;AAC5D,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,EAAE,GAAG,OAAA,EAAS,OAAA,EAAS,CAAC,YAAY,CAAA,EAAG,CAAA,CAAE,IAAA;AAAA,MACpEC,aAAA,CAAI,CAAC,CAAA,KAAyB;AAC5B,QAAA,OAAO;AAAA,UACL,GAAG,CAAA;AAAA,UACH,IAAA,EAAA,CAAO,CAAA,CAAE,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,KAAA,KAAqBC,4BAAA,CAAY,KAAA,EAAO,YAAA,CAAa,IAAI,CAAC;AAAA,SACtF;AAAA,MACF,CAAC;AAAA,KACH;AAAA,EACF;AAAA,EACA,eAAA,GAAqC;AACnC,IAAA,OAAOC,2BAAA,CAAmB,SAAEC,sBAAA,EAAO,UAAA,EAAYC,oBAAW,OAAA,EAAS,MAAA,EAAQC,iBAAA,CAAY,KAAA,EAAO,CAAA;AAAA,EAChG;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SQLVariableUtils.cjs","sources":["../../src/SQLVariableUtils.ts"],"sourcesContent":["import { uniq } from 'lodash';\n\nimport { DataFrame, Field, FieldType } from '@grafana/data';\nimport { EditorMode } from '@grafana/plugin-ui';\n\nimport { applyQueryDefaults } from './defaults';\nimport { type SQLQuery, type SQLVariableQuery, type SQLQueryMeta } from './types';\n\nexport const refId = 'SQLVariableQueryEditor-VariableQuery';\n\nexport const migrateVariableQuery = (rawQuery: string | SQLQuery): SQLVariableQuery => {\n if (typeof rawQuery !== 'string') {\n return {\n ...rawQuery,\n refId: rawQuery.refId || refId,\n query: rawQuery.rawSql || '',\n };\n }\n return {\n ...applyQueryDefaults({\n refId,\n rawSql: rawQuery,\n editorMode: rawQuery ? EditorMode.Code : EditorMode.Builder,\n }),\n query: rawQuery,\n };\n};\n\nexport const updateFrame = (frame: DataFrame, meta?: SQLQueryMeta): DataFrame => {\n const fields = convertFieldsToVariableFields(frame.fields, meta);\n let length = fields.length > 0 ? fields[0].values.length : frame.length;\n return { ...frame, length, fields };\n};\n\nexport const convertFieldsToVariableFields = (original_fields: Field[], meta?: SQLQueryMeta): Field[] => {\n // scenario 1 : If no fields found, throw error\n if (original_fields.length < 1) {\n throw new Error('at least one field expected for variable');\n }\n // scenario 2 : If meta field found, use and return ( at least one text field / value field exist / or first field )\n if (meta) {\n let tf = meta.textField ? original_fields.find((f) => f.name === meta.textField) : undefined;\n let vf = meta.valueField ? original_fields.find((f) => f.name === meta.valueField) : undefined;\n const textField = tf || vf || original_fields[0];\n const valueField = vf || tf || original_fields[0];\n const otherFields = original_fields.filter((f: Field) => f.name !== 'value' && f.name !== 'text');\n return [{ ...textField, name: 'text' }, { ...valueField, name: 'value' }, ...otherFields];\n }\n // scenario 3 : If both __text field & __value field found\n let tf = original_fields.find((f) => f.name === '__text');\n let vf = original_fields.find((f) => f.name === '__value');\n if (tf && vf) {\n const otherFields = original_fields.filter((f: Field) => f.name !== '__text' && f.name !== '__value');\n return [\n { ...tf, name: 'text', values: tf.values.map((v) => '' + v) },\n { ...vf, name: 'value', values: vf.values.map((v) => '' + v) },\n ...otherFields,\n ];\n }\n // scenario 4 : fallback scenario / legacy scenario where return all fields into a single field.\n let values: string[] = [];\n for (const field of original_fields) {\n for (const value of field.values) {\n if (value !== null && value !== undefined) {\n values.push('' + value);\n }\n }\n }\n values = uniq(values);\n return [\n { name: 'text', type: FieldType.string, config: {}, values },\n { name: 'value', type: FieldType.string, config: {}, values },\n ];\n};\n"],"names":["applyQueryDefaults","EditorMode","tf","vf","uniq","FieldType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SQLVariableUtils.cjs","sources":["../../src/SQLVariableUtils.ts"],"sourcesContent":["import { uniq } from 'lodash';\n\nimport { type DataFrame, type Field, FieldType } from '@grafana/data';\nimport { EditorMode } from '@grafana/plugin-ui';\n\nimport { applyQueryDefaults } from './defaults';\nimport { type SQLQuery, type SQLVariableQuery, type SQLQueryMeta } from './types';\n\nexport const refId = 'SQLVariableQueryEditor-VariableQuery';\n\nexport const migrateVariableQuery = (rawQuery: string | SQLQuery): SQLVariableQuery => {\n if (typeof rawQuery !== 'string') {\n return {\n ...rawQuery,\n refId: rawQuery.refId || refId,\n query: rawQuery.rawSql || '',\n };\n }\n return {\n ...applyQueryDefaults({\n refId,\n rawSql: rawQuery,\n editorMode: rawQuery ? EditorMode.Code : EditorMode.Builder,\n }),\n query: rawQuery,\n };\n};\n\nexport const updateFrame = (frame: DataFrame, meta?: SQLQueryMeta): DataFrame => {\n const fields = convertFieldsToVariableFields(frame.fields, meta);\n let length = fields.length > 0 ? fields[0].values.length : frame.length;\n return { ...frame, length, fields };\n};\n\nexport const convertFieldsToVariableFields = (original_fields: Field[], meta?: SQLQueryMeta): Field[] => {\n // scenario 1 : If no fields found, throw error\n if (original_fields.length < 1) {\n throw new Error('at least one field expected for variable');\n }\n // scenario 2 : If meta field found, use and return ( at least one text field / value field exist / or first field )\n if (meta) {\n let tf = meta.textField ? original_fields.find((f) => f.name === meta.textField) : undefined;\n let vf = meta.valueField ? original_fields.find((f) => f.name === meta.valueField) : undefined;\n const textField = tf || vf || original_fields[0];\n const valueField = vf || tf || original_fields[0];\n const otherFields = original_fields.filter((f: Field) => f.name !== 'value' && f.name !== 'text');\n return [{ ...textField, name: 'text' }, { ...valueField, name: 'value' }, ...otherFields];\n }\n // scenario 3 : If both __text field & __value field found\n let tf = original_fields.find((f) => f.name === '__text');\n let vf = original_fields.find((f) => f.name === '__value');\n if (tf && vf) {\n const otherFields = original_fields.filter((f: Field) => f.name !== '__text' && f.name !== '__value');\n return [\n { ...tf, name: 'text', values: tf.values.map((v) => '' + v) },\n { ...vf, name: 'value', values: vf.values.map((v) => '' + v) },\n ...otherFields,\n ];\n }\n // scenario 4 : fallback scenario / legacy scenario where return all fields into a single field.\n let values: string[] = [];\n for (const field of original_fields) {\n for (const value of field.values) {\n if (value !== null && value !== undefined) {\n values.push('' + value);\n }\n }\n }\n values = uniq(values);\n return [\n { name: 'text', type: FieldType.string, config: {}, values },\n { name: 'value', type: FieldType.string, config: {}, values },\n ];\n};\n"],"names":["applyQueryDefaults","EditorMode","tf","vf","uniq","FieldType"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfirmModal.cjs","sources":["../../../src/components/ConfirmModal.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { useRef, useEffect } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\nimport { Button, Icon, Modal, useStyles2 } from '@grafana/ui';\n\ntype ConfirmModalProps = {\n isOpen: boolean;\n onCancel?: () => void;\n onDiscard?: () => void;\n onCopy?: () => void;\n};\nexport function ConfirmModal({ isOpen, onCancel, onDiscard, onCopy }: ConfirmModalProps) {\n const buttonRef = useRef<HTMLButtonElement>(null);\n const styles = useStyles2(getStyles);\n\n // Moved from grafana/ui\n useEffect(() => {\n // for some reason autoFocus property did no work on this button, but this does\n if (isOpen) {\n buttonRef.current?.focus();\n }\n }, [isOpen]);\n\n return (\n <Modal\n title={\n <div className={styles.modalHeaderTitle}>\n <Icon name=\"exclamation-triangle\" size=\"lg\" />\n <span className={styles.titleText}>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.warning\">Warning</Trans>\n </span>\n </div>\n }\n ariaLabel={t('grafana-sql.components.confirm-modal.warning', 'Warning')}\n onDismiss={onCancel}\n isOpen={isOpen}\n >\n <p>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.builder-mode\">\n Builder mode does not display changes made in code. The query builder will display the last changes you made\n in builder mode.\n </Trans>\n </p>\n <p>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.clipboard\">\n Do you want to copy your code to the clipboard?\n </Trans>\n </p>\n <Modal.ButtonRow>\n <Button type=\"button\" variant=\"secondary\" onClick={onCancel} fill=\"outline\">\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.cancel\">Cancel</Trans>\n </Button>\n <Button variant=\"destructive\" type=\"button\" onClick={onDiscard} ref={buttonRef}>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.discard-code-and-switch\">Discard code and switch</Trans>\n </Button>\n <Button variant=\"primary\" onClick={onCopy}>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.copy-code-and-switch\">Copy code and switch</Trans>\n </Button>\n </Modal.ButtonRow>\n </Modal>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n titleText: css({\n paddingLeft: theme.spacing(2),\n }),\n modalHeaderTitle: css({\n fontSize: theme.typography.size.lg,\n float: 'left',\n paddingTop: theme.spacing(1),\n margin: theme.spacing(0, 2),\n }),\n});\n"],"names":["useRef","useStyles2","useEffect","jsxs","Modal","jsx","Icon","Trans","t","Button","css"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConfirmModal.cjs","sources":["../../../src/components/ConfirmModal.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { useRef, useEffect } from 'react';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\nimport { Button, Icon, Modal, useStyles2 } from '@grafana/ui';\n\ntype ConfirmModalProps = {\n isOpen: boolean;\n onCancel?: () => void;\n onDiscard?: () => void;\n onCopy?: () => void;\n};\nexport function ConfirmModal({ isOpen, onCancel, onDiscard, onCopy }: ConfirmModalProps) {\n const buttonRef = useRef<HTMLButtonElement>(null);\n const styles = useStyles2(getStyles);\n\n // Moved from grafana/ui\n useEffect(() => {\n // for some reason autoFocus property did no work on this button, but this does\n if (isOpen) {\n buttonRef.current?.focus();\n }\n }, [isOpen]);\n\n return (\n <Modal\n title={\n <div className={styles.modalHeaderTitle}>\n <Icon name=\"exclamation-triangle\" size=\"lg\" />\n <span className={styles.titleText}>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.warning\">Warning</Trans>\n </span>\n </div>\n }\n ariaLabel={t('grafana-sql.components.confirm-modal.warning', 'Warning')}\n onDismiss={onCancel}\n isOpen={isOpen}\n >\n <p>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.builder-mode\">\n Builder mode does not display changes made in code. The query builder will display the last changes you made\n in builder mode.\n </Trans>\n </p>\n <p>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.clipboard\">\n Do you want to copy your code to the clipboard?\n </Trans>\n </p>\n <Modal.ButtonRow>\n <Button type=\"button\" variant=\"secondary\" onClick={onCancel} fill=\"outline\">\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.cancel\">Cancel</Trans>\n </Button>\n <Button variant=\"destructive\" type=\"button\" onClick={onDiscard} ref={buttonRef}>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.discard-code-and-switch\">Discard code and switch</Trans>\n </Button>\n <Button variant=\"primary\" onClick={onCopy}>\n <Trans i18nKey=\"grafana-sql.components.confirm-modal.copy-code-and-switch\">Copy code and switch</Trans>\n </Button>\n </Modal.ButtonRow>\n </Modal>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n titleText: css({\n paddingLeft: theme.spacing(2),\n }),\n modalHeaderTitle: css({\n fontSize: theme.typography.size.lg,\n float: 'left',\n paddingTop: theme.spacing(1),\n margin: theme.spacing(0, 2),\n }),\n});\n"],"names":["useRef","useStyles2","useEffect","jsxs","Modal","jsx","Icon","Trans","t","Button","css"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DatasetSelector.cjs","sources":["../../../src/components/DatasetSelector.tsx"],"sourcesContent":["import { useAsync } from 'react-use';\n\nimport { SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Select } from '@grafana/ui';\n\nimport { DB, ResourceSelectorProps, SQLDialect, toOption } from '../types';\n\nexport interface DatasetSelectorProps extends ResourceSelectorProps {\n db: DB;\n dataset: string | undefined;\n preconfiguredDataset: string;\n dialect: SQLDialect;\n onChange: (v: SelectableValue) => void;\n inputId?: string | undefined;\n}\n\nexport const DatasetSelector = ({\n dataset,\n db,\n dialect,\n onChange,\n inputId,\n preconfiguredDataset,\n}: DatasetSelectorProps) => {\n /*\n The behavior of this component - for MSSQL and MySQL datasources - is based on whether the user chose to create a datasource\n with or without a default database (preconfiguredDataset). If the user configured a default database, this selector\n should only allow that single preconfigured database option to be selected. If the user chose to NOT assign/configure a default database,\n then the user should be able to use this component to choose between multiple databases available to the datasource.\n */\n // `hasPreconfigCondition` is true if either 1) the sql datasource has a preconfigured default database,\n // OR if 2) the datasource is Postgres. In either case the only option available to the user is the preconfigured database.\n const hasPreconfigCondition = !!preconfiguredDataset || dialect === 'postgres';\n\n const state = useAsync(async () => {\n // If a default database is already configured for a MSSQL or MySQL data source, OR the data source is Postgres, no need to fetch other databases.\n if (hasPreconfigCondition) {\n // Set the current database to the preconfigured database.\n onChange(toOption(preconfiguredDataset));\n return [toOption(preconfiguredDataset)];\n }\n\n // If there is no preconfigured database, but there is a selected dataset, set the current database to the selected dataset.\n if (dataset) {\n onChange(toOption(dataset));\n }\n\n // Otherwise, fetch all databases available to the datasource.\n const datasets = await db.datasets();\n return datasets.map(toOption);\n }, []);\n\n return (\n <Select\n aria-label={t('grafana-sql.components.dataset-selector.aria-label-dataset-selector', 'Dataset selector')}\n inputId={inputId}\n value={dataset}\n options={state.value}\n onChange={onChange}\n disabled={state.loading}\n isLoading={state.loading}\n menuShouldPortal={true}\n />\n );\n};\n"],"names":["useAsync","toOption","jsx","Select","t"],"mappings":";;;;;;;;;;;AAiBO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,OAAA;AAAA,EACA,EAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,KAA4B;AAS1B,EAAA,MAAM,qBAAA,GAAwB,CAAC,CAAC,oBAAA,IAAwB,OAAA,KAAY,UAAA;AAEpE,EAAA,MAAM,KAAA,GAAQA,kBAAS,YAAY;AAEjC,IAAA,IAAI,qBAAA,EAAuB;AAEzB,MAAA,QAAA,CAASC,cAAA,CAAS,oBAAoB,CAAC,CAAA;AACvC,MAAA,OAAO,CAACA,cAAA,CAAS,oBAAoB,CAAC,CAAA;AAAA,IACxC;AAGA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,QAAA,CAASA,cAAA,CAAS,OAAO,CAAC,CAAA;AAAA,IAC5B;AAGA,IAAA,MAAM,QAAA,GAAW,MAAM,EAAA,CAAG,QAAA,EAAS;AACnC,IAAA,OAAO,QAAA,CAAS,IAAIA,cAAQ,CAAA;AAAA,EAC9B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACEC,cAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAYC,MAAA,CAAE,qEAAA,EAAuE,kBAAkB,CAAA;AAAA,MACvG,OAAA;AAAA,MACA,KAAA,EAAO,OAAA;AAAA,MACP,SAAS,KAAA,CAAM,KAAA;AAAA,MACf,QAAA;AAAA,MACA,UAAU,KAAA,CAAM,OAAA;AAAA,MAChB,WAAW,KAAA,CAAM,OAAA;AAAA,MACjB,gBAAA,EAAkB;AAAA;AAAA,GACpB;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"DatasetSelector.cjs","sources":["../../../src/components/DatasetSelector.tsx"],"sourcesContent":["import { useAsync } from 'react-use';\n\nimport { type SelectableValue } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { Select } from '@grafana/ui';\n\nimport { type DB, type ResourceSelectorProps, type SQLDialect, toOption } from '../types';\n\nexport interface DatasetSelectorProps extends ResourceSelectorProps {\n db: DB;\n dataset: string | undefined;\n preconfiguredDataset: string;\n dialect: SQLDialect;\n onChange: (v: SelectableValue) => void;\n inputId?: string | undefined;\n}\n\nexport const DatasetSelector = ({\n dataset,\n db,\n dialect,\n onChange,\n inputId,\n preconfiguredDataset,\n}: DatasetSelectorProps) => {\n /*\n The behavior of this component - for MSSQL and MySQL datasources - is based on whether the user chose to create a datasource\n with or without a default database (preconfiguredDataset). If the user configured a default database, this selector\n should only allow that single preconfigured database option to be selected. If the user chose to NOT assign/configure a default database,\n then the user should be able to use this component to choose between multiple databases available to the datasource.\n */\n // `hasPreconfigCondition` is true if either 1) the sql datasource has a preconfigured default database,\n // OR if 2) the datasource is Postgres. In either case the only option available to the user is the preconfigured database.\n const hasPreconfigCondition = !!preconfiguredDataset || dialect === 'postgres';\n\n const state = useAsync(async () => {\n // If a default database is already configured for a MSSQL or MySQL data source, OR the data source is Postgres, no need to fetch other databases.\n if (hasPreconfigCondition) {\n // Set the current database to the preconfigured database.\n onChange(toOption(preconfiguredDataset));\n return [toOption(preconfiguredDataset)];\n }\n\n // If there is no preconfigured database, but there is a selected dataset, set the current database to the selected dataset.\n if (dataset) {\n onChange(toOption(dataset));\n }\n\n // Otherwise, fetch all databases available to the datasource.\n const datasets = await db.datasets();\n return datasets.map(toOption);\n }, []);\n\n return (\n <Select\n aria-label={t('grafana-sql.components.dataset-selector.aria-label-dataset-selector', 'Dataset selector')}\n inputId={inputId}\n value={dataset}\n options={state.value}\n onChange={onChange}\n disabled={state.loading}\n isLoading={state.loading}\n menuShouldPortal={true}\n />\n );\n};\n"],"names":["useAsync","toOption","jsx","Select","t"],"mappings":";;;;;;;;;;;AAiBO,MAAM,kBAAkB,CAAC;AAAA,EAC9B,OAAA;AAAA,EACA,EAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,KAA4B;AAS1B,EAAA,MAAM,qBAAA,GAAwB,CAAC,CAAC,oBAAA,IAAwB,OAAA,KAAY,UAAA;AAEpE,EAAA,MAAM,KAAA,GAAQA,kBAAS,YAAY;AAEjC,IAAA,IAAI,qBAAA,EAAuB;AAEzB,MAAA,QAAA,CAASC,cAAA,CAAS,oBAAoB,CAAC,CAAA;AACvC,MAAA,OAAO,CAACA,cAAA,CAAS,oBAAoB,CAAC,CAAA;AAAA,IACxC;AAGA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,QAAA,CAASA,cAAA,CAAS,OAAO,CAAC,CAAA;AAAA,IAC5B;AAGA,IAAA,MAAM,QAAA,GAAW,MAAM,EAAA,CAAG,QAAA,EAAS;AACnC,IAAA,OAAO,QAAA,CAAS,IAAIA,cAAQ,CAAA;AAAA,EAC9B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACEC,cAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAYC,MAAA,CAAE,qEAAA,EAAuE,kBAAkB,CAAA;AAAA,MACvG,OAAA;AAAA,MACA,KAAA,EAAO,OAAA;AAAA,MACP,SAAS,KAAA,CAAM,KAAA;AAAA,MACf,QAAA;AAAA,MACA,UAAU,KAAA,CAAM,OAAA;AAAA,MAChB,WAAW,KAAA,CAAM,OAAA;AAAA,MACjB,gBAAA,EAAkB;AAAA;AAAA,GACpB;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryEditor.cjs","sources":["../../../src/components/QueryEditor.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { QueryEditorProps } from '@grafana/data';\nimport { EditorMode } from '@grafana/plugin-ui';\nimport { Space } from '@grafana/ui';\n\nimport { SqlDatasource } from '../datasource/SqlDatasource';\nimport { applyQueryDefaults } from '../defaults';\nimport { SQLQuery, QueryRowFilter, SQLOptions } from '../types';\nimport { haveColumns } from '../utils/sql.utils';\n\nimport { QueryHeader, QueryHeaderProps } from './QueryHeader';\nimport { RawEditor } from './query-editor-raw/RawEditor';\nimport { VisualEditor } from './visual-query-builder/VisualEditor';\n\nexport interface SqlQueryEditorProps extends QueryEditorProps<SqlDatasource, SQLQuery, SQLOptions> {\n queryHeaderProps?: Pick<QueryHeaderProps, 'dialect' | 'hideRunButton' | 'hideFormatSelector'>;\n}\n\nexport default function SqlQueryEditor({\n datasource,\n query,\n onChange,\n onRunQuery,\n range,\n queryHeaderProps,\n}: SqlQueryEditorProps) {\n const [isQueryRunnable, setIsQueryRunnable] = useState(true);\n const db = datasource.getDB();\n\n const { preconfiguredDatabase } = datasource;\n const dialect = queryHeaderProps?.dialect ?? 'other';\n const { loading, error } = useAsync(async () => {\n return () => {\n if (datasource.getDB().init !== undefined) {\n datasource.getDB().init!();\n }\n };\n }, [datasource]);\n\n const queryWithDefaults = applyQueryDefaults(query);\n const [queryRowFilter, setQueryRowFilter] = useState<QueryRowFilter>({\n filter: !!queryWithDefaults.sql?.whereString,\n group: !!queryWithDefaults.sql?.groupBy?.[0]?.property.name,\n order: !!queryWithDefaults.sql?.orderBy?.property.name,\n preview: true,\n });\n const [queryToValidate, setQueryToValidate] = useState(queryWithDefaults);\n\n useEffect(() => {\n return () => {\n if (datasource.getDB().dispose !== undefined) {\n datasource.getDB().dispose!();\n }\n };\n }, [datasource]);\n\n const processQuery = useCallback(\n (q: SQLQuery) => {\n if (isQueryValid(q) && onRunQuery) {\n onRunQuery();\n }\n },\n [onRunQuery]\n );\n\n const onQueryChange = (q: SQLQuery, process = true) => {\n setQueryToValidate(q);\n onChange(q);\n\n if (haveColumns(q.sql?.columns) && q.sql?.columns.some((c) => c.name) && !queryRowFilter.group) {\n setQueryRowFilter({ ...queryRowFilter, group: true });\n }\n\n if (process) {\n processQuery(q);\n }\n };\n\n const onQueryHeaderChange = (q: SQLQuery) => {\n setQueryToValidate(q);\n onChange(q);\n };\n\n if (loading || error) {\n return null;\n }\n\n return (\n <>\n <QueryHeader\n db={db}\n preconfiguredDataset={preconfiguredDatabase}\n onChange={onQueryHeaderChange}\n onRunQuery={onRunQuery}\n onQueryRowChange={setQueryRowFilter}\n queryRowFilter={queryRowFilter}\n query={queryWithDefaults}\n isQueryRunnable={isQueryRunnable}\n hideFormatSelector={queryHeaderProps?.hideFormatSelector}\n hideRunButton={queryHeaderProps?.hideRunButton}\n dialect={dialect}\n />\n\n <Space v={0.5} />\n\n {queryWithDefaults.editorMode !== EditorMode.Code && (\n <VisualEditor\n db={db}\n query={queryWithDefaults}\n onChange={(q: SQLQuery) => onQueryChange(q, false)}\n queryRowFilter={queryRowFilter}\n onValidate={setIsQueryRunnable}\n range={range}\n />\n )}\n\n {queryWithDefaults.editorMode === EditorMode.Code && (\n <RawEditor\n db={db}\n query={queryWithDefaults}\n queryToValidate={queryToValidate}\n onChange={onQueryChange}\n onRunQuery={onRunQuery}\n onValidate={setIsQueryRunnable}\n range={range}\n />\n )}\n </>\n );\n}\n\nconst isQueryValid = (q: SQLQuery) => {\n return Boolean(q.rawSql);\n};\n"],"names":["useState","useAsync","applyQueryDefaults","useEffect","useCallback","_a","_b","haveColumns","jsxs","Fragment","jsx","QueryHeader","Space","EditorMode","VisualEditor","RawEditor"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QueryEditor.cjs","sources":["../../../src/components/QueryEditor.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { useAsync } from 'react-use';\n\nimport { type QueryEditorProps } from '@grafana/data';\nimport { EditorMode } from '@grafana/plugin-ui';\nimport { Space } from '@grafana/ui';\n\nimport { type SqlDatasource } from '../datasource/SqlDatasource';\nimport { applyQueryDefaults } from '../defaults';\nimport { type SQLQuery, type QueryRowFilter, type SQLOptions } from '../types';\nimport { haveColumns } from '../utils/sql.utils';\n\nimport { QueryHeader, type QueryHeaderProps } from './QueryHeader';\nimport { RawEditor } from './query-editor-raw/RawEditor';\nimport { VisualEditor } from './visual-query-builder/VisualEditor';\n\nexport interface SqlQueryEditorProps extends QueryEditorProps<SqlDatasource, SQLQuery, SQLOptions> {\n queryHeaderProps?: Pick<QueryHeaderProps, 'dialect' | 'hideRunButton' | 'hideFormatSelector'>;\n}\n\nexport default function SqlQueryEditor({\n datasource,\n query,\n onChange,\n onRunQuery,\n range,\n queryHeaderProps,\n}: SqlQueryEditorProps) {\n const [isQueryRunnable, setIsQueryRunnable] = useState(true);\n const db = datasource.getDB();\n\n const { preconfiguredDatabase } = datasource;\n const dialect = queryHeaderProps?.dialect ?? 'other';\n const { loading, error } = useAsync(async () => {\n return () => {\n if (datasource.getDB().init !== undefined) {\n datasource.getDB().init!();\n }\n };\n }, [datasource]);\n\n const queryWithDefaults = applyQueryDefaults(query);\n const [queryRowFilter, setQueryRowFilter] = useState<QueryRowFilter>({\n filter: !!queryWithDefaults.sql?.whereString,\n group: !!queryWithDefaults.sql?.groupBy?.[0]?.property.name,\n order: !!queryWithDefaults.sql?.orderBy?.property.name,\n preview: true,\n });\n const [queryToValidate, setQueryToValidate] = useState(queryWithDefaults);\n\n useEffect(() => {\n return () => {\n if (datasource.getDB().dispose !== undefined) {\n datasource.getDB().dispose!();\n }\n };\n }, [datasource]);\n\n const processQuery = useCallback(\n (q: SQLQuery) => {\n if (isQueryValid(q) && onRunQuery) {\n onRunQuery();\n }\n },\n [onRunQuery]\n );\n\n const onQueryChange = (q: SQLQuery, process = true) => {\n setQueryToValidate(q);\n onChange(q);\n\n if (haveColumns(q.sql?.columns) && q.sql?.columns.some((c) => c.name) && !queryRowFilter.group) {\n setQueryRowFilter({ ...queryRowFilter, group: true });\n }\n\n if (process) {\n processQuery(q);\n }\n };\n\n const onQueryHeaderChange = (q: SQLQuery) => {\n setQueryToValidate(q);\n onChange(q);\n };\n\n if (loading || error) {\n return null;\n }\n\n return (\n <>\n <QueryHeader\n db={db}\n preconfiguredDataset={preconfiguredDatabase}\n onChange={onQueryHeaderChange}\n onRunQuery={onRunQuery}\n onQueryRowChange={setQueryRowFilter}\n queryRowFilter={queryRowFilter}\n query={queryWithDefaults}\n isQueryRunnable={isQueryRunnable}\n hideFormatSelector={queryHeaderProps?.hideFormatSelector}\n hideRunButton={queryHeaderProps?.hideRunButton}\n dialect={dialect}\n />\n\n <Space v={0.5} />\n\n {queryWithDefaults.editorMode !== EditorMode.Code && (\n <VisualEditor\n db={db}\n query={queryWithDefaults}\n onChange={(q: SQLQuery) => onQueryChange(q, false)}\n queryRowFilter={queryRowFilter}\n onValidate={setIsQueryRunnable}\n range={range}\n />\n )}\n\n {queryWithDefaults.editorMode === EditorMode.Code && (\n <RawEditor\n db={db}\n query={queryWithDefaults}\n queryToValidate={queryToValidate}\n onChange={onQueryChange}\n onRunQuery={onRunQuery}\n onValidate={setIsQueryRunnable}\n range={range}\n />\n )}\n </>\n );\n}\n\nconst isQueryValid = (q: SQLQuery) => {\n return Boolean(q.rawSql);\n};\n"],"names":["useState","useAsync","applyQueryDefaults","useEffect","useCallback","_a","_b","haveColumns","jsxs","Fragment","jsx","QueryHeader","Space","EditorMode","VisualEditor","RawEditor"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryEditorLazy.cjs","sources":["../../../src/components/QueryEditorLazy.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { lazy, Suspense } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { LoadingPlaceholder, useStyles2 } from '@grafana/ui';\n\nimport type { SqlQueryEditorProps } from './QueryEditor';\nconst QueryEditor = lazy(() => import(/* webpackChunkName: \"sql-query-editor\" */ './QueryEditor'));\n\nexport function SqlQueryEditorLazy(props: SqlQueryEditorProps) {\n const styles = useStyles2(getStyles);\n\n return (\n <Suspense\n fallback={\n <LoadingPlaceholder\n text={t('grafana-sql.components.sql-query-editor-lazy.text-loading-editor', 'Loading editor')}\n className={styles.container}\n />\n }\n >\n <QueryEditor {...props} />\n </Suspense>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css({\n marginBottom: 'unset',\n marginLeft: theme.spacing(1),\n }),\n };\n};\n"],"names":["lazy","useStyles2","jsx","Suspense","LoadingPlaceholder","t","css"],"mappings":";;;;;;;;;;;;;AAQA,MAAM,WAAA,GAAcA,WAAK,MAAM;AAAA;AAAA,EAAkD;AAAe,MAAC,CAAA;AAE1F,SAAS,mBAAmB,KAAA,EAA4B;AAC7D,EAAA,MAAM,MAAA,GAASC,cAAW,SAAS,CAAA;AAEnC,EAAA,uBACEC,cAAA;AAAA,IAACC,cAAA;AAAA,IAAA;AAAA,MACC,QAAA,kBACED,cAAA;AAAA,QAACE,qBAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAMC,MAAA,CAAE,kEAAA,EAAoE,gBAAgB,CAAA;AAAA,UAC5F,WAAW,MAAA,CAAO;AAAA;AAAA,OACpB;AAAA,MAGF,QAAA,kBAAAH,cAAA,CAAC,WAAA,EAAA,EAAa,GAAG,KAAA,EAAO;AAAA;AAAA,GAC1B;AAEJ;AAEA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAyB;AAC1C,EAAA,OAAO;AAAA,IACL,WAAWI,OAAA,CAAI;AAAA,MACb,YAAA,EAAc,OAAA;AAAA,MACd,UAAA,EAAY,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA,KAC5B;AAAA,GACH;AACF,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"QueryEditorLazy.cjs","sources":["../../../src/components/QueryEditorLazy.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { lazy, Suspense } from 'react';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { t } from '@grafana/i18n';\nimport { LoadingPlaceholder, useStyles2 } from '@grafana/ui';\n\nimport type { SqlQueryEditorProps } from './QueryEditor';\nconst QueryEditor = lazy(() => import(/* webpackChunkName: \"sql-query-editor\" */ './QueryEditor'));\n\nexport function SqlQueryEditorLazy(props: SqlQueryEditorProps) {\n const styles = useStyles2(getStyles);\n\n return (\n <Suspense\n fallback={\n <LoadingPlaceholder\n text={t('grafana-sql.components.sql-query-editor-lazy.text-loading-editor', 'Loading editor')}\n className={styles.container}\n />\n }\n >\n <QueryEditor {...props} />\n </Suspense>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n container: css({\n marginBottom: 'unset',\n marginLeft: theme.spacing(1),\n }),\n };\n};\n"],"names":["lazy","useStyles2","jsx","Suspense","LoadingPlaceholder","t","css"],"mappings":";;;;;;;;;;;;;AAQA,MAAM,WAAA,GAAcA,WAAK,MAAM;AAAA;AAAA,EAAkD;AAAe,MAAC,CAAA;AAE1F,SAAS,mBAAmB,KAAA,EAA4B;AAC7D,EAAA,MAAM,MAAA,GAASC,cAAW,SAAS,CAAA;AAEnC,EAAA,uBACEC,cAAA;AAAA,IAACC,cAAA;AAAA,IAAA;AAAA,MACC,QAAA,kBACED,cAAA;AAAA,QAACE,qBAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAMC,MAAA,CAAE,kEAAA,EAAoE,gBAAgB,CAAA;AAAA,UAC5F,WAAW,MAAA,CAAO;AAAA;AAAA,OACpB;AAAA,MAGF,QAAA,kBAAAH,cAAA,CAAC,WAAA,EAAA,EAAa,GAAG,KAAA,EAAO;AAAA;AAAA,GAC1B;AAEJ;AAEA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAyB;AAC1C,EAAA,OAAO;AAAA,IACL,WAAWI,OAAA,CAAI;AAAA,MACb,YAAA,EAAc,OAAA;AAAA,MACd,UAAA,EAAY,KAAA,CAAM,OAAA,CAAQ,CAAC;AAAA,KAC5B;AAAA,GACH;AACF,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryHeader.cjs","sources":["../../../src/components/QueryHeader.tsx"],"sourcesContent":["import { useCallback, useId, useState } from 'react';\nimport { useCopyToClipboard } from 'react-use';\n\nimport { SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\nimport { EditorField, EditorHeader, EditorMode, EditorRow, FlexItem, InlineSelect } from '@grafana/plugin-ui';\nimport { reportInteraction } from '@grafana/runtime';\nimport { Button, InlineSwitch, RadioButtonGroup, Tooltip, Space } from '@grafana/ui';\n\nimport { QueryWithDefaults } from '../defaults';\nimport { SQLQuery, QueryFormat, QueryRowFilter, QUERY_FORMAT_OPTIONS, DB, SQLDialect } from '../types';\n\nimport { ConfirmModal } from './ConfirmModal';\nimport { DatasetSelector } from './DatasetSelector';\nimport { TableSelector } from './TableSelector';\n\nexport interface QueryHeaderProps {\n db: DB;\n dialect: SQLDialect;\n isQueryRunnable: boolean;\n onChange: (query: SQLQuery) => void;\n onQueryRowChange: (queryRowFilter: QueryRowFilter) => void;\n onRunQuery: () => void;\n preconfiguredDataset: string;\n query: QueryWithDefaults;\n queryRowFilter: QueryRowFilter;\n hideFormatSelector?: boolean;\n hideRunButton?: boolean;\n}\n\nexport function QueryHeader({\n db,\n dialect,\n isQueryRunnable,\n onChange,\n onQueryRowChange,\n onRunQuery,\n preconfiguredDataset,\n query,\n queryRowFilter,\n hideFormatSelector,\n hideRunButton,\n}: QueryHeaderProps) {\n const { editorMode } = query;\n const [_, copyToClipboard] = useCopyToClipboard();\n const [showConfirm, setShowConfirm] = useState(false);\n const toRawSql = db.toRawSql;\n\n const htmlId = useId();\n\n const editorModes = [\n {\n label: t('grafana-sql.components.query-header.editor-modes.label-builder', 'Builder'),\n value: EditorMode.Builder,\n },\n { label: t('grafana-sql.components.query-header.editor-modes.label-code', 'Code'), value: EditorMode.Code },\n ];\n\n const onEditorModeChange = useCallback(\n (newEditorMode: EditorMode) => {\n if (newEditorMode === EditorMode.Code) {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Code,\n });\n }\n\n if (editorMode === EditorMode.Code) {\n setShowConfirm(true);\n return;\n }\n onChange({ ...query, editorMode: newEditorMode });\n },\n [editorMode, onChange, query]\n );\n\n const onFormatChange = (e: SelectableValue) => {\n const next = { ...query, format: e.value !== undefined ? e.value : QueryFormat.Table };\n\n reportInteraction('grafana_sql_format_changed', {\n datasource: query.datasource?.type,\n selectedFormat: next.format,\n });\n onChange(next);\n };\n\n const onDatasetChange = (e: SelectableValue) => {\n if (e.value === query.dataset) {\n return;\n }\n\n const next = {\n ...query,\n dataset: e.value,\n table: undefined,\n sql: undefined,\n rawSql: '',\n };\n\n onChange(next);\n };\n\n const onTableChange = (e: SelectableValue) => {\n if (e.value === query.table) {\n return;\n }\n\n const next: SQLQuery = {\n ...query,\n table: e.value,\n sql: undefined,\n rawSql: '',\n };\n\n onChange(next);\n };\n\n const datasetDropdownIsAvailable = () => {\n if (dialect === 'influx') {\n return false;\n }\n\n return true;\n };\n\n return (\n <>\n <EditorHeader>\n {!hideFormatSelector && (\n <InlineSelect\n label={t('grafana-sql.components.query-header.label-format', 'Format')}\n value={query.format}\n placeholder={t('grafana-sql.components.query-header.placeholder-select-format', 'Select format')}\n menuShouldPortal\n onChange={onFormatChange}\n options={QUERY_FORMAT_OPTIONS}\n />\n )}\n\n {editorMode === EditorMode.Builder && (\n <>\n <InlineSwitch\n id={`sql-filter-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-filter', 'Filter')}\n data-testid={selectors.components.SQLQueryEditor.headerFilterSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.filter}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_filter_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, filter: ev.target.checked });\n }}\n />\n\n <InlineSwitch\n id={`sql-group-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-group', 'Group')}\n data-testid={selectors.components.SQLQueryEditor.headerGroupSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.group}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_group_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, group: ev.target.checked });\n }}\n />\n\n <InlineSwitch\n id={`sql-order-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-order', 'Order')}\n data-testid={selectors.components.SQLQueryEditor.headerOrderSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.order}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_order_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, order: ev.target.checked });\n }}\n />\n\n <InlineSwitch\n id={`sql-preview-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-preview', 'Preview')}\n data-testid={selectors.components.SQLQueryEditor.headerPreviewSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.preview}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_preview_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, preview: ev.target.checked });\n }}\n />\n </>\n )}\n\n <FlexItem grow={1} />\n\n {!hideRunButton &&\n (isQueryRunnable ? (\n <Button icon=\"play\" variant=\"primary\" size=\"sm\" onClick={() => onRunQuery()}>\n <Trans i18nKey=\"grafana-sql.components.query-header.run-query\">Run query</Trans>\n </Button>\n ) : (\n <Tooltip\n theme=\"error\"\n content={\n <Trans i18nKey=\"grafana-sql.components.query-header.content-invalid-query\">\n Your query is invalid. Check below for details. <br />\n However, you can still run this query.\n </Trans>\n }\n placement=\"top\"\n >\n <Button icon=\"exclamation-triangle\" variant=\"secondary\" size=\"sm\" onClick={() => onRunQuery()}>\n <Trans i18nKey=\"grafana-sql.components.query-header.run-query\">Run query</Trans>\n </Button>\n </Tooltip>\n ))}\n\n <RadioButtonGroup options={editorModes} size=\"sm\" value={editorMode} onChange={onEditorModeChange} />\n\n <ConfirmModal\n isOpen={showConfirm}\n onCopy={() => {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Builder,\n type: 'copy',\n });\n\n setShowConfirm(false);\n copyToClipboard(query.rawSql!);\n onChange({\n ...query,\n rawSql: toRawSql(query),\n editorMode: EditorMode.Builder,\n });\n }}\n onDiscard={() => {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Builder,\n type: 'discard',\n });\n\n setShowConfirm(false);\n onChange({\n ...query,\n rawSql: toRawSql(query),\n editorMode: EditorMode.Builder,\n });\n }}\n onCancel={() => {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Builder,\n type: 'cancel',\n });\n\n setShowConfirm(false);\n }}\n />\n </EditorHeader>\n\n {editorMode === EditorMode.Builder && (\n <>\n <Space v={0.5} />\n <EditorRow>\n {datasetDropdownIsAvailable() && (\n <EditorField label={t('grafana-sql.components.query-header.label-dataset', 'Dataset')} width={25}>\n <DatasetSelector\n db={db}\n inputId={`sql-dataset-${htmlId}`}\n dataset={query.dataset}\n dialect={dialect}\n preconfiguredDataset={preconfiguredDataset}\n onChange={onDatasetChange}\n />\n </EditorField>\n )}\n <EditorField label={t('grafana-sql.components.query-header.label-table', 'Table')} width={25}>\n <TableSelector\n db={db}\n inputId={`sql-tableselect-${htmlId}`}\n dataset={query.dataset || preconfiguredDataset}\n table={query.table}\n onChange={onTableChange}\n />\n </EditorField>\n </EditorRow>\n </>\n )}\n </>\n );\n}\n"],"names":["useCopyToClipboard","useState","useId","t","EditorMode","useCallback","reportInteraction","QueryFormat","jsxs","Fragment","EditorHeader","jsx","InlineSelect","QUERY_FORMAT_OPTIONS","InlineSwitch","selectors","FlexItem","Button","Trans","Tooltip","RadioButtonGroup","ConfirmModal","Space","EditorRow","EditorField","DatasetSelector","TableSelector"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QueryHeader.cjs","sources":["../../../src/components/QueryHeader.tsx"],"sourcesContent":["import { useCallback, useId, useState } from 'react';\nimport { useCopyToClipboard } from 'react-use';\n\nimport { type SelectableValue } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t, Trans } from '@grafana/i18n';\nimport { EditorField, EditorHeader, EditorMode, EditorRow, FlexItem, InlineSelect } from '@grafana/plugin-ui';\nimport { reportInteraction } from '@grafana/runtime';\nimport { Button, InlineSwitch, RadioButtonGroup, Tooltip, Space } from '@grafana/ui';\n\nimport { type QueryWithDefaults } from '../defaults';\nimport {\n type SQLQuery,\n QueryFormat,\n type QueryRowFilter,\n QUERY_FORMAT_OPTIONS,\n type DB,\n type SQLDialect,\n} from '../types';\n\nimport { ConfirmModal } from './ConfirmModal';\nimport { DatasetSelector } from './DatasetSelector';\nimport { TableSelector } from './TableSelector';\n\nexport interface QueryHeaderProps {\n db: DB;\n dialect: SQLDialect;\n isQueryRunnable: boolean;\n onChange: (query: SQLQuery) => void;\n onQueryRowChange: (queryRowFilter: QueryRowFilter) => void;\n onRunQuery: () => void;\n preconfiguredDataset: string;\n query: QueryWithDefaults;\n queryRowFilter: QueryRowFilter;\n hideFormatSelector?: boolean;\n hideRunButton?: boolean;\n}\n\nexport function QueryHeader({\n db,\n dialect,\n isQueryRunnable,\n onChange,\n onQueryRowChange,\n onRunQuery,\n preconfiguredDataset,\n query,\n queryRowFilter,\n hideFormatSelector,\n hideRunButton,\n}: QueryHeaderProps) {\n const { editorMode } = query;\n const [_, copyToClipboard] = useCopyToClipboard();\n const [showConfirm, setShowConfirm] = useState(false);\n const toRawSql = db.toRawSql;\n\n const htmlId = useId();\n\n const editorModes = [\n {\n label: t('grafana-sql.components.query-header.editor-modes.label-builder', 'Builder'),\n value: EditorMode.Builder,\n },\n { label: t('grafana-sql.components.query-header.editor-modes.label-code', 'Code'), value: EditorMode.Code },\n ];\n\n const onEditorModeChange = useCallback(\n (newEditorMode: EditorMode) => {\n if (newEditorMode === EditorMode.Code) {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Code,\n });\n }\n\n if (editorMode === EditorMode.Code) {\n setShowConfirm(true);\n return;\n }\n onChange({ ...query, editorMode: newEditorMode });\n },\n [editorMode, onChange, query]\n );\n\n const onFormatChange = (e: SelectableValue) => {\n const next = { ...query, format: e.value !== undefined ? e.value : QueryFormat.Table };\n\n reportInteraction('grafana_sql_format_changed', {\n datasource: query.datasource?.type,\n selectedFormat: next.format,\n });\n onChange(next);\n };\n\n const onDatasetChange = (e: SelectableValue) => {\n if (e.value === query.dataset) {\n return;\n }\n\n const next = {\n ...query,\n dataset: e.value,\n table: undefined,\n sql: undefined,\n rawSql: '',\n };\n\n onChange(next);\n };\n\n const onTableChange = (e: SelectableValue) => {\n if (e.value === query.table) {\n return;\n }\n\n const next: SQLQuery = {\n ...query,\n table: e.value,\n sql: undefined,\n rawSql: '',\n };\n\n onChange(next);\n };\n\n const datasetDropdownIsAvailable = () => {\n if (dialect === 'influx') {\n return false;\n }\n\n return true;\n };\n\n return (\n <>\n <EditorHeader>\n {!hideFormatSelector && (\n <InlineSelect\n label={t('grafana-sql.components.query-header.label-format', 'Format')}\n value={query.format}\n placeholder={t('grafana-sql.components.query-header.placeholder-select-format', 'Select format')}\n menuShouldPortal\n onChange={onFormatChange}\n options={QUERY_FORMAT_OPTIONS}\n />\n )}\n\n {editorMode === EditorMode.Builder && (\n <>\n <InlineSwitch\n id={`sql-filter-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-filter', 'Filter')}\n data-testid={selectors.components.SQLQueryEditor.headerFilterSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.filter}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_filter_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, filter: ev.target.checked });\n }}\n />\n\n <InlineSwitch\n id={`sql-group-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-group', 'Group')}\n data-testid={selectors.components.SQLQueryEditor.headerGroupSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.group}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_group_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, group: ev.target.checked });\n }}\n />\n\n <InlineSwitch\n id={`sql-order-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-order', 'Order')}\n data-testid={selectors.components.SQLQueryEditor.headerOrderSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.order}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_order_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, order: ev.target.checked });\n }}\n />\n\n <InlineSwitch\n id={`sql-preview-${htmlId}`}\n label={t('grafana-sql.components.query-header.label-preview', 'Preview')}\n data-testid={selectors.components.SQLQueryEditor.headerPreviewSwitch}\n transparent={true}\n showLabel={true}\n value={queryRowFilter.preview}\n onChange={(ev) => {\n if (!(ev.target instanceof HTMLInputElement)) {\n return;\n }\n\n reportInteraction('grafana_sql_preview_toggled', {\n datasource: query.datasource?.type,\n displayed: ev.target.checked,\n });\n\n onQueryRowChange({ ...queryRowFilter, preview: ev.target.checked });\n }}\n />\n </>\n )}\n\n <FlexItem grow={1} />\n\n {!hideRunButton &&\n (isQueryRunnable ? (\n <Button icon=\"play\" variant=\"primary\" size=\"sm\" onClick={() => onRunQuery()}>\n <Trans i18nKey=\"grafana-sql.components.query-header.run-query\">Run query</Trans>\n </Button>\n ) : (\n <Tooltip\n theme=\"error\"\n content={\n <Trans i18nKey=\"grafana-sql.components.query-header.content-invalid-query\">\n Your query is invalid. Check below for details. <br />\n However, you can still run this query.\n </Trans>\n }\n placement=\"top\"\n >\n <Button icon=\"exclamation-triangle\" variant=\"secondary\" size=\"sm\" onClick={() => onRunQuery()}>\n <Trans i18nKey=\"grafana-sql.components.query-header.run-query\">Run query</Trans>\n </Button>\n </Tooltip>\n ))}\n\n <RadioButtonGroup options={editorModes} size=\"sm\" value={editorMode} onChange={onEditorModeChange} />\n\n <ConfirmModal\n isOpen={showConfirm}\n onCopy={() => {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Builder,\n type: 'copy',\n });\n\n setShowConfirm(false);\n copyToClipboard(query.rawSql!);\n onChange({\n ...query,\n rawSql: toRawSql(query),\n editorMode: EditorMode.Builder,\n });\n }}\n onDiscard={() => {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Builder,\n type: 'discard',\n });\n\n setShowConfirm(false);\n onChange({\n ...query,\n rawSql: toRawSql(query),\n editorMode: EditorMode.Builder,\n });\n }}\n onCancel={() => {\n reportInteraction('grafana_sql_editor_mode_changed', {\n datasource: query.datasource?.type,\n selectedEditorMode: EditorMode.Builder,\n type: 'cancel',\n });\n\n setShowConfirm(false);\n }}\n />\n </EditorHeader>\n\n {editorMode === EditorMode.Builder && (\n <>\n <Space v={0.5} />\n <EditorRow>\n {datasetDropdownIsAvailable() && (\n <EditorField label={t('grafana-sql.components.query-header.label-dataset', 'Dataset')} width={25}>\n <DatasetSelector\n db={db}\n inputId={`sql-dataset-${htmlId}`}\n dataset={query.dataset}\n dialect={dialect}\n preconfiguredDataset={preconfiguredDataset}\n onChange={onDatasetChange}\n />\n </EditorField>\n )}\n <EditorField label={t('grafana-sql.components.query-header.label-table', 'Table')} width={25}>\n <TableSelector\n db={db}\n inputId={`sql-tableselect-${htmlId}`}\n dataset={query.dataset || preconfiguredDataset}\n table={query.table}\n onChange={onTableChange}\n />\n </EditorField>\n </EditorRow>\n </>\n )}\n </>\n );\n}\n"],"names":["useCopyToClipboard","useState","useId","t","EditorMode","useCallback","reportInteraction","QueryFormat","jsxs","Fragment","EditorHeader","jsx","InlineSelect","QUERY_FORMAT_OPTIONS","InlineSwitch","selectors","FlexItem","Button","Trans","Tooltip","RadioButtonGroup","ConfirmModal","Space","EditorRow","EditorField","DatasetSelector","TableSelector"],"mappings":";;;;;;;;;;;;;;;;;;AAsCO,SAAS,WAAA,CAAY;AAAA,EAC1B,EAAA;AAAA,EACA,OAAA;AAAA,EACA,eAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,UAAA;AAAA,EACA,oBAAA;AAAA,EACA,KAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,MAAM,EAAE,YAAW,GAAI,KAAA;AACvB,EAAA,MAAM,CAAC,CAAA,EAAG,eAAe,CAAA,GAAIA,2BAAA,EAAmB;AAChD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIC,eAAS,KAAK,CAAA;AACpD,EAAA,MAAM,WAAW,EAAA,CAAG,QAAA;AAEpB,EAAA,MAAM,SAASC,WAAA,EAAM;AAErB,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB;AAAA,MACE,KAAA,EAAOC,MAAA,CAAE,gEAAA,EAAkE,SAAS,CAAA;AAAA,MACpF,OAAOC,mBAAA,CAAW;AAAA,KACpB;AAAA,IACA,EAAE,OAAOD,MAAA,CAAE,6DAAA,EAA+D,MAAM,CAAA,EAAG,KAAA,EAAOC,oBAAW,IAAA;AAAK,GAC5G;AAEA,EAAA,MAAM,kBAAA,GAAqBC,iBAAA;AAAA,IACzB,CAAC,aAAA,KAA8B;AAnEnC,MAAA,IAAA,EAAA;AAoEM,MAAA,IAAI,aAAA,KAAkBD,oBAAW,IAAA,EAAM;AACrC,QAAAE,yBAAA,CAAkB,iCAAA,EAAmC;AAAA,UACnD,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,CAAM,UAAA,KAAN,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,IAAA;AAAA,UAC9B,oBAAoBF,mBAAA,CAAW;AAAA,SAChC,CAAA;AAAA,MACH;AAEA,MAAA,IAAI,UAAA,KAAeA,oBAAW,IAAA,EAAM;AAClC,QAAA,cAAA,CAAe,IAAI,CAAA;AACnB,QAAA;AAAA,MACF;AACA,MAAA,QAAA,CAAS,EAAE,GAAG,KAAA,EAAO,UAAA,EAAY,eAAe,CAAA;AAAA,IAClD,CAAA;AAAA,IACA,CAAC,UAAA,EAAY,QAAA,EAAU,KAAK;AAAA,GAC9B;AAEA,EAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAuB;AApFjD,IAAA,IAAA,EAAA;AAqFI,IAAA,MAAM,IAAA,GAAO,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,CAAA,CAAE,KAAA,KAAU,KAAA,CAAA,GAAY,CAAA,CAAE,KAAA,GAAQG,iBAAA,CAAY,KAAA,EAAM;AAErF,IAAAD,yBAAA,CAAkB,4BAAA,EAA8B;AAAA,MAC9C,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,CAAM,UAAA,KAAN,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,IAAA;AAAA,MAC9B,gBAAgB,IAAA,CAAK;AAAA,KACtB,CAAA;AACD,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,eAAA,GAAkB,CAAC,CAAA,KAAuB;AAC9C,IAAA,IAAI,CAAA,CAAE,KAAA,KAAU,KAAA,CAAM,OAAA,EAAS;AAC7B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,GAAG,KAAA;AAAA,MACH,SAAS,CAAA,CAAE,KAAA;AAAA,MACX,KAAA,EAAO,KAAA,CAAA;AAAA,MACP,GAAA,EAAK,KAAA,CAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAuB;AAC5C,IAAA,IAAI,CAAA,CAAE,KAAA,KAAU,KAAA,CAAM,KAAA,EAAO;AAC3B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAiB;AAAA,MACrB,GAAG,KAAA;AAAA,MACH,OAAO,CAAA,CAAE,KAAA;AAAA,MACT,GAAA,EAAK,KAAA,CAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,6BAA6B,MAAM;AACvC,IAAA,IAAI,YAAY,QAAA,EAAU;AACxB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AAEA,EAAA,uBACEE,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAD,eAAA,CAACE,qBAAA,EAAA,EACE,QAAA,EAAA;AAAA,MAAA,CAAC,kBAAA,oBACAC,cAAA;AAAA,QAACC,qBAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAOT,MAAA,CAAE,kDAAA,EAAoD,QAAQ,CAAA;AAAA,UACrE,OAAO,KAAA,CAAM,MAAA;AAAA,UACb,WAAA,EAAaA,MAAA,CAAE,+DAAA,EAAiE,eAAe,CAAA;AAAA,UAC/F,gBAAA,EAAgB,IAAA;AAAA,UAChB,QAAA,EAAU,cAAA;AAAA,UACV,OAAA,EAASU;AAAA;AAAA,OACX;AAAA,MAGD,UAAA,KAAeT,mBAAA,CAAW,OAAA,oBACzBI,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,wBAAAE,cAAA;AAAA,UAACG,eAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,cAAc,MAAM,CAAA,CAAA;AAAA,YACxB,KAAA,EAAOX,MAAA,CAAE,kDAAA,EAAoD,QAAQ,CAAA;AAAA,YACrE,aAAA,EAAaY,sBAAA,CAAU,UAAA,CAAW,cAAA,CAAe,kBAAA;AAAA,YACjD,WAAA,EAAa,IAAA;AAAA,YACb,SAAA,EAAW,IAAA;AAAA,YACX,OAAO,cAAA,CAAe,MAAA;AAAA,YACtB,QAAA,EAAU,CAAC,EAAA,KAAO;AA5JhC,cAAA,IAAA,EAAA;AA6JgB,cAAA,IAAI,EAAE,EAAA,CAAG,MAAA,YAAkB,gBAAA,CAAA,EAAmB;AAC5C,gBAAA;AAAA,cACF;AAEA,cAAAT,yBAAA,CAAkB,4BAAA,EAA8B;AAAA,gBAC9C,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,CAAM,UAAA,KAAN,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,IAAA;AAAA,gBAC9B,SAAA,EAAW,GAAG,MAAA,CAAO;AAAA,eACtB,CAAA;AAED,cAAA,gBAAA,CAAiB,EAAE,GAAG,cAAA,EAAgB,QAAQ,EAAA,CAAG,MAAA,CAAO,SAAS,CAAA;AAAA,YACnE;AAAA;AAAA,SACF;AAAA,wBAEAK,cAAA;AAAA,UAACG,eAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,aAAa,MAAM,CAAA,CAAA;AAAA,YACvB,KAAA,EAAOX,MAAA,CAAE,iDAAA,EAAmD,OAAO,CAAA;AAAA,YACnE,aAAA,EAAaY,sBAAA,CAAU,UAAA,CAAW,cAAA,CAAe,iBAAA;AAAA,YACjD,WAAA,EAAa,IAAA;AAAA,YACb,SAAA,EAAW,IAAA;AAAA,YACX,OAAO,cAAA,CAAe,KAAA;AAAA,YACtB,QAAA,EAAU,CAAC,EAAA,KAAO;AAjLhC,cAAA,IAAA,EAAA;AAkLgB,cAAA,IAAI,EAAE,EAAA,CAAG,MAAA,YAAkB,gBAAA,CAAA,EAAmB;AAC5C,gBAAA;AAAA,cACF;AAEA,cAAAT,yBAAA,CAAkB,2BAAA,EAA6B;AAAA,gBAC7C,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,CAAM,UAAA,KAAN,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,IAAA;AAAA,gBAC9B,SAAA,EAAW,GAAG,MAAA,CAAO;AAAA,eACtB,CAAA;AAED,cAAA,gBAAA,CAAiB,EAAE,GAAG,cAAA,EAAgB,OAAO,EAAA,CAAG,MAAA,CAAO,SAAS,CAAA;AAAA,YAClE;AAAA;AAAA,SACF;AAAA,wBAEAK,cAAA;AAAA,UAACG,eAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,aAAa,MAAM,CAAA,CAAA;AAAA,YACvB,KAAA,EAAOX,MAAA,CAAE,iDAAA,EAAmD,OAAO,CAAA;AAAA,YACnE,aAAA,EAAaY,sBAAA,CAAU,UAAA,CAAW,cAAA,CAAe,iBAAA;AAAA,YACjD,WAAA,EAAa,IAAA;AAAA,YACb,SAAA,EAAW,IAAA;AAAA,YACX,OAAO,cAAA,CAAe,KAAA;AAAA,YACtB,QAAA,EAAU,CAAC,EAAA,KAAO;AAtMhC,cAAA,IAAA,EAAA;AAuMgB,cAAA,IAAI,EAAE,EAAA,CAAG,MAAA,YAAkB,gBAAA,CAAA,EAAmB;AAC5C,gBAAA;AAAA,cACF;AAEA,cAAAT,yBAAA,CAAkB,2BAAA,EAA6B;AAAA,gBAC7C,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,CAAM,UAAA,KAAN,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,IAAA;AAAA,gBAC9B,SAAA,EAAW,GAAG,MAAA,CAAO;AAAA,eACtB,CAAA;AAED,cAAA,gBAAA,CAAiB,EAAE,GAAG,cAAA,EAAgB,OAAO,EAAA,CAAG,MAAA,CAAO,SAAS,CAAA;AAAA,YAClE;AAAA;AAAA,SACF;AAAA,wBAEAK,cAAA;AAAA,UAACG,eAAA;AAAA,UAAA;AAAA,YACC,EAAA,EAAI,eAAe,MAAM,CAAA,CAAA;AAAA,YACzB,KAAA,EAAOX,MAAA,CAAE,mDAAA,EAAqD,SAAS,CAAA;AAAA,YACvE,aAAA,EAAaY,sBAAA,CAAU,UAAA,CAAW,cAAA,CAAe,mBAAA;AAAA,YACjD,WAAA,EAAa,IAAA;AAAA,YACb,SAAA,EAAW,IAAA;AAAA,YACX,OAAO,cAAA,CAAe,OAAA;AAAA,YACtB,QAAA,EAAU,CAAC,EAAA,KAAO;AA3NhC,cAAA,IAAA,EAAA;AA4NgB,cAAA,IAAI,EAAE,EAAA,CAAG,MAAA,YAAkB,gBAAA,CAAA,EAAmB;AAC5C,gBAAA;AAAA,cACF;AAEA,cAAAT,yBAAA,CAAkB,6BAAA,EAA+B;AAAA,gBAC/C,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,CAAM,UAAA,KAAN,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,IAAA;AAAA,gBAC9B,SAAA,EAAW,GAAG,MAAA,CAAO;AAAA,eACtB,CAAA;AAED,cAAA,gBAAA,CAAiB,EAAE,GAAG,cAAA,EAAgB,SAAS,EAAA,CAAG,MAAA,CAAO,SAAS,CAAA;AAAA,YACpE;AAAA;AAAA;AACF,OAAA,EACF,CAAA;AAAA,sBAGFK,cAAA,CAACK,iBAAA,EAAA,EAAS,IAAA,EAAM,CAAA,EAAG,CAAA;AAAA,MAElB,CAAC,kBACC,eAAA,mBACCL,cAAA,CAACM,aAAO,IAAA,EAAK,MAAA,EAAO,SAAQ,SAAA,EAAU,IAAA,EAAK,MAAK,OAAA,EAAS,MAAM,YAAW,EACxE,QAAA,kBAAAN,cAAA,CAACO,cAAM,OAAA,EAAQ,+CAAA,EAAgD,QAAA,EAAA,WAAA,EAAS,CAAA,EAC1E,CAAA,mBAEAP,cAAA;AAAA,QAACQ,UAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAM,OAAA;AAAA,UACN,OAAA,kBACEX,eAAA,CAACU,UAAA,EAAA,EAAM,OAAA,EAAQ,2DAAA,EAA4D,QAAA,EAAA;AAAA,YAAA,kDAAA;AAAA,2CACxB,IAAA,EAAA,EAAG,CAAA;AAAA,YAAE;AAAA,WAAA,EAExD,CAAA;AAAA,UAEF,SAAA,EAAU,KAAA;AAAA,UAEV,yCAACD,SAAA,EAAA,EAAO,IAAA,EAAK,sBAAA,EAAuB,OAAA,EAAQ,aAAY,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,MAAM,YAAW,EAC1F,QAAA,kBAAAN,cAAA,CAACO,cAAM,OAAA,EAAQ,+CAAA,EAAgD,uBAAS,CAAA,EAC1E;AAAA;AAAA,OACF,CAAA;AAAA,sBAGJP,cAAA,CAACS,uBAAiB,OAAA,EAAS,WAAA,EAAa,MAAK,IAAA,EAAK,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,kBAAA,EAAoB,CAAA;AAAA,sBAEnGT,cAAA;AAAA,QAACU,yBAAA;AAAA,QAAA;AAAA,UACC,MAAA,EAAQ,WAAA;AAAA,UACR,QAAQ,MAAM;AAvQxB,YAAA,IAAA,EAAA;AAwQY,YAAAf,yBAAA,CAAkB,iCAAA,EAAmC;AAAA,cACnD,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,CAAM,UAAA,KAAN,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,IAAA;AAAA,cAC9B,oBAAoBF,mBAAA,CAAW,OAAA;AAAA,cAC/B,IAAA,EAAM;AAAA,aACP,CAAA;AAED,YAAA,cAAA,CAAe,KAAK,CAAA;AACpB,YAAA,eAAA,CAAgB,MAAM,MAAO,CAAA;AAC7B,YAAA,QAAA,CAAS;AAAA,cACP,GAAG,KAAA;AAAA,cACH,MAAA,EAAQ,SAAS,KAAK,CAAA;AAAA,cACtB,YAAYA,mBAAA,CAAW;AAAA,aACxB,CAAA;AAAA,UACH,CAAA;AAAA,UACA,WAAW,MAAM;AAtR3B,YAAA,IAAA,EAAA;AAuRY,YAAAE,yBAAA,CAAkB,iCAAA,EAAmC;AAAA,cACnD,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,CAAM,UAAA,KAAN,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,IAAA;AAAA,cAC9B,oBAAoBF,mBAAA,CAAW,OAAA;AAAA,cAC/B,IAAA,EAAM;AAAA,aACP,CAAA;AAED,YAAA,cAAA,CAAe,KAAK,CAAA;AACpB,YAAA,QAAA,CAAS;AAAA,cACP,GAAG,KAAA;AAAA,cACH,MAAA,EAAQ,SAAS,KAAK,CAAA;AAAA,cACtB,YAAYA,mBAAA,CAAW;AAAA,aACxB,CAAA;AAAA,UACH,CAAA;AAAA,UACA,UAAU,MAAM;AApS1B,YAAA,IAAA,EAAA;AAqSY,YAAAE,yBAAA,CAAkB,iCAAA,EAAmC;AAAA,cACnD,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,CAAM,UAAA,KAAN,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAkB,IAAA;AAAA,cAC9B,oBAAoBF,mBAAA,CAAW,OAAA;AAAA,cAC/B,IAAA,EAAM;AAAA,aACP,CAAA;AAED,YAAA,cAAA,CAAe,KAAK,CAAA;AAAA,UACtB;AAAA;AAAA;AACF,KAAA,EACF,CAAA;AAAA,IAEC,UAAA,KAAeA,mBAAA,CAAW,OAAA,oBACzBI,eAAA,CAAAC,mBAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAE,cAAA,CAACW,QAAA,EAAA,EAAM,GAAG,GAAA,EAAK,CAAA;AAAA,sCACdC,kBAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,0BAAA,EAA2B,mCACzBC,oBAAA,EAAA,EAAY,KAAA,EAAOrB,OAAE,mDAAA,EAAqD,SAAS,CAAA,EAAG,KAAA,EAAO,EAAA,EAC5F,QAAA,kBAAAQ,cAAA;AAAA,UAACc,+BAAA;AAAA,UAAA;AAAA,YACC,EAAA;AAAA,YACA,OAAA,EAAS,eAAe,MAAM,CAAA,CAAA;AAAA,YAC9B,SAAS,KAAA,CAAM,OAAA;AAAA,YACf,OAAA;AAAA,YACA,oBAAA;AAAA,YACA,QAAA,EAAU;AAAA;AAAA,SACZ,EACF,CAAA;AAAA,wBAEFd,cAAA,CAACa,wBAAY,KAAA,EAAOrB,MAAA,CAAE,mDAAmD,OAAO,CAAA,EAAG,OAAO,EAAA,EACxF,QAAA,kBAAAQ,cAAA;AAAA,UAACe,2BAAA;AAAA,UAAA;AAAA,YACC,EAAA;AAAA,YACA,OAAA,EAAS,mBAAmB,MAAM,CAAA,CAAA;AAAA,YAClC,OAAA,EAAS,MAAM,OAAA,IAAW,oBAAA;AAAA,YAC1B,OAAO,KAAA,CAAM,KAAA;AAAA,YACb,QAAA,EAAU;AAAA;AAAA,SACZ,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableSelector.cjs","sources":["../../../src/components/TableSelector.tsx"],"sourcesContent":["import { useAsync } from 'react-use';\n\nimport { SelectableValue, toOption } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { Select } from '@grafana/ui';\n\nimport { DB, ResourceSelectorProps } from '../types';\n\nexport interface TableSelectorProps extends ResourceSelectorProps {\n db: DB;\n table: string | undefined;\n dataset: string | undefined;\n onChange: (v: SelectableValue) => void;\n inputId?: string | undefined;\n}\n\nexport const TableSelector = ({ db, dataset, table, className, onChange, inputId }: TableSelectorProps) => {\n const state = useAsync(async () => {\n // No need to attempt to fetch tables for an unknown dataset.\n if (!dataset) {\n return [];\n }\n\n const tables = await db.tables(dataset);\n return tables.map(toOption);\n }, [dataset]);\n\n return (\n <Select\n className={className}\n disabled={state.loading}\n aria-label={t('grafana-sql.components.table-selector.aria-label-table-selector', 'Table selector')}\n inputId={inputId}\n data-testid={selectors.components.SQLQueryEditor.headerTableSelector}\n value={table}\n options={state.value}\n onChange={onChange}\n isLoading={state.loading}\n menuShouldPortal={true}\n placeholder={\n state.loading\n ? t('grafana-sql.components.table-selector.placeholder-loading', 'Loading tables')\n : t('grafana-sql.components.table-selector.placeholder-select-table', 'Select table')\n }\n allowCustomValue={true}\n />\n );\n};\n"],"names":["useAsync","toOption","jsx","Select","t","selectors"],"mappings":";;;;;;;;;;;;AAiBO,MAAM,aAAA,GAAgB,CAAC,EAAE,EAAA,EAAI,SAAS,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,OAAA,EAAQ,KAA0B;AACzG,EAAA,MAAM,KAAA,GAAQA,kBAAS,YAAY;AAEjC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,MAAA,CAAO,OAAO,CAAA;AACtC,IAAA,OAAO,MAAA,CAAO,IAAIC,aAAQ,CAAA;AAAA,EAC5B,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,uBACEC,cAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,UAAU,KAAA,CAAM,OAAA;AAAA,MAChB,YAAA,EAAYC,MAAA,CAAE,iEAAA,EAAmE,gBAAgB,CAAA;AAAA,MACjG,OAAA;AAAA,MACA,aAAA,EAAaC,sBAAA,CAAU,UAAA,CAAW,cAAA,CAAe,mBAAA;AAAA,MACjD,KAAA,EAAO,KAAA;AAAA,MACP,SAAS,KAAA,CAAM,KAAA;AAAA,MACf,QAAA;AAAA,MACA,WAAW,KAAA,CAAM,OAAA;AAAA,MACjB,gBAAA,EAAkB,IAAA;AAAA,MAClB,WAAA,EACE,MAAM,OAAA,GACFD,MAAA,CAAE,6DAA6D,gBAAgB,CAAA,GAC/EA,MAAA,CAAE,gEAAA,EAAkE,cAAc,CAAA;AAAA,MAExF,gBAAA,EAAkB;AAAA;AAAA,GACpB;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"TableSelector.cjs","sources":["../../../src/components/TableSelector.tsx"],"sourcesContent":["import { useAsync } from 'react-use';\n\nimport { type SelectableValue, toOption } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from '@grafana/i18n';\nimport { Select } from '@grafana/ui';\n\nimport { type DB, type ResourceSelectorProps } from '../types';\n\nexport interface TableSelectorProps extends ResourceSelectorProps {\n db: DB;\n table: string | undefined;\n dataset: string | undefined;\n onChange: (v: SelectableValue) => void;\n inputId?: string | undefined;\n}\n\nexport const TableSelector = ({ db, dataset, table, className, onChange, inputId }: TableSelectorProps) => {\n const state = useAsync(async () => {\n // No need to attempt to fetch tables for an unknown dataset.\n if (!dataset) {\n return [];\n }\n\n const tables = await db.tables(dataset);\n return tables.map(toOption);\n }, [dataset]);\n\n return (\n <Select\n className={className}\n disabled={state.loading}\n aria-label={t('grafana-sql.components.table-selector.aria-label-table-selector', 'Table selector')}\n inputId={inputId}\n data-testid={selectors.components.SQLQueryEditor.headerTableSelector}\n value={table}\n options={state.value}\n onChange={onChange}\n isLoading={state.loading}\n menuShouldPortal={true}\n placeholder={\n state.loading\n ? t('grafana-sql.components.table-selector.placeholder-loading', 'Loading tables')\n : t('grafana-sql.components.table-selector.placeholder-select-table', 'Select table')\n }\n allowCustomValue={true}\n />\n );\n};\n"],"names":["useAsync","toOption","jsx","Select","t","selectors"],"mappings":";;;;;;;;;;;;AAiBO,MAAM,aAAA,GAAgB,CAAC,EAAE,EAAA,EAAI,SAAS,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,OAAA,EAAQ,KAA0B;AACzG,EAAA,MAAM,KAAA,GAAQA,kBAAS,YAAY;AAEjC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,EAAA,CAAG,MAAA,CAAO,OAAO,CAAA;AACtC,IAAA,OAAO,MAAA,CAAO,IAAIC,aAAQ,CAAA;AAAA,EAC5B,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,uBACEC,cAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,UAAU,KAAA,CAAM,OAAA;AAAA,MAChB,YAAA,EAAYC,MAAA,CAAE,iEAAA,EAAmE,gBAAgB,CAAA;AAAA,MACjG,OAAA;AAAA,MACA,aAAA,EAAaC,sBAAA,CAAU,UAAA,CAAW,cAAA,CAAe,mBAAA;AAAA,MACjD,KAAA,EAAO,KAAA;AAAA,MACP,SAAS,KAAA,CAAM,KAAA;AAAA,MACf,QAAA;AAAA,MACA,WAAW,KAAA,CAAM,OAAA;AAAA,MACjB,gBAAA,EAAkB,IAAA;AAAA,MAClB,WAAA,EACE,MAAM,OAAA,GACFD,MAAA,CAAE,6DAA6D,gBAAgB,CAAA,GAC/EA,MAAA,CAAE,gEAAA,EAAkE,cAAc,CAAA;AAAA,MAExF,gBAAA,EAAkB;AAAA;AAAA,GACpB;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConnectionLimits.cjs","sources":["../../../../src/components/configuration/ConnectionLimits.tsx"],"sourcesContent":["import { DataSourceSettings } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\nimport { ConfigSubSection } from '@grafana/plugin-ui';\nimport { config } from '@grafana/runtime';\nimport { Field, Icon, InlineLabel, Label, Stack, Switch, Tooltip } from '@grafana/ui';\n\nimport { SQLConnectionLimits, SQLOptions } from '../../types';\n\nimport { MaxLifetimeField } from './MaxLifetimeField';\nimport { MaxOpenConnectionsField } from './MaxOpenConnectionsField';\nimport { NumberInput } from './NumberInput';\n\ninterface Props<T> {\n onOptionsChange: Function;\n options: DataSourceSettings<SQLOptions>;\n}\n\nexport const ConnectionLimits = <T extends SQLConnectionLimits>(props: Props<T>) => {\n const { onOptionsChange, options } = props;\n const jsonData = options.jsonData;\n const autoIdle = jsonData.maxIdleConnsAuto !== undefined ? jsonData.maxIdleConnsAuto : false;\n\n // Update JSON data with new values\n const updateJsonData = (values: {}) => {\n const newOpts = {\n ...options,\n jsonData: {\n ...jsonData,\n ...values,\n },\n };\n\n return onOptionsChange(newOpts);\n };\n\n // For the case of idle connections and connection lifetime\n // use a shared function to update respective properties\n const onJSONDataNumberChanged = (property: keyof SQLConnectionLimits) => {\n return (number?: number) => {\n updateJsonData({ [property]: number });\n };\n };\n\n // When the maximum number of connections is changed\n // see if we have the automatic idle option enabled\n const onMaxConnectionsChanged = (number?: number) => {\n if (autoIdle && number) {\n updateJsonData({\n maxOpenConns: number,\n maxIdleConns: number,\n });\n } else {\n updateJsonData({\n maxOpenConns: number,\n });\n }\n };\n\n // Update auto idle setting when control is toggled\n // and set minimum idle connections if automatic\n // is selected\n const onConnectionIdleAutoChanged = () => {\n let idleConns = undefined;\n let maxConns = undefined;\n\n // If the maximum number of open connections is undefined\n // and we're setting auto idle then set the default amount\n // otherwise take the numeric amount and get the value from that\n if (!autoIdle) {\n if (jsonData.maxOpenConns !== undefined) {\n maxConns = jsonData.maxOpenConns;\n idleConns = jsonData.maxOpenConns;\n }\n } else {\n maxConns = jsonData.maxOpenConns;\n idleConns = jsonData.maxIdleConns;\n }\n\n updateJsonData({\n maxIdleConnsAuto: !autoIdle,\n maxIdleConns: idleConns,\n maxOpenConns: maxConns,\n });\n };\n\n const labelWidth = 40;\n\n return (\n <ConfigSubSection\n title={t('grafana-sql.components.connection-limits.title-connection-limits', 'Connection limits')}\n >\n <Stack direction=\"column\" gap={2}>\n <MaxOpenConnectionsField\n labelWidth={labelWidth}\n onMaxConnectionsChanged={onMaxConnectionsChanged}\n jsonData={jsonData}\n />\n\n <Field\n noMargin\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.auto-max-idle\">Auto max idle</Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans\n i18nKey=\"grafana-sql.components.connection-limits.content-auto-max-idle\"\n values={{ defaultMaxIdle: config.sqlConnectionLimits.maxIdleConns }}\n >\n If enabled, automatically set the number of <i>Maximum idle connections</i> to the same value as\n <i> Max open connections</i>. If the number of maximum open connections is not set it will be\n set to the default ({'{{defaultMaxIdle}}'}).\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <Switch value={autoIdle} onChange={onConnectionIdleAutoChanged} />\n </Field>\n\n <Field\n noMargin\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.max-idle\">Max idle</Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.content-max-idle\">\n The maximum number of connections in the idle connection pool.If <i>Max open connections</i> is\n greater than 0 but less than the <i>Max idle connections</i>, then the{' '}\n <i>Max idle connections</i> will be reduced to match the <i>Max open connections</i> limit. If\n set to 0, no idle connections are retained.\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n {autoIdle ? (\n <InlineLabel width={labelWidth}>{options.jsonData.maxIdleConns}</InlineLabel>\n ) : (\n <NumberInput\n value={jsonData.maxIdleConns}\n defaultValue={config.sqlConnectionLimits.maxIdleConns}\n onChange={(value) => {\n onJSONDataNumberChanged('maxIdleConns')(value);\n }}\n width={labelWidth}\n />\n )}\n </Field>\n\n <MaxLifetimeField\n labelWidth={labelWidth}\n onMaxLifetimeChanged={onJSONDataNumberChanged('connMaxLifetime')}\n jsonData={jsonData}\n />\n </Stack>\n </ConfigSubSection>\n );\n};\n"],"names":["jsx","ConfigSubSection","t","jsxs","Stack","MaxOpenConnectionsField","Field","Label","Trans","Tooltip","config","Icon","Switch","InlineLabel","NumberInput","MaxLifetimeField"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ConnectionLimits.cjs","sources":["../../../../src/components/configuration/ConnectionLimits.tsx"],"sourcesContent":["import { type DataSourceSettings } from '@grafana/data';\nimport { t, Trans } from '@grafana/i18n';\nimport { ConfigSubSection } from '@grafana/plugin-ui';\nimport { config } from '@grafana/runtime';\nimport { Field, Icon, InlineLabel, Label, Stack, Switch, Tooltip } from '@grafana/ui';\n\nimport { type SQLConnectionLimits, type SQLOptions } from '../../types';\n\nimport { MaxLifetimeField } from './MaxLifetimeField';\nimport { MaxOpenConnectionsField } from './MaxOpenConnectionsField';\nimport { NumberInput } from './NumberInput';\n\ninterface Props<T> {\n onOptionsChange: Function;\n options: DataSourceSettings<SQLOptions>;\n}\n\nexport const ConnectionLimits = <T extends SQLConnectionLimits>(props: Props<T>) => {\n const { onOptionsChange, options } = props;\n const jsonData = options.jsonData;\n const autoIdle = jsonData.maxIdleConnsAuto !== undefined ? jsonData.maxIdleConnsAuto : false;\n\n // Update JSON data with new values\n const updateJsonData = (values: {}) => {\n const newOpts = {\n ...options,\n jsonData: {\n ...jsonData,\n ...values,\n },\n };\n\n return onOptionsChange(newOpts);\n };\n\n // For the case of idle connections and connection lifetime\n // use a shared function to update respective properties\n const onJSONDataNumberChanged = (property: keyof SQLConnectionLimits) => {\n return (number?: number) => {\n updateJsonData({ [property]: number });\n };\n };\n\n // When the maximum number of connections is changed\n // see if we have the automatic idle option enabled\n const onMaxConnectionsChanged = (number?: number) => {\n if (autoIdle && number) {\n updateJsonData({\n maxOpenConns: number,\n maxIdleConns: number,\n });\n } else {\n updateJsonData({\n maxOpenConns: number,\n });\n }\n };\n\n // Update auto idle setting when control is toggled\n // and set minimum idle connections if automatic\n // is selected\n const onConnectionIdleAutoChanged = () => {\n let idleConns = undefined;\n let maxConns = undefined;\n\n // If the maximum number of open connections is undefined\n // and we're setting auto idle then set the default amount\n // otherwise take the numeric amount and get the value from that\n if (!autoIdle) {\n if (jsonData.maxOpenConns !== undefined) {\n maxConns = jsonData.maxOpenConns;\n idleConns = jsonData.maxOpenConns;\n }\n } else {\n maxConns = jsonData.maxOpenConns;\n idleConns = jsonData.maxIdleConns;\n }\n\n updateJsonData({\n maxIdleConnsAuto: !autoIdle,\n maxIdleConns: idleConns,\n maxOpenConns: maxConns,\n });\n };\n\n const labelWidth = 40;\n\n return (\n <ConfigSubSection\n title={t('grafana-sql.components.connection-limits.title-connection-limits', 'Connection limits')}\n >\n <Stack direction=\"column\" gap={2}>\n <MaxOpenConnectionsField\n labelWidth={labelWidth}\n onMaxConnectionsChanged={onMaxConnectionsChanged}\n jsonData={jsonData}\n />\n\n <Field\n noMargin\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.auto-max-idle\">Auto max idle</Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans\n i18nKey=\"grafana-sql.components.connection-limits.content-auto-max-idle\"\n values={{ defaultMaxIdle: config.sqlConnectionLimits.maxIdleConns }}\n >\n If enabled, automatically set the number of <i>Maximum idle connections</i> to the same value as\n <i> Max open connections</i>. If the number of maximum open connections is not set it will be\n set to the default ({'{{defaultMaxIdle}}'}).\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <Switch value={autoIdle} onChange={onConnectionIdleAutoChanged} />\n </Field>\n\n <Field\n noMargin\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.max-idle\">Max idle</Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.content-max-idle\">\n The maximum number of connections in the idle connection pool.If <i>Max open connections</i> is\n greater than 0 but less than the <i>Max idle connections</i>, then the{' '}\n <i>Max idle connections</i> will be reduced to match the <i>Max open connections</i> limit. If\n set to 0, no idle connections are retained.\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n {autoIdle ? (\n <InlineLabel width={labelWidth}>{options.jsonData.maxIdleConns}</InlineLabel>\n ) : (\n <NumberInput\n value={jsonData.maxIdleConns}\n defaultValue={config.sqlConnectionLimits.maxIdleConns}\n onChange={(value) => {\n onJSONDataNumberChanged('maxIdleConns')(value);\n }}\n width={labelWidth}\n />\n )}\n </Field>\n\n <MaxLifetimeField\n labelWidth={labelWidth}\n onMaxLifetimeChanged={onJSONDataNumberChanged('connMaxLifetime')}\n jsonData={jsonData}\n />\n </Stack>\n </ConfigSubSection>\n );\n};\n"],"names":["jsx","ConfigSubSection","t","jsxs","Stack","MaxOpenConnectionsField","Field","Label","Trans","Tooltip","config","Icon","Switch","InlineLabel","NumberInput","MaxLifetimeField"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Divider.cjs","sources":["../../../../src/components/configuration/Divider.tsx"],"sourcesContent":["import { css } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\n// this custom component is necessary because the Grafana UI <Divider /> component is not backwards compatible with Grafana < 10.1.0\nexport const Divider = () => {\n const styles = useStyles2(getStyles);\n return <hr className={styles.horizontalDivider} />;\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n horizontalDivider: css({\n borderTop: `1px solid ${theme.colors.border.weak}`,\n margin: theme.spacing(2, 0),\n width: '100%',\n }),\n };\n};\n"],"names":["useStyles2","jsx","css"],"mappings":";;;;;;;;;AAMO,MAAM,UAAU,MAAM;AAC3B,EAAA,MAAM,MAAA,GAASA,cAAW,SAAS,CAAA;AACnC,EAAA,uBAAOC,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,MAAA,CAAO,iBAAA,EAAmB,CAAA;AAClD;AAEA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAyB;AAC1C,EAAA,OAAO;AAAA,IACL,mBAAmBC,OAAA,CAAI;AAAA,MACrB,SAAA,EAAW,CAAA,UAAA,EAAa,KAAA,CAAM,MAAA,CAAO,OAAO,IAAI,CAAA,CAAA;AAAA,MAChD,MAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,CAAC,CAAA;AAAA,MAC1B,KAAA,EAAO;AAAA,KACR;AAAA,GACH;AACF,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"Divider.cjs","sources":["../../../../src/components/configuration/Divider.tsx"],"sourcesContent":["import { css } from '@emotion/css';\n\nimport { type GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\n// this custom component is necessary because the Grafana UI <Divider /> component is not backwards compatible with Grafana < 10.1.0\nexport const Divider = () => {\n const styles = useStyles2(getStyles);\n return <hr className={styles.horizontalDivider} />;\n};\n\nconst getStyles = (theme: GrafanaTheme2) => {\n return {\n horizontalDivider: css({\n borderTop: `1px solid ${theme.colors.border.weak}`,\n margin: theme.spacing(2, 0),\n width: '100%',\n }),\n };\n};\n"],"names":["useStyles2","jsx","css"],"mappings":";;;;;;;;;AAMO,MAAM,UAAU,MAAM;AAC3B,EAAA,MAAM,MAAA,GAASA,cAAW,SAAS,CAAA;AACnC,EAAA,uBAAOC,cAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,MAAA,CAAO,iBAAA,EAAmB,CAAA;AAClD;AAEA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAyB;AAC1C,EAAA,OAAO;AAAA,IACL,mBAAmBC,OAAA,CAAI;AAAA,MACrB,SAAA,EAAW,CAAA,UAAA,EAAa,KAAA,CAAM,MAAA,CAAO,OAAO,IAAI,CAAA,CAAA;AAAA,MAChD,MAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,CAAC,CAAA;AAAA,MAC1B,KAAA,EAAO;AAAA,KACR;AAAA,GACH;AACF,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MaxLifetimeField.cjs","sources":["../../../../src/components/configuration/MaxLifetimeField.tsx"],"sourcesContent":["import { Trans } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { Field, Icon, Label, Stack, Tooltip } from '@grafana/ui';\n\nimport { SQLOptions } from '../../types';\n\nimport { NumberInput } from './NumberInput';\n\ninterface Props {\n labelWidth: number;\n onMaxLifetimeChanged: (number?: number) => void;\n jsonData: SQLOptions;\n}\nexport function MaxLifetimeField({ labelWidth, onMaxLifetimeChanged, jsonData }: Props) {\n return (\n <Field\n noMargin\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.max-lifetime\">Max lifetime</Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.content-max-lifetime\">\n The maximum amount of time in seconds a connection may be reused. If set to 0, connections are\n reused forever.\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <NumberInput\n value={jsonData.connMaxLifetime}\n defaultValue={config.sqlConnectionLimits.connMaxLifetime}\n onChange={onMaxLifetimeChanged}\n width={labelWidth}\n />\n </Field>\n );\n}\n"],"names":["jsx","Field","Label","jsxs","Stack","Trans","Tooltip","Icon","NumberInput","config"],"mappings":";;;;;;;;;;;AAaO,SAAS,gBAAA,CAAiB,EAAE,UAAA,EAAY,oBAAA,EAAsB,UAAS,EAAU;AACtF,EAAA,uBACEA,cAAA;AAAA,IAACC,QAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAQ,IAAA;AAAA,MACR,uBACED,cAAA,CAACE,QAAA,EAAA,EACC,QAAA,kBAAAC,eAAA,CAACC,QAAA,EAAA,EAAM,KAAK,GAAA,EACV,QAAA,EAAA;AAAA,wBAAAJ,cAAA,CAAC,UACC,QAAA,kBAAAA,cAAA,CAACK,UAAA,EAAA,EAAM,OAAA,EAAQ,uDAAA,EAAwD,0BAAY,CAAA,EACrF,CAAA;AAAA,wBACAL,cAAA;AAAA,UAACM,UAAA;AAAA,UAAA;AAAA,YACC,OAAA,iCACG,MAAA,EAAA,EACC,QAAA,kBAAAN,cAAA,CAACK,cAAM,OAAA,EAAQ,+DAAA,EAAgE,4HAG/E,CAAA,EACF,CAAA;AAAA,YAGF,QAAA,kBAAAL,cAAA,CAACO,OAAA,EAAA,EAAK,IAAA,EAAK,aAAA,EAAc,MAAK,IAAA,EAAK;AAAA;AAAA;AACrC,OAAA,EACF,CAAA,EACF,CAAA;AAAA,MAGF,QAAA,kBAAAP,cAAA;AAAA,QAACQ,uBAAA;AAAA,QAAA;AAAA,UACC,OAAO,QAAA,CAAS,eAAA;AAAA,UAChB,YAAA,EAAcC,eAAO,mBAAA,CAAoB,eAAA;AAAA,UACzC,QAAA,EAAU,oBAAA;AAAA,UACV,KAAA,EAAO;AAAA;AAAA;AACT;AAAA,GACF;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"MaxLifetimeField.cjs","sources":["../../../../src/components/configuration/MaxLifetimeField.tsx"],"sourcesContent":["import { Trans } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { Field, Icon, Label, Stack, Tooltip } from '@grafana/ui';\n\nimport { type SQLOptions } from '../../types';\n\nimport { NumberInput } from './NumberInput';\n\ninterface Props {\n labelWidth: number;\n onMaxLifetimeChanged: (number?: number) => void;\n jsonData: SQLOptions;\n}\nexport function MaxLifetimeField({ labelWidth, onMaxLifetimeChanged, jsonData }: Props) {\n return (\n <Field\n noMargin\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.max-lifetime\">Max lifetime</Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.content-max-lifetime\">\n The maximum amount of time in seconds a connection may be reused. If set to 0, connections are\n reused forever.\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <NumberInput\n value={jsonData.connMaxLifetime}\n defaultValue={config.sqlConnectionLimits.connMaxLifetime}\n onChange={onMaxLifetimeChanged}\n width={labelWidth}\n />\n </Field>\n );\n}\n"],"names":["jsx","Field","Label","jsxs","Stack","Trans","Tooltip","Icon","NumberInput","config"],"mappings":";;;;;;;;;;;AAaO,SAAS,gBAAA,CAAiB,EAAE,UAAA,EAAY,oBAAA,EAAsB,UAAS,EAAU;AACtF,EAAA,uBACEA,cAAA;AAAA,IAACC,QAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAQ,IAAA;AAAA,MACR,uBACED,cAAA,CAACE,QAAA,EAAA,EACC,QAAA,kBAAAC,eAAA,CAACC,QAAA,EAAA,EAAM,KAAK,GAAA,EACV,QAAA,EAAA;AAAA,wBAAAJ,cAAA,CAAC,UACC,QAAA,kBAAAA,cAAA,CAACK,UAAA,EAAA,EAAM,OAAA,EAAQ,uDAAA,EAAwD,0BAAY,CAAA,EACrF,CAAA;AAAA,wBACAL,cAAA;AAAA,UAACM,UAAA;AAAA,UAAA;AAAA,YACC,OAAA,iCACG,MAAA,EAAA,EACC,QAAA,kBAAAN,cAAA,CAACK,cAAM,OAAA,EAAQ,+DAAA,EAAgE,4HAG/E,CAAA,EACF,CAAA;AAAA,YAGF,QAAA,kBAAAL,cAAA,CAACO,OAAA,EAAA,EAAK,IAAA,EAAK,aAAA,EAAc,MAAK,IAAA,EAAK;AAAA;AAAA;AACrC,OAAA,EACF,CAAA,EACF,CAAA;AAAA,MAGF,QAAA,kBAAAP,cAAA;AAAA,QAACQ,uBAAA;AAAA,QAAA;AAAA,UACC,OAAO,QAAA,CAAS,eAAA;AAAA,UAChB,YAAA,EAAcC,eAAO,mBAAA,CAAoB,eAAA;AAAA,UACzC,QAAA,EAAU,oBAAA;AAAA,UACV,KAAA,EAAO;AAAA;AAAA;AACT;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MaxOpenConnectionsField.cjs","sources":["../../../../src/components/configuration/MaxOpenConnectionsField.tsx"],"sourcesContent":["import { Trans } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { Field, Icon, Label, Stack, Tooltip } from '@grafana/ui';\n\nimport { SQLOptions } from '../../types';\n\nimport { NumberInput } from './NumberInput';\n\ninterface Props {\n labelWidth: number;\n onMaxConnectionsChanged: (number?: number) => void;\n jsonData: SQLOptions;\n}\n\nexport function MaxOpenConnectionsField({ labelWidth, onMaxConnectionsChanged, jsonData }: Props) {\n return (\n <Field\n noMargin\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.max-open\">Max open</Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.content-max-open\">\n The maximum number of open connections to the database. If <i>Max idle connections</i> is greater\n than 0 and the <i>Max open connections</i> is less than <i>Max idle connections</i>, then\n <i>Max idle connections</i> will be reduced to match the <i>Max open connections</i> limit. If set\n to 0, there is no limit on the number of open connections.\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <NumberInput\n value={jsonData.maxOpenConns}\n defaultValue={config.sqlConnectionLimits.maxOpenConns}\n onChange={onMaxConnectionsChanged}\n width={labelWidth}\n />\n </Field>\n );\n}\n"],"names":["jsx","Field","Label","jsxs","Stack","Trans","Tooltip","Icon","NumberInput","config"],"mappings":";;;;;;;;;;;AAcO,SAAS,uBAAA,CAAwB,EAAE,UAAA,EAAY,uBAAA,EAAyB,UAAS,EAAU;AAChG,EAAA,uBACEA,cAAA;AAAA,IAACC,QAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAQ,IAAA;AAAA,MACR,uBACED,cAAA,CAACE,QAAA,EAAA,EACC,QAAA,kBAAAC,eAAA,CAACC,QAAA,EAAA,EAAM,KAAK,GAAA,EACV,QAAA,EAAA;AAAA,wBAAAJ,cAAA,CAAC,UACC,QAAA,kBAAAA,cAAA,CAACK,UAAA,EAAA,EAAM,OAAA,EAAQ,mDAAA,EAAoD,sBAAQ,CAAA,EAC7E,CAAA;AAAA,wBACAL,cAAA;AAAA,UAACM,UAAA;AAAA,UAAA;AAAA,YACC,yBACEN,cAAA,CAAC,MAAA,EAAA,EACC,QAAA,kBAAAG,eAAA,CAACE,UAAA,EAAA,EAAM,SAAQ,2DAAA,EAA4D,QAAA,EAAA;AAAA,cAAA,6DAAA;AAAA,8BACdL,cAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI,6BAAA;AAAA,8BACvEA,cAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI,gBAAA;AAAA,8BAAcA,cAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI,QAAA;AAAA,8BACnFA,cAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI,gCAAA;AAAA,8BAA8BA,cAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI;AAAA,aAAA,EAEtF,CAAA,EACF,CAAA;AAAA,YAGF,QAAA,kBAAAA,cAAA,CAACO,OAAA,EAAA,EAAK,IAAA,EAAK,aAAA,EAAc,MAAK,IAAA,EAAK;AAAA;AAAA;AACrC,OAAA,EACF,CAAA,EACF,CAAA;AAAA,MAGF,QAAA,kBAAAP,cAAA;AAAA,QAACQ,uBAAA;AAAA,QAAA;AAAA,UACC,OAAO,QAAA,CAAS,YAAA;AAAA,UAChB,YAAA,EAAcC,eAAO,mBAAA,CAAoB,YAAA;AAAA,UACzC,QAAA,EAAU,uBAAA;AAAA,UACV,KAAA,EAAO;AAAA;AAAA;AACT;AAAA,GACF;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"MaxOpenConnectionsField.cjs","sources":["../../../../src/components/configuration/MaxOpenConnectionsField.tsx"],"sourcesContent":["import { Trans } from '@grafana/i18n';\nimport { config } from '@grafana/runtime';\nimport { Field, Icon, Label, Stack, Tooltip } from '@grafana/ui';\n\nimport { type SQLOptions } from '../../types';\n\nimport { NumberInput } from './NumberInput';\n\ninterface Props {\n labelWidth: number;\n onMaxConnectionsChanged: (number?: number) => void;\n jsonData: SQLOptions;\n}\n\nexport function MaxOpenConnectionsField({ labelWidth, onMaxConnectionsChanged, jsonData }: Props) {\n return (\n <Field\n noMargin\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.max-open\">Max open</Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.connection-limits.content-max-open\">\n The maximum number of open connections to the database. If <i>Max idle connections</i> is greater\n than 0 and the <i>Max open connections</i> is less than <i>Max idle connections</i>, then\n <i>Max idle connections</i> will be reduced to match the <i>Max open connections</i> limit. If set\n to 0, there is no limit on the number of open connections.\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <NumberInput\n value={jsonData.maxOpenConns}\n defaultValue={config.sqlConnectionLimits.maxOpenConns}\n onChange={onMaxConnectionsChanged}\n width={labelWidth}\n />\n </Field>\n );\n}\n"],"names":["jsx","Field","Label","jsxs","Stack","Trans","Tooltip","Icon","NumberInput","config"],"mappings":";;;;;;;;;;;AAcO,SAAS,uBAAA,CAAwB,EAAE,UAAA,EAAY,uBAAA,EAAyB,UAAS,EAAU;AAChG,EAAA,uBACEA,cAAA;AAAA,IAACC,QAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAQ,IAAA;AAAA,MACR,uBACED,cAAA,CAACE,QAAA,EAAA,EACC,QAAA,kBAAAC,eAAA,CAACC,QAAA,EAAA,EAAM,KAAK,GAAA,EACV,QAAA,EAAA;AAAA,wBAAAJ,cAAA,CAAC,UACC,QAAA,kBAAAA,cAAA,CAACK,UAAA,EAAA,EAAM,OAAA,EAAQ,mDAAA,EAAoD,sBAAQ,CAAA,EAC7E,CAAA;AAAA,wBACAL,cAAA;AAAA,UAACM,UAAA;AAAA,UAAA;AAAA,YACC,yBACEN,cAAA,CAAC,MAAA,EAAA,EACC,QAAA,kBAAAG,eAAA,CAACE,UAAA,EAAA,EAAM,SAAQ,2DAAA,EAA4D,QAAA,EAAA;AAAA,cAAA,6DAAA;AAAA,8BACdL,cAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI,6BAAA;AAAA,8BACvEA,cAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI,gBAAA;AAAA,8BAAcA,cAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI,QAAA;AAAA,8BACnFA,cAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI,gCAAA;AAAA,8BAA8BA,cAAA,CAAC,OAAE,QAAA,EAAA,sBAAA,EAAoB,CAAA;AAAA,cAAI;AAAA,aAAA,EAEtF,CAAA,EACF,CAAA;AAAA,YAGF,QAAA,kBAAAA,cAAA,CAACO,OAAA,EAAA,EAAK,IAAA,EAAK,aAAA,EAAc,MAAK,IAAA,EAAK;AAAA;AAAA;AACrC,OAAA,EACF,CAAA,EACF,CAAA;AAAA,MAGF,QAAA,kBAAAP,cAAA;AAAA,QAACQ,uBAAA;AAAA,QAAA;AAAA,UACC,OAAO,QAAA,CAAS,YAAA;AAAA,UAChB,YAAA,EAAcC,eAAO,mBAAA,CAAoB,YAAA;AAAA,UACzC,QAAA,EAAU,uBAAA;AAAA,UACV,KAAA,EAAO;AAAA;AAAA;AACT;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TLSSecretsConfig.cjs","sources":["../../../../src/components/configuration/TLSSecretsConfig.tsx"],"sourcesContent":["import {\n DataSourceJsonData,\n DataSourcePluginOptionsEditorProps,\n KeyValue,\n onUpdateDatasourceSecureJsonDataOption,\n updateDatasourcePluginResetOption,\n} from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\nimport { Field, Icon, Label, SecretTextArea, Tooltip, Stack } from '@grafana/ui';\n\nexport interface Props<T extends DataSourceJsonData, S> {\n editorProps: DataSourcePluginOptionsEditorProps<T, S>;\n showCACert?: boolean;\n showKeyPair?: boolean;\n secureJsonFields?: KeyValue<Boolean>;\n labelWidth?: number;\n}\n\nexport const TLSSecretsConfig = <T extends DataSourceJsonData, S extends {} = {}>(props: Props<T, S>) => {\n const { editorProps, showCACert, showKeyPair = true } = props;\n const { secureJsonFields } = editorProps.options;\n return (\n <>\n {showKeyPair ? (\n <Field\n noMargin\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.tlsssl-client-certificate\">\n TLS/SSL Client Certificate\n </Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.content-tlsssl-client-certificate\">\n To authenticate with an TLS/SSL client certificate, provide the client certificate here.\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <SecretTextArea\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"-----BEGIN CERTIFICATE-----\"\n cols={45}\n rows={7}\n isConfigured={secureJsonFields && secureJsonFields.tlsClientCert}\n onChange={onUpdateDatasourceSecureJsonDataOption(editorProps, 'tlsClientCert')}\n onReset={() => {\n updateDatasourcePluginResetOption(editorProps, 'tlsClientCert');\n }}\n />\n </Field>\n ) : null}\n {showCACert ? (\n <Field\n noMargin\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.tlsssl-root-certificate\">\n TLS/SSL Root Certificate\n </Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.content-tlsssl-root-certificate\">\n If the selected TLS/SSL mode requires a server root certificate, provide it here\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <SecretTextArea\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"-----BEGIN CERTIFICATE-----\"\n cols={45}\n rows={7}\n isConfigured={secureJsonFields && secureJsonFields.tlsCACert}\n onChange={onUpdateDatasourceSecureJsonDataOption(editorProps, 'tlsCACert')}\n onReset={() => {\n updateDatasourcePluginResetOption(editorProps, 'tlsCACert');\n }}\n />\n </Field>\n ) : null}\n {showKeyPair ? (\n <Field\n noMargin\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.tlsssl-client-key\">TLS/SSL Client Key</Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.content-tlsssl-client-key\">\n To authenticate with a client TLS/SSL certificate, provide the key here.\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <SecretTextArea\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"-----BEGIN RSA PRIVATE KEY-----\"\n cols={45}\n rows={7}\n isConfigured={secureJsonFields && secureJsonFields.tlsClientKey}\n onChange={onUpdateDatasourceSecureJsonDataOption(editorProps, 'tlsClientKey')}\n onReset={() => {\n updateDatasourcePluginResetOption(editorProps, 'tlsClientKey');\n }}\n />\n </Field>\n ) : null}\n </>\n );\n};\n"],"names":["jsxs","Fragment","jsx","Field","Label","Stack","Trans","Tooltip","Icon","SecretTextArea","onUpdateDatasourceSecureJsonDataOption","updateDatasourcePluginResetOption"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TLSSecretsConfig.cjs","sources":["../../../../src/components/configuration/TLSSecretsConfig.tsx"],"sourcesContent":["import {\n type DataSourceJsonData,\n type DataSourcePluginOptionsEditorProps,\n type KeyValue,\n onUpdateDatasourceSecureJsonDataOption,\n updateDatasourcePluginResetOption,\n} from '@grafana/data';\nimport { Trans } from '@grafana/i18n';\nimport { Field, Icon, Label, SecretTextArea, Tooltip, Stack } from '@grafana/ui';\n\nexport interface Props<T extends DataSourceJsonData, S> {\n editorProps: DataSourcePluginOptionsEditorProps<T, S>;\n showCACert?: boolean;\n showKeyPair?: boolean;\n secureJsonFields?: KeyValue<Boolean>;\n labelWidth?: number;\n}\n\nexport const TLSSecretsConfig = <T extends DataSourceJsonData, S extends {} = {}>(props: Props<T, S>) => {\n const { editorProps, showCACert, showKeyPair = true } = props;\n const { secureJsonFields } = editorProps.options;\n return (\n <>\n {showKeyPair ? (\n <Field\n noMargin\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.tlsssl-client-certificate\">\n TLS/SSL Client Certificate\n </Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.content-tlsssl-client-certificate\">\n To authenticate with an TLS/SSL client certificate, provide the client certificate here.\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <SecretTextArea\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"-----BEGIN CERTIFICATE-----\"\n cols={45}\n rows={7}\n isConfigured={secureJsonFields && secureJsonFields.tlsClientCert}\n onChange={onUpdateDatasourceSecureJsonDataOption(editorProps, 'tlsClientCert')}\n onReset={() => {\n updateDatasourcePluginResetOption(editorProps, 'tlsClientCert');\n }}\n />\n </Field>\n ) : null}\n {showCACert ? (\n <Field\n noMargin\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.tlsssl-root-certificate\">\n TLS/SSL Root Certificate\n </Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.content-tlsssl-root-certificate\">\n If the selected TLS/SSL mode requires a server root certificate, provide it here\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <SecretTextArea\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"-----BEGIN CERTIFICATE-----\"\n cols={45}\n rows={7}\n isConfigured={secureJsonFields && secureJsonFields.tlsCACert}\n onChange={onUpdateDatasourceSecureJsonDataOption(editorProps, 'tlsCACert')}\n onReset={() => {\n updateDatasourcePluginResetOption(editorProps, 'tlsCACert');\n }}\n />\n </Field>\n ) : null}\n {showKeyPair ? (\n <Field\n noMargin\n label={\n <Label>\n <Stack gap={0.5}>\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.tlsssl-client-key\">TLS/SSL Client Key</Trans>\n </span>\n <Tooltip\n content={\n <span>\n <Trans i18nKey=\"grafana-sql.components.tlssecrets-config.content-tlsssl-client-key\">\n To authenticate with a client TLS/SSL certificate, provide the key here.\n </Trans>\n </span>\n }\n >\n <Icon name=\"info-circle\" size=\"sm\" />\n </Tooltip>\n </Stack>\n </Label>\n }\n >\n <SecretTextArea\n // eslint-disable-next-line @grafana/i18n/no-untranslated-strings\n placeholder=\"-----BEGIN RSA PRIVATE KEY-----\"\n cols={45}\n rows={7}\n isConfigured={secureJsonFields && secureJsonFields.tlsClientKey}\n onChange={onUpdateDatasourceSecureJsonDataOption(editorProps, 'tlsClientKey')}\n onReset={() => {\n updateDatasourcePluginResetOption(editorProps, 'tlsClientKey');\n }}\n />\n </Field>\n ) : null}\n </>\n );\n};\n"],"names":["jsxs","Fragment","jsx","Field","Label","Stack","Trans","Tooltip","Icon","SecretTextArea","onUpdateDatasourceSecureJsonDataOption","updateDatasourcePluginResetOption"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMigrateDatabaseFields.cjs","sources":["../../../../src/components/configuration/useMigrateDatabaseFields.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { config } from '@grafana/runtime';\n\nimport { SQLOptions } from '../../types';\nimport { sqlPluginLogger } from '../../utils/logging';\n\n/**\n * 1. Moves the database field from the options object to jsonData.database and empties the database field.\n * 2. If max open connections, max idle connections, and auto idle are all undefined set these to default values.\n */\nexport function useMigrateDatabaseFields<T extends SQLOptions, S = {}>({\n onOptionsChange,\n options,\n}: DataSourcePluginOptionsEditorProps<T, S>) {\n useEffect(() => {\n const jsonData = options.jsonData;\n let newOptions = { ...options };\n let optionsUpdated = false;\n\n // Migrate the database field from the column into the jsonData object\n if (options.database) {\n sqlPluginLogger.logDebug(`Migrating from options.database with value ${options.database} for ${options.name}`);\n newOptions.database = '';\n newOptions.jsonData = { ...jsonData, database: options.database };\n optionsUpdated = true;\n }\n\n // Set default values for max open connections, max idle connection,\n // and auto idle if they're all undefined\n if (\n jsonData.maxOpenConns === undefined &&\n jsonData.maxIdleConns === undefined &&\n jsonData.maxIdleConnsAuto === undefined\n ) {\n const { maxOpenConns, maxIdleConns } = config.sqlConnectionLimits;\n\n sqlPluginLogger.logDebug(\n `Setting default max open connections to ${maxOpenConns} and setting max idle connection to ${maxIdleConns}`\n );\n\n // Spread from the jsonData in new options in case\n // the database field was migrated as well\n newOptions.jsonData = {\n ...newOptions.jsonData,\n maxOpenConns: maxOpenConns,\n maxIdleConns: maxIdleConns,\n maxIdleConnsAuto: true,\n };\n\n // Make sure we issue an update if options changed\n optionsUpdated = true;\n }\n\n // If the maximum connection lifetime hasn't been\n // otherwise set fill in with the default from configuration\n if (jsonData.connMaxLifetime === undefined) {\n const { connMaxLifetime } = config.sqlConnectionLimits;\n\n // Spread new options and add our value\n newOptions.jsonData = {\n ...newOptions.jsonData,\n connMaxLifetime: connMaxLifetime,\n };\n\n // Note that we've updated the options\n optionsUpdated = true;\n }\n\n // Only issue an update if we changed options\n if (optionsUpdated) {\n onOptionsChange(newOptions);\n }\n }, [onOptionsChange, options]);\n}\n"],"names":["useEffect","sqlPluginLogger","config"],"mappings":";;;;;;;;;AAYO,SAAS,wBAAA,CAAuD;AAAA,EACrE,eAAA;AAAA,EACA;AACF,CAAA,EAA6C;AAC3C,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,WAAW,OAAA,CAAQ,QAAA;AACzB,IAAA,IAAI,UAAA,GAAa,EAAE,GAAG,OAAA,EAAQ;AAC9B,IAAA,IAAI,cAAA,GAAiB,KAAA;AAGrB,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAAC,uBAAA,CAAgB,SAAS,CAAA,2CAAA,EAA8C,OAAA,CAAQ,QAAQ,CAAA,KAAA,EAAQ,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AAC7G,MAAA,UAAA,CAAW,QAAA,GAAW,EAAA;AACtB,MAAA,UAAA,CAAW,WAAW,EAAE,GAAG,QAAA,EAAU,QAAA,EAAU,QAAQ,QAAA,EAAS;AAChE,MAAA,cAAA,GAAiB,IAAA;AAAA,IACnB;AAIA,IAAA,IACE,QAAA,CAAS,iBAAiB,KAAA,CAAA,IAC1B,QAAA,CAAS,iBAAiB,KAAA,CAAA,IAC1B,QAAA,CAAS,qBAAqB,KAAA,CAAA,EAC9B;AACA,MAAA,MAAM,EAAE,YAAA,EAAc,YAAA,EAAa,GAAIC,cAAA,CAAO,mBAAA;AAE9C,MAAAD,uBAAA,CAAgB,QAAA;AAAA,QACd,CAAA,wCAAA,EAA2C,YAAY,CAAA,oCAAA,EAAuC,YAAY,CAAA;AAAA,OAC5G;AAIA,MAAA,UAAA,CAAW,QAAA,GAAW;AAAA,QACpB,GAAG,UAAA,CAAW,QAAA;AAAA,QACd,YAAA;AAAA,QACA,YAAA;AAAA,QACA,gBAAA,EAAkB;AAAA,OACpB;AAGA,MAAA,cAAA,GAAiB,IAAA;AAAA,IACnB;AAIA,IAAA,IAAI,QAAA,CAAS,oBAAoB,KAAA,CAAA,EAAW;AAC1C,MAAA,MAAM,EAAE,eAAA,EAAgB,GAAIC,cAAA,CAAO,mBAAA;AAGnC,MAAA,UAAA,CAAW,QAAA,GAAW;AAAA,QACpB,GAAG,UAAA,CAAW,QAAA;AAAA,QACd;AAAA,OACF;AAGA,MAAA,cAAA,GAAiB,IAAA;AAAA,IACnB;AAGA,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,eAAA,CAAgB,UAAU,CAAA;AAAA,IAC5B;AAAA,EACF,CAAA,EAAG,CAAC,eAAA,EAAiB,OAAO,CAAC,CAAA;AAC/B;;;;"}
|
|
1
|
+
{"version":3,"file":"useMigrateDatabaseFields.cjs","sources":["../../../../src/components/configuration/useMigrateDatabaseFields.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { type DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { config } from '@grafana/runtime';\n\nimport { type SQLOptions } from '../../types';\nimport { sqlPluginLogger } from '../../utils/logging';\n\n/**\n * 1. Moves the database field from the options object to jsonData.database and empties the database field.\n * 2. If max open connections, max idle connections, and auto idle are all undefined set these to default values.\n */\nexport function useMigrateDatabaseFields<T extends SQLOptions, S = {}>({\n onOptionsChange,\n options,\n}: DataSourcePluginOptionsEditorProps<T, S>) {\n useEffect(() => {\n const jsonData = options.jsonData;\n let newOptions = { ...options };\n let optionsUpdated = false;\n\n // Migrate the database field from the column into the jsonData object\n if (options.database) {\n sqlPluginLogger.logDebug(`Migrating from options.database with value ${options.database} for ${options.name}`);\n newOptions.database = '';\n newOptions.jsonData = { ...jsonData, database: options.database };\n optionsUpdated = true;\n }\n\n // Set default values for max open connections, max idle connection,\n // and auto idle if they're all undefined\n if (\n jsonData.maxOpenConns === undefined &&\n jsonData.maxIdleConns === undefined &&\n jsonData.maxIdleConnsAuto === undefined\n ) {\n const { maxOpenConns, maxIdleConns } = config.sqlConnectionLimits;\n\n sqlPluginLogger.logDebug(\n `Setting default max open connections to ${maxOpenConns} and setting max idle connection to ${maxIdleConns}`\n );\n\n // Spread from the jsonData in new options in case\n // the database field was migrated as well\n newOptions.jsonData = {\n ...newOptions.jsonData,\n maxOpenConns: maxOpenConns,\n maxIdleConns: maxIdleConns,\n maxIdleConnsAuto: true,\n };\n\n // Make sure we issue an update if options changed\n optionsUpdated = true;\n }\n\n // If the maximum connection lifetime hasn't been\n // otherwise set fill in with the default from configuration\n if (jsonData.connMaxLifetime === undefined) {\n const { connMaxLifetime } = config.sqlConnectionLimits;\n\n // Spread new options and add our value\n newOptions.jsonData = {\n ...newOptions.jsonData,\n connMaxLifetime: connMaxLifetime,\n };\n\n // Note that we've updated the options\n optionsUpdated = true;\n }\n\n // Only issue an update if we changed options\n if (optionsUpdated) {\n onOptionsChange(newOptions);\n }\n }, [onOptionsChange, options]);\n}\n"],"names":["useEffect","sqlPluginLogger","config"],"mappings":";;;;;;;;;AAYO,SAAS,wBAAA,CAAuD;AAAA,EACrE,eAAA;AAAA,EACA;AACF,CAAA,EAA6C;AAC3C,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,WAAW,OAAA,CAAQ,QAAA;AACzB,IAAA,IAAI,UAAA,GAAa,EAAE,GAAG,OAAA,EAAQ;AAC9B,IAAA,IAAI,cAAA,GAAiB,KAAA;AAGrB,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAAC,uBAAA,CAAgB,SAAS,CAAA,2CAAA,EAA8C,OAAA,CAAQ,QAAQ,CAAA,KAAA,EAAQ,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AAC7G,MAAA,UAAA,CAAW,QAAA,GAAW,EAAA;AACtB,MAAA,UAAA,CAAW,WAAW,EAAE,GAAG,QAAA,EAAU,QAAA,EAAU,QAAQ,QAAA,EAAS;AAChE,MAAA,cAAA,GAAiB,IAAA;AAAA,IACnB;AAIA,IAAA,IACE,QAAA,CAAS,iBAAiB,KAAA,CAAA,IAC1B,QAAA,CAAS,iBAAiB,KAAA,CAAA,IAC1B,QAAA,CAAS,qBAAqB,KAAA,CAAA,EAC9B;AACA,MAAA,MAAM,EAAE,YAAA,EAAc,YAAA,EAAa,GAAIC,cAAA,CAAO,mBAAA;AAE9C,MAAAD,uBAAA,CAAgB,QAAA;AAAA,QACd,CAAA,wCAAA,EAA2C,YAAY,CAAA,oCAAA,EAAuC,YAAY,CAAA;AAAA,OAC5G;AAIA,MAAA,UAAA,CAAW,QAAA,GAAW;AAAA,QACpB,GAAG,UAAA,CAAW,QAAA;AAAA,QACd,YAAA;AAAA,QACA,YAAA;AAAA,QACA,gBAAA,EAAkB;AAAA,OACpB;AAGA,MAAA,cAAA,GAAiB,IAAA;AAAA,IACnB;AAIA,IAAA,IAAI,QAAA,CAAS,oBAAoB,KAAA,CAAA,EAAW;AAC1C,MAAA,MAAM,EAAE,eAAA,EAAgB,GAAIC,cAAA,CAAO,mBAAA;AAGnC,MAAA,UAAA,CAAW,QAAA,GAAW;AAAA,QACpB,GAAG,UAAA,CAAW,QAAA;AAAA,QACd;AAAA,OACF;AAGA,MAAA,cAAA,GAAiB,IAAA;AAAA,IACnB;AAGA,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,eAAA,CAAgB,UAAU,CAAA;AAAA,IAC5B;AAAA,EACF,CAAA,EAAG,CAAC,eAAA,EAAiB,OAAO,CAAC,CAAA;AAC/B;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryEditorRaw.cjs","sources":["../../../../src/components/query-editor-raw/QueryEditorRaw.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\nimport * as React from 'react';\n\nimport { LanguageDefinition, SQLEditor } from '@grafana/plugin-ui';\n\nimport { SQLQuery } from '../../types';\n\ntype Props = {\n query: SQLQuery;\n onChange: (value: SQLQuery, processQuery: boolean) => void;\n children?: (props: { formatQuery: () => void }) => React.ReactNode;\n width?: number;\n height?: number;\n editorLanguageDefinition: LanguageDefinition;\n};\n\nexport function QueryEditorRaw({ children, onChange, query, width, height, editorLanguageDefinition }: Props) {\n // We need to pass query via ref to SQLEditor as onChange is executed via monacoEditor.onDidChangeModelContent callback, not onChange property\n const queryRef = useRef<SQLQuery>(query);\n useEffect(() => {\n queryRef.current = query;\n }, [query]);\n\n const onRawQueryChange = useCallback(\n (rawSql: string, processQuery: boolean) => {\n const newQuery = {\n ...queryRef.current,\n rawQuery: true,\n rawSql,\n };\n onChange(newQuery, processQuery);\n },\n [onChange]\n );\n\n return (\n <SQLEditor\n width={width}\n height={height}\n query={query.rawSql!}\n onChange={onRawQueryChange}\n language={editorLanguageDefinition}\n >\n {children}\n </SQLEditor>\n );\n}\n"],"names":["useRef","useEffect","useCallback","jsx","SQLEditor"],"mappings":";;;;;;;;;AAgBO,SAAS,cAAA,CAAe,EAAE,QAAA,EAAU,QAAA,EAAU,OAAO,KAAA,EAAO,MAAA,EAAQ,0BAAyB,EAAU;AAE5G,EAAA,MAAM,QAAA,GAAWA,aAAiB,KAAK,CAAA;AACvC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AAAA,EACrB,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,gBAAA,GAAmBC,iBAAA;AAAA,IACvB,CAAC,QAAgB,YAAA,KAA0B;AACzC,MAAA,MAAM,QAAA,GAAW;AAAA,QACf,GAAG,QAAA,CAAS,OAAA;AAAA,QACZ,QAAA,EAAU,IAAA;AAAA,QACV;AAAA,OACF;AACA,MAAA,QAAA,CAAS,UAAU,YAAY,CAAA;AAAA,IACjC,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,uBACEC,cAAA;AAAA,IAACC,kBAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAO,KAAA,CAAM,MAAA;AAAA,MACb,QAAA,EAAU,gBAAA;AAAA,MACV,QAAA,EAAU,wBAAA;AAAA,MAET;AAAA;AAAA,GACH;AAEJ;;;;"}
|
|
1
|
+
{"version":3,"file":"QueryEditorRaw.cjs","sources":["../../../../src/components/query-editor-raw/QueryEditorRaw.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\nimport * as React from 'react';\n\nimport { type LanguageDefinition, SQLEditor } from '@grafana/plugin-ui';\n\nimport { type SQLQuery } from '../../types';\n\ntype Props = {\n query: SQLQuery;\n onChange: (value: SQLQuery, processQuery: boolean) => void;\n children?: (props: { formatQuery: () => void }) => React.ReactNode;\n width?: number;\n height?: number;\n editorLanguageDefinition: LanguageDefinition;\n};\n\nexport function QueryEditorRaw({ children, onChange, query, width, height, editorLanguageDefinition }: Props) {\n // We need to pass query via ref to SQLEditor as onChange is executed via monacoEditor.onDidChangeModelContent callback, not onChange property\n const queryRef = useRef<SQLQuery>(query);\n useEffect(() => {\n queryRef.current = query;\n }, [query]);\n\n const onRawQueryChange = useCallback(\n (rawSql: string, processQuery: boolean) => {\n const newQuery = {\n ...queryRef.current,\n rawQuery: true,\n rawSql,\n };\n onChange(newQuery, processQuery);\n },\n [onChange]\n );\n\n return (\n <SQLEditor\n width={width}\n height={height}\n query={query.rawSql!}\n onChange={onRawQueryChange}\n language={editorLanguageDefinition}\n >\n {children}\n </SQLEditor>\n );\n}\n"],"names":["useRef","useEffect","useCallback","jsx","SQLEditor"],"mappings":";;;;;;;;;AAgBO,SAAS,cAAA,CAAe,EAAE,QAAA,EAAU,QAAA,EAAU,OAAO,KAAA,EAAO,MAAA,EAAQ,0BAAyB,EAAU;AAE5G,EAAA,MAAM,QAAA,GAAWA,aAAiB,KAAK,CAAA;AACvC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,QAAA,CAAS,OAAA,GAAU,KAAA;AAAA,EACrB,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,gBAAA,GAAmBC,iBAAA;AAAA,IACvB,CAAC,QAAgB,YAAA,KAA0B;AACzC,MAAA,MAAM,QAAA,GAAW;AAAA,QACf,GAAG,QAAA,CAAS,OAAA;AAAA,QACZ,QAAA,EAAU,IAAA;AAAA,QACV;AAAA,OACF;AACA,MAAA,QAAA,CAAS,UAAU,YAAY,CAAA;AAAA,IACjC,CAAA;AAAA,IACA,CAAC,QAAQ;AAAA,GACX;AAEA,EAAA,uBACEC,cAAA;AAAA,IAACC,kBAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAO,KAAA,CAAM,MAAA;AAAA,MACb,QAAA,EAAU,gBAAA;AAAA,MACV,QAAA,EAAU,wBAAA;AAAA,MAET;AAAA;AAAA,GACH;AAEJ;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryToolbox.cjs","sources":["../../../../src/components/query-editor-raw/QueryToolbox.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { useMemo, useState } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport { Stack, Icon, IconButton, Tooltip, useTheme2 } from '@grafana/ui';\n\nimport { QueryValidator, QueryValidatorProps } from './QueryValidator';\n\ninterface QueryToolboxProps extends Omit<QueryValidatorProps, 'onValidate'> {\n showTools?: boolean;\n isExpanded?: boolean;\n onFormatCode?: () => void;\n onExpand?: (expand: boolean) => void;\n onValidate?: (isValid: boolean) => void;\n}\n\nexport function QueryToolbox({ showTools, onFormatCode, onExpand, isExpanded, ...validatorProps }: QueryToolboxProps) {\n const theme = useTheme2();\n const [validationResult, setValidationResult] = useState<boolean>();\n\n const styles = useMemo(() => {\n return {\n container: css({\n border: `1px solid ${theme.colors.border.medium}`,\n borderTop: 'none',\n padding: theme.spacing(0.5, 0.5, 0.5, 0.5),\n display: 'flex',\n flexGrow: 1,\n justifyContent: 'space-between',\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n error: css({\n color: theme.colors.error.text,\n fontSize: theme.typography.bodySmall.fontSize,\n fontFamily: theme.typography.fontFamilyMonospace,\n }),\n valid: css({\n color: theme.colors.success.text,\n }),\n info: css({\n color: theme.colors.text.secondary,\n }),\n hint: css({\n color: theme.colors.text.disabled,\n whiteSpace: 'nowrap',\n cursor: 'help',\n }),\n };\n }, [theme]);\n\n let style = {};\n\n if (!showTools && validationResult === undefined) {\n style = { height: 0, padding: 0, visibility: 'hidden' };\n }\n\n return (\n <div className={styles.container} style={style}>\n <div>\n {validatorProps.onValidate && (\n <QueryValidator\n {...validatorProps}\n onValidate={(result: boolean) => {\n setValidationResult(result);\n validatorProps.onValidate!(result);\n }}\n />\n )}\n </div>\n {showTools && (\n <div>\n <Stack gap={1}>\n {onFormatCode && (\n <IconButton\n onClick={() => {\n reportInteraction('grafana_sql_query_formatted', {\n datasource: validatorProps.query.datasource?.type,\n });\n onFormatCode();\n }}\n name=\"brackets-curly\"\n size=\"xs\"\n tooltip={t('grafana-sql.components.query-toolbox.tooltip-format-query', 'Format query')}\n />\n )}\n {onExpand && (\n <IconButton\n onClick={() => {\n reportInteraction('grafana_sql_editor_expand', {\n datasource: validatorProps.query.datasource?.type,\n expanded: !isExpanded,\n });\n\n onExpand(!isExpanded);\n }}\n name={isExpanded ? 'angle-up' : 'angle-down'}\n size=\"xs\"\n tooltip={\n isExpanded\n ? t('grafana-sql.components.query-toolbox.tooltip-collapse', 'Collapse editor')\n : t('grafana-sql.components.query-toolbox.tooltip-expand', 'Expand editor')\n }\n />\n )}\n <Tooltip\n content={t(\n 'grafana-sql.components.query-toolbox.content-hit-ctrlcmdreturn-to-run-query',\n 'Hit CTRL/CMD+Return to run query'\n )}\n >\n <Icon className={styles.hint} name=\"keyboard\" />\n </Tooltip>\n </Stack>\n </div>\n )}\n </div>\n );\n}\n"],"names":["useTheme2","useState","useMemo","css","jsxs","jsx","QueryValidator","Stack","IconButton","reportInteraction","t","Tooltip","Icon"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QueryToolbox.cjs","sources":["../../../../src/components/query-editor-raw/QueryToolbox.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { useMemo, useState } from 'react';\n\nimport { t } from '@grafana/i18n';\nimport { reportInteraction } from '@grafana/runtime';\nimport { Stack, Icon, IconButton, Tooltip, useTheme2 } from '@grafana/ui';\n\nimport { QueryValidator, type QueryValidatorProps } from './QueryValidator';\n\ninterface QueryToolboxProps extends Omit<QueryValidatorProps, 'onValidate'> {\n showTools?: boolean;\n isExpanded?: boolean;\n onFormatCode?: () => void;\n onExpand?: (expand: boolean) => void;\n onValidate?: (isValid: boolean) => void;\n}\n\nexport function QueryToolbox({ showTools, onFormatCode, onExpand, isExpanded, ...validatorProps }: QueryToolboxProps) {\n const theme = useTheme2();\n const [validationResult, setValidationResult] = useState<boolean>();\n\n const styles = useMemo(() => {\n return {\n container: css({\n border: `1px solid ${theme.colors.border.medium}`,\n borderTop: 'none',\n padding: theme.spacing(0.5, 0.5, 0.5, 0.5),\n display: 'flex',\n flexGrow: 1,\n justifyContent: 'space-between',\n fontSize: theme.typography.bodySmall.fontSize,\n }),\n error: css({\n color: theme.colors.error.text,\n fontSize: theme.typography.bodySmall.fontSize,\n fontFamily: theme.typography.fontFamilyMonospace,\n }),\n valid: css({\n color: theme.colors.success.text,\n }),\n info: css({\n color: theme.colors.text.secondary,\n }),\n hint: css({\n color: theme.colors.text.disabled,\n whiteSpace: 'nowrap',\n cursor: 'help',\n }),\n };\n }, [theme]);\n\n let style = {};\n\n if (!showTools && validationResult === undefined) {\n style = { height: 0, padding: 0, visibility: 'hidden' };\n }\n\n return (\n <div className={styles.container} style={style}>\n <div>\n {validatorProps.onValidate && (\n <QueryValidator\n {...validatorProps}\n onValidate={(result: boolean) => {\n setValidationResult(result);\n validatorProps.onValidate!(result);\n }}\n />\n )}\n </div>\n {showTools && (\n <div>\n <Stack gap={1}>\n {onFormatCode && (\n <IconButton\n onClick={() => {\n reportInteraction('grafana_sql_query_formatted', {\n datasource: validatorProps.query.datasource?.type,\n });\n onFormatCode();\n }}\n name=\"brackets-curly\"\n size=\"xs\"\n tooltip={t('grafana-sql.components.query-toolbox.tooltip-format-query', 'Format query')}\n />\n )}\n {onExpand && (\n <IconButton\n onClick={() => {\n reportInteraction('grafana_sql_editor_expand', {\n datasource: validatorProps.query.datasource?.type,\n expanded: !isExpanded,\n });\n\n onExpand(!isExpanded);\n }}\n name={isExpanded ? 'angle-up' : 'angle-down'}\n size=\"xs\"\n tooltip={\n isExpanded\n ? t('grafana-sql.components.query-toolbox.tooltip-collapse', 'Collapse editor')\n : t('grafana-sql.components.query-toolbox.tooltip-expand', 'Expand editor')\n }\n />\n )}\n <Tooltip\n content={t(\n 'grafana-sql.components.query-toolbox.content-hit-ctrlcmdreturn-to-run-query',\n 'Hit CTRL/CMD+Return to run query'\n )}\n >\n <Icon className={styles.hint} name=\"keyboard\" />\n </Tooltip>\n </Stack>\n </div>\n )}\n </div>\n );\n}\n"],"names":["useTheme2","useState","useMemo","css","jsxs","jsx","QueryValidator","Stack","IconButton","reportInteraction","t","Tooltip","Icon"],"mappings":"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"}
|