Skip to content

Commit 8c7ffdc

Browse files
committed
fixing useIsInPrint
1 parent 8eb9589 commit 8c7ffdc

File tree

3 files changed

+34
-27
lines changed

3 files changed

+34
-27
lines changed

src/controls/button.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,13 @@ export const ButtonEXSecondary = React.forwardRef<HTMLButtonElement, (ButtonEXPr
111111
<ButtonEX ref={ref} appearance='secondary' shape={ctx.buttonShape} {...props}></ButtonEX>
112112
);
113113
});
114+
/** to be used in MessageBarActions for prominent actions. Otherwise use ButtonEX or ButtonEXDangerSubtle */
115+
export const ButtonEXMessageBarAction = React.forwardRef<HTMLButtonElement, (ButtonEXProps)>((props, ref) => {
116+
const ctx = useKWIZFluentContext();
117+
return (
118+
<ButtonEX ref={ref} appearance='secondary' hideOnPrint {...props}></ButtonEX>
119+
);
120+
});
114121
export const ButtonEXPrimary = React.forwardRef<HTMLButtonElement, (ButtonEXProps)>((props, ref) => {
115122
return (
116123
<ButtonEXSecondary ref={ref} appearance='primary' {...props}>{props.children}</ButtonEXSecondary>

src/helpers/context-export.tsx

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { makeStaticStyles, makeStyles } from "@fluentui/react-components";
1+
import { makeStaticStyles, makeStyles, tokens } from "@fluentui/react-components";
22
import React, { PropsWithChildren, useEffect, useState } from "react";
33
import { GetLogger } from "../_modules/config";
44
import { KnownClassNames } from "../styles";
@@ -9,7 +9,10 @@ const logger = GetLogger("KWIZFluentContextProvider");
99
const useContextStyles = makeStyles({
1010
root: {
1111
"& *": {
12-
scrollbarWidth: "thin"
12+
scrollbarWidth: "thin",
13+
//if we can make sure this applies only to fui-FluentProvider, do this too, since public forms might take over the entire page we don't want to to affect other sites:
14+
//maybe make KWIZFluentProvider automatically wrap in a root and apply to it
15+
//scrollbarColor: `${tokens.colorBrandForeground2} ${tokens.colorBrandBackground2}`
1316
},
1417
[`& .${KnownClassNames.printShow}`]: {
1518
'@media print': {

src/helpers/hooks-events.ts

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -87,45 +87,42 @@ export function useElementSize(elm: HTMLElement) {
8787
return elmSize;
8888
}
8989
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);
9292
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) {
94104
if (e.ctrlKey && e.shiftKey && e.altKey) {
95105
if (e.key.toLocaleLowerCase() === "q") {
96-
document.body.classList.remove(KnownClassNames.print);
97-
handlePrint(e, false);
106+
forcePrintOff();
98107
}
99108
else {
100109
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();
115111
}
116112
}
117113
}
114+
118115
// Add event listener
119-
window.addEventListener("print", handlePrint);
116+
window.addEventListener("beforeprint", forcePrintOn);
117+
window.addEventListener("afterprint", forcePrintOff);
120118
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);
124120
// Remove event listener on cleanup
125121
return () => {
126-
window.removeEventListener("print", handlePrint);
122+
window.removeEventListener("beforeprint", forcePrintOn);
123+
window.removeEventListener("afterprint", forcePrintOff);
127124
if (isDebug())
128-
window.removeEventListener("keydown", forcePrint);
125+
window.removeEventListener("keydown", printDebugHelper);
129126
};
130127
}, useEffectOnlyOnMount);
131128
return printMode;

0 commit comments

Comments
 (0)