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.

85 lines
3.1 KiB
TypeScript

// Copyright (C) 2020-2021 Intel Corporation
//
// SPDX-License-Identifier: MIT
import React, { useState } from 'react';
import { useDispatch } from 'react-redux';
import moment from 'moment';
import { Row, Col } from 'antd/lib/grid';
import Title from 'antd/lib/typography/Title';
import Text from 'antd/lib/typography/Text';
import getCore from 'cvat-core-wrapper';
import { updateProjectAsync } from 'actions/projects-actions';
import LabelsEditor from 'components/labels-editor/labels-editor';
import BugTrackerEditor from 'components/task-page/bug-tracker-editor';
import UserSelector from 'components/task-page/user-selector';
const core = getCore();
interface DetailsComponentProps {
project: any;
}
export default function DetailsComponent(props: DetailsComponentProps): JSX.Element {
const { project } = props;
const dispatch = useDispatch();
const [projectName, setProjectName] = useState(project.name);
return (
<div cvat-project-id={project.id} className='cvat-project-details'>
<Row>
<Col>
<Title
level={4}
editable={{
onChange: (value: string): void => {
setProjectName(value);
project.name = value;
dispatch(updateProjectAsync(project));
},
}}
className='cvat-text-color cvat-project-name'
>
{projectName}
</Title>
</Col>
</Row>
<Row justify='space-between' className='cvat-project-description'>
<Col>
<Text type='secondary'>
{`Project #${project.id} created`}
{project.owner ? ` by ${project.owner.username}` : null}
{` on ${moment(project.createdDate).format('MMMM Do YYYY')}`}
</Text>
<BugTrackerEditor
instance={project}
onChange={(bugTracker): void => {
project.bugTracker = bugTracker;
dispatch(updateProjectAsync(project));
}}
/>
</Col>
<Col>
<Text type='secondary'>Assigned to</Text>
<UserSelector
value={project.assignee}
onSelect={(user) => {
project.assignee = user;
dispatch(updateProjectAsync(project));
}}
/>
</Col>
</Row>
<LabelsEditor
labels={project.labels.map((label: any): string => label.toJSON())}
onSubmit={(labels: any[]): void => {
project.labels = labels.map((labelData): any => new core.classes.Label(labelData));
dispatch(updateProjectAsync(project));
}}
/>
</div>
);
}