You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
4.4 KiB
TypeScript
114 lines
4.4 KiB
TypeScript
// Copyright (C) 2022 CVAT.ai Corporation
|
|
//
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
import { getCore, Webhook } from 'cvat-core-wrapper';
|
|
import { Dispatch, ActionCreator, Store } from 'redux';
|
|
import { Indexable, WebhooksQuery } from 'reducers';
|
|
import { ActionUnion, createAction, ThunkAction } from 'utils/redux';
|
|
|
|
const cvat = getCore();
|
|
|
|
export enum WebhooksActionsTypes {
|
|
GET_WEBHOOKS = 'GET_WEBHOOKS',
|
|
GET_WEBHOOKS_SUCCESS = 'GET_WEBHOOKS_SUCCESS',
|
|
GET_WEBHOOKS_FAILED = 'GET_WEBHOOKS_FAILED',
|
|
CREATE_WEBHOOK = 'CREATE_WEBHOOK',
|
|
CREATE_WEBHOOK_SUCCESS = 'CREATE_WEBHOOK_SUCCESS',
|
|
CREATE_WEBHOOK_FAILED = 'CREATE_WEBHOOK_FAILED',
|
|
UPDATE_WEBHOOK = 'UPDATE_WEBHOOK',
|
|
UPDATE_WEBHOOK_SUCCESS = 'UPDATE_WEBHOOK_SUCCESS',
|
|
UPDATE_WEBHOOK_FAILED = 'UPDATE_WEBHOOK_FAILED',
|
|
DELETE_WEBHOOK = 'DELETE_WEBHOOK',
|
|
DELETE_WEBHOOK_SUCCESS = 'DELETE_WEBHOOK_SUCCESS',
|
|
DELETE_WEBHOOK_FAILED = 'DELETE_WEBHOOK_FAILED',
|
|
}
|
|
|
|
const webhooksActions = {
|
|
getWebhooks: (query: WebhooksQuery) => createAction(WebhooksActionsTypes.GET_WEBHOOKS, { query }),
|
|
getWebhooksSuccess: (webhooks: Webhook[], count: number) => createAction(
|
|
WebhooksActionsTypes.GET_WEBHOOKS_SUCCESS, { webhooks, count },
|
|
),
|
|
getWebhooksFailed: (error: any) => createAction(WebhooksActionsTypes.GET_WEBHOOKS_FAILED, { error }),
|
|
createWebhook: () => createAction(WebhooksActionsTypes.CREATE_WEBHOOK),
|
|
createWebhookSuccess: (webhook: Webhook) => createAction(WebhooksActionsTypes.CREATE_WEBHOOK_SUCCESS, { webhook }),
|
|
createWebhookFailed: (error: any) => createAction(WebhooksActionsTypes.CREATE_WEBHOOK_FAILED, { error }),
|
|
updateWebhook: () => createAction(WebhooksActionsTypes.UPDATE_WEBHOOK),
|
|
updateWebhookSuccess: (webhook: any) => createAction(WebhooksActionsTypes.UPDATE_WEBHOOK_SUCCESS, { webhook }),
|
|
updateWebhookFailed: (error: any) => createAction(WebhooksActionsTypes.UPDATE_WEBHOOK_FAILED, { error }),
|
|
deleteWebhook: () => createAction(WebhooksActionsTypes.DELETE_WEBHOOK),
|
|
deleteWebhookSuccess: () => createAction(WebhooksActionsTypes.DELETE_WEBHOOK_SUCCESS),
|
|
deleteWebhookFailed: (webhookID: number, error: any) => createAction(
|
|
WebhooksActionsTypes.DELETE_WEBHOOK_FAILED, { webhookID, error },
|
|
),
|
|
};
|
|
|
|
export const getWebhooksAsync = (query: WebhooksQuery): ThunkAction => (
|
|
async (dispatch: ActionCreator<Dispatch>): Promise<void> => {
|
|
dispatch(webhooksActions.getWebhooks(query));
|
|
|
|
// We remove all keys with null values from the query
|
|
const filteredQuery = { ...query };
|
|
for (const key of Object.keys(query)) {
|
|
if ((filteredQuery as Indexable)[key] === null) {
|
|
delete (filteredQuery as Indexable)[key];
|
|
}
|
|
}
|
|
|
|
let result = null;
|
|
try {
|
|
result = await cvat.webhooks.get(filteredQuery);
|
|
} catch (error) {
|
|
dispatch(webhooksActions.getWebhooksFailed(error));
|
|
return;
|
|
}
|
|
|
|
const array: Array<Webhook> = Array.from(result);
|
|
|
|
dispatch(webhooksActions.getWebhooksSuccess(array, result.count));
|
|
}
|
|
);
|
|
|
|
export function createWebhookAsync(webhookData: Store): ThunkAction {
|
|
return async function (dispatch) {
|
|
const webhook = new cvat.classes.Webhook(webhookData);
|
|
dispatch(webhooksActions.createWebhook());
|
|
|
|
try {
|
|
const createdWebhook = await webhook.save();
|
|
dispatch(webhooksActions.createWebhookSuccess(createdWebhook));
|
|
} catch (error) {
|
|
dispatch(webhooksActions.createWebhookFailed(error));
|
|
throw error;
|
|
}
|
|
};
|
|
}
|
|
|
|
export function updateWebhookAsync(webhook: Webhook): ThunkAction {
|
|
return async function (dispatch) {
|
|
dispatch(webhooksActions.updateWebhook());
|
|
|
|
try {
|
|
const updatedWebhook = await webhook.save();
|
|
dispatch(webhooksActions.updateWebhookSuccess(updatedWebhook));
|
|
} catch (error) {
|
|
dispatch(webhooksActions.updateWebhookFailed(error));
|
|
throw error;
|
|
}
|
|
};
|
|
}
|
|
|
|
export function deleteWebhookAsync(webhook: Webhook): ThunkAction {
|
|
return async function (dispatch) {
|
|
try {
|
|
await webhook.delete();
|
|
dispatch(webhooksActions.deleteWebhookSuccess());
|
|
} catch (error) {
|
|
dispatch(webhooksActions.deleteWebhookFailed(webhook.id, error));
|
|
throw error;
|
|
}
|
|
};
|
|
}
|
|
|
|
export type WebhooksActions = ActionUnion<typeof webhooksActions>;
|