@@ -2,15 +2,16 @@ import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
22import { AxiosError , isAxiosError } from "axios" ;
33import clsx from "clsx" ;
44import { Field , Form , Formik , FormikProps } from "formik" ;
5- import { useEffect , useRef } from "react" ;
5+ import { useEffect , useRef , useState } from "react" ;
66import * as Yup from "yup" ;
7- import { createTimeEntry , getTimeEntryActivities } from "../../api/redmine" ;
7+ import { createTimeEntry , getTimeEntryActivities , updateIssue } from "../../api/redmine" ;
88import useSettings from "../../hooks/useSettings" ;
99import { TCreateTimeEntry , TIssue , TRedmineError } from "../../types/redmine" ;
1010import InputField from "../general/InputField" ;
1111import Modal from "../general/Modal" ;
1212import SelectField from "../general/SelectField" ;
1313import Toast from "../general/Toast" ;
14+ import DoneSlider from "./DoneSlider" ;
1415
1516type PropTypes = {
1617 issue : TIssue ;
@@ -38,10 +39,16 @@ const CreateTimeEntryModal = ({ issue, time, onClose, onSuccess }: PropTypes) =>
3839 mutationFn : ( entry : TCreateTimeEntry ) => createTimeEntry ( entry ) ,
3940 onSuccess : ( ) => {
4041 queryClient . invalidateQueries ( [ "issues" ] ) ;
42+ queryClient . invalidateQueries ( [ "additionalIssues" ] ) ;
4143 onSuccess ( ) ;
4244 } ,
4345 } ) ;
4446
47+ const [ doneRatio , setDoneRatio ] = useState ( issue . done_ratio ) ;
48+ const updateIssueMutation = useMutation ( {
49+ mutationFn : ( data : { done_ratio : number } ) => updateIssue ( issue . id , data ) ,
50+ } ) ;
51+
4552 return (
4653 < >
4754 < Modal title = "Add time spent" onClose = { onClose } >
@@ -59,6 +66,9 @@ const CreateTimeEntryModal = ({ issue, time, onClose, onSuccess }: PropTypes) =>
5966 } ) }
6067 onSubmit = { async ( values , { setSubmitting } ) => {
6168 //console.log("onSubmit", values);
69+ if ( issue . done_ratio !== doneRatio ) {
70+ await updateIssueMutation . mutateAsync ( { done_ratio : doneRatio } ) ;
71+ }
6272 await createTimeEntryMutation . mutateAsync ( values ) ;
6373 setSubmitting ( false ) ;
6474 } }
@@ -73,6 +83,7 @@ const CreateTimeEntryModal = ({ issue, time, onClose, onSuccess }: PropTypes) =>
7383 </ a > { " " }
7484 { issue . subject }
7585 </ h1 >
86+ < DoneSlider name = "done_ratio" value = { doneRatio } onChange = { ( e ) => setDoneRatio ( e . target . valueAsNumber ) } className = "mb-1" />
7687 < Field type = "number" name = "hours" title = "Hours" placeholder = "Hours" min = "0" step = "0.01" required as = { InputField } size = "sm" error = { touched . hours && errors . hours } autoComplete = "off" />
7788 < Field type = "text" name = "comments" title = "Comments" placeholder = "Comments" as = { InputField } size = "sm" error = { touched . comments && errors . comments } autoFocus />
7889 < Field type = "select" name = "activity_id" title = "Activity" placeholder = "Activity" required as = { SelectField } size = "sm" error = { touched . activity_id && errors . activity_id } >
0 commit comments