useQRCode.js 1.1 KB

1234567891011121314151617181920212223242526272829
  1. import { QrCode, QrSegment } from "../libs/qrcodegen";
  2. import { ERROR_LEVEL_MAP, getImageSettings, getMarginSize } from "../utils";
  3. import React from 'react';
  4. export var useQRCode = function useQRCode(opt) {
  5. var value = opt.value,
  6. level = opt.level,
  7. minVersion = opt.minVersion,
  8. includeMargin = opt.includeMargin,
  9. marginSize = opt.marginSize,
  10. imageSettings = opt.imageSettings,
  11. size = opt.size;
  12. var memoizedQrcode = React.useMemo(function () {
  13. var segments = QrSegment.makeSegments(value);
  14. return QrCode.encodeSegments(segments, ERROR_LEVEL_MAP[level], minVersion);
  15. }, [value, level, minVersion]);
  16. return React.useMemo(function () {
  17. var cs = memoizedQrcode.getModules();
  18. var mg = getMarginSize(includeMargin, marginSize);
  19. var ncs = cs.length + mg * 2;
  20. var cis = getImageSettings(cs, size, mg, imageSettings);
  21. return {
  22. cells: cs,
  23. margin: mg,
  24. numCells: ncs,
  25. calculatedImageSettings: cis,
  26. qrcode: memoizedQrcode
  27. };
  28. }, [memoizedQrcode, size, imageSettings, includeMargin, marginSize]);
  29. };