11import { FC , useContext , useEffect , useMemo , useState } from 'react'
22import { bind , debounce , isEmpty } from 'lodash'
33import { toast } from 'react-toastify'
4- import { Params , useNavigate , useParams } from 'react-router-dom'
4+ import { Params , useNavigate , useParams , useSearchParams } from 'react-router-dom'
55import classNames from 'classnames'
66
77import { profileContext , ProfileContextData } from '~/libs/core'
88import { Button , IconSolid , InputDatePicker , InputMultiselectOption ,
99 InputRadio , InputSelect , InputSelectReact , InputText , InputTextarea } from '~/libs/ui'
1010import { InputSkillSelector } from '~/libs/shared'
1111
12- import { getProjects , ProjectsResponse , useProjects } from '../../services/projects'
12+ import { getProject , getProjects , ProjectsResponse , useProjects } from '../../services/projects'
1313import { ProjectTypes , ProjectTypeValues } from '../../constants'
1414import { CopilotRequestResponse , saveCopilotRequest , useCopilotRequest } from '../../services/copilot-requests'
15+ import { Project } from '../../models/Project'
1516
1617import styles from './styles.module.scss'
1718
@@ -37,11 +38,13 @@ const CopilotRequestForm: FC<{}> = () => {
3738 const { profile } : ProfileContextData = useContext ( profileContext )
3839 const navigate = useNavigate ( )
3940 const routeParams : Params < string > = useParams ( )
41+ const [ params ] = useSearchParams ( )
4042
4143 const [ formValues , setFormValues ] = useState < any > ( { } )
4244 const [ isFormChanged , setIsFormChanged ] = useState ( false )
4345 const [ formErrors , setFormErrors ] = useState < any > ( { } )
4446 const [ paymentType , setPaymentType ] = useState < string > ( '' )
47+ const [ projectFromQuery , setProjectFromQuery ] = useState < Project > ( )
4548
4649 const { data : copilotRequestData } : CopilotRequestResponse = useCopilotRequest ( routeParams . requestId )
4750
@@ -51,15 +54,42 @@ const CopilotRequestForm: FC<{}> = () => {
5154 }
5255 } , [ copilotRequestData ] )
5356
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+
5478 const { data : projects = [ ] } : ProjectsResponse = useProjects ( undefined , {
5579 filter : { id : copilotRequestData ?. projectId } ,
5680 isPaused : ( ) => ! copilotRequestData ?. projectId ,
5781 } )
5882
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 ] )
6393
6494 const projectTypes = ProjectTypes ? ProjectTypes . map ( project => ( {
6595 label : project ,
0 commit comments