@@ -13,7 +13,8 @@ import {
1313 ComboBox ,
1414 Button ,
1515 InlineNotification ,
16- TextInput
16+ TextInput ,
17+ Modal
1718} from '@carbon/react' ;
1819import {
1920 CheckmarkFilled ,
@@ -42,7 +43,7 @@ import ButtonGroup from '../ButtonGroup';
4243import { categoryMap , categoryMapReverse } from '../SharedConstants' ;
4344import { ImpurityType } from './definitions' ;
4445import {
45- DATE_FORMAT , fieldsConfig
46+ DATE_FORMAT , fieldsConfig , actionModalOptions , COMPLETE , ACCEPT
4647} from './constants' ;
4748import './styles.scss' ;
4849
@@ -55,6 +56,8 @@ const PurityContent = () => {
5556 const [ activityRecord , setActivityRecord ] = useState < ActivityRecordType > ( ) ;
5657 const [ activitySummary , setActivitySummary ] = useState < ActivitySummaryType > ( ) ;
5758 const [ alert , setAlert ] = useState < { isSuccess : boolean ; message : string } | null > ( null ) ;
59+ const [ isModalOpen , setModalOpen ] = useState ( false ) ;
60+ const [ modalType , setModalType ] = useState < 'complete' | 'accept' > ( COMPLETE ) ;
5861
5962 const tableBodyRef = useRef < HTMLTableSectionElement > ( null ) ;
6063
@@ -92,6 +95,64 @@ const PurityContent = () => {
9295 }
9396 } ) ;
9497
98+ const validateTest = useMutation ( {
99+ mutationFn : ( ) => testingActivitiesAPI (
100+ 'purityTest' ,
101+ 'validateTestResult' ,
102+ { riaKey }
103+ ) ,
104+ onSuccess : ( ) => {
105+ const testActivityData : TestingActivityType = {
106+ ...testActivity ! ,
107+ testCompleteInd : 1 ,
108+ sampleDesc : testActivity ?. sampleDesc || '' ,
109+ moistureStatus : testActivity ?. moistureStatus || '' ,
110+ moisturePct : testActivity ?. moisturePct || 0 ,
111+ acceptResult : testActivity ?. acceptResult || 0 ,
112+ requestId : testActivity ?. requestId || '' ,
113+ seedlotNumber : testActivity ?. seedlotNumber || '' ,
114+ activityType : testActivity ?. activityType || '' ,
115+ replicatesList : testActivity ?. replicatesList || [ ]
116+ } ;
117+ setTestActivity ( testActivityData ) ;
118+ setAlert ( { isSuccess : true , message : 'Test validated successfully' } ) ;
119+ setTimeout ( ( ) => {
120+ setAlert ( null ) ;
121+ } , 3000 ) ;
122+ } ,
123+ onError : ( error ) => {
124+ setAlert ( {
125+ isSuccess : false ,
126+ message : `Failed to validate test: ${ ( error as AxiosError ) . message } `
127+ } ) ;
128+ }
129+ } ) ;
130+
131+ const acceptTest = useMutation ( {
132+ mutationFn : ( ) => testingActivitiesAPI (
133+ 'purityTest' ,
134+ 'acceptResult' ,
135+ { riaKey }
136+ ) ,
137+ onSuccess : ( ) => {
138+ const testActivityData : TestingActivityType = {
139+ ...testActivity ! ,
140+ acceptResult : 1
141+ } ;
142+ setTestActivity ( testActivityData ) ;
143+ setAlert ( { isSuccess : true , message : 'Test accepted successfully' } ) ;
144+ setTimeout ( ( ) => {
145+ setAlert ( null ) ;
146+ } , 3000 ) ;
147+ } ,
148+ onError : ( error ) => {
149+ setAlert ( {
150+ isSuccess : false ,
151+ message : `Failed to accept test: ${ ( error as AxiosError ) . message } `
152+ } ) ;
153+ }
154+ } ) ;
155+
95156 useEffect ( ( ) => {
96157 if ( ! riaKey ) {
97158 navigate ( ROUTES . FOUR_OH_FOUR ) ;
@@ -201,28 +262,42 @@ const PurityContent = () => {
201262 setAverage ( 7.8 ) ; // Set the test average value from the API response
202263 } ;
203264
265+ const handleCompleteTestModal = ( ) => {
266+ setModalType ( COMPLETE ) ;
267+ setModalOpen ( true ) ;
268+ } ;
269+
270+ const handleAcceptTestModal = ( ) => {
271+ setModalType ( ACCEPT ) ;
272+ setModalOpen ( true ) ;
273+ } ;
274+
204275 const buttons = [
205276 {
206277 id : 'calculate-average' ,
207278 text : 'Calculate average' ,
208279 kind : 'primary' ,
209280 size : 'lg' ,
210281 icon : Calculator ,
211- onClick : handleCalculateAverage
282+ action : handleCalculateAverage
212283 } ,
213284 {
214285 id : 'complete-test' ,
215286 text : 'Complete test' ,
216287 kind : 'tertiary' ,
217288 size : 'lg' ,
218- icon : Checkmark
289+ icon : Checkmark ,
290+ disabled : testActivity ?. testCompleteInd === 1 ,
291+ action : handleCompleteTestModal
219292 } ,
220293 {
221294 id : 'accept-test' ,
222295 text : 'Accept test' ,
223296 kind : 'tertiary' ,
224297 size : 'lg' ,
225- icon : CheckmarkOutline
298+ icon : CheckmarkOutline ,
299+ disabled : testActivity ?. acceptResult === 1 || testActivity ?. testCompleteInd !== 1 ,
300+ action : handleAcceptTestModal
226301 } ,
227302 {
228303 id : 'test-history' ,
@@ -322,21 +397,42 @@ const PurityContent = () => {
322397 </ Alert >
323398 )
324399 }
400+ < Modal
401+ className = "action-modal"
402+ modalLabel = { actionModalOptions [ modalType ] . modalLabel }
403+ modalHeading = { actionModalOptions [ modalType ] . modalHeading }
404+ primaryButtonText = { actionModalOptions [ modalType ] . primaryButtonText }
405+ secondaryButtonText = { actionModalOptions [ modalType ] . secondaryButtonText }
406+ open = { isModalOpen }
407+ onRequestClose = { ( ) => {
408+ setModalOpen ( false ) ;
409+ } }
410+ onRequestSubmit = { ( ) => {
411+ if ( modalType === COMPLETE ) {
412+ validateTest . mutate ( ) ;
413+ } else if ( modalType === ACCEPT ) {
414+ acceptTest . mutate ( ) ;
415+ }
416+ setModalOpen ( false ) ;
417+ } }
418+ size = "sm"
419+ danger
420+ />
325421 < Row className = "consep-purity-content-breadcrumb" >
326422 < Breadcrumbs crumbs = { createBreadcrumbItems ( ) } />
327423 </ Row >
328424 < Row className = "consep-purity-content-title" >
329425 < PageTitle title = { `${ fieldsConfig . titleSection . title } ${ seedlotNumber } ` } />
330426 < >
331427 {
332- testActivity ?. testCompleteInd
428+ testActivity ?. testCompleteInd === 1
333429 ? (
334430 < StatusTag type = "Completed" renderIcon = { CheckmarkFilled } />
335431 )
336432 : null
337433 }
338434 {
339- testActivity ?. acceptResult
435+ testActivity ?. acceptResult === 1
340436 ? (
341437 < StatusTag type = "Accepted" renderIcon = { CheckmarkFilled } />
342438 )
0 commit comments