mirror of
https://github.com/grafana/grafana.git
synced 2025-08-02 18:12:13 +08:00

* badlm0mma/sql_datasource_update/ initial notes * baldm0mma/sql_datasource_update/ solution * baldm0mma/sql_datasource_update/ clean datasetSelector * baldm0mma/sql_datasource_update/ clean up queryEditor.tsx * baldm0mma/sql_datasource_update/ clewan up queryHeader.tsx * baldm0mma/sql_datasource_update/ clean up tableSelector.tsx * baldm0mma/sql_datasource_update/ clean up mysqlDatasource.ts * baldm0mma/sql_datasource_update/ clean up configurationEditor.tsx * baldm0mma/sql_datasource_update/ rem conlog from queryEditor.tsx * baldm0mma/sql_datasource_update/ rem conlog from queryEditor.tsx * baldm0mma/sql_datasource_update/ remove conlog in tableSelector.tsx * baldm0mma/sql_datasource_update/ rem conlog in sqlDatasource.ts * baldm0mma/sql_datasource_update/ update deafult database value in sqlDatasource.ts * baldm0mma/sql_datasource_update/ update logic to accomidate no preconfig * baldm0mma/sql_datasource_update/ update props * baldm0mma/sql_datasource_update/ update prop names * baldm0mma/sql_datasource_update/ update prop names in tableSelector * baldm0mma/sql_datasource_update/ update annos in datasetSelector * baldm0mma/sql_datasource_update/ update naming * baldm0mma/sql_datasource_update/ update to standard langauae * baldm0mma/sql_datasource_update/ update prop names * baldm0mma/sql_datasource_update/ update annos in datasetSelector * baldm0mma/sql_datasource_update/ remove unused import in tableSelector.tsx * baldm0mma/sql_datasource_update/ remove addDefaultdataset * baldm0mma/sql_datasource_update/ reset query when needed * baldm0mma/sql_datasource_update/ update asymc return val * baldm0mma/sql_datasource_update/ remove psql query editor * baldm0mma/sql_datasource_update/ remove con logs in defaults.ts * baldm0mma/sql_datasource_update/ revert postgres changes * baldm0mma/sql_datasource_update/ update postgres naming * baldm0mma/sql_datasource_update/ add altert * baldm0mma/sql_datasource_update/ update annos and add alerts and alert logic * baldm0mma/sql_datasource_update/ update postgres nomenclature * baldm0mma/sql_datasource_update/ update annos and remove con logs * baldm0mma/sql_datasource_update/ update nomenclature * baldm0mma/sql_datasource_update/ drone fix * baldm0mma/sql_datasource_update/ export and format * baldm0mma/sql_datasource_update/ update docs for mysql datasource with dataset dropdown disable info * baldm0mma/sql_datasource_update/ update mssql docs * baldm0mma/sql_datasource_update/ update postgres docs and alert logic * baldm0mma/sql_datasource_update/ add tests * baldm0mma/sql_datasource_update/ update docs * baldm0mma/sql_datasource_update/ update test names * baldm0mma/sql_datasource_update/ update alert language * baldm0mma/sql_datasource_update/ correct spelling * baldm0mma/sql_datasource_update/ update postgres query builder image * baldm0mma/sql_datasource_update/ update annos * baldm0mma/sql_datasource_update/ update tests * baldm0mma/sql_datasource_update/ docs updated * baldm0mma/sql_datsource_update/ refactor determinePlaceholder * Update public/app/features/plugins/sql/components/QueryEditor.tsx spelling Co-authored-by: Zoltán Bedi <zoltan.bedi@gmail.com> * Update public/app/features/plugins/sql/components/QueryEditor.tsx spelling Co-authored-by: Zoltán Bedi <zoltan.bedi@gmail.com> * baldm0mma/sql_datasource_update/ remove superfluous cleanup data from tests * baldm0mma/sql_datasource_update/ update spelling * Update public/app/features/plugins/sql/components/SqlComponents.test.tsx spelling Co-authored-by: Zoltán Bedi <zoltan.bedi@gmail.com> * baldm0mma/sql_datasource_update/ add logic to prevent db call for tables if dataset it nullish * baldm0mma/sql_datasource_update/ update alert tests * baldm0mma/sql_datasource_update/ update button text * baldm0mma/sql_datasource_update/ update tests to preferred standard * baldm0mma/sql_datasource_update/add feature flag * baldm0mma/sql_datasource_update/ update mssql docs * baldm0mma/sql_datasource_update/ add feature flag to registry * baldm0mma/sql_datasource_update/ adjust table and dataset dropdown logic * baldm0mma/sql_datasource_update/ update testing to deal with feature flag * baldm0mma/sql_datasource_update/ update wioth cascadeDisable * baldm0mma/sql_datasource_update/ update naming * baldm0mma/sql_datasource_update/ update tests to reflect enabled feature flag * baldm0mma/sql_datasource_update/ update annotations * baldm0mma/sql_datasource_update/ update annos in queryEd * baldm0mma/sql_datasource_update/ update test names * baldm0mma/sql_datasource_update/ update anno issues * baldm0mma/slq_datasource_update/ add query to sqlDatasource with error * baldm0mma/sql_datasource_update/ update docs language * baldm0mma/sql_datasource_update/ remove notes to self * baldm0mma/sql_datasource_update/ add QueryEditorFeatureFlag.utils.ts * baldm0mma/sql_datasource_update/ update database into json * baldm0mma/sql_datasource_update/ found file * Update docs/sources/datasources/mssql/query-editor/index.md Co-authored-by: lwandz13 <126723338+lwandz13@users.noreply.github.com> * baldm0mma/sql_datasource_update/ update feature flag and toggles * baldm0mma/sql_datasource_update/ add hasConfigIssue, update annos, rethink disable logic * baldm0mma/sql_datasource_update/ update warning language * baldm0mma/sql_datasource_update/ update button content * baldm0mma/sql_datasource_update/ update jsonData logic in frontendsettings.go * baldm0mma/sql_datasource_update/ update jsonData logic * baldm0mma/sql_datasource_update/ update annos in frontendsettings.go * baldm0mma/sql_datasource_update/ update sql editor docs * baldm0mma/sql_datasource_update/ update mysql docs * baldm0mma/sql_datasource_update/ update postgres docs * baldm0mma/sql_datasource_update/ remove unused code in datasetSelector.tsx * baldm0mma/sql_datasource_update/ update syntax conventions * baldm0mma/sql_datasource_update/ add logs * baldm0mma/sql_datasource_update/ remove unused code * baldm0mma/sql_datasource_update/ remove conlogs * baldm0mma/sql_datasource_update/ update tests * baldm0mma/sql_datasource_update/ add second error to query * baldm0mma/sql_datasource_update/ run make gen-cue * baldm0mma/sql_database_update/ lint registry * baldm0mma/sql_datasource_update/ update registry * baldm0mma/sql_datasource_update/ upate datasource logic * baldm0mma/sql_datasource_update/ add logs * baldm0mma/sql_datasource_update/ add comms to self * baldm0mma/sql_datasource_update/ comment out false pos tests, and add investigatory comments * baldm0mma/sql_database_update/ update query error to only test for config change if query was made in "builder" mode * baldm0mma/sql_datasource_update/ update annos in frontendsettings.go * baldm0mma/sql_datasource_update/ update error logic to datasource * baldm0mma/sql_datasource_update/ remove alerts from query editor * baldm0mma/sql_datasource_update/ remove unused imports * baldm0mma/sql_datasource_update/ update tests * baldm0mma/sql_datasource_update/ remove comments * baldm0mma/sql_datasource_update/ remove logs in queryGroup.tsx * baldm0mma/sql_datasource_update/ remove outdated annotation in datasetSelector.tsx * baldm0mma/sql_datasource_update/ remove superfluous test and update test description * baldm0mma/sql_datasource_update/ remove feature flag * baldm0mma/sql_datasource_update/ add back feature flag * baldm0mma/sql_datasource_update/ update to enums * baldm0mma/sql_datasource_update/ update panel caps * baldm0mma/sql_datasource_update/ update dataset selector to default update the database correctly * baldm0mma/sql_datasource_update/ move onChange into conditional * baldm0mma/sql_datasource_update/ add logic for previous datasets choice * baldm0mma/sql_datasource_update/ add back previous logic for assigning default datasets * baldm0mma/sql_datasource_update/ update useEffect dep array * baldm0mma/sql_datasource_update/ remove feature toggle * baldm0mma/sql_datasource_update/ add feature toggle --------- Co-authored-by: Zoltán Bedi <zoltan.bedi@gmail.com> Co-authored-by: lwandz13 <126723338+lwandz13@users.noreply.github.com>
247 lines
6.9 KiB
TypeScript
247 lines
6.9 KiB
TypeScript
import React, { useCallback, useState } from 'react';
|
|
import { useCopyToClipboard } from 'react-use';
|
|
|
|
import { SelectableValue } from '@grafana/data';
|
|
import { EditorField, EditorHeader, EditorMode, EditorRow, FlexItem, InlineSelect, Space } from '@grafana/experimental';
|
|
import { Button, InlineSwitch, RadioButtonGroup, Tooltip } from '@grafana/ui';
|
|
|
|
import { QueryWithDefaults } from '../defaults';
|
|
import { SQLQuery, QueryFormat, QueryRowFilter, QUERY_FORMAT_OPTIONS, DB } from '../types';
|
|
|
|
import { ConfirmModal } from './ConfirmModal';
|
|
import { DatasetSelector } from './DatasetSelector';
|
|
import { isSqlDatasourceDatabaseSelectionFeatureFlagEnabled } from './QueryEditorFeatureFlag.utils';
|
|
import { TableSelector } from './TableSelector';
|
|
|
|
export interface QueryHeaderProps {
|
|
db: DB;
|
|
isPostgresInstance?: boolean;
|
|
isQueryRunnable: boolean;
|
|
onChange: (query: SQLQuery) => void;
|
|
onQueryRowChange: (queryRowFilter: QueryRowFilter) => void;
|
|
onRunQuery: () => void;
|
|
preconfiguredDataset: string;
|
|
query: QueryWithDefaults;
|
|
queryRowFilter: QueryRowFilter;
|
|
}
|
|
|
|
const editorModes = [
|
|
{ label: 'Builder', value: EditorMode.Builder },
|
|
{ label: 'Code', value: EditorMode.Code },
|
|
];
|
|
|
|
export function QueryHeader({
|
|
db,
|
|
isPostgresInstance,
|
|
isQueryRunnable,
|
|
onChange,
|
|
onQueryRowChange,
|
|
onRunQuery,
|
|
preconfiguredDataset,
|
|
query,
|
|
queryRowFilter,
|
|
}: QueryHeaderProps) {
|
|
const { editorMode } = query;
|
|
const [_, copyToClipboard] = useCopyToClipboard();
|
|
const [showConfirm, setShowConfirm] = useState(false);
|
|
const toRawSql = db.toRawSql;
|
|
|
|
const onEditorModeChange = useCallback(
|
|
(newEditorMode: EditorMode) => {
|
|
if (editorMode === EditorMode.Code) {
|
|
setShowConfirm(true);
|
|
return;
|
|
}
|
|
onChange({ ...query, editorMode: newEditorMode });
|
|
},
|
|
[editorMode, onChange, query]
|
|
);
|
|
|
|
const onFormatChange = (e: SelectableValue) => {
|
|
const next = { ...query, format: e.value !== undefined ? e.value : QueryFormat.Table };
|
|
onChange(next);
|
|
};
|
|
|
|
const onDatasetChange = (e: SelectableValue) => {
|
|
if (e.value === query.dataset) {
|
|
return;
|
|
}
|
|
|
|
const next = {
|
|
...query,
|
|
dataset: e.value,
|
|
table: undefined,
|
|
sql: undefined,
|
|
rawSql: '',
|
|
};
|
|
|
|
onChange(next);
|
|
};
|
|
|
|
const onTableChange = (e: SelectableValue) => {
|
|
if (e.value === query.table) {
|
|
return;
|
|
}
|
|
|
|
const next: SQLQuery = {
|
|
...query,
|
|
table: e.value,
|
|
sql: undefined,
|
|
rawSql: '',
|
|
};
|
|
|
|
onChange(next);
|
|
};
|
|
|
|
const datasetDropdownIsAvailable = () => {
|
|
// If the feature flag is DISABLED, && the datasource is Postgres (`isPostgresInstance`),
|
|
// we want to hide the dropdown - as per previous behavior.
|
|
if (!isSqlDatasourceDatabaseSelectionFeatureFlagEnabled() && isPostgresInstance) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
return (
|
|
<>
|
|
<EditorHeader>
|
|
<InlineSelect
|
|
label="Format"
|
|
value={query.format}
|
|
placeholder="Select format"
|
|
menuShouldPortal
|
|
onChange={onFormatChange}
|
|
options={QUERY_FORMAT_OPTIONS}
|
|
/>
|
|
|
|
{editorMode === EditorMode.Builder && (
|
|
<>
|
|
<InlineSwitch
|
|
id="sql-filter"
|
|
label="Filter"
|
|
transparent={true}
|
|
showLabel={true}
|
|
value={queryRowFilter.filter}
|
|
onChange={(ev) =>
|
|
ev.target instanceof HTMLInputElement &&
|
|
onQueryRowChange({ ...queryRowFilter, filter: ev.target.checked })
|
|
}
|
|
/>
|
|
|
|
<InlineSwitch
|
|
id="sql-group"
|
|
label="Group"
|
|
transparent={true}
|
|
showLabel={true}
|
|
value={queryRowFilter.group}
|
|
onChange={(ev) =>
|
|
ev.target instanceof HTMLInputElement &&
|
|
onQueryRowChange({ ...queryRowFilter, group: ev.target.checked })
|
|
}
|
|
/>
|
|
|
|
<InlineSwitch
|
|
id="sql-order"
|
|
label="Order"
|
|
transparent={true}
|
|
showLabel={true}
|
|
value={queryRowFilter.order}
|
|
onChange={(ev) =>
|
|
ev.target instanceof HTMLInputElement &&
|
|
onQueryRowChange({ ...queryRowFilter, order: ev.target.checked })
|
|
}
|
|
/>
|
|
|
|
<InlineSwitch
|
|
id="sql-preview"
|
|
label="Preview"
|
|
transparent={true}
|
|
showLabel={true}
|
|
value={queryRowFilter.preview}
|
|
onChange={(ev) =>
|
|
ev.target instanceof HTMLInputElement &&
|
|
onQueryRowChange({ ...queryRowFilter, preview: ev.target.checked })
|
|
}
|
|
/>
|
|
</>
|
|
)}
|
|
|
|
<FlexItem grow={1} />
|
|
|
|
{isQueryRunnable ? (
|
|
<Button icon="play" variant="primary" size="sm" onClick={() => onRunQuery()}>
|
|
Run query
|
|
</Button>
|
|
) : (
|
|
<Tooltip
|
|
theme="error"
|
|
content={
|
|
<>
|
|
Your query is invalid. Check below for details. <br />
|
|
However, you can still run this query.
|
|
</>
|
|
}
|
|
placement="top"
|
|
>
|
|
<Button icon="exclamation-triangle" variant="secondary" size="sm" onClick={() => onRunQuery()}>
|
|
Run query
|
|
</Button>
|
|
</Tooltip>
|
|
)}
|
|
|
|
<RadioButtonGroup options={editorModes} size="sm" value={editorMode} onChange={onEditorModeChange} />
|
|
|
|
<ConfirmModal
|
|
isOpen={showConfirm}
|
|
onCopy={() => {
|
|
setShowConfirm(false);
|
|
copyToClipboard(query.rawSql!);
|
|
onChange({
|
|
...query,
|
|
rawSql: toRawSql(query),
|
|
editorMode: EditorMode.Builder,
|
|
});
|
|
}}
|
|
onDiscard={() => {
|
|
setShowConfirm(false);
|
|
onChange({
|
|
...query,
|
|
rawSql: toRawSql(query),
|
|
editorMode: EditorMode.Builder,
|
|
});
|
|
}}
|
|
onCancel={() => setShowConfirm(false)}
|
|
/>
|
|
</EditorHeader>
|
|
|
|
{editorMode === EditorMode.Builder && (
|
|
<>
|
|
<Space v={0.5} />
|
|
<EditorRow>
|
|
{datasetDropdownIsAvailable() && (
|
|
<EditorField label="Dataset" width={25}>
|
|
<DatasetSelector
|
|
db={db}
|
|
dataset={query.dataset}
|
|
isPostgresInstance={isPostgresInstance}
|
|
preconfiguredDataset={preconfiguredDataset}
|
|
onChange={onDatasetChange}
|
|
/>
|
|
</EditorField>
|
|
)}
|
|
<EditorField label="Table" width={25}>
|
|
<TableSelector
|
|
db={db}
|
|
dataset={query.dataset || preconfiguredDataset}
|
|
table={query.table}
|
|
onChange={onTableChange}
|
|
/>
|
|
</EditorField>
|
|
</EditorRow>
|
|
</>
|
|
)}
|
|
</>
|
|
);
|
|
}
|