Files
grafana/public/app/features/admin/AdminFeatureTogglesAPI.ts
João Calisto 7869ca1932 Feature Management: UI improvements (#76866)
* Feature Management: UI improvements

* update UI logic

---------

Co-authored-by: Michael Mandrus <michael.mandrus@grafana.com>
2023-10-26 10:42:00 +01:00

63 lines
1.6 KiB
TypeScript

import { createApi, BaseQueryFn } from '@reduxjs/toolkit/query/react';
import { lastValueFrom } from 'rxjs';
import { getBackendSrv } from '@grafana/runtime';
type QueryArgs = {
url: string;
method?: string;
body?: { featureToggles: FeatureToggle[] };
};
const backendSrvBaseQuery =
({ baseUrl }: { baseUrl: string }): BaseQueryFn<QueryArgs> =>
async ({ url, method = 'GET', body }) => {
try {
const { data } = await lastValueFrom(
getBackendSrv().fetch({
url: baseUrl + url,
method,
data: body,
})
);
return { data };
} catch (error) {
return { error };
}
};
export const togglesApi = createApi({
reducerPath: 'togglesApi',
baseQuery: backendSrvBaseQuery({ baseUrl: '/api' }),
endpoints: (builder) => ({
getManagerState: builder.query<FeatureMgmtState, void>({
query: () => ({ url: '/featuremgmt/state' }),
}),
getFeatureToggles: builder.query<FeatureToggle[], void>({
query: () => ({ url: '/featuremgmt' }),
}),
updateFeatureToggles: builder.mutation<void, FeatureToggle[]>({
query: (updatedToggles) => ({
url: '/featuremgmt',
method: 'POST',
body: { featureToggles: updatedToggles },
}),
}),
}),
});
type FeatureToggle = {
name: string;
description?: string;
enabled: boolean;
readOnly?: boolean;
};
type FeatureMgmtState = {
restartRequired: boolean;
allowEditing: boolean;
};
export const { useGetManagerStateQuery, useGetFeatureTogglesQuery, useUpdateFeatureTogglesMutation } = togglesApi;
export type { FeatureToggle, FeatureMgmtState };