1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-02-23 00:22:19 +01:00

chore: incoming webhook token hooks (#5790)

https://linear.app/unleash/issue/2-1814/create-new-incoming-webhook-token-hooks-on-the-frontend

Adds incoming webhook token hooks to help us with CRUD operations on the
frontend.
This commit is contained in:
Nuno Góis 2024-01-08 15:43:24 +00:00 committed by GitHub
parent 68d7af919d
commit c8fb313004
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 121 additions and 0 deletions

View File

@ -0,0 +1,77 @@
import { IIncomingWebhookToken } from 'interfaces/incomingWebhook';
import useAPI from '../useApi/useApi';
const ENDPOINT = 'api/admin/incoming-webhooks';
export type AddOrUpdateIncomingWebhookToken = Omit<
IIncomingWebhookToken,
'id' | 'incomingWebhookId' | 'createdAt' | 'createdByUserId'
>;
export type IncomingWebhookTokenWithTokenSecret = IIncomingWebhookToken & {
token: string;
};
export const useIncomingWebhookTokensApi = () => {
const { loading, makeRequest, createRequest, errors } = useAPI({
propagateErrors: true,
});
const addIncomingWebhookToken = async (
incomingWebhookId: number,
incomingWebhookToken: AddOrUpdateIncomingWebhookToken,
): Promise<IncomingWebhookTokenWithTokenSecret> => {
const requestId = 'addIncomingWebhookToken';
const req = createRequest(
`${ENDPOINT}/${incomingWebhookId}/tokens`,
{
method: 'POST',
body: JSON.stringify(incomingWebhookToken),
},
requestId,
);
const response = await makeRequest(req.caller, req.id);
return response.json();
};
const updateIncomingWebhookToken = async (
incomingWebhookId: number,
incomingWebhookTokenId: number,
incomingWebhookToken: AddOrUpdateIncomingWebhookToken,
) => {
const requestId = 'updateIncomingWebhookToken';
const req = createRequest(
`${ENDPOINT}/${incomingWebhookId}/tokens/${incomingWebhookTokenId}`,
{
method: 'PUT',
body: JSON.stringify(incomingWebhookToken),
},
requestId,
);
await makeRequest(req.caller, req.id);
};
const removeIncomingWebhookToken = async (
incomingWebhookId: number,
incomingWebhookTokenId: number,
) => {
const requestId = 'removeIncomingWebhookToken';
const req = createRequest(
`${ENDPOINT}/${incomingWebhookId}/tokens/${incomingWebhookTokenId}`,
{ method: 'DELETE' },
requestId,
);
await makeRequest(req.caller, req.id);
};
return {
addIncomingWebhookToken,
updateIncomingWebhookToken,
removeIncomingWebhookToken,
errors,
loading,
};
};

View File

@ -0,0 +1,36 @@
import { useMemo } from 'react';
import { formatApiPath } from 'utils/formatPath';
import handleErrorResponses from '../httpErrorResponseHandler';
import { useConditionalSWR } from '../useConditionalSWR/useConditionalSWR';
import useUiConfig from '../useUiConfig/useUiConfig';
import { IIncomingWebhookToken } from 'interfaces/incomingWebhook';
const ENDPOINT = 'api/admin/incoming-webhooks';
export const useIncomingWebhookTokens = (incomingWebhookId: number) => {
const { isEnterprise } = useUiConfig();
const { data, error, mutate } = useConditionalSWR(
isEnterprise(),
{ incomingWebhookTokens: [] },
formatApiPath(`${ENDPOINT}/${incomingWebhookId}/tokens`),
fetcher,
);
return useMemo(
() => ({
incomingWebhookTokens: (data?.incomingWebhooks ??
[]) as IIncomingWebhookToken[],
loading: !error && !data,
refetch: () => mutate(),
error,
}),
[data, error, mutate],
);
};
const fetcher = (path: string) => {
return fetch(path)
.then(handleErrorResponses('Incoming webhook tokens'))
.then((res) => res.json());
};

View File

@ -5,3 +5,11 @@ export interface IIncomingWebhook {
createdAt: string; createdAt: string;
createdByUserId: number; createdByUserId: number;
} }
export interface IIncomingWebhookToken {
id: number;
name: string;
incomingWebhookId: number;
createdAt: string;
createdByUserId: number;
}