@@ -87,45 +87,42 @@ export function useElementSize(elm: HTMLElement) {
87
87
return elmSize ;
88
88
}
89
89
export function useIsInPrint ( ) {
90
- // Initialize state with false
91
- const [ printMode , setPrintMode ] = useState < boolean > ( false ) ;
90
+ // Initialize state with media query
91
+ const [ printMode , setPrintMode ] = useState < boolean > ( window . matchMedia ? window . matchMedia ( 'print' ) . matches : false ) ;
92
92
useEffect ( ( ) => {
93
- function forcePrint ( e : KeyboardEvent ) {
93
+ if ( printMode )
94
+ document . body . classList . add ( KnownClassNames . print ) ;
95
+ else
96
+ document . body . classList . remove ( KnownClassNames . print ) ;
97
+ } , [ printMode ] ) ;
98
+
99
+ useEffect ( ( ) => {
100
+ const forcePrintOn = ( ) => setPrintMode ( true ) ;
101
+ const forcePrintOff = ( ) => setPrintMode ( false ) ;
102
+
103
+ function printDebugHelper ( e : KeyboardEvent ) {
94
104
if ( e . ctrlKey && e . shiftKey && e . altKey ) {
95
105
if ( e . key . toLocaleLowerCase ( ) === "q" ) {
96
- document . body . classList . remove ( KnownClassNames . print ) ;
97
- handlePrint ( e , false ) ;
106
+ forcePrintOff ( ) ;
98
107
}
99
108
else {
100
109
console . warn ( 'forced print mode - to exit refresh to ctrl+shift+alt+q' ) ;
101
- document . body . classList . add ( KnownClassNames . print ) ;
102
- handlePrint ( e , true ) ;
103
- }
104
- }
105
- }
106
- // Handler to call on printing
107
- function handlePrint ( e ?: Event , force ?: boolean ) {
108
- if ( force === true ) setPrintMode ( true ) ;
109
- else if ( window . matchMedia ) {
110
- var mediaQueryList = window . matchMedia ( 'print' ) ;
111
- if ( mediaQueryList . matches ) {
112
- setPrintMode ( true ) ;
113
- } else {
114
- setPrintMode ( false ) ;
110
+ forcePrintOn ( ) ;
115
111
}
116
112
}
117
113
}
114
+
118
115
// Add event listener
119
- window . addEventListener ( "print" , handlePrint ) ;
116
+ window . addEventListener ( "beforeprint" , forcePrintOn ) ;
117
+ window . addEventListener ( "afterprint" , forcePrintOff ) ;
120
118
if ( isDebug ( ) )
121
- window . addEventListener ( "keydown" , forcePrint ) ;
122
- // Call handler right away so state gets updated with initial printing state
123
- handlePrint ( ) ;
119
+ window . addEventListener ( "keydown" , printDebugHelper ) ;
124
120
// Remove event listener on cleanup
125
121
return ( ) => {
126
- window . removeEventListener ( "print" , handlePrint ) ;
122
+ window . removeEventListener ( "beforeprint" , forcePrintOn ) ;
123
+ window . removeEventListener ( "afterprint" , forcePrintOff ) ;
127
124
if ( isDebug ( ) )
128
- window . removeEventListener ( "keydown" , forcePrint ) ;
125
+ window . removeEventListener ( "keydown" , printDebugHelper ) ;
129
126
} ;
130
127
} , useEffectOnlyOnMount ) ;
131
128
return printMode ;
0 commit comments