2020-08-09 15:30:06 +02:00
|
|
|
|
import React, { FunctionComponent, Fragment } from "react";
|
|
|
|
|
import { Project } from "../../types/project";
|
|
|
|
|
import TaskTable from "./TasksTable";
|
|
|
|
|
import { TimePreview } from "./TimePreview";
|
2020-09-11 09:19:18 +02:00
|
|
|
|
import FinancialPreview from "./FinancialPreview";
|
2020-08-09 15:30:06 +02:00
|
|
|
|
import { addTask, updateTaskEstimation, removeTask, updateTaskLabel, ProjectReducerActions } from "../../hooks/useProjectReducer";
|
|
|
|
|
import { Task, TaskID, EstimationConfidence } from "../../types/task";
|
|
|
|
|
import RepartitionPreview from "./RepartitionPreview";
|
|
|
|
|
import { getHideFinancialPreviewOnPrint } from "../../types/params";
|
|
|
|
|
|
|
|
|
|
export interface EstimationTabProps {
|
|
|
|
|
project: Project
|
|
|
|
|
dispatch: (action: ProjectReducerActions) => void
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const EstimationTab: FunctionComponent<EstimationTabProps> = ({ project, dispatch }) => {
|
|
|
|
|
const onTaskAdd = (task: Task) => {
|
|
|
|
|
dispatch(addTask(task));
|
|
|
|
|
};
|
|
|
|
|
|
2020-09-11 09:19:18 +02:00
|
|
|
|
const onTaskRemove = (id: number) => {
|
|
|
|
|
dispatch(removeTask(id));
|
2020-08-09 15:30:06 +02:00
|
|
|
|
}
|
|
|
|
|
|
2020-09-11 09:19:18 +02:00
|
|
|
|
const onTaskLabelUpdate = (id: number, label: string) => {
|
|
|
|
|
dispatch(updateTaskLabel(id, label));
|
2020-08-09 15:30:06 +02:00
|
|
|
|
}
|
|
|
|
|
|
2020-09-11 09:19:18 +02:00
|
|
|
|
const onEstimationChange = (id: number, confidence: EstimationConfidence, value: number) => {
|
|
|
|
|
dispatch(updateTaskEstimation(id, confidence, value));
|
2020-08-09 15:30:06 +02:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
<Fragment>
|
|
|
|
|
<div className="columns">
|
|
|
|
|
<div className="column is-9">
|
|
|
|
|
<TaskTable
|
|
|
|
|
project={project}
|
|
|
|
|
onTaskAdd={onTaskAdd}
|
|
|
|
|
onTaskRemove={onTaskRemove}
|
|
|
|
|
onTaskLabelUpdate={onTaskLabelUpdate}
|
|
|
|
|
onEstimationChange={onEstimationChange} />
|
|
|
|
|
</div>
|
|
|
|
|
<div className="column is-3">
|
|
|
|
|
<TimePreview project={project} />
|
|
|
|
|
<RepartitionPreview project={project} />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div className="columns">
|
|
|
|
|
<div className={`column ${getHideFinancialPreviewOnPrint(project) ? 'noPrint': ''}`}>
|
|
|
|
|
<FinancialPreview project={project} />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
{
|
|
|
|
|
Object.keys(project.tasks).length <= 20 ?
|
|
|
|
|
<div className="message noPrint">
|
|
|
|
|
<div className="message-body">
|
|
|
|
|
<p><strong>⚠️ Attention</strong></p>
|
|
|
|
|
<p>Votre projet ne contient pas assez de tâches pour que les niveaux de confiance soient fiables. Un minimum de 20 tâches est conseillé pour obtenir une estimation pertinente.</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div> :
|
|
|
|
|
null
|
|
|
|
|
}
|
|
|
|
|
<hr />
|
|
|
|
|
</Fragment>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export default EstimationTab;
|