API: Add programatically generated RHSM API slice definitions

These definitions were generated using the RTKQ code generation tool and
will replace the existing definitions.
This commit is contained in:
lucasgarfield 2023-07-26 15:57:11 +02:00 committed by Lucas Garfield
parent 1894a9dcb2
commit 22df78bffa
11 changed files with 96 additions and 23 deletions

13
api/config/rhsm.ts Normal file
View file

@ -0,0 +1,13 @@
import type { ConfigFile } from '@rtk-query/codegen-openapi'
const config: ConfigFile = {
schemaFile: '../schema/rhsm.json',
apiFile: '../../src/store/emptyRhsmApi.ts',
apiImport: 'emptyRhsmApi',
outputFile: '../../src/store/rhsmApi.ts',
exportName: 'rhsmApi',
hooks: true,
filterEndpoints: ['listActivationKeys', 'showActivationKey'],
}
export default config

1
api/schema/rhsm.json Normal file

File diff suppressed because one or more lines are too long

View file

@ -112,7 +112,7 @@
"test": "TZ=UTC jest --verbose --no-cache",
"test:single": "jest --verbose -w 1",
"build": "webpack --config config/prod.webpack.config.js",
"api": "npx @rtk-query/codegen-openapi ./api/config/image-builder.ts",
"api": "npx @rtk-query/codegen-openapi ./api/config/image-builder.ts & npx @rtk-query/codegen-openapi ./api/config/rhsm.ts",
"verify": "npm-run-all build lint test"
},
"insights": {

View file

@ -24,7 +24,7 @@ import {
Tr,
} from '@patternfly/react-table';
import { useGetActivationKeyInformationQuery } from '../../../store/apiSlice';
import { useShowActivationKeyQuery } from '../../../store/rhsmApi';
const ActivationKeyInformation = () => {
const { getState } = useFormApi();
@ -37,9 +37,12 @@ const ActivationKeyInformation = () => {
isFetching: isFetchingActivationKeyInfo,
isSuccess: isSuccessActivationKeyInfo,
isError: isErrorActivationKeyInfo,
} = useGetActivationKeyInformationQuery(activationKey, {
skip: !activationKey,
});
} = useShowActivationKeyQuery(
{ name: activationKey },
{
skip: !activationKey,
}
);
return (
<>

View file

@ -12,7 +12,7 @@ import {
} from '@patternfly/react-core';
import PropTypes from 'prop-types';
import { useGetActivationKeysQuery } from '../../../store/apiSlice';
import { useListActivationKeysQuery } from '../../../store/rhsmApi';
import { useGetEnvironment } from '../../../Utilities/useGetEnvironment';
const ActivationKeys = ({ label, isRequired, ...props }) => {
@ -30,7 +30,7 @@ const ActivationKeys = ({ label, isRequired, ...props }) => {
isSuccess: isSuccessActivationKeys,
isError: isErrorActivationKeys,
refetch,
} = useGetActivationKeysQuery();
} = useListActivationKeysQuery();
useEffect(() => {
if (isProd()) {

View file

@ -6,6 +6,7 @@ import { Button } from '@patternfly/react-core';
import PropTypes from 'prop-types';
import { usePrefetch } from '../../../store/apiSlice';
import { rhsmApi } from '../../../store/rhsmApi';
import { releaseToVersion } from '../../../Utilities/releaseToVersion';
const CustomButtons = ({
@ -17,7 +18,7 @@ const CustomButtons = ({
const { getState } = useFormApi();
const [isSaving, setIsSaving] = useState(false);
const { currentStep, formOptions } = useContext(WizardContext);
const prefetchActivationKeys = usePrefetch('getActivationKeys');
const prefetchActivationKeys = rhsmApi.usePrefetch('listActivationKeys');
const prefetchRepositories = usePrefetch('getRepositories');
const onNextOrSubmit = () => {

View file

@ -27,7 +27,7 @@ import {
import { RELEASES, UNIT_GIB } from '../../../constants';
import { useGetSourcesQuery } from '../../../store/apiSlice';
import { useGetActivationKeyInformationQuery } from '../../../store/apiSlice';
import { useShowActivationKeyQuery } from '../../../store/rhsmApi';
import { useGetEnvironment } from '../../../Utilities/useGetEnvironment';
import { googleAccType } from '../steps/googleCloud';
@ -443,9 +443,12 @@ export const RegisterLaterList = () => {
export const RegisterNowList = () => {
const { getState } = useFormApi();
const activationKey = getState()?.values?.['subscription-activation-key'];
const { isError } = useGetActivationKeyInformationQuery(activationKey, {
skip: !activationKey,
});
const { isError } = useShowActivationKeyQuery(
{ name: activationKey },
{
skip: !activationKey,
}
);
return (
<>
<TextContent>

View file

@ -1,6 +1,6 @@
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react';
import { ActivationKeys, RepositoryCollectionResponse, SourceResponse, SourceUploadInfoResponse } from '../../types';
import { RepositoryCollectionResponse, SourceResponse, SourceUploadInfoResponse } from '../../types';
type GetRepositoriesArgs = { available_for_arch: string, available_for_version: string, limit: number, offset: number }
@ -12,7 +12,6 @@ enum Provider {
import {
CONTENT_SOURCES,
PROVISIONING_SOURCES_ENDPOINT,
RHSM_API,
} from '../constants';
export const apiSlice = createApi({
@ -26,12 +25,6 @@ export const apiSlice = createApi({
query: (sourceId) =>
`${PROVISIONING_SOURCES_ENDPOINT}/sources/${sourceId}/upload_info`
}),
getActivationKeys: builder.query<ActivationKeys[], void>({
query: () => `${RHSM_API}/activation_keys`,
}),
getActivationKeyInformation: builder.query<ActivationKeys, string>({
query: (name) => `${RHSM_API}/activation_keys/${name}`,
}),
getRepositories: builder.query<RepositoryCollectionResponse, GetRepositoriesArgs>({
query: ({available_for_arch, available_for_version, limit, offset}) => `${CONTENT_SOURCES}/repositories/?available_for_arch=${available_for_arch}&available_for_version=${available_for_version}&limit=${limit}&offset=${offset}`,
}),
@ -39,8 +32,6 @@ export const apiSlice = createApi({
});
export const {
useGetActivationKeysQuery,
useGetActivationKeyInformationQuery,
useGetRepositoriesQuery,
useGetSourcesQuery,
useGetSourceDetailQuery,

View file

@ -0,0 +1,9 @@
import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'
import {RHSM_API} from '../constants'
// initialize an empty api service that we'll inject endpoints into later as needed
export const emptyRhsmApi = createApi({
reducerPath: 'rhsmApi',
baseQuery: fetchBaseQuery({ baseUrl: RHSM_API }),
endpoints: () => ({}),
})

View file

@ -6,12 +6,14 @@ import { apiSlice } from './apiSlice';
import clonesSlice from './clonesSlice';
import composesSlice from './composesSlice';
import { imageBuilderApi } from './imageBuilderApi';
import { rhsmApi } from './rhsmApi';
export const reducer = {
[apiSlice.reducerPath]: apiSlice.reducer,
clones: clonesSlice,
composes: composesSlice,
[imageBuilderApi.reducerPath]: imageBuilderApi.reducer,
[rhsmApi.reducerPath]: rhsmApi.reducer,
notifications: notificationsReducer,
};
@ -19,6 +21,7 @@ export const middleware = (getDefaultMiddleware) =>
getDefaultMiddleware()
.concat(promiseMiddleware)
.concat(apiSlice.middleware)
.concat(imageBuilderApi.middleware);
.concat(imageBuilderApi.middleware)
.concat(rhsmApi.middleware);
export const store = configureStore({ reducer, middleware });

49
src/store/rhsmApi.ts Normal file
View file

@ -0,0 +1,49 @@
import { emptyRhsmApi as api } from "./emptyRhsmApi";
const injectedRtkApi = api.injectEndpoints({
endpoints: (build) => ({
listActivationKeys: build.query<
ListActivationKeysApiResponse,
ListActivationKeysApiArg
>({
query: () => ({ url: `/activation_keys` }),
}),
showActivationKey: build.query<
ShowActivationKeyApiResponse,
ShowActivationKeyApiArg
>({
query: (queryArg) => ({ url: `/activation_keys/${queryArg.name}` }),
}),
}),
overrideExisting: false,
});
export { injectedRtkApi as rhsmApi };
export type ListActivationKeysApiResponse =
/** status 200 Array of activation keys */ {
body?: ActivationKeys[];
};
export type ListActivationKeysApiArg = void;
export type ShowActivationKeyApiResponse = /** status 200 Activation key */ {
body?: ActivationKeys;
};
export type ShowActivationKeyApiArg = {
name: string;
};
export type AdditionalRepositories = {
repositoryLabel?: string;
repositoryName?: string;
};
export type ActivationKeys = {
additionalRepositories?: AdditionalRepositories[];
id?: string;
name?: string;
releaseVersion?: string;
role?: string;
serviceLevel?: string;
usage?: string;
};
export type ErrorDetails = {
code?: number;
message?: string;
};
export const { useListActivationKeysQuery, useShowActivationKeyQuery } =
injectedRtkApi;