store/cockpit: add content sources api

Add a `contentSourcesApi` for the on-prem frontend. We need to add a small
workaround and put these endpoints under the `cockpitApi` reducer.
since RTK query here, doesn't like splitting out apis when they are
fundamentally the same.

To workaround this we can will just chain the endpoints so:
`emptyCockpitApi` -> `contentSourcesApi` -> `cockpitApi`

This allows us to keep the `contentSourcesApi` separate so
we can export some of the endpoints so that the `cockpitApi`
doesn't become a monolith.
This commit is contained in:
Gianluca Zuccarelli 2025-01-28 15:33:33 +00:00 committed by Sanne Raymaekers
parent b8ceba2e3e
commit bc1564eddb
5 changed files with 60 additions and 27 deletions

View file

@ -35,7 +35,7 @@ import {
targetOptions, targetOptions,
UNIT_GIB, UNIT_GIB,
} from '../../../../constants'; } from '../../../../constants';
import { useListSnapshotsByDateMutation } from '../../../../store/backendApi'; import { useListSnapshotsByDateMutation } from '../../../../store/contentSourcesApi';
import { useAppSelector } from '../../../../store/hooks'; import { useAppSelector } from '../../../../store/hooks';
import { useGetSourceListQuery } from '../../../../store/provisioningApi'; import { useGetSourceListQuery } from '../../../../store/provisioningApi';
import { useShowActivationKeyQuery } from '../../../../store/rhsmApi'; import { useShowActivationKeyQuery } from '../../../../store/rhsmApi';

View file

@ -1,6 +1,5 @@
import * as cockpitQueries from './cockpit/cockpitApi'; import * as cockpitQueries from './cockpit/cockpitApi';
import { cockpitApi } from './cockpit/enhancedCockpitApi'; import { cockpitApi } from './cockpit/enhancedCockpitApi';
import * as sourcesQueries from './service/contentSourcesApi';
import { imageBuilderApi } from './service/enhancedImageBuilderApi'; import { imageBuilderApi } from './service/enhancedImageBuilderApi';
import * as serviceQueries from './service/imageBuilderApi'; import * as serviceQueries from './service/imageBuilderApi';
@ -32,10 +31,6 @@ export const useGetOscapProfilesQuery = process.env.IS_ON_PREMISE
? cockpitQueries.useGetOscapProfilesQuery ? cockpitQueries.useGetOscapProfilesQuery
: serviceQueries.useGetOscapProfilesQuery; : serviceQueries.useGetOscapProfilesQuery;
export const useListSnapshotsByDateMutation = process.env.IS_ON_PREMISE
? cockpitQueries.useListSnapshotsByDateMutation
: sourcesQueries.useListSnapshotsByDateMutation;
export const useComposeBlueprintMutation = process.env.IS_ON_PREMISE export const useComposeBlueprintMutation = process.env.IS_ON_PREMISE
? cockpitQueries.useComposeBlueprintMutation ? cockpitQueries.useComposeBlueprintMutation
: serviceQueries.useComposeBlueprintMutation; : serviceQueries.useComposeBlueprintMutation;

View file

