import React, { useContext, forwardRef, ReactNode, Ref, useEffect } from 'react'; import { Size } from '@pdfme-tables/common'; import { FontContext } from '../contexts'; import { BACKGROUND_COLOR } from '../constants'; import Spinner from './Spinner'; type Props = { size: Size; scale: number; children: ReactNode }; const Root = ({ size, scale, children }: Props, ref: Ref) => { const font = useContext(FontContext); useEffect(() => { if (!document || !document.fonts) return; const fontFaces = Object.entries(font).map( ([key, { data }]) => new FontFace(key, typeof data === 'string' ? `url(${data})` : data, { display: 'swap', }) ); // @ts-ignore const newFontFaces = fontFaces.filter((fontFace) => !document.fonts.has(fontFace)); Promise.allSettled(newFontFaces.map((f) => f.load())).then((loadedFontFaces) => { loadedFontFaces.forEach((loadedFontFace) => { if (loadedFontFace.status === 'fulfilled') { // @ts-ignore document.fonts.add(loadedFontFace.value); } }); }); }, [font]); return (
{scale === 0 ? : children}
); }; export default forwardRef(Root);