1
1
import { FC , useContext , useEffect , useMemo , useState } from 'react'
2
2
import { bind , debounce , isEmpty } from 'lodash'
3
3
import { toast } from 'react-toastify'
4
- import { Params , useNavigate , useParams } from 'react-router-dom'
4
+ import { Params , useNavigate , useParams , useSearchParams } from 'react-router-dom'
5
5
import classNames from 'classnames'
6
6
7
7
import { profileContext , ProfileContextData } from '~/libs/core'
8
8
import { Button , IconSolid , InputDatePicker , InputMultiselectOption ,
9
9
InputRadio , InputSelect , InputSelectReact , InputText , InputTextarea } from '~/libs/ui'
10
10
import { InputSkillSelector } from '~/libs/shared'
11
11
12
- import { getProjects , ProjectsResponse , useProjects } from '../../services/projects'
12
+ import { getProject , getProjects , ProjectsResponse , useProjects } from '../../services/projects'
13
13
import { ProjectTypes , ProjectTypeValues } from '../../constants'
14
14
import { CopilotRequestResponse , saveCopilotRequest , useCopilotRequest } from '../../services/copilot-requests'
15
+ import { Project } from '../../models/Project'
15
16
16
17
import styles from './styles.module.scss'
17
18
@@ -37,11 +38,13 @@ const CopilotRequestForm: FC<{}> = () => {
37
38
const { profile } : ProfileContextData = useContext ( profileContext )
38
39
const navigate = useNavigate ( )
39
40
const routeParams : Params < string > = useParams ( )
41
+ const [ params ] = useSearchParams ( )
40
42
41
43
const [ formValues , setFormValues ] = useState < any > ( { } )
42
44
const [ isFormChanged , setIsFormChanged ] = useState ( false )
43
45
const [ formErrors , setFormErrors ] = useState < any > ( { } )
44
46
const [ paymentType , setPaymentType ] = useState < string > ( '' )
47
+ const [ projectFromQuery , setProjectFromQuery ] = useState < Project > ( )
45
48
46
49
const { data : copilotRequestData } : CopilotRequestResponse = useCopilotRequest ( routeParams . requestId )
47
50
@@ -51,15 +54,42 @@ const CopilotRequestForm: FC<{}> = () => {
51
54
}
52
55
} , [ copilotRequestData ] )
53
56
57
+ const fetchProject = async ( ) : Promise < void > => {
58
+ const projectId = params . get ( 'projectId' )
59
+
60
+ if ( ! projectId ) {
61
+ return
62
+ }
63
+
64
+ const project = await getProject ( projectId as string )
65
+
66
+ setFormValues ( ( prevValues : any ) => ( {
67
+ ...prevValues ,
68
+ projectId : project . id ,
69
+ } ) )
70
+ setIsFormChanged ( true )
71
+ setProjectFromQuery ( project )
72
+ }
73
+
74
+ useEffect ( ( ) => {
75
+ fetchProject ( )
76
+ } , [ params ] )
77
+
54
78
const { data : projects = [ ] } : ProjectsResponse = useProjects ( undefined , {
55
79
filter : { id : copilotRequestData ?. projectId } ,
56
80
isPaused : ( ) => ! copilotRequestData ?. projectId ,
57
81
} )
58
82
59
- const projectOptions = useMemo ( ( ) => projects . map ( p => ( {
60
- label : p . name ,
61
- value : p . id ,
62
- } ) ) , [ projects ] )
83
+ const projectOptions = useMemo ( ( ) => {
84
+ const projectsFromResponse = projects . map ( p => ( {
85
+ label : p . name ,
86
+ value : p . id ,
87
+ } ) )
88
+
89
+ return projectFromQuery
90
+ ? [ ...projectsFromResponse , { label : projectFromQuery . name , value : projectFromQuery . id } ]
91
+ : projectsFromResponse
92
+ } , [ projects , projectFromQuery ] )
63
93
64
94
const projectTypes = ProjectTypes ? ProjectTypes . map ( project => ( {
65
95
label : project ,
0 commit comments