@@ -78,6 +81,9 @@ function DrawShapePopoverComponent(props: Props): JSX.Element {
+ {
+ shapeType === ShapeType.POLYGON &&
+ }
{
shapeType === ShapeType.RECTANGLE ? (
<>
@@ -148,7 +154,7 @@ function DrawShapePopoverComponent(props: Props): JSX.Element {
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
index 03efda5f..a320b805 100644
--- a/cvat-ui/src/components/create-model-page/create-model-content.tsx
+++ b/cvat-ui/src/components/create-model-page/create-model-content.tsx
@@ -3,20 +3,16 @@
// SPDX-License-Identifier: MIT
import React from 'react';
-
-import {
- Row,
- Col,
- Icon,
- Alert,
- Button,
- Tooltip,
- message,
- notification,
-} from 'antd';
-
+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';
@@ -107,7 +103,7 @@ export default class CreateModelContent extends React.PureComponent {
const status = modelCreatingStatus
&& modelCreatingStatus !== 'CREATED' ? modelCreatingStatus : '';
- const guideLink = 'https://github.com/opencv/cvat/blob/develop/cvat/apps/auto_annotation/README.md';
+ const { AUTO_ANNOTATION_GUIDE_URL } = consts;
return (
@@ -116,7 +112,7 @@ export default class CreateModelContent extends React.PureComponent {
onClick={(): void => {
// false positive
// eslint-disable-next-line
- window.open(guideLink, '_blank');
+ window.open(AUTO_ANNOTATION_GUIDE_URL, '_blank');
}}
type='question-circle'
/>
diff --git a/cvat-ui/src/components/create-task-page/create-task-page.tsx b/cvat-ui/src/components/create-task-page/create-task-page.tsx
index 79618410..439439f9 100644
--- a/cvat-ui/src/components/create-task-page/create-task-page.tsx
+++ b/cvat-ui/src/components/create-task-page/create-task-page.tsx
@@ -3,30 +3,65 @@
// SPDX-License-Identifier: MIT
import './styles.scss';
-import React from 'react';
-
-import {
- Row,
- Col,
-} from 'antd';
-
+import React, { useEffect } from 'react';
+import { Row, Col } from 'antd/lib/grid';
+import Modal from 'antd/lib/modal';
import Text from 'antd/lib/typography/Text';
+import Paragraph from 'antd/lib/typography/Paragraph';
+import TextArea from 'antd/lib/input/TextArea';
import CreateTaskContent, { CreateTaskData } from './create-task-content';
+
interface Props {
onCreate: (data: CreateTaskData) => void;
status: string;
+ error: string;
installedGit: boolean;
}
export default function CreateTaskPage(props: Props): JSX.Element {
const {
+ error,
status,
onCreate,
installedGit,
} = props;
+ useEffect(() => {
+ if (error) {
+ let errorCopy = error;
+ const sshKeys: string[] = [];
+ while (errorCopy.length) {
+ const startIndex = errorCopy.search(/'ssh/);
+ if (startIndex === -1) break;
+ let sshKey = errorCopy.slice(startIndex + 1);
+ const stopIndex = sshKey.search(/'/);
+ sshKey = sshKey.slice(0, stopIndex);
+ sshKeys.push(sshKey);
+ errorCopy = errorCopy.slice(stopIndex + 1);
+ }
+
+ if (sshKeys.length) {
+ Modal.error({
+ width: 800,
+ title: 'Could not clone the repository',
+ content: (
+ <>
+
+ Please make sure it exists and you have access
+
+
+ Consider adding the following public ssh keys to git:
+
+
+ >
+ ),
+ });
+ }
+ }
+ }, [error]);
+
return (
diff --git a/cvat-ui/src/components/create-task-page/styles.scss b/cvat-ui/src/components/create-task-page/styles.scss
index 3419d860..df2bcc45 100644
--- a/cvat-ui/src/components/create-task-page/styles.scss
+++ b/cvat-ui/src/components/create-task-page/styles.scss
@@ -6,7 +6,7 @@
.cvat-create-task-form-wrapper {
text-align: center;
- margin-top: 40px;
+ padding-top: 40px;
overflow-y: auto;
height: 90%;
diff --git a/cvat-ui/src/components/feedback/feedback.tsx b/cvat-ui/src/components/feedback/feedback.tsx
index b61ba1f5..cc1869c7 100644
--- a/cvat-ui/src/components/feedback/feedback.tsx
+++ b/cvat-ui/src/components/feedback/feedback.tsx
@@ -4,13 +4,10 @@
import './styles.scss';
import React from 'react';
-
-import {
- Button,
- Icon,
- Popover,
-} from 'antd';
-
+import Button from 'antd/lib/button';
+import Icon from 'antd/lib/icon';
+import Popover from 'antd/lib/popover';
+import Text from 'antd/lib/typography/Text';
import {
FacebookShareButton,
LinkedinShareButton,
@@ -30,59 +27,59 @@ import {
LinkedinIcon,
} from 'react-share';
-import Text from 'antd/lib/typography/Text';
+import consts from 'consts';
function renderContent(): JSX.Element {
- const githubURL = 'https://github.com/opencv/cvat';
- const githubImage = 'https://raw.githubusercontent.com/opencv/'
- + 'cvat/develop/cvat/apps/documentation/static/documentation/images/cvat.jpg';
- const questionsURL = 'https://gitter.im/opencv-cvat/public';
- const feedbackURL = 'https://gitter.im/opencv-cvat/public';
+ const {
+ GITHUB_URL,
+ GITHUB_IMAGE_URL,
+ GITTER_PUBLIC_URL,
+ } = consts;
return (
<>
Star us on
- GitHub
+ GitHub
Leave a
- feedback
+ feedback
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
Do you need help? Contact us on
- gitter
+ gitter
>
);
diff --git a/cvat-ui/src/components/file-manager/file-manager.tsx b/cvat-ui/src/components/file-manager/file-manager.tsx
index 98de2697..3e2f2551 100644
--- a/cvat-ui/src/components/file-manager/file-manager.tsx
+++ b/cvat-ui/src/components/file-manager/file-manager.tsx
@@ -4,17 +4,16 @@
import './styles.scss';
import React from 'react';
-
-import {
- Tabs,
- Icon,
- Input,
- Upload,
-} from 'antd';
-
-import Tree, { AntTreeNode, TreeNodeNormal } from 'antd/lib/tree/Tree';
-import { RcFile } from 'antd/lib/upload';
+import Tabs from 'antd/lib/tabs';
+import Icon from 'antd/lib/icon';
+import Input from 'antd/lib/input';
import Text from 'antd/lib/typography/Text';
+import Paragraph from 'antd/lib/typography/Paragraph';
+import Upload, { RcFile } from 'antd/lib/upload';
+import Empty from 'antd/lib/empty';
+import Tree, { AntTreeNode, TreeNodeNormal } from 'antd/lib/tree/Tree';
+
+import consts from 'consts';
export interface Files {
local: File[];
@@ -148,6 +147,7 @@ export default class FileManager extends React.PureComponent {
});
}
+ const { SHARE_MOUNT_GUIDE_URL } = consts;
const { treeData } = this.props;
const {
expandedKeys,
@@ -156,7 +156,7 @@ export default class FileManager extends React.PureComponent {
return (
- { treeData.length
+ { treeData[0].children && treeData[0].children.length
? (
{
>
{ renderTreeNodes(treeData) }
- ) : No data found}
+ ) : (
+
+
+
+ Please, be sure you had
+
+ mounted
+
+ share before you built CVAT and the shared storage contains files
+
+
+ )}
);
}
diff --git a/cvat-ui/src/components/file-manager/styles.scss b/cvat-ui/src/components/file-manager/styles.scss
index bff7e5a0..7c72d764 100644
--- a/cvat-ui/src/components/file-manager/styles.scss
+++ b/cvat-ui/src/components/file-manager/styles.scss
@@ -10,3 +10,9 @@
max-height: 20em;
overflow: auto;
}
+
+.cvat-empty-share-tree {
+ > .ant-typography {
+ margin-top: 10px;
+ }
+}
diff --git a/cvat-ui/src/components/global-error-boundary/global-error-boundary.tsx b/cvat-ui/src/components/global-error-boundary/global-error-boundary.tsx
index 3c132fd9..aeee46b7 100644
--- a/cvat-ui/src/components/global-error-boundary/global-error-boundary.tsx
+++ b/cvat-ui/src/components/global-error-boundary/global-error-boundary.tsx
@@ -19,6 +19,7 @@ import ErrorStackParser from 'error-stack-parser';
import { resetAfterErrorAsync } from 'actions/boundaries-actions';
import { CombinedState } from 'reducers/interfaces';
import logger, { LogType } from 'cvat-logger';
+import consts from 'consts';
interface StateToProps {
job: any | null;
@@ -161,7 +162,7 @@ class GlobalErrorBoundary extends React.PureComponent {
Notify an administrator or submit the issue directly on
- GitHub.
+ GitHub.
Please, provide also:
- Steps to reproduce the issue
diff --git a/cvat-ui/src/components/header/header.tsx b/cvat-ui/src/components/header/header.tsx
index 1c114ae9..38925dbb 100644
--- a/cvat-ui/src/components/header/header.tsx
+++ b/cvat-ui/src/components/header/header.tsx
@@ -16,6 +16,7 @@ import Modal from 'antd/lib/modal';
import Text from 'antd/lib/typography/Text';
import { CVATLogo, AccountIcon } from 'icons';
+import consts from 'consts';
interface HeaderContainerProps {
onLogout: () => void;
@@ -60,12 +61,15 @@ function HeaderContainer(props: Props): JSX.Element {
|| installedTFAnnotation
|| installedTFSegmentation;
- function aboutModal(): void {
- const CHANGELOG = 'https://github.com/opencv/cvat/blob/develop/CHANGELOG.md';
- const LICENSE = 'https://github.com/opencv/cvat/blob/develop/LICENSE';
- const GITTER = 'https://gitter.im/opencv-cvat';
- const FORUM = 'https://software.intel.com/en-us/forums/intel-distribution-of-openvino-toolkit';
+ const {
+ CHANGELOG_URL,
+ LICENSE_URL,
+ GITTER_URL,
+ FORUM_URL,
+ GITHUB_URL,
+ } = consts;
+ function aboutModal(): void {
Modal.info({
title: `${toolName}`,
content: (
@@ -106,10 +110,10 @@ function HeaderContainer(props: Props): JSX.Element {
- {'What\'s new?'}
- License
- Need help?
- Forum on Intel Developer Zone
+ {'What\'s new?'}
+ License
+ Need help?
+ Forum on Intel Developer Zone
),
@@ -199,7 +203,9 @@ function HeaderContainer(props: Props): JSX.Element {
type='link'
onClick={
(): void => {
- window.open('https://github.com/opencv/cvat', '_blank');
+ // false positive
+ // eslint-disable-next-line security/detect-non-literal-fs-filename
+ window.open(GITHUB_URL, '_blank');
}
}
>
diff --git a/cvat-ui/src/components/settings-page/styles.scss b/cvat-ui/src/components/settings-page/styles.scss
index 63269c43..b3d47572 100644
--- a/cvat-ui/src/components/settings-page/styles.scss
+++ b/cvat-ui/src/components/settings-page/styles.scss
@@ -23,10 +23,14 @@
.cvat-player-settings-grid,
.cvat-workspace-settings-auto-save,
+.cvat-workspace-settings-autoborders,
.cvat-workspace-settings-show-text-always,
-.cvat-workspace-settings-show-text-always-checkbox,
-.cvat-workspace-settings-show-interpolated-checkbox {
- margin-bottom: 10px;
+.cvat-workspace-settings-show-interpolated {
+ margin-bottom: 25px;
+
+ > div:first-child {
+ margin-bottom: 10px;
+ }
}
.cvat-player-settings-grid-size,
@@ -36,8 +40,6 @@
.cvat-player-settings-speed,
.cvat-player-settings-reset-zoom,
.cvat-player-settings-rotate-all,
-.cvat-workspace-settings-show-text-always,
-.cvat-workspace-settings-show-interpolated,
.cvat-workspace-settings-aam-zoom-margin,
.cvat-workspace-settings-auto-save-interval {
margin-bottom: 25px;
diff --git a/cvat-ui/src/components/settings-page/workspace-settings.tsx b/cvat-ui/src/components/settings-page/workspace-settings.tsx
index 0ee068ae..5c85b529 100644
--- a/cvat-ui/src/components/settings-page/workspace-settings.tsx
+++ b/cvat-ui/src/components/settings-page/workspace-settings.tsx
@@ -17,11 +17,13 @@ interface Props {
aamZoomMargin: number;
showAllInterpolationTracks: boolean;
showObjectsTextAlways: boolean;
+ automaticBordering: boolean;
onSwitchAutoSave(enabled: boolean): void;
onChangeAutoSaveInterval(interval: number): void;
onChangeAAMZoomMargin(margin: number): void;
onSwitchShowingInterpolatedTracks(enabled: boolean): void;
onSwitchShowingObjectsTextAlways(enabled: boolean): void;
+ onSwitchAutomaticBordering(enabled: boolean): void;
}
export default function WorkspaceSettingsComponent(props: Props): JSX.Element {
@@ -31,11 +33,13 @@ export default function WorkspaceSettingsComponent(props: Props): JSX.Element {
aamZoomMargin,
showAllInterpolationTracks,
showObjectsTextAlways,
+ automaticBordering,
onSwitchAutoSave,
onChangeAutoSaveInterval,
onChangeAAMZoomMargin,
onSwitchShowingInterpolatedTracks,
onSwitchShowingObjectsTextAlways,
+ onSwitchAutomaticBordering,
} = props;
const minAutoSaveInterval = 5;
@@ -82,7 +86,7 @@ export default function WorkspaceSettingsComponent(props: Props): JSX.Element {