@@ -3,23 +3,58 @@ import { useNavigate } from 'react-router-dom';
33import { useDispatch , useSelector } from 'react-redux' ;
44import styles from './TriggerForm.module.css' ;
55import WorkflowTriggerResultPopup from '../Popups/WorkflowTriggerResult/WorkflowTriggerResult.jsx' ;
6- import textContent from '../../assets/text.json' ;
7- import { ROUTE } from '../../constants.js' ;
6+ import { triggerForm , buttons } from '../../assets/text.json' ;
7+ import { ROUTE , TemplateType } from '../../constants.js' ;
88import { api } from '../../api' ;
99import { openPopupWindow , closePopupWindow , updateWorkflowDefinitions } from '../../store/actions' ;
1010
11- const TriggerForm = ( { workflowId } ) => {
11+ const TriggerForm = ( { workflowId, templateType } ) => {
1212 const dispatch = useDispatch ( ) ;
1313 const navigate = useNavigate ( ) ;
1414 const isPopupOpened = useSelector ( state => state . popup . isOpened ) ;
1515 const workflows = useSelector ( state => state . workflows . workflows ) ;
16- const [ instanceName , setInstanceName ] = useState ( '' ) ;
17- const [ signerName , setSignerName ] = useState ( '' ) ;
18- const [ signerEmail , setSignerEmail ] = useState ( '' ) ;
19- const [ ccName , setCcName ] = useState ( '' ) ;
20- const [ ccEmail , setCcEmail ] = useState ( '' ) ;
2116 const [ isDataSending , setDataSending ] = useState ( false ) ;
2217 const [ workflowInstanceUrl , setWorkflowInstanceUrl ] = useState ( '' ) ;
18+ const [ i9Form , setI9Form ] = useState ( [
19+ { fieldHeader : 'Preparer Name' , fieldName : 'preparerName' , value : '' } ,
20+ { fieldHeader : 'Preparer Email' , fieldName : 'preparerEmail' , value : '' } ,
21+ { fieldHeader : 'Employee Name' , fieldName : 'employeeName' , value : '' } ,
22+ { fieldHeader : 'Employee Email' , fieldName : 'employeeEmail' , value : '' } ,
23+ { fieldHeader : 'HR Approver Name' , fieldName : 'hrApproverName' , value : '' } ,
24+ { fieldHeader : 'HR Approver Email' , fieldName : 'hrApproverEmail' , value : '' } ,
25+ ] ) ;
26+ const [ offerLetterForm , setOfferLetterForm ] = useState ( [
27+ { fieldHeader : 'HR Manager Name' , fieldName : 'hrManagerName' , value : '' } ,
28+ { fieldHeader : 'HR Manager Email' , fieldName : 'hrManagerEmail' , value : '' } ,
29+ { fieldHeader : 'Company' , fieldName : 'Company' , value : '' } ,
30+ ] ) ;
31+ const [ ndaForm , setNdaForm ] = useState ( [
32+ { fieldHeader : 'HR Manager Name' , fieldName : 'hrManagerName' , value : '' } ,
33+ { fieldHeader : 'HR Manager Email' , fieldName : 'hrManagerEmail' , value : '' } ,
34+ ] ) ;
35+
36+ let relevantForm = [ ] ;
37+ let relevantSetter = null ;
38+ switch ( templateType ) {
39+ case TemplateType . I9 . type :
40+ relevantForm = i9Form ;
41+ relevantSetter = setI9Form ;
42+ break ;
43+ case TemplateType . OFFER . type :
44+ relevantForm = offerLetterForm ;
45+ relevantSetter = setOfferLetterForm ;
46+ break ;
47+ case TemplateType . NDA . type :
48+ relevantForm = ndaForm ;
49+ relevantSetter = setNdaForm ;
50+ break ;
51+ }
52+
53+ const handleChange = ( idx , event ) => {
54+ const newRelevantForm = [ ...relevantForm ] ;
55+ newRelevantForm [ idx ] . value = event . target . value ;
56+ relevantSetter ( newRelevantForm ) ;
57+ } ;
2358
2459 const handleCloseTriggerPopup = ( ) => {
2560 dispatch ( closePopupWindow ( ) ) ;
@@ -29,16 +64,18 @@ const TriggerForm = ({ workflowId }) => {
2964 const handleSubmit = async event => {
3065 event . preventDefault ( ) ;
3166
32- const body = {
33- instanceName,
34- signerEmail,
35- signerName,
36- ccEmail,
37- ccName,
38- } ;
67+ const body = relevantForm . reduce ( ( acc , current ) => {
68+ acc [ current . fieldName ] = current . value ;
69+ return acc ;
70+ } , { } ) ;
71+
72+ if ( ! Object . keys ( body ) . length ) {
73+ navigate ( ROUTE . TRIGGER ) ;
74+ return ;
75+ }
3976
4077 setDataSending ( true ) ;
41- const { data : triggeredWorkflow } = await api . workflows . triggerWorkflow ( workflowId , body ) ;
78+ const { data : triggeredWorkflow } = await api . workflows . triggerWorkflow ( workflowId , templateType , body ) ;
4279 setWorkflowInstanceUrl ( triggeredWorkflow . workflowInstanceUrl ) ;
4380
4481 // Update workflowDefinitions. "...workflow" creates new workflow-object to avoid mutation in redux
@@ -54,49 +91,26 @@ const TriggerForm = ({ workflowId }) => {
5491
5592 dispatch ( updateWorkflowDefinitions ( updatedWorkflowDefinitions ) ) ;
5693 setDataSending ( false ) ;
57-
58- setInstanceName ( '' ) ;
59- setSignerName ( '' ) ;
60- setSignerEmail ( '' ) ;
61- setCcName ( '' ) ;
62- setCcEmail ( '' ) ;
6394 dispatch ( openPopupWindow ( ) ) ;
6495 } ;
6596
6697 return (
6798 < div className = { styles . formContainer } >
68- < h2 > { textContent . triggerForm . formTitle } </ h2 >
99+ < h2 > { triggerForm . formTitle } </ h2 >
69100 < div className = { styles . divider } />
70101 < form className = { styles . triggerForm } onSubmit = { handleSubmit } >
71- < h3 > { textContent . triggerForm . formName } </ h3 >
72- < div >
73- < label > { textContent . triggerForm . fields . instanceName } </ label >
74- < input type = "text" value = { instanceName } onChange = { e => setInstanceName ( e . target . value ) } required = { true } />
75- </ div >
76-
77- < div >
78- < label > { textContent . triggerForm . fields . signerName } </ label >
79- < input type = "text" value = { signerName } onChange = { e => setSignerName ( e . target . value ) } required = { true } />
80- </ div >
81-
82- < div >
83- < label > { textContent . triggerForm . fields . signerEmail } </ label >
84- < input type = "text" value = { signerEmail } onChange = { e => setSignerEmail ( e . target . value ) } required = { true } />
85- </ div >
86-
87- < div >
88- < label > { textContent . triggerForm . fields . ccName } </ label >
89- < input type = "text" value = { ccName } onChange = { e => setCcName ( e . target . value ) } required = { true } />
90- </ div >
102+ < h3 > { triggerForm . formName } </ h3 >
91103
92- < div >
93- < label > { textContent . triggerForm . fields . ccEmail } </ label >
94- < input type = "text" value = { ccEmail } onChange = { e => setCcEmail ( e . target . value ) } required = { true } />
95- </ div >
104+ { relevantForm . map ( ( formItem , idx ) => (
105+ < div key = { formItem . fieldHeader } >
106+ < label > { formItem . fieldHeader } </ label >
107+ < input type = "text" value = { formItem . value } onChange = { e => handleChange ( idx , e ) } required = { true } />
108+ </ div >
109+ ) ) }
96110
97111 < div className = { styles . divider } />
98112 < button className = "btn btn-primary" type = "submit" disabled = { isDataSending } >
99- < span className = "sr-only" > { textContent . buttons . continue } </ span >
113+ < span className = "sr-only" > { buttons . continue } </ span >
100114 { isDataSending ? < span className = "spinner-border spinner-border-sm" /> : null }
101115 </ button >
102116 </ form >
0 commit comments