mirror of
https://github.com/grafana/grafana.git
synced 2025-09-20 15:13:52 +08:00

Co-authored-by: nmarrs <nathanielmarrs@gmail.com> Co-authored-by: Adela Almasan <adela.almasan@grafana.com> Co-authored-by: drew08t <drew08@gmail.com> Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
73 lines
1.9 KiB
TypeScript
73 lines
1.9 KiB
TypeScript
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';
|
|
|
|
import { DataQuery } from '@grafana/data/src';
|
|
|
|
import { SavedQueryUpdateOpts } from '../components/QueryEditorDrawer';
|
|
|
|
import { getSavedQuerySrv } from './SavedQueriesSrv';
|
|
|
|
export type SavedQueryRef = {
|
|
uid?: string;
|
|
};
|
|
|
|
export type Variable = {
|
|
name: string;
|
|
type?: string;
|
|
current: {
|
|
value: string | number;
|
|
};
|
|
};
|
|
|
|
type SavedQueryMeta = {
|
|
title: string;
|
|
description?: string;
|
|
tags?: string[];
|
|
schemaVersion?: number;
|
|
variables: Variable[];
|
|
};
|
|
|
|
type SavedQueryData<TQuery extends DataQuery = DataQuery> = {
|
|
queries: TQuery[];
|
|
};
|
|
|
|
export type SavedQuery<TQuery extends DataQuery = DataQuery> = SavedQueryMeta & SavedQueryData<TQuery> & SavedQueryRef;
|
|
|
|
export const isQueryWithMixedDatasource = (savedQuery: SavedQuery): boolean => {
|
|
if (!savedQuery?.queries?.length) {
|
|
return false;
|
|
}
|
|
|
|
const firstDs = savedQuery.queries[0].datasource;
|
|
return savedQuery.queries.some((q) => q.datasource?.uid !== firstDs?.uid || q.datasource?.type !== firstDs?.type);
|
|
};
|
|
|
|
const api = createApi({
|
|
reducerPath: 'savedQueries',
|
|
baseQuery: fetchBaseQuery({ baseUrl: '/' }),
|
|
endpoints: (build) => ({
|
|
getSavedQueryByUids: build.query<SavedQuery[] | null, SavedQueryRef[]>({
|
|
async queryFn(arg, queryApi, extraOptions, baseQuery) {
|
|
return { data: await getSavedQuerySrv().getSavedQueries(arg) };
|
|
},
|
|
}),
|
|
deleteSavedQuery: build.mutation<null, SavedQueryRef>({
|
|
async queryFn(arg) {
|
|
await getSavedQuerySrv().deleteSavedQuery(arg);
|
|
return {
|
|
data: null,
|
|
};
|
|
},
|
|
}),
|
|
updateSavedQuery: build.mutation<null, { query: SavedQuery; opts: SavedQueryUpdateOpts }>({
|
|
async queryFn(arg) {
|
|
await getSavedQuerySrv().updateSavedQuery(arg.query, arg.opts);
|
|
return {
|
|
data: null,
|
|
};
|
|
},
|
|
}),
|
|
}),
|
|
});
|
|
|
|
export const { useUpdateSavedQueryMutation } = api;
|