Files
Artur Wierzbicki 009d65b794 Add query library behind dev-mode-only feature flag (#55947)
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>
2022-11-30 15:33:40 -08:00

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;