77 FaCircleXmark ,
88 FaRegCircleXmark ,
99} from 'react-icons/fa6' ;
10+ import { RiArrowDownSLine , RiArrowUpSLine } from 'react-icons/ri' ;
1011import {
1112 ComplianceRequirementsType ,
1213 IRSCTableType ,
@@ -34,6 +35,9 @@ const IRSCCrossCuttingTableType = ({
3435 const [ filledRequired , setFilledRequired ] = useState < number > ( 0 ) ;
3536 const [ filledRecommended , setFilledRecommended ] = useState < number > ( 0 ) ;
3637 const [ filledOptional , setFilledOptional ] = useState < number > ( 0 ) ;
38+ const [ isRequirementExpanded , setIsRequirementExpanded ] = useState < boolean > ( false ) ;
39+
40+ const handleRequirementExpand = ( ) => setIsRequirementExpanded ( ! isRequirementExpanded ) ;
3741
3842 useEffect ( ( ) => {
3943 setUpdatedData ( data ) ;
@@ -257,13 +261,15 @@ const IRSCCrossCuttingTableType = ({
257261 { ...row . getRowProps ( ) }
258262 key = { `row-${ indexKey } ` }
259263 className = { `irsc-table-rows ${
260- ! isTableValid &&
261- ( row . values . fulfillment === undefined ||
262- row . values . fulfillment === null ||
263- row . values . fulfillment === - 1 )
264- ? 'irsc-invalid-row'
265- : ''
266- } `}
264+ ! isTableValid &&
265+ ( row . values . fulfillment === undefined ||
266+ row . values . fulfillment === null ||
267+ row . values . fulfillment === - 1 )
268+ ? 'irsc-invalid-row'
269+ : ''
270+ }
271+ ${ ( ! isRequirementExpanded ) ? 'irsc-table-row-collapse' : '' }
272+ ` }
267273 >
268274 < TableCells row = { row } />
269275 </ tr >
@@ -272,7 +278,12 @@ const IRSCCrossCuttingTableType = ({
272278 } ) }
273279 { rows . some ( ( item ) => item . original . status === 1 ) && (
274280 < tr >
275- < td className = "irsc-table-header-required" colSpan = { 3 } >
281+ < td className = { classNames (
282+ 'irsc-table-header-required' ,
283+ { 'irsc-table-row-collapse' : ! isRequirementExpanded }
284+ ) }
285+ colSpan = { 3 }
286+ >
276287 { `${ format ( 'table.recommended_not_required.label' ) } ${ filledRecommended } /${ recommendedNumber } ` }
277288 </ td >
278289 </ tr >
@@ -284,7 +295,10 @@ const IRSCCrossCuttingTableType = ({
284295 < tr
285296 { ...row . getRowProps ( ) }
286297 key = { `row-${ indexKey } ` }
287- className = "irsc-table-rows"
298+ className = { classNames (
299+ 'irsc-table-rows' ,
300+ { 'irsc-table-row-collapse' : ! isRequirementExpanded }
301+ ) }
288302 >
289303 < TableCells row = { row } />
290304 </ tr >
@@ -293,7 +307,12 @@ const IRSCCrossCuttingTableType = ({
293307 } ) }
294308 { rows . some ( ( item ) => item . original . status === 2 ) && (
295309 < tr >
296- < td className = "irsc-table-header-required" colSpan = { 3 } >
310+ < td className = { classNames (
311+ 'irsc-table-header-required' ,
312+ { 'irsc-table-row-collapse' : ! isRequirementExpanded }
313+ ) }
314+ colSpan = { 3 }
315+ >
297316 { `${ format ( 'table.optional_not_required.label' ) } ${ filledOptional } /${ optionalNumber } ` }
298317 </ td >
299318 </ tr >
@@ -305,13 +324,38 @@ const IRSCCrossCuttingTableType = ({
305324 < tr
306325 { ...row . getRowProps ( ) }
307326 key = { `row-${ indexKey } ` }
308- className = "irsc-table-rows"
327+ className = { classNames (
328+ 'irsc-table-rows' ,
329+ { 'irsc-table-row-collapse' : ! isRequirementExpanded }
330+ ) }
309331 >
310332 < TableCells row = { row } />
311333 </ tr >
312334 ) ;
313335 }
314336 } ) }
337+ < tr >
338+ < td
339+ colSpan = { 3 }
340+ className = "irsc-table-header-required irsc-table-collapse-expand"
341+ onClick = { handleRequirementExpand }
342+ >
343+ { isRequirementExpanded
344+ ? < div className = 'irsc-table-collapse-expand-body' >
345+ < span className = 'irsc-table-arrow' >
346+ < RiArrowUpSLine />
347+ </ span >
348+ { format ( 'table.collapse_requirements.label' ) }
349+ </ div >
350+ : < div className = 'irsc-table-collapse-expand-body' >
351+ < span className = 'irsc-table-arrow' >
352+ < RiArrowDownSLine />
353+ </ span >
354+ { format ( 'table.expand_requirements.label' ) }
355+ </ div >
356+ }
357+ </ td >
358+ </ tr >
315359 </ tbody >
316360 </ table >
317361 </ div >
0 commit comments