diff --git a/public/app/core/reducers/root.ts b/public/app/core/reducers/root.ts
index f2c436062bd..33d86889aee 100644
--- a/public/app/core/reducers/root.ts
+++ b/public/app/core/reducers/root.ts
@@ -2,6 +2,7 @@ import { ReducersMapObject } from '@reduxjs/toolkit';
import { AnyAction, combineReducers } from 'redux';
import sharedReducers from 'app/core/reducers';
+import { migrateToCloudAPI } from 'app/features/admin/migrate-to-cloud/api';
import ldapReducers from 'app/features/admin/state/reducers';
import alertingReducers from 'app/features/alerting/state/reducers';
import apiKeysReducers from 'app/features/api-keys/state/reducers';
@@ -55,6 +56,7 @@ const rootReducers = {
[alertingApi.reducerPath]: alertingApi.reducer,
[publicDashboardApi.reducerPath]: publicDashboardApi.reducer,
[browseDashboardsAPI.reducerPath]: browseDashboardsAPI.reducer,
+ [migrateToCloudAPI.reducerPath]: migrateToCloudAPI.reducer,
};
const addedReducers = {};
diff --git a/public/app/features/admin/migrate-to-cloud/MigrateToCloud.tsx b/public/app/features/admin/migrate-to-cloud/MigrateToCloud.tsx
index a213fe2ae60..f3d09ecc0ae 100644
--- a/public/app/features/admin/migrate-to-cloud/MigrateToCloud.tsx
+++ b/public/app/features/admin/migrate-to-cloud/MigrateToCloud.tsx
@@ -1,7 +1,19 @@
import React from 'react';
+import { Stack, Text } from '@grafana/ui';
import { Page } from 'app/core/components/Page/Page';
+import { useGetStatusQuery } from './api';
+
export default function MigrateToCloud() {
- return TODO;
+ const { data } = useGetStatusQuery();
+
+ return (
+
+
+ TODO
+ {JSON.stringify(data)}
+
+
+ );
}
diff --git a/public/app/features/admin/migrate-to-cloud/api.ts b/public/app/features/admin/migrate-to-cloud/api.ts
new file mode 100644
index 00000000000..d1972ce85c9
--- /dev/null
+++ b/public/app/features/admin/migrate-to-cloud/api.ts
@@ -0,0 +1,45 @@
+import { BaseQueryFn, createApi } from '@reduxjs/toolkit/query/react';
+import { lastValueFrom } from 'rxjs';
+
+import { BackendSrvRequest, getBackendSrv } from '@grafana/runtime';
+
+interface RequestOptions extends BackendSrvRequest {
+ manageError?: (err: unknown) => { error: unknown };
+ showErrorAlert?: boolean;
+}
+
+function createBackendSrvBaseQuery({ baseURL }: { baseURL: string }): BaseQueryFn {
+ async function backendSrvBaseQuery(requestOptions: RequestOptions) {
+ try {
+ const { data: responseData, ...meta } = await lastValueFrom(
+ getBackendSrv().fetch({
+ ...requestOptions,
+ url: baseURL + requestOptions.url,
+ showErrorAlert: requestOptions.showErrorAlert,
+ })
+ );
+ return { data: responseData, meta };
+ } catch (error) {
+ return requestOptions.manageError ? requestOptions.manageError(error) : { error };
+ }
+ }
+
+ return backendSrvBaseQuery;
+}
+
+interface MigrateToCloudStatusDTO {
+ enabled: boolean;
+}
+
+export const migrateToCloudAPI = createApi({
+ reducerPath: 'migrateToCloudAPI',
+ baseQuery: createBackendSrvBaseQuery({ baseURL: '/api' }),
+ endpoints: (builder) => ({
+ // TODO :)
+ getStatus: builder.query({
+ queryFn: () => ({ data: { enabled: false } }),
+ }),
+ }),
+});
+
+export const { useGetStatusQuery } = migrateToCloudAPI;
diff --git a/public/app/features/admin/migrate-to-cloud/fixtures/mswAPI.ts b/public/app/features/admin/migrate-to-cloud/fixtures/mswAPI.ts
new file mode 100644
index 00000000000..d8b9748e525
--- /dev/null
+++ b/public/app/features/admin/migrate-to-cloud/fixtures/mswAPI.ts
@@ -0,0 +1,15 @@
+import { HttpResponse, http } from 'msw';
+import { SetupServer, setupServer } from 'msw/node';
+
+export function registerAPIHandlers(): SetupServer {
+ const server = setupServer(
+ // TODO
+ http.get('/api/cloudmigration/status', () => {
+ return HttpResponse.json({
+ enabled: false,
+ });
+ })
+ );
+
+ return server;
+}