From b4bc20fbbefdd6967dd6f37bb489d2c6453fb9ca Mon Sep 17 00:00:00 2001 From: Boris Sekachev <40690378+bsekachev@users.noreply.github.com> Date: Wed, 8 Jul 2020 21:26:04 +0300 Subject: [PATCH] Minor client changes (#1847) * Minor client changes * Removed extra code --- cvat-ui/src/actions/models-actions.ts | 48 +----- cvat-ui/src/actions/plugins-actions.ts | 3 - .../components/actions-menu/actions-menu.tsx | 30 +--- .../create-model-content.tsx | 160 ------------------ .../create-model-page/create-model-form.tsx | 80 --------- .../create-model-page/create-model-page.tsx | 38 ----- .../components/create-model-page/styles.scss | 43 ----- cvat-ui/src/components/cvat-app.tsx | 15 +- cvat-ui/src/components/header/header.tsx | 33 ++-- .../models-page/built-models-list.tsx | 47 ----- ...model-item.tsx => deployed-model-item.tsx} | 6 +- ...dels-list.tsx => deployed-models-list.tsx} | 21 +-- .../src/components/models-page/empty-list.tsx | 11 +- .../components/models-page/models-page.tsx | 43 ++--- .../src/components/models-page/top-bar.tsx | 16 +- cvat-ui/src/consts.ts | 4 +- .../containers/actions-menu/actions-menu.tsx | 19 --- .../create-model-page/create-model-page.tsx | 50 ------ cvat-ui/src/containers/header/header.tsx | 7 - .../containers/models-page/models-page.tsx | 41 +---- cvat-ui/src/index.tsx | 8 +- cvat-ui/src/reducers/interfaces.ts | 6 +- cvat-ui/src/reducers/models-reducer.ts | 8 - cvat-ui/src/reducers/notifications-reducer.ts | 15 -- cvat-ui/src/reducers/plugins-reducer.ts | 7 +- 25 files changed, 55 insertions(+), 704 deletions(-) delete mode 100644 cvat-ui/src/components/create-model-page/create-model-content.tsx delete mode 100644 cvat-ui/src/components/create-model-page/create-model-form.tsx delete mode 100644 cvat-ui/src/components/create-model-page/create-model-page.tsx delete mode 100644 cvat-ui/src/components/create-model-page/styles.scss delete mode 100644 cvat-ui/src/components/models-page/built-models-list.tsx rename cvat-ui/src/components/models-page/{uploaded-model-item.tsx => deployed-model-item.tsx} (93%) rename cvat-ui/src/components/models-page/{uploaded-models-list.tsx => deployed-models-list.tsx} (75%) delete mode 100644 cvat-ui/src/containers/create-model-page/create-model-page.tsx diff --git a/cvat-ui/src/actions/models-actions.ts b/cvat-ui/src/actions/models-actions.ts index c94a8d2ab9f..991920e2032 100644 --- a/cvat-ui/src/actions/models-actions.ts +++ b/cvat-ui/src/actions/models-actions.ts @@ -3,26 +3,14 @@ // SPDX-License-Identifier: MIT import { ActionUnion, createAction, ThunkAction } from 'utils/redux'; -import { - Model, - ModelFiles, - ActiveInference, - CombinedState, -} from 'reducers/interfaces'; +import { Model, ModelFiles, ActiveInference } from 'reducers/interfaces'; import getCore from 'cvat-core-wrapper'; -export enum PreinstalledModels { - RCNN = 'RCNN Object Detector', - MaskRCNN = 'Mask RCNN Object Detector', -} - export enum ModelsActionTypes { GET_MODELS = 'GET_MODELS', GET_MODELS_SUCCESS = 'GET_MODELS_SUCCESS', GET_MODELS_FAILED = 'GET_MODELS_FAILED', DELETE_MODEL = 'DELETE_MODEL', - DELETE_MODEL_SUCCESS = 'DELETE_MODEL_SUCCESS', - DELETE_MODEL_FAILED = 'DELETE_MODEL_FAILED', CREATE_MODEL = 'CREATE_MODEL', CREATE_MODEL_SUCCESS = 'CREATE_MODEL_SUCCESS', CREATE_MODEL_FAILED = 'CREATE_MODEL_FAILED', @@ -49,16 +37,6 @@ export const modelsActions = { error, }, ), - deleteModelSuccess: (id: number) => createAction( - ModelsActionTypes.DELETE_MODEL_SUCCESS, { - id, - }, - ), - deleteModelFailed: (id: number, error: any) => createAction( - ModelsActionTypes.DELETE_MODEL_FAILED, { - error, id, - }, - ), createModel: () => createAction(ModelsActionTypes.CREATE_MODEL), createModelSuccess: () => createAction(ModelsActionTypes.CREATE_MODEL_SUCCESS), createModelFailed: (error: any) => createAction( @@ -115,7 +93,7 @@ const core = getCore(); const baseURL = core.config.backendAPI.slice(0, -7); export function getModelsAsync(): ThunkAction { - return async (dispatch, getState): Promise => { + return async (dispatch): Promise => { dispatch(modelsActions.getModels()); const models: Model[] = []; @@ -133,7 +111,6 @@ export function getModelsAsync(): ThunkAction { if (model.kind === 'detector') { models.push({ id: model.id, - primary: true, name: model.name, description: model.description, framework: model.framework, @@ -151,21 +128,6 @@ export function getModelsAsync(): ThunkAction { }; } -export function deleteModelAsync(id: number): ThunkAction { - return async (dispatch): Promise => { - try { - await core.server.request(`${baseURL}/auto_annotation/delete/${id}`, { - method: 'DELETE', - }); - } catch (error) { - dispatch(modelsActions.deleteModelFailed(id, error)); - return; - } - - dispatch(modelsActions.deleteModelSuccess(id)); - }; -} - export function createModelAsync(name: string, files: ModelFiles, global: boolean): ThunkAction { return async (dispatch): Promise => { async function checkCallback(id: string): Promise { @@ -316,8 +278,8 @@ function subscribe( } } -export function getInferenceStatusAsync(tasks: number[]): ThunkAction { - return async (dispatch, getState): Promise => { +export function getInferenceStatusAsync(): ThunkAction { + return async (dispatch): Promise => { const dispatchCallback = (action: ModelsActions): void => { dispatch(action); }; @@ -370,7 +332,7 @@ export function startInferenceAsync( }, ); - dispatch(getInferenceStatusAsync([taskInstance.id])); + dispatch(getInferenceStatusAsync()); } catch (error) { dispatch(modelsActions.startInferenceFailed(taskInstance.id, error)); } diff --git a/cvat-ui/src/actions/plugins-actions.ts b/cvat-ui/src/actions/plugins-actions.ts index 4366bc58b24..29f1c23fc46 100644 --- a/cvat-ui/src/actions/plugins-actions.ts +++ b/cvat-ui/src/actions/plugins-actions.ts @@ -29,10 +29,7 @@ export function checkPluginsAsync(): ThunkAction { dispatch(pluginActions.checkPlugins()); const plugins: PluginObjects = { ANALYTICS: false, - AUTO_ANNOTATION: true, GIT_INTEGRATION: false, - TF_ANNOTATION: false, - TF_SEGMENTATION: false, REID: false, DEXTR_SEGMENTATION: false, }; diff --git a/cvat-ui/src/components/actions-menu/actions-menu.tsx b/cvat-ui/src/components/actions-menu/actions-menu.tsx index 5a1070d05a0..d51560e2bf7 100644 --- a/cvat-ui/src/components/actions-menu/actions-menu.tsx +++ b/cvat-ui/src/components/actions-menu/actions-menu.tsx @@ -15,16 +15,11 @@ interface Props { taskID: number; taskMode: string; bugTracker: string; - loaders: any[]; dumpers: any[]; loadActivity: string | null; dumpActivities: string[] | null; exportActivities: string[] | null; - - installedTFAnnotation: boolean; - installedTFSegmentation: boolean; - installedAutoAnnotation: boolean; inferenceIsActive: boolean; onClickMenu: (params: ClickParam, file?: File) => void; @@ -44,12 +39,7 @@ export default function ActionsMenuComponent(props: Props): JSX.Element { taskID, taskMode, bugTracker, - - installedAutoAnnotation, - installedTFAnnotation, - installedTFSegmentation, inferenceIsActive, - dumpers, loaders, onClickMenu, @@ -58,9 +48,6 @@ export default function ActionsMenuComponent(props: Props): JSX.Element { loadActivity, } = props; - const renderModelRunner = installedAutoAnnotation - || installedTFAnnotation || installedTFSegmentation; - let latestParams: ClickParam | null = null; function onClickMenuWrapper(params: ClickParam | null, file?: File): void { const copyParams = params || latestParams; @@ -137,17 +124,12 @@ export default function ActionsMenuComponent(props: Props): JSX.Element { }) } {!!bugTracker && Open bug tracker} - { - renderModelRunner - && ( - - Automatic annotation - - ) - } + + Automatic annotation +
Delete diff --git a/cvat-ui/src/components/create-model-page/create-model-content.tsx b/cvat-ui/src/components/create-model-page/create-model-content.tsx deleted file mode 100644 index a320b805643..00000000000 --- a/cvat-ui/src/components/create-model-page/create-model-content.tsx +++ /dev/null @@ -1,160 +0,0 @@ -// Copyright (C) 2020 Intel Corporation -// -// SPDX-License-Identifier: MIT - -import React from 'react'; -import { Row, Col } from 'antd/lib/grid'; -import Icon from 'antd/lib/icon'; -import Alert from 'antd/lib/alert'; -import Button from 'antd/lib/button'; -import Tooltip from 'antd/lib/tooltip'; -import message from 'antd/lib/message'; -import notification from 'antd/lib/notification'; -import Text from 'antd/lib/typography/Text'; - -import consts from 'consts'; -import ConnectedFileManager, { - FileManagerContainer, -} from 'containers/file-manager/file-manager'; -import { ModelFiles } from 'reducers/interfaces'; - -import CreateModelForm, { - CreateModelForm as WrappedCreateModelForm, -} from './create-model-form'; - -interface Props { - createModel(name: string, files: ModelFiles, global: boolean): void; - isAdmin: boolean; - modelCreatingStatus: string; -} - -export default class CreateModelContent extends React.PureComponent { - private modelForm: WrappedCreateModelForm; - private fileManagerContainer: FileManagerContainer; - - public constructor(props: Props) { - super(props); - this.modelForm = null as any as WrappedCreateModelForm; - this.fileManagerContainer = null as any as FileManagerContainer; - } - - public componentDidUpdate(prevProps: Props): void { - const { modelCreatingStatus } = this.props; - - if (prevProps.modelCreatingStatus !== 'CREATED' - && modelCreatingStatus === 'CREATED') { - message.success('The model has been uploaded'); - this.modelForm.resetFields(); - this.fileManagerContainer.reset(); - } - } - - private handleSubmitClick = (): void => { - const { createModel } = this.props; - this.modelForm.submit() - .then((data) => { - const { - local, - share, - } = this.fileManagerContainer.getFiles(); - - const files = local.length ? local : share; - const grouppedFiles: ModelFiles = { - xml: '', - bin: '', - py: '', - json: '', - }; - - (files as any).reduce((acc: ModelFiles, value: File | string): ModelFiles => { - const name = typeof value === 'string' ? value : value.name; - const [extension] = name.split('.').reverse(); - if (extension in acc) { - acc[extension] = value; - } - - return acc; - }, grouppedFiles); - - if (Object.keys(grouppedFiles) - .map((key: string) => grouppedFiles[key]) - .filter((val) => !!val).length !== 4) { - notification.error({ - message: 'Could not upload a model', - description: 'Please, specify correct files', - }); - } else { - createModel(data.name, grouppedFiles, data.global); - } - }).catch(() => { - notification.error({ - message: 'Could not upload a model', - description: 'Please, check input fields', - }); - }); - }; - - public render(): JSX.Element { - const { - modelCreatingStatus, - } = this.props; - const loading = !!modelCreatingStatus - && modelCreatingStatus !== 'CREATED'; - const status = modelCreatingStatus - && modelCreatingStatus !== 'CREATED' ? modelCreatingStatus : ''; - - const { AUTO_ANNOTATION_GUIDE_URL } = consts; - return ( - - - - { - // false positive - // eslint-disable-next-line - window.open(AUTO_ANNOTATION_GUIDE_URL, '_blank'); - }} - type='question-circle' - /> - - - - { - this.modelForm = ref; - } - } - /> - - - * - Select files: - - - { - this.fileManagerContainer = container; - } - } - withRemote={false} - /> - - - {status && } - - - - - - ); - } -} diff --git a/cvat-ui/src/components/create-model-page/create-model-form.tsx b/cvat-ui/src/components/create-model-page/create-model-form.tsx deleted file mode 100644 index e1dbcb33667..00000000000 --- a/cvat-ui/src/components/create-model-page/create-model-form.tsx +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) 2020 Intel Corporation -// -// SPDX-License-Identifier: MIT - -import React from 'react'; -import { Row, Col } from 'antd/lib/grid'; -import Form, { FormComponentProps } from 'antd/lib/form/Form'; -import Input from 'antd/lib/input'; -import Tooltip from 'antd/lib/tooltip'; -import Checkbox from 'antd/lib/checkbox'; -import Text from 'antd/lib/typography/Text'; - -type Props = FormComponentProps; - -export class CreateModelForm extends React.PureComponent { - public submit(): Promise<{name: string; global: boolean}> { - const { form } = this.props; - return new Promise((resolve, reject) => { - form.validateFields((errors, values): void => { - if (!errors) { - resolve({ - name: values.name, - global: values.global, - }); - } else { - reject(errors); - } - }); - }); - } - - public resetFields(): void { - const { form } = this.props; - form.resetFields(); - } - - public render(): JSX.Element { - const { form } = this.props; - const { getFieldDecorator } = form; - - return ( -
e.preventDefault()}> - - - * - Name: - - - - { getFieldDecorator('name', { - rules: [{ - required: true, - message: 'Please, specify a model name', - }], - })()} - - - - - - { getFieldDecorator('global', { - initialValue: false, - valuePropName: 'checked', - })( - - - Load globally - - , - )} - - - - -
- ); - } -} - -export default Form.create()(CreateModelForm); diff --git a/cvat-ui/src/components/create-model-page/create-model-page.tsx b/cvat-ui/src/components/create-model-page/create-model-page.tsx deleted file mode 100644 index 7c81aca0f87..00000000000 --- a/cvat-ui/src/components/create-model-page/create-model-page.tsx +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2020 Intel Corporation -// -// SPDX-License-Identifier: MIT - -import './styles.scss'; -import React from 'react'; -import { Row, Col } from 'antd/lib/grid'; -import Text from 'antd/lib/typography/Text'; - -import { ModelFiles } from 'reducers/interfaces'; -import CreateModelContent from './create-model-content'; - -interface Props { - createModel(name: string, files: ModelFiles, global: boolean): void; - isAdmin: boolean; - modelCreatingStatus: string; -} - -export default function CreateModelPageComponent(props: Props): JSX.Element { - const { - isAdmin, - modelCreatingStatus, - createModel, - } = props; - - return ( - - - Upload a new model - - - - ); -} diff --git a/cvat-ui/src/components/create-model-page/styles.scss b/cvat-ui/src/components/create-model-page/styles.scss deleted file mode 100644 index 65df22b23d3..00000000000 --- a/cvat-ui/src/components/create-model-page/styles.scss +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (C) 2020 Intel Corporation -// -// SPDX-License-Identifier: MIT - -@import '../../base.scss'; - -.cvat-create-model-form-wrapper { - text-align: center; - margin-top: 40px; - overflow-y: auto; - height: 90%; - - > div > span { - font-size: 36px; - } - - .cvat-create-model-content { - margin-top: 20px; - width: 100%; - height: auto; - border: 1px solid $border-color-1; - border-radius: 3px; - padding: 20px; - background: $background-color-1; - text-align: initial; - - > div:nth-child(1) > i { - float: right; - font-size: 20px; - color: $danger-icon-color; - } - - > div:nth-child(4) { - margin-top: 10px; - } - - > div:nth-child(6) > button { - margin-top: 10px; - float: right; - width: 120px; - } - } -} diff --git a/cvat-ui/src/components/cvat-app.tsx b/cvat-ui/src/components/cvat-app.tsx index 9eeecd78509..f8d194d5818 100644 --- a/cvat-ui/src/components/cvat-app.tsx +++ b/cvat-ui/src/components/cvat-app.tsx @@ -18,7 +18,6 @@ import TasksPageContainer from 'containers/tasks-page/tasks-page'; import CreateTaskPageContainer from 'containers/create-task-page/create-task-page'; import TaskPageContainer from 'containers/task-page/task-page'; import ModelsPageContainer from 'containers/models-page/models-page'; -import CreateModelPageContainer from 'containers/create-model-page/create-model-page'; import AnnotationPageContainer from 'containers/annotation-page/annotation-page'; import LoginPageContainer from 'containers/login-page/login-page'; import RegisterPageContainer from 'containers/register-page/register-page'; @@ -50,9 +49,6 @@ interface CVATAppProps { usersFetching: boolean; aboutInitialized: boolean; aboutFetching: boolean; - installedAutoAnnotation: boolean; - installedTFAnnotation: boolean; - installedTFSegmentation: boolean; userAgreementsFetching: boolean; userAgreementsInitialized: boolean; notifications: NotificationsState; @@ -221,9 +217,6 @@ class CVATApplication extends React.PureComponent - {withModels - && } - {installedAutoAnnotation - && } + diff --git a/cvat-ui/src/components/header/header.tsx b/cvat-ui/src/components/header/header.tsx index dc01678b80b..9d3e5fee430 100644 --- a/cvat-ui/src/components/header/header.tsx +++ b/cvat-ui/src/components/header/header.tsx @@ -24,9 +24,6 @@ interface HeaderContainerProps { switchSettingsDialog: (show: boolean) => void; logoutFetching: boolean; installedAnalytics: boolean; - installedAutoAnnotation: boolean; - installedTFAnnotation: boolean; - installedTFSegmentation: boolean; serverHost: string; username: string; toolName: string; @@ -43,9 +40,6 @@ type Props = HeaderContainerProps & RouteComponentProps; function HeaderContainer(props: Props): JSX.Element { const { - installedTFSegmentation, - installedAutoAnnotation, - installedTFAnnotation, installedAnalytics, username, toolName, @@ -62,10 +56,6 @@ function HeaderContainer(props: Props): JSX.Element { switchSettingsDialog, } = props; - const renderModels = installedAutoAnnotation - || installedTFAnnotation - || installedTFSegmentation; - const { CHANGELOG_URL, LICENSE_URL, @@ -172,19 +162,16 @@ function HeaderContainer(props: Props): JSX.Element { > Tasks - { renderModels - && ( - - )} + { installedAnalytics && (