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.

211 lines
9.6 KiB
TypeScript

// Copyright (C) 2021-2022 Intel Corporation
//
// SPDX-License-Identifier: MIT
import { Dispatch, ActionCreator } from 'redux';
import { ActionUnion, createAction, ThunkAction } from 'utils/redux';
import { getCore } from 'cvat-core-wrapper';
import { CloudStoragesQuery, CloudStorage, Indexable } from 'reducers';
const cvat = getCore();
export enum CloudStorageActionTypes {
UPDATE_CLOUD_STORAGES_GETTING_QUERY = 'UPDATE_CLOUD_STORAGES_GETTING_QUERY',
GET_CLOUD_STORAGES = 'GET_CLOUD_STORAGES',
GET_CLOUD_STORAGE_SUCCESS = 'GET_CLOUD_STORAGES_SUCCESS',
GET_CLOUD_STORAGE_FAILED = 'GET_CLOUD_STORAGES_FAILED',
GET_CLOUD_STORAGE_STATUS = 'GET_CLOUD_STORAGE_STATUS',
GET_CLOUD_STORAGE_STATUS_SUCCESS = 'GET_CLOUD_STORAGE_STATUS_SUCCESS',
GET_CLOUD_STORAGE_STATUS_FAILED = 'GET_CLOUD_STORAGE_STATUS_FAILED',
GET_CLOUD_STORAGE_PREVIEW = 'GET_CLOUD_STORAGE_PREVIEW',
GET_CLOUD_STORAGE_PREVIEW_SUCCESS = 'GET_CLOUD_STORAGE_PREVIEW_SUCCESS',
GET_CLOUD_STORAGE_PREVIEW_FAILED = 'GET_CLOUD_STORAGE_PREVIEW_FAILED',
CREATE_CLOUD_STORAGE = 'CREATE_CLOUD_STORAGE',
CREATE_CLOUD_STORAGE_SUCCESS = 'CREATE_CLOUD_STORAGE_SUCCESS',
CREATE_CLOUD_STORAGE_FAILED = 'CREATE_CLOUD_STORAGE_FAILED',
DELETE_CLOUD_STORAGE = 'DELETE_CLOUD_STORAGE',
DELETE_CLOUD_STORAGE_SUCCESS = 'DELETE_CLOUD_STORAGE_SUCCESS',
DELETE_CLOUD_STORAGE_FAILED = 'DELETE_CLOUD_STORAGE_FAILED',
UPDATE_CLOUD_STORAGE = 'UPDATE_CLOUD_STORAGE',
UPDATE_CLOUD_STORAGE_SUCCESS = 'UPDATE_CLOUD_STORAGE_SUCCESS',
UPDATE_CLOUD_STORAGE_FAILED = 'UPDATE_CLOUD_STORAGE_FAILED',
LOAD_CLOUD_STORAGE_CONTENT = 'LOAD_CLOUD_STORAGE_CONTENT',
LOAD_CLOUD_STORAGE_CONTENT_FAILED = 'LOAD_CLOUD_STORAGE_CONTENT_FAILED',
LOAD_CLOUD_STORAGE_CONTENT_SUCCESS = 'LOAD_CLOUD_STORAGE_CONTENT_SUCCESS',
}
const cloudStoragesActions = {
updateCloudStoragesGettingQuery: (query: Partial<CloudStoragesQuery>) => (
createAction(CloudStorageActionTypes.UPDATE_CLOUD_STORAGES_GETTING_QUERY, { query })
),
getCloudStorages: () => createAction(CloudStorageActionTypes.GET_CLOUD_STORAGES),
getCloudStoragesSuccess: (
array: any[],
count: number,
query: Partial<CloudStoragesQuery>,
) => createAction(CloudStorageActionTypes.GET_CLOUD_STORAGE_SUCCESS, {
array,
count,
query,
}),
getCloudStoragesFailed: (error: any, query: Partial<CloudStoragesQuery>) => (
createAction(CloudStorageActionTypes.GET_CLOUD_STORAGE_FAILED, { error, query })
),
deleteCloudStorage: (cloudStorageID: number) => (
createAction(CloudStorageActionTypes.DELETE_CLOUD_STORAGE, { cloudStorageID })
),
deleteCloudStorageSuccess: (cloudStorageID: number) => (
createAction(CloudStorageActionTypes.DELETE_CLOUD_STORAGE_SUCCESS, { cloudStorageID })
),
deleteCloudStorageFailed: (error: any, cloudStorageID: number) => (
createAction(CloudStorageActionTypes.DELETE_CLOUD_STORAGE_FAILED, { error, cloudStorageID })
),
createCloudStorage: () => createAction(CloudStorageActionTypes.CREATE_CLOUD_STORAGE),
createCloudStorageSuccess: (cloudStorageID: number) => (
createAction(CloudStorageActionTypes.CREATE_CLOUD_STORAGE_SUCCESS, { cloudStorageID })
),
createCloudStorageFailed: (error: any) => (
createAction(CloudStorageActionTypes.CREATE_CLOUD_STORAGE_FAILED, { error })
),
updateCloudStorage: () => createAction(CloudStorageActionTypes.UPDATE_CLOUD_STORAGE, {}),
updateCloudStorageSuccess: (cloudStorage: CloudStorage) => (
createAction(CloudStorageActionTypes.UPDATE_CLOUD_STORAGE_SUCCESS, { cloudStorage })
),
updateCloudStorageFailed: (cloudStorage: CloudStorage, error: any) => (
createAction(CloudStorageActionTypes.UPDATE_CLOUD_STORAGE_FAILED, { cloudStorage, error })
),
loadCloudStorageContent: () => createAction(CloudStorageActionTypes.LOAD_CLOUD_STORAGE_CONTENT),
loadCloudStorageContentSuccess: (cloudStorageID: number, content: any) => (
createAction(CloudStorageActionTypes.LOAD_CLOUD_STORAGE_CONTENT_SUCCESS, { cloudStorageID, content })
),
loadCloudStorageContentFailed: (cloudStorageID: number, error: any) => (
createAction(CloudStorageActionTypes.LOAD_CLOUD_STORAGE_CONTENT_FAILED, { cloudStorageID, error })
),
getCloudStorageStatus: (id: number) => createAction(CloudStorageActionTypes.GET_CLOUD_STORAGE_STATUS, { id }),
getCloudStorageStatusSuccess: (cloudStorageID: number, status: string) => (
createAction(CloudStorageActionTypes.GET_CLOUD_STORAGE_STATUS_SUCCESS, { cloudStorageID, status })
),
getCloudStorageStatusFailed: (cloudStorageID: number, error: any) => (
createAction(CloudStorageActionTypes.GET_CLOUD_STORAGE_STATUS_FAILED, { cloudStorageID, error })
),
getCloudStoragePreiew: (cloudStorageID: number) => (
createAction(CloudStorageActionTypes.GET_CLOUD_STORAGE_PREVIEW, { cloudStorageID })
),
getCloudStoragePreiewSuccess: (cloudStorageID: number, preview: string) => (
createAction(CloudStorageActionTypes.GET_CLOUD_STORAGE_PREVIEW_SUCCESS, { cloudStorageID, preview })
),
getCloudStoragePreiewFailed: (cloudStorageID: number, error: any) => (
createAction(CloudStorageActionTypes.GET_CLOUD_STORAGE_PREVIEW_FAILED, { cloudStorageID, error })
),
};
export type CloudStorageActions = ActionUnion<typeof cloudStoragesActions>;
export function getCloudStoragesAsync(query: Partial<CloudStoragesQuery>): ThunkAction {
return async (dispatch: ActionCreator<Dispatch>): Promise<void> => {
dispatch(cloudStoragesActions.getCloudStorages());
dispatch(cloudStoragesActions.updateCloudStoragesGettingQuery(query));
const filteredQuery = { ...query };
for (const key in filteredQuery) {
if ((filteredQuery as Indexable)[key] === null) {
delete (filteredQuery as Indexable)[key];
}
}
let result = null;
try {
result = await cvat.cloudStorages.get(filteredQuery);
} catch (error) {
dispatch(cloudStoragesActions.getCloudStoragesFailed(error, query));
return;
}
const array = Array.from(result);
dispatch(cloudStoragesActions.getCloudStoragesSuccess(
array,
result.count,
query,
));
};
}
export function deleteCloudStorageAsync(cloudStorageInstance: any): ThunkAction {
return async (dispatch: ActionCreator<Dispatch>): Promise<void> => {
try {
dispatch(cloudStoragesActions.deleteCloudStorage(cloudStorageInstance.id));
await cloudStorageInstance.delete();
} catch (error) {
dispatch(cloudStoragesActions.deleteCloudStorageFailed(error, cloudStorageInstance.id));
return;
}
dispatch(cloudStoragesActions.deleteCloudStorageSuccess(cloudStorageInstance.id));
};
}
export function createCloudStorageAsync(data: any): ThunkAction {
return async (dispatch: ActionCreator<Dispatch>): Promise<void> => {
const cloudStorageInstance = new cvat.classes.CloudStorage(data);
dispatch(cloudStoragesActions.createCloudStorage());
try {
const savedCloudStorage = await cloudStorageInstance.save();
dispatch(cloudStoragesActions.createCloudStorageSuccess(savedCloudStorage.id));
} catch (error) {
dispatch(cloudStoragesActions.createCloudStorageFailed(error));
}
};
}
export function updateCloudStorageAsync(data: any): ThunkAction {
return async (dispatch: ActionCreator<Dispatch>): Promise<void> => {
const cloudStorageInstance = new cvat.classes.CloudStorage(data);
dispatch(cloudStoragesActions.updateCloudStorage());
try {
const savedCloudStorage = await cloudStorageInstance.save();
dispatch(cloudStoragesActions.updateCloudStorageSuccess(savedCloudStorage));
} catch (error) {
dispatch(cloudStoragesActions.updateCloudStorageFailed(data, error));
}
};
}
export function loadCloudStorageContentAsync(cloudStorage: CloudStorage): ThunkAction {
return async (dispatch: ActionCreator<Dispatch>): Promise<void> => {
dispatch(cloudStoragesActions.loadCloudStorageContent());
try {
const result = await cloudStorage.getContent();
dispatch(cloudStoragesActions.loadCloudStorageContentSuccess(cloudStorage.id, result));
} catch (error) {
dispatch(cloudStoragesActions.loadCloudStorageContentFailed(cloudStorage.id, error));
}
};
}
export function getCloudStorageStatusAsync(cloudStorage: CloudStorage): ThunkAction {
return async (dispatch: ActionCreator<Dispatch>): Promise<void> => {
dispatch(cloudStoragesActions.getCloudStorageStatus(cloudStorage.id));
try {
const result = await cloudStorage.getStatus();
dispatch(cloudStoragesActions.getCloudStorageStatusSuccess(cloudStorage.id, result));
} catch (error) {
dispatch(cloudStoragesActions.getCloudStorageStatusFailed(cloudStorage.id, error));
}
};
}
export function getCloudStoragePreviewAsync(cloudStorage: CloudStorage): ThunkAction {
return async (dispatch: ActionCreator<Dispatch>): Promise<void> => {
dispatch(cloudStoragesActions.getCloudStoragePreiew(cloudStorage.id));
try {
const result = await cloudStorage.getPreview();
dispatch(cloudStoragesActions.getCloudStoragePreiewSuccess(cloudStorage.id, result));
} catch (error) {
dispatch(cloudStoragesActions.getCloudStoragePreiewFailed(cloudStorage.id, error));
}
};
}