39 lines
1.3 KiB
JavaScript
39 lines
1.3 KiB
JavaScript
import { QrCode, QrSegment } from "../libs/qrcodegen";
|
|
import { ERROR_LEVEL_MAP, getImageSettings, getMarginSize } from "../utils";
|
|
import { useMemo } from 'react';
|
|
export function useQRCode(_ref) {
|
|
var value = _ref.value,
|
|
level = _ref.level,
|
|
minVersion = _ref.minVersion,
|
|
includeMargin = _ref.includeMargin,
|
|
marginSize = _ref.marginSize,
|
|
imageSettings = _ref.imageSettings,
|
|
size = _ref.size;
|
|
var qrcode = useMemo(function () {
|
|
var segments = QrSegment.makeSegments(value);
|
|
return QrCode.encodeSegments(segments, ERROR_LEVEL_MAP[level], minVersion);
|
|
}, [value, level, minVersion]);
|
|
var _useMemo = useMemo(function () {
|
|
var cs = qrcode.getModules();
|
|
var mg = getMarginSize(includeMargin, marginSize);
|
|
var ncs = cs.length + mg * 2;
|
|
var cis = getImageSettings(cs, size, mg, imageSettings);
|
|
return {
|
|
cells: cs,
|
|
margin: mg,
|
|
numCells: ncs,
|
|
calculatedImageSettings: cis
|
|
};
|
|
}, [qrcode, size, imageSettings, includeMargin, marginSize]),
|
|
cells = _useMemo.cells,
|
|
margin = _useMemo.margin,
|
|
numCells = _useMemo.numCells,
|
|
calculatedImageSettings = _useMemo.calculatedImageSettings;
|
|
return {
|
|
qrcode: qrcode,
|
|
margin: margin,
|
|
cells: cells,
|
|
numCells: numCells,
|
|
calculatedImageSettings: calculatedImageSettings
|
|
};
|
|
} |