|
|
|
@ -3,7 +3,7 @@
|
|
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
|
|
|
|
|
|
|
|
import './styles.scss';
|
|
|
|
import './styles.scss';
|
|
|
|
import React, { Dispatch, useEffect, TransitionEvent } from 'react';
|
|
|
|
import React, { Dispatch, TransitionEvent } from 'react';
|
|
|
|
import { AnyAction } from 'redux';
|
|
|
|
import { AnyAction } from 'redux';
|
|
|
|
import { connect } from 'react-redux';
|
|
|
|
import { connect } from 'react-redux';
|
|
|
|
import { MenuFoldOutlined, MenuUnfoldOutlined } from '@ant-design/icons';
|
|
|
|
import { MenuFoldOutlined, MenuUnfoldOutlined } from '@ant-design/icons';
|
|
|
|
@ -12,13 +12,12 @@ import Tabs from 'antd/lib/tabs';
|
|
|
|
import Layout from 'antd/lib/layout';
|
|
|
|
import Layout from 'antd/lib/layout';
|
|
|
|
|
|
|
|
|
|
|
|
import { Canvas } from 'cvat-canvas-wrapper';
|
|
|
|
import { Canvas } from 'cvat-canvas-wrapper';
|
|
|
|
|
|
|
|
import { Canvas3d } from 'cvat-canvas3d-wrapper';
|
|
|
|
import { CombinedState } from 'reducers/interfaces';
|
|
|
|
import { CombinedState } from 'reducers/interfaces';
|
|
|
|
import LabelsList from 'components/annotation-page/standard-workspace/objects-side-bar/labels-list';
|
|
|
|
import LabelsList from 'components/annotation-page/standard-workspace/objects-side-bar/labels-list';
|
|
|
|
import {
|
|
|
|
import { adjustContextImagePosition } from 'components/annotation-page/standard-workspace/context-image/context-image';
|
|
|
|
collapseSidebar as collapseSidebarAction,
|
|
|
|
import { collapseSidebar as collapseSidebarAction } from 'actions/annotation-actions';
|
|
|
|
updateTabContentHeight as updateTabContentHeightAction,
|
|
|
|
import AppearanceBlock from 'components/annotation-page/appearance-block';
|
|
|
|
} from 'actions/annotation-actions';
|
|
|
|
|
|
|
|
import AppearanceBlock, { computeHeight } from 'components/annotation-page/appearance-block';
|
|
|
|
|
|
|
|
import IssuesListComponent from 'components/annotation-page/standard-workspace/objects-side-bar/issues-list';
|
|
|
|
import IssuesListComponent from 'components/annotation-page/standard-workspace/objects-side-bar/issues-list';
|
|
|
|
|
|
|
|
|
|
|
|
interface OwnProps {
|
|
|
|
interface OwnProps {
|
|
|
|
@ -27,12 +26,11 @@ interface OwnProps {
|
|
|
|
|
|
|
|
|
|
|
|
interface StateToProps {
|
|
|
|
interface StateToProps {
|
|
|
|
sidebarCollapsed: boolean;
|
|
|
|
sidebarCollapsed: boolean;
|
|
|
|
canvasInstance: Canvas;
|
|
|
|
canvasInstance: Canvas | Canvas3d;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
interface DispatchToProps {
|
|
|
|
interface DispatchToProps {
|
|
|
|
collapseSidebar(): void;
|
|
|
|
collapseSidebar(): void;
|
|
|
|
updateTabContentHeight(): void;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function mapStateToProps(state: CombinedState): StateToProps {
|
|
|
|
function mapStateToProps(state: CombinedState): StateToProps {
|
|
|
|
@ -54,33 +52,14 @@ function mapDispatchToProps(dispatch: Dispatch<AnyAction>): DispatchToProps {
|
|
|
|
collapseSidebar(): void {
|
|
|
|
collapseSidebar(): void {
|
|
|
|
dispatch(collapseSidebarAction());
|
|
|
|
dispatch(collapseSidebarAction());
|
|
|
|
},
|
|
|
|
},
|
|
|
|
updateTabContentHeight(): void {
|
|
|
|
|
|
|
|
const height = computeHeight();
|
|
|
|
|
|
|
|
dispatch(updateTabContentHeightAction(height));
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function ObjectsSideBar(props: StateToProps & DispatchToProps & OwnProps): JSX.Element {
|
|
|
|
function ObjectsSideBar(props: StateToProps & DispatchToProps & OwnProps): JSX.Element {
|
|
|
|
const {
|
|
|
|
const {
|
|
|
|
sidebarCollapsed, canvasInstance, collapseSidebar, updateTabContentHeight, objectsList,
|
|
|
|
sidebarCollapsed, canvasInstance, collapseSidebar, objectsList,
|
|
|
|
} = props;
|
|
|
|
} = props;
|
|
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
|
|
|
const alignTabHeight = (): void => {
|
|
|
|
|
|
|
|
if (!sidebarCollapsed) {
|
|
|
|
|
|
|
|
updateTabContentHeight();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
window.addEventListener('resize', alignTabHeight);
|
|
|
|
|
|
|
|
alignTabHeight();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return () => {
|
|
|
|
|
|
|
|
window.removeEventListener('resize', alignTabHeight);
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const collapse = (): void => {
|
|
|
|
const collapse = (): void => {
|
|
|
|
const [collapser] = window.document.getElementsByClassName('cvat-objects-sidebar');
|
|
|
|
const [collapser] = window.document.getElementsByClassName('cvat-objects-sidebar');
|
|
|
|
const listener = (event: TransitionEvent): void => {
|
|
|
|
const listener = (event: TransitionEvent): void => {
|
|
|
|
@ -95,6 +74,7 @@ function ObjectsSideBar(props: StateToProps & DispatchToProps & OwnProps): JSX.E
|
|
|
|
(collapser as HTMLElement).addEventListener('transitionend', listener as any);
|
|
|
|
(collapser as HTMLElement).addEventListener('transitionend', listener as any);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adjustContextImagePosition(!sidebarCollapsed);
|
|
|
|
collapseSidebar();
|
|
|
|
collapseSidebar();
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|