1- import { useState } from 'react' ;
1+ import { useState , useEffect } from 'react' ;
22import { useNavigate } from 'react-router-dom' ;
33import { useDispatch , useSelector } from 'react-redux' ;
44import styles from './TriggerForm.module.css' ;
@@ -15,45 +15,62 @@ const TriggerForm = ({ workflowId, templateType }) => {
1515 const workflows = useSelector ( state => state . workflows . workflows ) ;
1616 const [ isDataSending , setDataSending ] = useState ( false ) ;
1717 const [ workflowInstanceUrl , setWorkflowInstanceUrl ] = useState ( '' ) ;
18- const [ i9Form , setI9Form ] = useState ( [
18+ const i9Form = [
1919 { fieldHeader : triggerForm . fieldsI9 . field1 , fieldName : 'preparerName' , value : '' } ,
2020 { fieldHeader : triggerForm . fieldsI9 . field2 , fieldName : 'preparerEmail' , value : '' } ,
2121 { fieldHeader : triggerForm . fieldsI9 . field3 , fieldName : 'employeeName' , value : '' } ,
2222 { fieldHeader : triggerForm . fieldsI9 . field4 , fieldName : 'employeeEmail' , value : '' } ,
2323 { fieldHeader : triggerForm . fieldsI9 . field5 , fieldName : 'hrApproverName' , value : '' } ,
2424 { fieldHeader : triggerForm . fieldsI9 . field6 , fieldName : 'hrApproverEmail' , value : '' } ,
25- ] ) ;
26- const [ offerLetterForm , setOfferLetterForm ] = useState ( [
25+ ] ;
26+ const offerLetterForm = [
2727 { fieldHeader : triggerForm . fieldsOffer . field1 , fieldName : 'hrManagerName' , value : '' } ,
2828 { fieldHeader : triggerForm . fieldsOffer . field2 , fieldName : 'hrManagerEmail' , value : '' } ,
2929 { fieldHeader : triggerForm . fieldsOffer . field3 , fieldName : 'Company' , value : '' } ,
30- ] ) ;
31- const [ ndaForm , setNdaForm ] = useState ( [
30+ ] ;
31+ const ndaForm = [
3232 { fieldHeader : triggerForm . fieldsNda . field1 , fieldName : 'hrManagerName' , value : '' } ,
3333 { fieldHeader : triggerForm . fieldsNda . field2 , fieldName : 'hrManagerEmail' , value : '' } ,
34- ] ) ;
35-
36- let relevantFormFields = [ ] ;
37- let relevantSetter = null ;
38- switch ( templateType ) {
39- case TemplateType . I9 . type :
40- relevantFormFields = i9Form ;
41- relevantSetter = setI9Form ;
42- break ;
43- case TemplateType . OFFER . type :
44- relevantFormFields = offerLetterForm ;
45- relevantSetter = setOfferLetterForm ;
46- break ;
47- case TemplateType . NDA . type :
48- relevantFormFields = ndaForm ;
49- relevantSetter = setNdaForm ;
50- break ;
51- }
34+ ] ;
35+
36+ let [ relevantFormFields , setRelevantFormFields ] = useState ( [ ] ) ;
37+
38+ useEffect ( ( ) => {
39+ switch ( templateType ) {
40+ case TemplateType . I9 . type :
41+ setRelevantFormFields ( i9Form ) ;
42+ break ;
43+ case TemplateType . OFFER . type :
44+ setRelevantFormFields ( offerLetterForm ) ;
45+ break ;
46+ case TemplateType . NDA . type :
47+ setRelevantFormFields ( ndaForm ) ;
48+ break ;
49+ case "-" :
50+ try {
51+ api . workflows . getWorkflowTriggerRequirements ( workflowId ) . then ( data => {
52+ console . log ( data . data . trigger_input_schema ) ;
53+ setRelevantFormFields ( generateDynamicForm ( data . data . trigger_input_schema , 'Custom' ) ) ;
54+ } ) ;
55+ } catch ( error ) {
56+ console . error ( "Failed to fetch trigger requirements:" , error ) ;
57+ }
58+ break ;
59+ }
60+ } , [ ] )
61+
62+ const generateDynamicForm = ( fieldNames ) => {
63+ return fieldNames . map ( ( field ) => ( {
64+ fieldHeader : field . field_name ,
65+ fieldName : field . field_name ,
66+ value : '' ,
67+ } ) ) ;
68+ } ;
5269
5370 const handleChange = ( idx , event ) => {
5471 const newRelevantForm = [ ...relevantFormFields ] ;
5572 newRelevantForm [ idx ] . value = event . target . value ;
56- relevantSetter ( newRelevantForm ) ;
73+ setRelevantFormFields ( newRelevantForm ) ;
5774 } ;
5875
5976 const handleCloseTriggerPopup = ( ) => {
@@ -76,7 +93,7 @@ const TriggerForm = ({ workflowId, templateType }) => {
7693
7794 setDataSending ( true ) ;
7895 const { data : triggeredWorkflow } = await api . workflows . triggerWorkflow ( workflowId , templateType , body ) ;
79- setWorkflowInstanceUrl ( triggeredWorkflow . workflowInstanceUrl ) ;
96+ setWorkflowInstanceUrl ( triggeredWorkflow . instance_url ) ;
8097
8198 // Update workflowDefinitions. "...workflow" creates new workflow-object to avoid mutation in redux
8299 const updatedWorkflowDefinitions = workflows . map ( w => {
@@ -93,6 +110,22 @@ const TriggerForm = ({ workflowId, templateType }) => {
93110 setDataSending ( false ) ;
94111 dispatch ( openPopupWindow ( ) ) ;
95112 } ;
113+ if ( ! relevantFormFields . length )
114+ return (
115+ < div className = { styles . formContainer } >
116+ < h2 > { triggerForm . formTitleWithoutInputs } </ h2 >
117+
118+ < form className = { styles . triggerForm } onSubmit = { handleSubmit } >
119+ < button className = "btn btn-primary" type = "submit" disabled = { isDataSending } >
120+ < span className = "sr-only" > { buttons . triggerWorkflow } </ span >
121+ { isDataSending ? < span className = "spinner-border spinner-border-sm" /> : null }
122+ </ button >
123+ </ form >
124+ { isPopupOpened && (
125+ < WorkflowTriggerResultPopup workflowInstanceUrl = { workflowInstanceUrl } togglePopup = { handleCloseTriggerPopup } />
126+ ) }
127+ </ div >
128+ ) ;
96129
97130 return (
98131 < div className = { styles . formContainer } >
0 commit comments