feat: option to save qr codes with no colors by default
parent
5df14e74ff
commit
d1a06a93de
@ -0,0 +1,54 @@
|
||||
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('WIP: [saveBWQRCode] failed', err);
|
||||
}
|
||||
}
|
@ -1,34 +0,0 @@
|
||||
import { isEmpty } from 'lodash';
|
||||
import { createRoot } from 'react-dom/client';
|
||||
import { SessionQRCode, SessionQRCodeProps } from '../components/SessionQRCode';
|
||||
import { sleepFor } from '../session/utils/Promise';
|
||||
import { saveURLAsFile } from './saveURLAsFile';
|
||||
|
||||
export async function saveQRCode(id: string, customProps?: SessionQRCodeProps): Promise<void> {
|
||||
let qrCanvas: HTMLCanvasElement | undefined;
|
||||
|
||||
if (!isEmpty(customProps)) {
|
||||
const root = document.querySelector('#root');
|
||||
const divElement = document.createElement('div');
|
||||
root?.appendChild(divElement);
|
||||
const reactRoot = createRoot(divElement!);
|
||||
reactRoot.render(<SessionQRCode {...customProps} />);
|
||||
// wait for it to render
|
||||
await sleepFor(100);
|
||||
qrCanvas = root?.querySelector(`#${customProps.id}`) as HTMLCanvasElement;
|
||||
reactRoot?.unmount();
|
||||
root?.removeChild(divElement);
|
||||
} else {
|
||||
qrCanvas = document.querySelector(`#${id}`) as HTMLCanvasElement;
|
||||
}
|
||||
|
||||
if (qrCanvas) {
|
||||
saveURLAsFile({
|
||||
filename: `${id}-${new Date().toISOString()}.png`,
|
||||
url: qrCanvas.toDataURL(),
|
||||
document,
|
||||
});
|
||||
} else {
|
||||
window.log.error('[saveQRCode] QR code not found!');
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue