@phystack/qr-run-react 4.3.40-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1117 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/short-url-qr-code.d.ts +9 -0
- package/dist/short-url-qr-code.d.ts.map +1 -0
- package/dist/short-url-qr-code.js +38 -0
- package/dist/shorten.d.ts +2 -0
- package/dist/shorten.d.ts.map +1 -0
- package/dist/shorten.js +28 -0
- package/dist/use-short-url-qr-code.d.ts +2 -0
- package/dist/use-short-url-qr-code.d.ts.map +1 -0
- package/dist/use-short-url-qr-code.js +68 -0
- package/dist/use-short-url.d.ts +2 -0
- package/dist/use-short-url.d.ts.map +1 -0
- package/dist/use-short-url.js +38 -0
- package/dist/utils/log.d.ts +4 -0
- package/dist/utils/log.d.ts.map +1 -0
- package/dist/utils/log.js +9 -0
- package/package.json +26 -0
- package/src/index.tsx +5 -0
- package/src/short-url-qr-code.tsx +22 -0
- package/src/shorten.ts +23 -0
- package/src/use-short-url-qr-code.tsx +71 -0
- package/src/use-short-url.ts +37 -0
- package/src/utils/log.ts +6 -0
- package/tsconfig.json +33 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as QrCode } from 'qrcode.react';
|
|
2
|
+
export { default as shorten } from './shorten';
|
|
3
|
+
export { default as useShortUrl } from './use-short-url';
|
|
4
|
+
export { default as useShortUrlQrCode } from './use-short-url-qr-code';
|
|
5
|
+
export { default } from './short-url-qr-code';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = exports.useShortUrlQrCode = exports.useShortUrl = exports.shorten = exports.QrCode = void 0;
|
|
7
|
+
var qrcode_react_1 = require("qrcode.react");
|
|
8
|
+
Object.defineProperty(exports, "QrCode", { enumerable: true, get: function () { return __importDefault(qrcode_react_1).default; } });
|
|
9
|
+
var shorten_1 = require("./shorten");
|
|
10
|
+
Object.defineProperty(exports, "shorten", { enumerable: true, get: function () { return __importDefault(shorten_1).default; } });
|
|
11
|
+
var use_short_url_1 = require("./use-short-url");
|
|
12
|
+
Object.defineProperty(exports, "useShortUrl", { enumerable: true, get: function () { return __importDefault(use_short_url_1).default; } });
|
|
13
|
+
var use_short_url_qr_code_1 = require("./use-short-url-qr-code");
|
|
14
|
+
Object.defineProperty(exports, "useShortUrlQrCode", { enumerable: true, get: function () { return __importDefault(use_short_url_qr_code_1).default; } });
|
|
15
|
+
var short_url_qr_code_1 = require("./short-url-qr-code");
|
|
16
|
+
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(short_url_qr_code_1).default; } });
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface Props {
|
|
3
|
+
url: string;
|
|
4
|
+
size: number;
|
|
5
|
+
children?: (shortUrl: string) => any;
|
|
6
|
+
}
|
|
7
|
+
declare const _default: React.MemoExoticComponent<({ url, children, size, ...props }: Props) => React.JSX.Element>;
|
|
8
|
+
export default _default;
|
|
9
|
+
//# sourceMappingURL=short-url-qr-code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"short-url-qr-code.d.ts","sourceRoot":"","sources":["../src/short-url-qr-code.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,UAAU,KAAK;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,CAAC;CACtC;sFAE0D,KAAK;AAWhE,wBAA0C"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
14
|
+
var t = {};
|
|
15
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
16
|
+
t[p] = s[p];
|
|
17
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
18
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
19
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
20
|
+
t[p[i]] = s[p[i]];
|
|
21
|
+
}
|
|
22
|
+
return t;
|
|
23
|
+
};
|
|
24
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
25
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
26
|
+
};
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
var react_1 = __importDefault(require("react"));
|
|
29
|
+
var use_short_url_qr_code_1 = __importDefault(require("./use-short-url-qr-code"));
|
|
30
|
+
var qrcode_react_1 = __importDefault(require("qrcode.react"));
|
|
31
|
+
var ShortUrlQrCode = function (_a) {
|
|
32
|
+
var url = _a.url, children = _a.children, size = _a.size, props = __rest(_a, ["url", "children", "size"]);
|
|
33
|
+
var _b = (0, use_short_url_qr_code_1.default)(url), shortUrl = _b[0], qrCodeValue = _b[1];
|
|
34
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
35
|
+
qrCodeValue && react_1.default.createElement(qrcode_react_1.default, __assign({ value: qrCodeValue, size: size }, props)),
|
|
36
|
+
children && shortUrl ? children(shortUrl) : null));
|
|
37
|
+
};
|
|
38
|
+
exports.default = react_1.default.memo(ShortUrlQrCode);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shorten.d.ts","sourceRoot":"","sources":["../src/shorten.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,gBAmB1E"}
|
package/dist/shorten.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// import { getInstanceProps } from '@phystack/signals';
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.default = shorten;
|
|
5
|
+
// TODO: we need to get analytics properties in a fast and efficient way from the hub-client instead of the signals package
|
|
6
|
+
function shorten(url, signal) {
|
|
7
|
+
// const sessionInstance = getInstanceProps();
|
|
8
|
+
return fetch('https://qr.run/api/v1/shorten', {
|
|
9
|
+
signal: signal,
|
|
10
|
+
method: 'POST',
|
|
11
|
+
headers: { 'Content-Type': 'application/json' },
|
|
12
|
+
body: JSON.stringify({
|
|
13
|
+
url: url,
|
|
14
|
+
// analytics: {
|
|
15
|
+
// tenantId: sessionInstance.tenantId,
|
|
16
|
+
// dataResidency: sessionInstance.dataResidency,
|
|
17
|
+
// sessionId: sessionInstance.sessionId,
|
|
18
|
+
// clientId: sessionInstance.clientId,
|
|
19
|
+
// spaceId: sessionInstance.spaceId,
|
|
20
|
+
// },
|
|
21
|
+
}),
|
|
22
|
+
})
|
|
23
|
+
.then(function (res) { return res.json(); })
|
|
24
|
+
.then(function (_a) {
|
|
25
|
+
var shortUrl = _a.shortUrl;
|
|
26
|
+
return shortUrl;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-short-url-qr-code.d.ts","sourceRoot":"","sources":["../src/use-short-url-qr-code.tsx"],"names":[],"mappings":"AAqBA,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,GAAG,GAAE,MAAW,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAiD5E"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = useShortUrlQrCode;
|
|
7
|
+
var react_1 = require("react");
|
|
8
|
+
var shorten_1 = __importDefault(require("./shorten"));
|
|
9
|
+
var log_1 = __importDefault(require("./utils/log"));
|
|
10
|
+
var delay = function (ms, signal) {
|
|
11
|
+
if (signal && signal.aborted) {
|
|
12
|
+
return Promise.reject(new DOMException('Aborted', 'AbortError'));
|
|
13
|
+
}
|
|
14
|
+
return new Promise(function (resolve, reject) {
|
|
15
|
+
var timeout = setTimeout(resolve, ms);
|
|
16
|
+
if (signal) {
|
|
17
|
+
signal.addEventListener('abort', function () {
|
|
18
|
+
clearTimeout(timeout);
|
|
19
|
+
reject(new DOMException('Aborted', 'AbortError'));
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
function useShortUrlQrCode(url) {
|
|
25
|
+
if (url === void 0) { url = ''; }
|
|
26
|
+
var _a = (0, react_1.useState)(''), shortUrl = _a[0], setShortUrl = _a[1];
|
|
27
|
+
var _b = (0, react_1.useState)(''), qrCodeValue = _b[0], setQrCodeValue = _b[1];
|
|
28
|
+
(0, react_1.useEffect)(function () {
|
|
29
|
+
setShortUrl('');
|
|
30
|
+
setQrCodeValue('');
|
|
31
|
+
var controller;
|
|
32
|
+
function generateUrlAndCode() {
|
|
33
|
+
if (url) {
|
|
34
|
+
controller = new AbortController();
|
|
35
|
+
(0, shorten_1.default)(url, controller.signal)
|
|
36
|
+
.then(function (nextShortUrl) {
|
|
37
|
+
controller.abort();
|
|
38
|
+
setShortUrl(nextShortUrl.replace('https://', ''));
|
|
39
|
+
setQrCodeValue("".concat(nextShortUrl, "?scan=1"));
|
|
40
|
+
})
|
|
41
|
+
.catch(function (err) {
|
|
42
|
+
if (err.name !== 'AbortError') {
|
|
43
|
+
(0, log_1.default)(err.message);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
delay(3000, controller.signal)
|
|
47
|
+
.then(function () {
|
|
48
|
+
controller.abort();
|
|
49
|
+
setQrCodeValue(url);
|
|
50
|
+
})
|
|
51
|
+
.catch(function (err) {
|
|
52
|
+
if (err.name !== 'AbortError') {
|
|
53
|
+
(0, log_1.default)(err.message);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
generateUrlAndCode();
|
|
59
|
+
var qrRefreshInterval = setInterval(generateUrlAndCode, 1000 * 60 * 60 * 23);
|
|
60
|
+
return function () {
|
|
61
|
+
if (controller)
|
|
62
|
+
controller.abort();
|
|
63
|
+
if (qrRefreshInterval)
|
|
64
|
+
clearInterval(qrRefreshInterval);
|
|
65
|
+
};
|
|
66
|
+
}, [url]);
|
|
67
|
+
return [shortUrl, qrCodeValue];
|
|
68
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-short-url.d.ts","sourceRoot":"","sources":["../src/use-short-url.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,GAAG,GAAE,MAAW,UAgCnD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.default = useShortUrl;
|
|
7
|
+
var react_1 = require("react");
|
|
8
|
+
var shorten_1 = __importDefault(require("./shorten"));
|
|
9
|
+
var log_1 = __importDefault(require("./utils/log"));
|
|
10
|
+
function useShortUrl(url) {
|
|
11
|
+
if (url === void 0) { url = ''; }
|
|
12
|
+
var _a = (0, react_1.useState)(''), shortUrl = _a[0], setShortUrl = _a[1];
|
|
13
|
+
(0, react_1.useEffect)(function () {
|
|
14
|
+
setShortUrl('');
|
|
15
|
+
var controller;
|
|
16
|
+
function generateUrlAndCode() {
|
|
17
|
+
if (url) {
|
|
18
|
+
controller = new AbortController();
|
|
19
|
+
(0, shorten_1.default)(url, controller.signal)
|
|
20
|
+
.then(function (nextShortUrl) { return setShortUrl(nextShortUrl); })
|
|
21
|
+
.catch(function (err) {
|
|
22
|
+
if (err.name !== 'AbortError') {
|
|
23
|
+
(0, log_1.default)(err.message);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
generateUrlAndCode();
|
|
29
|
+
var refreshUrlInterval = setInterval(generateUrlAndCode, 1000 * 60 * 60 * 23);
|
|
30
|
+
return function () {
|
|
31
|
+
if (controller)
|
|
32
|
+
controller.abort();
|
|
33
|
+
if (refreshUrlInterval)
|
|
34
|
+
clearInterval(refreshUrlInterval);
|
|
35
|
+
};
|
|
36
|
+
}, [url]);
|
|
37
|
+
return shortUrl;
|
|
38
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/utils/log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,QAAA,MAAM,GAAG,gBAA0B,CAAC;AAEpC,eAAe,GAAG,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
var debug_1 = __importDefault(require("debug"));
|
|
7
|
+
var packageJson = require('../../package.json');
|
|
8
|
+
var log = (0, debug_1.default)(packageJson.name);
|
|
9
|
+
exports.default = log;
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@phystack/qr-run-react",
|
|
3
|
+
"version": "4.3.40-dev",
|
|
4
|
+
"main": "dist/index.js",
|
|
5
|
+
"license": "UNLICENSED",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "tsc",
|
|
11
|
+
"build:watch": "tsc -w"
|
|
12
|
+
},
|
|
13
|
+
"peerDependencies": {
|
|
14
|
+
"react": "^18.3.1"
|
|
15
|
+
},
|
|
16
|
+
"devDependencies": {
|
|
17
|
+
"typescript": "^5.4.5"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@types/debug": "^4.1.7",
|
|
21
|
+
"@types/qrcode.react": "^1.0.5",
|
|
22
|
+
"debug": "^4.3.3",
|
|
23
|
+
"qrcode.react": "^3.1.0"
|
|
24
|
+
},
|
|
25
|
+
"gitHead": "53c505b3ecad47ebd4f38819c07b0ec1227214a6"
|
|
26
|
+
}
|
package/src/index.tsx
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { default as QrCode } from 'qrcode.react';
|
|
2
|
+
export { default as shorten } from './shorten';
|
|
3
|
+
export { default as useShortUrl } from './use-short-url';
|
|
4
|
+
export { default as useShortUrlQrCode } from './use-short-url-qr-code';
|
|
5
|
+
export { default } from './short-url-qr-code';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import useShortUrlQrCode from './use-short-url-qr-code';
|
|
3
|
+
import QrCode from 'qrcode.react';
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
url: string;
|
|
7
|
+
size: number;
|
|
8
|
+
children?: (shortUrl: string) => any;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const ShortUrlQrCode = ({ url, children, size, ...props }: Props) => {
|
|
12
|
+
const [shortUrl, qrCodeValue] = useShortUrlQrCode(url);
|
|
13
|
+
|
|
14
|
+
return (
|
|
15
|
+
<>
|
|
16
|
+
{qrCodeValue && <QrCode value={qrCodeValue} size={size} {...props} />}
|
|
17
|
+
{children && shortUrl ? children(shortUrl) : null}
|
|
18
|
+
</>
|
|
19
|
+
);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export default React.memo(ShortUrlQrCode);
|
package/src/shorten.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// import { getInstanceProps } from '@phystack/signals';
|
|
2
|
+
|
|
3
|
+
// TODO: we need to get analytics properties in a fast and efficient way from the hub-client instead of the signals package
|
|
4
|
+
export default function shorten(url: string, signal?: RequestInit['signal']) {
|
|
5
|
+
// const sessionInstance = getInstanceProps();
|
|
6
|
+
return fetch('https://qr.run/api/v1/shorten', {
|
|
7
|
+
signal,
|
|
8
|
+
method: 'POST',
|
|
9
|
+
headers: { 'Content-Type': 'application/json' },
|
|
10
|
+
body: JSON.stringify({
|
|
11
|
+
url,
|
|
12
|
+
// analytics: {
|
|
13
|
+
// tenantId: sessionInstance.tenantId,
|
|
14
|
+
// dataResidency: sessionInstance.dataResidency,
|
|
15
|
+
// sessionId: sessionInstance.sessionId,
|
|
16
|
+
// clientId: sessionInstance.clientId,
|
|
17
|
+
// spaceId: sessionInstance.spaceId,
|
|
18
|
+
// },
|
|
19
|
+
}),
|
|
20
|
+
})
|
|
21
|
+
.then((res) => res.json())
|
|
22
|
+
.then(({ shortUrl }) => shortUrl);
|
|
23
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { useState, useEffect } from 'react';
|
|
2
|
+
import shorten from './shorten';
|
|
3
|
+
import log from './utils/log';
|
|
4
|
+
|
|
5
|
+
const delay = (ms: number, signal: RequestInit['signal']) => {
|
|
6
|
+
if (signal && signal.aborted) {
|
|
7
|
+
return Promise.reject(new DOMException('Aborted', 'AbortError'));
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
return new Promise((resolve, reject) => {
|
|
11
|
+
const timeout = setTimeout(resolve, ms);
|
|
12
|
+
|
|
13
|
+
if (signal) {
|
|
14
|
+
signal.addEventListener('abort', () => {
|
|
15
|
+
clearTimeout(timeout);
|
|
16
|
+
reject(new DOMException('Aborted', 'AbortError'));
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export default function useShortUrlQrCode(url: string = ''): [string, string] {
|
|
23
|
+
const [shortUrl, setShortUrl] = useState('');
|
|
24
|
+
const [qrCodeValue, setQrCodeValue] = useState('');
|
|
25
|
+
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
setShortUrl('');
|
|
28
|
+
setQrCodeValue('');
|
|
29
|
+
|
|
30
|
+
let controller: any;
|
|
31
|
+
|
|
32
|
+
function generateUrlAndCode() {
|
|
33
|
+
if (url) {
|
|
34
|
+
controller = new AbortController();
|
|
35
|
+
|
|
36
|
+
shorten(url, controller.signal)
|
|
37
|
+
.then((nextShortUrl) => {
|
|
38
|
+
controller.abort();
|
|
39
|
+
setShortUrl(nextShortUrl.replace('https://', ''));
|
|
40
|
+
setQrCodeValue(`${nextShortUrl}?scan=1`);
|
|
41
|
+
})
|
|
42
|
+
.catch((err) => {
|
|
43
|
+
if (err.name !== 'AbortError') {
|
|
44
|
+
log(err.message);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
delay(3000, controller.signal)
|
|
49
|
+
.then(() => {
|
|
50
|
+
controller.abort();
|
|
51
|
+
setQrCodeValue(url);
|
|
52
|
+
})
|
|
53
|
+
.catch((err) => {
|
|
54
|
+
if (err.name !== 'AbortError') {
|
|
55
|
+
log(err.message);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
generateUrlAndCode();
|
|
62
|
+
const qrRefreshInterval = setInterval(generateUrlAndCode, 1000 * 60 * 60 * 23);
|
|
63
|
+
|
|
64
|
+
return () => {
|
|
65
|
+
if (controller) controller.abort();
|
|
66
|
+
if (qrRefreshInterval) clearInterval(qrRefreshInterval);
|
|
67
|
+
};
|
|
68
|
+
}, [url]);
|
|
69
|
+
|
|
70
|
+
return [shortUrl, qrCodeValue];
|
|
71
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { useState, useEffect } from 'react';
|
|
2
|
+
import shorten from './shorten';
|
|
3
|
+
import log from './utils/log';
|
|
4
|
+
|
|
5
|
+
export default function useShortUrl(url: string = '') {
|
|
6
|
+
const [shortUrl, setShortUrl] = useState('');
|
|
7
|
+
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
setShortUrl('');
|
|
10
|
+
|
|
11
|
+
let controller: any;
|
|
12
|
+
|
|
13
|
+
function generateUrlAndCode() {
|
|
14
|
+
if (url) {
|
|
15
|
+
controller = new AbortController();
|
|
16
|
+
|
|
17
|
+
shorten(url, controller.signal)
|
|
18
|
+
.then((nextShortUrl) => setShortUrl(nextShortUrl))
|
|
19
|
+
.catch((err) => {
|
|
20
|
+
if (err.name !== 'AbortError') {
|
|
21
|
+
log(err.message);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
generateUrlAndCode();
|
|
28
|
+
const refreshUrlInterval = setInterval(generateUrlAndCode, 1000 * 60 * 60 * 23);
|
|
29
|
+
|
|
30
|
+
return () => {
|
|
31
|
+
if (controller) controller.abort();
|
|
32
|
+
if (refreshUrlInterval) clearInterval(refreshUrlInterval);
|
|
33
|
+
};
|
|
34
|
+
}, [url]);
|
|
35
|
+
|
|
36
|
+
return shortUrl;
|
|
37
|
+
}
|
package/src/utils/log.ts
ADDED
package/tsconfig.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "es5",
|
|
4
|
+
"lib": [
|
|
5
|
+
"dom",
|
|
6
|
+
"dom.iterable",
|
|
7
|
+
"esnext"
|
|
8
|
+
],
|
|
9
|
+
"allowJs": true,
|
|
10
|
+
"skipLibCheck": true,
|
|
11
|
+
"esModuleInterop": true,
|
|
12
|
+
"allowSyntheticDefaultImports": true,
|
|
13
|
+
"strict": true,
|
|
14
|
+
"forceConsistentCasingInFileNames": true,
|
|
15
|
+
"module": "commonjs",
|
|
16
|
+
"moduleResolution": "node",
|
|
17
|
+
"resolveJsonModule": true,
|
|
18
|
+
"isolatedModules": true,
|
|
19
|
+
"jsx": "react",
|
|
20
|
+
"outDir": "dist",
|
|
21
|
+
"rootDir": "src",
|
|
22
|
+
"declarationDir": "dist",
|
|
23
|
+
"declarationMap": true,
|
|
24
|
+
"declaration": true,
|
|
25
|
+
"alwaysStrict": true
|
|
26
|
+
},
|
|
27
|
+
"include": [
|
|
28
|
+
"src"
|
|
29
|
+
],
|
|
30
|
+
"exclude": [
|
|
31
|
+
"node_modules"
|
|
32
|
+
]
|
|
33
|
+
}
|