UNPKG

@alauda/doom

Version:

Doctor Doom making docs.

32 lines (31 loc) 1.14 kB
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; }