mirror of https://github.com/grafana/grafana.git
API clients: Automatically set PATCH headers (#111879)
* API clients: Automatically set PATCH headers * Only modify /apis/ endpoints * Do not overwrite existing content-type
This commit is contained in:
parent
6248971d1e
commit
76d467f285
|
@ -24,24 +24,6 @@ export const folderAPIv1beta1 = generatedAPI
|
|||
// We don't want delete to invalidate getFolder tags, as that would lead to unnecessary 404s
|
||||
invalidatesTags: (result, error) => (error ? [] : [{ type: 'Folder', id: 'LIST' }]),
|
||||
},
|
||||
updateFolder: {
|
||||
query: (queryArg) => ({
|
||||
url: `/folders/${queryArg.name}`,
|
||||
method: 'PATCH',
|
||||
// We need to stringify the body and set the correct header for the call to work with k8s api.
|
||||
body: JSON.stringify(queryArg.patch),
|
||||
headers: {
|
||||
'Content-Type': 'application/strategic-merge-patch+json',
|
||||
},
|
||||
params: {
|
||||
pretty: queryArg.pretty,
|
||||
dryRun: queryArg.dryRun,
|
||||
fieldManager: queryArg.fieldManager,
|
||||
fieldValidation: queryArg.fieldValidation,
|
||||
force: queryArg.force,
|
||||
},
|
||||
}),
|
||||
},
|
||||
},
|
||||
})
|
||||
.injectEndpoints({
|
||||
|
@ -98,4 +80,4 @@ export const {
|
|||
} = folderAPIv1beta1;
|
||||
|
||||
// eslint-disable-next-line no-barrel-files/no-barrel-files
|
||||
export { type Folder, type FolderList, type CreateFolderApiArg, type ReplaceFolderApiArg } from './endpoints.gen';
|
||||
export { type CreateFolderApiArg, type Folder, type FolderList, type ReplaceFolderApiArg } from './endpoints.gen';
|
||||
|
|
|
@ -15,12 +15,26 @@ interface CreateBaseQueryOptions {
|
|||
export function createBaseQuery({ baseURL }: CreateBaseQueryOptions): BaseQueryFn<RequestOptions> {
|
||||
async function backendSrvBaseQuery(requestOptions: RequestOptions) {
|
||||
try {
|
||||
const headers: Record<string, string> = {
|
||||
...requestOptions.headers,
|
||||
};
|
||||
|
||||
// Add Content-Type header for PATCH requests to /apis/ endpoints if not already set
|
||||
if (
|
||||
requestOptions.method?.toUpperCase() === 'PATCH' &&
|
||||
baseURL?.startsWith('/apis/') &&
|
||||
!headers['Content-Type']
|
||||
) {
|
||||
headers['Content-Type'] = 'application/strategic-merge-patch+json';
|
||||
}
|
||||
|
||||
const { data: responseData, ...meta } = await lastValueFrom(
|
||||
getBackendSrv().fetch({
|
||||
...requestOptions,
|
||||
url: baseURL + requestOptions.url,
|
||||
showErrorAlert: requestOptions.showErrorAlert ?? false,
|
||||
data: requestOptions.body,
|
||||
headers,
|
||||
})
|
||||
);
|
||||
return { data: responseData, meta };
|
||||
|
|
|
@ -91,7 +91,9 @@ export const isContentTypeJson = (headers: Headers) => {
|
|||
const contentType = headers.get('content-type');
|
||||
if (
|
||||
contentType &&
|
||||
(contentType.toLowerCase() === 'application/json' || contentType.toLowerCase() === 'application/merge-patch+json')
|
||||
['application/json', 'application/merge-patch+json', 'application/strategic-merge-patch+json'].includes(
|
||||
contentType.toLowerCase()
|
||||
)
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue