@alauda/doom
Version:
Doctor Doom making docs.
32 lines (31 loc) • 1.14 kB
JavaScript
import { useSearchParams } from '@rspress/core/runtime';
import { useState, useEffect, useCallback } from 'react';
import { FALSY_VALUES } from '../../shared/index.js';
export function useIsPrintQuery() {
const [searchParams] = useSearchParams();
const print = searchParams.get('print');
return print != null && !FALSY_VALUES.has(print);
}
const getPrintMediaQuery = () => {
if (typeof document === 'undefined') {
return;
}
return matchMedia('print');
};
export function useIsPrintMedia() {
const [printMediaQuery] = useState(getPrintMediaQuery);
const [isPrint, setIsPrint] = useState(!!printMediaQuery?.matches);
const onChange = useCallback((mqList) => {
setIsPrint(mqList.matches);
}, []);
useEffect(() => {
printMediaQuery?.addEventListener('change', onChange);
return () => printMediaQuery?.removeEventListener('change', onChange);
}, [onChange, printMediaQuery]);
return isPrint;
}
export function useIsPrint() {
const isPrintQuery = useIsPrintQuery();
const isPrintMedia = useIsPrintMedia();
return isPrintQuery || isPrintMedia;
}