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.
142 lines
4.5 KiB
TypeScript
142 lines
4.5 KiB
TypeScript
// Copyright (C) 2021 Intel Corporation
|
|
//
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
import React from 'react';
|
|
import { connect } from 'react-redux';
|
|
// eslint-disable-next-line import/no-extraneous-dependencies
|
|
import { MenuInfo } from 'rc-menu/lib/interface';
|
|
|
|
import ActionsMenuComponent, { Actions } from 'components/actions-menu/actions-menu';
|
|
import { CombinedState } from 'reducers/interfaces';
|
|
|
|
import { modelsActions } from 'actions/models-actions';
|
|
import {
|
|
loadAnnotationsAsync,
|
|
deleteTaskAsync,
|
|
exportTaskAsync,
|
|
switchMoveTaskModalVisible,
|
|
} from 'actions/tasks-actions';
|
|
import { exportActions } from 'actions/export-actions';
|
|
|
|
interface OwnProps {
|
|
taskInstance: any;
|
|
}
|
|
|
|
interface StateToProps {
|
|
annotationFormats: any;
|
|
loadActivity: string | null;
|
|
inferenceIsActive: boolean;
|
|
exportIsActive: boolean;
|
|
}
|
|
|
|
interface DispatchToProps {
|
|
loadAnnotations: (taskInstance: any, loader: any, file: File) => void;
|
|
showExportModal: (taskInstance: any) => void;
|
|
deleteTask: (taskInstance: any) => void;
|
|
openRunModelWindow: (taskInstance: any) => void;
|
|
exportTask: (taskInstance: any) => void;
|
|
openMoveTaskToProjectWindow: (taskInstance: any) => void;
|
|
}
|
|
|
|
function mapStateToProps(state: CombinedState, own: OwnProps): StateToProps {
|
|
const {
|
|
taskInstance: { id: tid },
|
|
} = own;
|
|
|
|
const {
|
|
formats: { annotationFormats },
|
|
tasks: {
|
|
activities: { loads, backups },
|
|
},
|
|
} = state;
|
|
|
|
return {
|
|
loadActivity: tid in loads ? loads[tid] : null,
|
|
annotationFormats,
|
|
inferenceIsActive: tid in state.models.inferences,
|
|
exportIsActive: tid in backups,
|
|
};
|
|
}
|
|
|
|
function mapDispatchToProps(dispatch: any): DispatchToProps {
|
|
return {
|
|
loadAnnotations: (taskInstance: any, loader: any, file: File): void => {
|
|
dispatch(loadAnnotationsAsync(taskInstance, loader, file));
|
|
},
|
|
showExportModal: (taskInstance: any): void => {
|
|
dispatch(exportActions.openExportModal(taskInstance));
|
|
},
|
|
deleteTask: (taskInstance: any): void => {
|
|
dispatch(deleteTaskAsync(taskInstance));
|
|
},
|
|
openRunModelWindow: (taskInstance: any): void => {
|
|
dispatch(modelsActions.showRunModelDialog(taskInstance));
|
|
},
|
|
exportTask: (taskInstance: any): void => {
|
|
dispatch(exportTaskAsync(taskInstance));
|
|
},
|
|
openMoveTaskToProjectWindow: (taskId: number): void => {
|
|
dispatch(switchMoveTaskModalVisible(true, taskId));
|
|
},
|
|
};
|
|
}
|
|
|
|
function ActionsMenuContainer(props: OwnProps & StateToProps & DispatchToProps): JSX.Element {
|
|
const {
|
|
taskInstance,
|
|
annotationFormats: { loaders, dumpers },
|
|
loadActivity,
|
|
inferenceIsActive,
|
|
exportIsActive,
|
|
loadAnnotations,
|
|
showExportModal,
|
|
deleteTask,
|
|
openRunModelWindow,
|
|
exportTask,
|
|
openMoveTaskToProjectWindow,
|
|
} = props;
|
|
|
|
function onClickMenu(params: MenuInfo): void {
|
|
const [action] = params.keyPath;
|
|
if (action === Actions.EXPORT_TASK_DATASET) {
|
|
showExportModal(taskInstance);
|
|
} else if (action === Actions.DELETE_TASK) {
|
|
deleteTask(taskInstance);
|
|
} else if (action === Actions.OPEN_BUG_TRACKER) {
|
|
window.open(`${taskInstance.bugTracker}`, '_blank');
|
|
} else if (action === Actions.RUN_AUTO_ANNOTATION) {
|
|
openRunModelWindow(taskInstance);
|
|
} else if (action === Actions.EXPORT_TASK) {
|
|
exportTask(taskInstance);
|
|
} else if (action === Actions.MOVE_TASK_TO_PROJECT) {
|
|
openMoveTaskToProjectWindow(taskInstance.id);
|
|
}
|
|
}
|
|
|
|
function onUploadAnnotations(format: string, file: File): void {
|
|
const [loader] = loaders.filter((_loader: any): boolean => _loader.name === format);
|
|
if (loader && file) {
|
|
loadAnnotations(taskInstance, loader, file);
|
|
}
|
|
}
|
|
|
|
return (
|
|
<ActionsMenuComponent
|
|
taskID={taskInstance.id}
|
|
taskMode={taskInstance.mode}
|
|
bugTracker={taskInstance.bugTracker}
|
|
loaders={loaders}
|
|
dumpers={dumpers}
|
|
loadActivity={loadActivity}
|
|
inferenceIsActive={inferenceIsActive}
|
|
onClickMenu={onClickMenu}
|
|
onUploadAnnotations={onUploadAnnotations}
|
|
taskDimension={taskInstance.dimension}
|
|
exportIsActive={exportIsActive}
|
|
/>
|
|
);
|
|
}
|
|
|
|
export default connect(mapStateToProps, mapDispatchToProps)(ActionsMenuContainer);
|