You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
| import { createRoot } from 'react-dom/client';
 | |
| import { SessionQRCode, SessionQRCodeProps } from '../components/SessionQRCode';
 | |
| import { convertIconToImageURL } from '../hooks/useIconToImageURL';
 | |
| import { sleepFor } from '../session/utils/Promise';
 | |
| import { saveURLAsFile } from './saveURLAsFile';
 | |
| 
 | |
| export async function saveBWQRCode(filename: string, props: SessionQRCodeProps): Promise<void> {
 | |
|   try {
 | |
|     const root = document.querySelector('#root');
 | |
|     const divElement = document.createElement('div');
 | |
|     divElement.style.display = 'none';
 | |
|     root?.appendChild(divElement);
 | |
| 
 | |
|     let logoImage = props.logoImage;
 | |
| 
 | |
|     if (props.hasLogo) {
 | |
|       const { dataUrl } = await convertIconToImageURL(props.hasLogo);
 | |
|       logoImage = dataUrl;
 | |
|     }
 | |
| 
 | |
|     const reactRoot = createRoot(divElement!);
 | |
|     reactRoot.render(
 | |
|       <SessionQRCode
 | |
|         id={props.id}
 | |
|         value={props.value}
 | |
|         size={props.size}
 | |
|         hasLogo={props.hasLogo}
 | |
|         logoImage={logoImage}
 | |
|         logoSize={props.logoSize}
 | |
|       />
 | |
|     );
 | |
|     // wait for it to render
 | |
|     await sleepFor(100);
 | |
| 
 | |
|     const qrCanvas = root?.querySelector(`#${props.id}-canvas`);
 | |
|     if (qrCanvas) {
 | |
|       const url = (qrCanvas as HTMLCanvasElement).toDataURL('image/jpeg');
 | |
|       if (url) {
 | |
|         saveURLAsFile({
 | |
|           filename,
 | |
|           url,
 | |
|           document,
 | |
|         });
 | |
|       }
 | |
|     } else {
 | |
|       throw Error('QR Code canvas not found');
 | |
|     }
 | |
| 
 | |
|     reactRoot?.unmount();
 | |
|     root?.removeChild(divElement);
 | |
|   } catch (err) {
 | |
|     window.log.error(`[saveBWQRCode] failed for ${filename}`, err);
 | |
|   }
 | |
| }
 |