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