11import { BRANCH_NODE } from '@lcov-viewer/core' ;
2- import { useEffect , useRef } from 'react' ;
2+ import { useCallback , useEffect , useRef } from 'react' ;
33import { collapseRow , expandRow , hideRow , showRow } from '../render/collapse' ;
44
55const findRow = ( element ) => {
@@ -25,7 +25,8 @@ const useCollapse = () => {
2525
2626 Array . prototype . forEach . call ( ref . current . querySelectorAll ( 'tbody tr' ) , row => {
2727 const path = row . getAttribute ( 'data-node' ) ;
28- state . current [ path ] = { path, row, collapsed : false , visible : true } ;
28+ const type = row . getAttribute ( 'data-node-type' ) ;
29+ state . current [ path ] = { path, type, row, collapsed : false , visible : true } ;
2930 } ) ;
3031
3132 const handleClick = ( event ) => {
@@ -53,8 +54,10 @@ const useCollapse = () => {
5354 affectedChildrenPaths . forEach ( path => {
5455 if ( rowState . collapsed ) {
5556 showRow ( state . current [ path ] . row ) ;
57+ state . current [ path ] . visible = true ;
5658 } else {
5759 hideRow ( state . current [ path ] . row ) ;
60+ state . current [ path ] . visible = false ;
5861 }
5962 } ) ;
6063
@@ -69,7 +72,38 @@ const useCollapse = () => {
6972 } ;
7073 } , [ ] ) ;
7174
72- return ref ;
75+ const onCollapseAll = useCallback ( ( ) => {
76+ Object . values ( state . current ) . forEach ( rowState => {
77+ if ( rowState . type === BRANCH_NODE ) {
78+ if ( ! rowState . collapsed ) {
79+ collapseRow ( rowState . row ) ;
80+ rowState . collapsed = true ;
81+ }
82+ }
83+
84+ if ( rowState . path !== '' ) {
85+ hideRow ( rowState . row ) ;
86+ rowState . visible = false ;
87+ }
88+ } ) ;
89+
90+ } , [ ] ) ;
91+
92+ const onExpandAll = useCallback ( ( ) => {
93+ Object . values ( state . current ) . forEach ( rowState => {
94+ if ( rowState . collapsed ) {
95+ expandRow ( rowState . row ) ;
96+ rowState . collapsed = false ;
97+ }
98+
99+ if ( ! rowState . visible ) {
100+ showRow ( rowState . row ) ;
101+ rowState . visible = true ;
102+ }
103+ } ) ;
104+ } , [ ] ) ;
105+
106+ return [ ref , onCollapseAll , onExpandAll ] ;
73107} ;
74108
75109export default useCollapse ;
0 commit comments