@ -10,14 +10,16 @@ import cockpit from 'cockpit';
import { fsinfo } from 'cockpit/fsinfo'; import { fsinfo } from 'cockpit/fsinfo';
import { v4 as uuidv4 } from 'uuid'; import { v4 as uuidv4 } from 'uuid';
import { emptyCockpitApi } from './emptyCockpitApi'; // We have to work around RTK query here, since it doesn't like splitting
// out the same api into two separate apis. So, instead, we can just
// inherit/import the `contentSourcesApi` and build on top of that.
// This is fine since all the api endpoints for on-prem should query
// the same unix socket. This allows us to split out the code a little
// bit so that the `cockpitApi` doesn't become a monolith.
import { contentSourcesApi } from './contentSourcesApi';
import { mapHostedToOnPrem } from '../../Components/Blueprints/helpers/onPremToHostedBlueprintMapper'; import { mapHostedToOnPrem } from '../../Components/Blueprints/helpers/onPremToHostedBlueprintMapper';
import { BLUEPRINTS_DIR } from '../../constants'; import { BLUEPRINTS_DIR } from '../../constants';
import {
ListSnapshotsByDateApiArg,
ListSnapshotsByDateApiResponse,
} from '../service/contentSourcesApi';
import { import {
ComposeBlueprintApiResponse, ComposeBlueprintApiResponse,
ComposeBlueprintApiArg, ComposeBlueprintApiArg,
@ -84,7 +86,7 @@ const readComposes = async (bpID: string) => {
return composes; return composes;
}; };
export const cockpitApi = emptyCockpitApi.injectEndpoints({ export const cockpitApi = contentSourcesApi.injectEndpoints({
endpoints: (builder) => { endpoints: (builder) => {
return { return {
getArchitectures: builder.query< getArchitectures: builder.query<
@ -278,19 +280,6 @@ export const cockpitApi = emptyCockpitApi.injectEndpoints({
}; };
}, },
}), }),
// add an empty response for now
// just so we can step through the create
// image wizard for on prem
listSnapshotsByDate: builder.mutation<
ListSnapshotsByDateApiResponse,
ListSnapshotsByDateApiArg
>({
queryFn: () => ({
data: {
data: [],
},
}),
}),
composeBlueprint: builder.mutation< composeBlueprint: builder.mutation<
ComposeBlueprintApiResponse, ComposeBlueprintApiResponse,
ComposeBlueprintApiArg ComposeBlueprintApiArg
@ -455,6 +444,10 @@ export const cockpitApi = emptyCockpitApi.injectEndpoints({
}), }),
}; };
}, },
// since we are inheriting some endpoints,
// we want to make sure that we don't override
// any existing endpoints.
overrideExisting: 'throw',
}); });
export const { export const {
@ -465,7 +458,6 @@ export const {
useCreateBlueprintMutation, useCreateBlueprintMutation,
useDeleteBlueprintMutation, useDeleteBlueprintMutation,
useGetOscapProfilesQuery, useGetOscapProfilesQuery,
useListSnapshotsByDateMutation,
useComposeBlueprintMutation, useComposeBlueprintMutation,
useGetComposesQuery, useGetComposesQuery,
useGetBlueprintComposesQuery, useGetBlueprintComposesQuery,

View file

@ -0,0 +1,27 @@
import { emptyCockpitApi } from './emptyCockpitApi';
import type {
ListSnapshotsByDateApiArg,
ListSnapshotsByDateApiResponse,
} from '../service/contentSourcesApi';
export const contentSourcesApi = emptyCockpitApi.injectEndpoints({
endpoints: (builder) => ({
// add an empty response for now
// just so we can step through the create
// image wizard for on prem
listSnapshotsByDate: builder.mutation<
ListSnapshotsByDateApiResponse,
ListSnapshotsByDateApiArg
>({
queryFn: () => ({
data: {
data: [],
},
}),
}),
}),
overrideExisting: false,
});
export const { useListSnapshotsByDateMutation } = contentSourcesApi;

View file

@ -1 +1,20 @@
export * from './service/contentSourcesApi'; import * as cockpitQueries from './cockpit/contentSourcesApi';
import * as serviceQueries from './service/contentSourcesApi';
export const useListSnapshotsByDateMutation = process.env.IS_ON_PREMISE
? cockpitQueries.useListSnapshotsByDateMutation
: serviceQueries.useListSnapshotsByDateMutation;
export const {
useListFeaturesQuery,
useSearchRpmMutation,
useSearchPackageGroupMutation,
useListRepositoriesQuery,
useCreateRepositoryMutation,
useBulkImportRepositoriesMutation,
useListRepositoriesRpmsQuery,
contentSourcesApi,
} = serviceQueries;
// we need to re-export all the types
export type * from './service/contentSourcesApi';