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
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>
|
|
);
|
|
}
|