tek-wallet 0.0.804 → 0.0.806
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/dist/components/TekWallet/components/views/SendExternalView/components/Summary.js +1 -1
- package/dist/components/TekWallet/hooks/useEventHandler.d.ts +1 -0
- package/dist/components/TekWallet/hooks/useEventHandler.js +9 -7
- package/dist/components/TekWallet/hooks/useRefetchOnWindowFocused.d.ts +7 -0
- package/dist/components/TekWallet/hooks/useRefetchOnWindowFocused.js +144 -0
- package/dist/components/TekWallet/providers/ActivitiesProvider/index.js +28 -0
- package/dist/components/TekWallet/providers/ActivitiesProvider/type.d.ts +1 -0
- package/dist/components/TekWallet/providers/EventHandlerProvider/index.js +11 -1
- package/package.json +1 -1
|
@@ -105,7 +105,7 @@ function Summary(props) {
|
|
|
105
105
|
fontSize: "0.875rem",
|
|
106
106
|
fontWeight: 500,
|
|
107
107
|
color: "gray.700",
|
|
108
|
-
}, value: (0, jsx_runtime_1.jsxs)(material_1.Box, { className: "flex gap-2 items-center", children: [(0, jsx_runtime_1.jsx)(Icon_1.default, { src: payload.network.link, width: 20 }), (0, jsx_runtime_1.jsx)(Text_1.default, { sx: __assign({}, theme.mixins.value), children: payload.network.name })] }), isAligned: true }), memo && ((0, jsx_runtime_1.jsx)(InlineTitleValue_1.default, { title: "
|
|
108
|
+
}, value: (0, jsx_runtime_1.jsxs)(material_1.Box, { className: "flex gap-2 items-center", children: [(0, jsx_runtime_1.jsx)(Icon_1.default, { src: payload.network.link, width: 20 }), (0, jsx_runtime_1.jsx)(Text_1.default, { sx: __assign({}, theme.mixins.value), children: payload.network.name })] }), isAligned: true }), memo && ((0, jsx_runtime_1.jsx)(InlineTitleValue_1.default, { title: "Memo", titleStyle: {
|
|
109
109
|
fontSize: "0.875rem",
|
|
110
110
|
fontWeight: 500,
|
|
111
111
|
color: "gray.700",
|
|
@@ -5,6 +5,7 @@ export type EventHandler = (messageEvent: Transaction, showActivities?: ShowActi
|
|
|
5
5
|
export type EventHandlerHookType = {
|
|
6
6
|
transactionHandler: EventHandler;
|
|
7
7
|
walletInfoHandler: EventHandler;
|
|
8
|
+
updateData: (transaction?: Transaction, showActivities?: ShowActivities) => void;
|
|
8
9
|
};
|
|
9
10
|
export declare const useEventHandler: () => EventHandlerHookType;
|
|
10
11
|
export {};
|
|
@@ -11,9 +11,7 @@ var Formatter_1 = __importDefault(require("../components/ui/Formatter"));
|
|
|
11
11
|
var Text_1 = __importDefault(require("../components/ui/Text"));
|
|
12
12
|
var useWallet_1 = __importDefault(require("./useWallet"));
|
|
13
13
|
var useEventHandler = function () {
|
|
14
|
-
var _a = (0, useWallet_1.default)(), updateLockToken = _a.updateLockToken, updateReceiveExternalToken = _a.updateReceiveExternalToken, updateReceiveInternalToken = _a.updateReceiveInternalToken, updateSendInternalToken = _a.updateSendInternalToken, updateSwapTokens = _a.updateSwapTokens, updateWalletDetail = _a.updateWalletDetail, updateWithdrawToken = _a.updateWithdrawToken, updateLockedToken = _a.updateLockedToken,
|
|
15
|
-
// updateActivities,
|
|
16
|
-
insertActivities = _a.insertActivities;
|
|
14
|
+
var _a = (0, useWallet_1.default)(), updateLockToken = _a.updateLockToken, updateReceiveExternalToken = _a.updateReceiveExternalToken, updateReceiveInternalToken = _a.updateReceiveInternalToken, updateSendInternalToken = _a.updateSendInternalToken, updateSwapTokens = _a.updateSwapTokens, updateWalletDetail = _a.updateWalletDetail, updateWithdrawToken = _a.updateWithdrawToken, updateLockedToken = _a.updateLockedToken, insertActivities = _a.insertActivities, refreshAllActivities = _a.refreshAllActivities;
|
|
17
15
|
var updateData = (0, react_1.useCallback)(function (transaction, showActivities) {
|
|
18
16
|
updateWithdrawToken();
|
|
19
17
|
updateSendInternalToken();
|
|
@@ -24,8 +22,12 @@ var useEventHandler = function () {
|
|
|
24
22
|
updateLockedToken();
|
|
25
23
|
showActivities === null || showActivities === void 0 ? void 0 : showActivities();
|
|
26
24
|
updateWalletDetail();
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
if (transaction) {
|
|
26
|
+
insertActivities(transaction);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
refreshAllActivities();
|
|
30
|
+
}
|
|
29
31
|
}, [
|
|
30
32
|
updateWalletDetail,
|
|
31
33
|
updateWithdrawToken,
|
|
@@ -35,8 +37,8 @@ var useEventHandler = function () {
|
|
|
35
37
|
updateSwapTokens,
|
|
36
38
|
updateLockToken,
|
|
37
39
|
updateLockedToken,
|
|
38
|
-
// updateActivities,
|
|
39
40
|
insertActivities,
|
|
41
|
+
refreshAllActivities,
|
|
40
42
|
]);
|
|
41
43
|
var transactionHandler = function (messageEvent, showActivities) {
|
|
42
44
|
var _a, _b, _c;
|
|
@@ -83,6 +85,6 @@ var useEventHandler = function () {
|
|
|
83
85
|
return undefined;
|
|
84
86
|
updateData(messageEvent);
|
|
85
87
|
};
|
|
86
|
-
return { transactionHandler: transactionHandler, walletInfoHandler: walletInfoHandler };
|
|
88
|
+
return { transactionHandler: transactionHandler, walletInfoHandler: walletInfoHandler, updateData: updateData };
|
|
87
89
|
};
|
|
88
90
|
exports.useEventHandler = useEventHandler;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// useRefetchOnFocus.ts
|
|
3
|
+
"use client";
|
|
4
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
5
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
6
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
7
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
8
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
9
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
10
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
14
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
15
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
16
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
17
|
+
function step(op) {
|
|
18
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
19
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
20
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
21
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
22
|
+
switch (op[0]) {
|
|
23
|
+
case 0: case 1: t = op; break;
|
|
24
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
25
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
26
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
27
|
+
default:
|
|
28
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
29
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
30
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
31
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
32
|
+
if (t[2]) _.ops.pop();
|
|
33
|
+
_.trys.pop(); continue;
|
|
34
|
+
}
|
|
35
|
+
op = body.call(thisArg, _);
|
|
36
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
37
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.useRefetchOnFocus = useRefetchOnFocus;
|
|
42
|
+
var react_1 = require("react");
|
|
43
|
+
function useRefetchOnFocus(fetcher, opts) {
|
|
44
|
+
var _this = this;
|
|
45
|
+
var _a = opts || {}, _b = _a.minIntervalMs, minIntervalMs = _b === void 0 ? 1500 : _b, onError = _a.onError, _c = _a.enabled, enabled = _c === void 0 ? true : _c;
|
|
46
|
+
var lastRunRef = (0, react_1.useRef)(0);
|
|
47
|
+
var inFlightRef = (0, react_1.useRef)(false);
|
|
48
|
+
var abortRef = (0, react_1.useRef)(null);
|
|
49
|
+
// Sử dụng useCallback để tránh re-render không cần thiết
|
|
50
|
+
var tryRefetch = (0, react_1.useCallback)(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
51
|
+
var now, e_1;
|
|
52
|
+
var _a;
|
|
53
|
+
return __generator(this, function (_b) {
|
|
54
|
+
switch (_b.label) {
|
|
55
|
+
case 0:
|
|
56
|
+
now = Date.now();
|
|
57
|
+
// Kiểm tra điều kiện refetch
|
|
58
|
+
if (document.hidden) {
|
|
59
|
+
console.warn("📱 Document is hidden, skipping refetch");
|
|
60
|
+
return [2 /*return*/];
|
|
61
|
+
}
|
|
62
|
+
if (inFlightRef.current) {
|
|
63
|
+
console.warn("⏳ Request in flight, skipping");
|
|
64
|
+
return [2 /*return*/];
|
|
65
|
+
}
|
|
66
|
+
if (now - lastRunRef.current < minIntervalMs) {
|
|
67
|
+
console.warn("🕒 Too soon since last fetch, skipping");
|
|
68
|
+
return [2 /*return*/];
|
|
69
|
+
}
|
|
70
|
+
inFlightRef.current = true;
|
|
71
|
+
lastRunRef.current = now;
|
|
72
|
+
// Hủy request cũ (nếu có)
|
|
73
|
+
if (abortRef.current) {
|
|
74
|
+
console.warn("🚫 Aborting previous request");
|
|
75
|
+
abortRef.current.abort();
|
|
76
|
+
}
|
|
77
|
+
abortRef.current = new AbortController();
|
|
78
|
+
_b.label = 1;
|
|
79
|
+
case 1:
|
|
80
|
+
_b.trys.push([1, 3, 4, 5]);
|
|
81
|
+
console.warn("🔄 Refetching data...");
|
|
82
|
+
return [4 /*yield*/, fetcher()];
|
|
83
|
+
case 2:
|
|
84
|
+
_b.sent();
|
|
85
|
+
console.warn("✅ Refetch completed");
|
|
86
|
+
return [3 /*break*/, 5];
|
|
87
|
+
case 3:
|
|
88
|
+
e_1 = _b.sent();
|
|
89
|
+
// Chỉ xử lý lỗi nếu không phải do abort
|
|
90
|
+
if (!((_a = abortRef.current) === null || _a === void 0 ? void 0 : _a.signal.aborted)) {
|
|
91
|
+
console.error("❌ Refetch error:", e_1);
|
|
92
|
+
onError === null || onError === void 0 ? void 0 : onError(e_1);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
console.warn("🛑 Request was aborted");
|
|
96
|
+
}
|
|
97
|
+
return [3 /*break*/, 5];
|
|
98
|
+
case 4:
|
|
99
|
+
inFlightRef.current = false;
|
|
100
|
+
return [7 /*endfinally*/];
|
|
101
|
+
case 5: return [2 /*return*/];
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}); }, [minIntervalMs, fetcher, onError]);
|
|
105
|
+
(0, react_1.useEffect)(function () {
|
|
106
|
+
if (!enabled) {
|
|
107
|
+
console.warn("🔌 useRefetchOnFocus is disabled");
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
console.warn("🎯 Setting up visibility and focus listeners");
|
|
111
|
+
var handleVisibilityChange = function () {
|
|
112
|
+
console.warn("👀 Visibility changed - hidden:", document.hidden, "state:", document.visibilityState);
|
|
113
|
+
// Refetch khi tab trở thành visible
|
|
114
|
+
if (document.visibilityState === "visible") {
|
|
115
|
+
console.warn("🔄 Tab became visible, triggering refetch");
|
|
116
|
+
tryRefetch();
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
var handleFocus = function () {
|
|
120
|
+
console.warn("🎯 Window focused, triggering refetch");
|
|
121
|
+
tryRefetch();
|
|
122
|
+
};
|
|
123
|
+
// Đăng ký event listeners
|
|
124
|
+
document.addEventListener("visibilitychange", handleVisibilityChange);
|
|
125
|
+
window.addEventListener("focus", handleFocus);
|
|
126
|
+
// Cleanup function - QUAN TRỌNG: bỏ comment và sửa lại
|
|
127
|
+
return function () {
|
|
128
|
+
console.warn("🧹 Cleaning up event listeners");
|
|
129
|
+
document.removeEventListener("visibilitychange", handleVisibilityChange);
|
|
130
|
+
window.removeEventListener("focus", handleFocus);
|
|
131
|
+
// Hủy request đang chạy khi unmount
|
|
132
|
+
if (abortRef.current) {
|
|
133
|
+
abortRef.current.abort();
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
}, [enabled, tryRefetch]); // Thêm tryRefetch vào dependencies
|
|
137
|
+
// Debug: log khi hook được mount/unmount
|
|
138
|
+
(0, react_1.useEffect)(function () {
|
|
139
|
+
console.warn("🔌 useRefetchOnFocus mounted with enabled:", enabled);
|
|
140
|
+
return function () {
|
|
141
|
+
console.warn("🔌 useRefetchOnFocus unmounted");
|
|
142
|
+
};
|
|
143
|
+
}, [enabled]);
|
|
144
|
+
}
|
|
@@ -116,6 +116,9 @@ exports.initialActivities = {
|
|
|
116
116
|
refreshActivities: function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
117
117
|
return [2 /*return*/];
|
|
118
118
|
}); }); },
|
|
119
|
+
refreshAllActivities: function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) {
|
|
120
|
+
return [2 /*return*/];
|
|
121
|
+
}); }); },
|
|
119
122
|
};
|
|
120
123
|
exports.ActivitiesContext = react_1.default.createContext(exports.initialActivities);
|
|
121
124
|
function ActivitiesProvider(_a) {
|
|
@@ -315,6 +318,30 @@ function ActivitiesProvider(_a) {
|
|
|
315
318
|
}
|
|
316
319
|
});
|
|
317
320
|
}); }, [isInitPasscode, activities]);
|
|
321
|
+
var refreshAllActivities = (0, react_1.useCallback)(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
322
|
+
var allTypeSlugs, _i, allTypeSlugs_1, slug;
|
|
323
|
+
return __generator(this, function (_a) {
|
|
324
|
+
switch (_a.label) {
|
|
325
|
+
case 0:
|
|
326
|
+
allTypeSlugs = activityTypes === null || activityTypes === void 0 ? void 0 : activityTypes.map(function (type) { return type.slug; });
|
|
327
|
+
if (!allTypeSlugs)
|
|
328
|
+
return [2 /*return*/];
|
|
329
|
+
_i = 0, allTypeSlugs_1 = allTypeSlugs;
|
|
330
|
+
_a.label = 1;
|
|
331
|
+
case 1:
|
|
332
|
+
if (!(_i < allTypeSlugs_1.length)) return [3 /*break*/, 4];
|
|
333
|
+
slug = allTypeSlugs_1[_i];
|
|
334
|
+
return [4 /*yield*/, refreshActivities(slug)];
|
|
335
|
+
case 2:
|
|
336
|
+
_a.sent();
|
|
337
|
+
_a.label = 3;
|
|
338
|
+
case 3:
|
|
339
|
+
_i++;
|
|
340
|
+
return [3 /*break*/, 1];
|
|
341
|
+
case 4: return [2 /*return*/];
|
|
342
|
+
}
|
|
343
|
+
});
|
|
344
|
+
}); }, [activityTypes, refreshActivities]);
|
|
318
345
|
(0, react_1.useEffect)(function () {
|
|
319
346
|
if (!isInitPasscode)
|
|
320
347
|
return;
|
|
@@ -330,6 +357,7 @@ function ActivitiesProvider(_a) {
|
|
|
330
357
|
loadActivities: loadActivities,
|
|
331
358
|
refreshActivities: refreshActivities,
|
|
332
359
|
insertActivities: insertActivities,
|
|
360
|
+
refreshAllActivities: refreshAllActivities,
|
|
333
361
|
}, children: children }));
|
|
334
362
|
}
|
|
335
363
|
exports.default = ActivitiesProvider;
|
|
@@ -9,6 +9,7 @@ export interface ActivitiesProviderDataType {
|
|
|
9
9
|
loadOutActivityType: Partial<Record<TransactionSlug, boolean>>;
|
|
10
10
|
insertActivities: (activity: Transaction) => void;
|
|
11
11
|
refreshActivities: (slug: TransactionSlug) => Promise<void>;
|
|
12
|
+
refreshAllActivities: () => Promise<void>;
|
|
12
13
|
}
|
|
13
14
|
export type Activities = Partial<Record<TransactionSlug, Transaction[]>>;
|
|
14
15
|
export interface ActivityTypes extends TransactionType {
|
|
@@ -24,8 +24,9 @@ var TekWalletProvider_1 = require("../TekWalletProvider");
|
|
|
24
24
|
var useCustomRouter_1 = __importDefault(require("../../hooks/useCustomRouter"));
|
|
25
25
|
var type_1 = require("../../services/axios/get-activities-service/type");
|
|
26
26
|
var components_1 = require("../../components");
|
|
27
|
+
var useRefetchOnWindowFocused_1 = require("../../hooks/useRefetchOnWindowFocused");
|
|
27
28
|
function EventHandlerProvider(props) {
|
|
28
|
-
var _a = (0, useEventHandler_1.useEventHandler)(), transactionHandler = _a.transactionHandler, walletInfoHandler = _a.walletInfoHandler;
|
|
29
|
+
var _a = (0, useEventHandler_1.useEventHandler)(), transactionHandler = _a.transactionHandler, walletInfoHandler = _a.walletInfoHandler, updateData = _a.updateData;
|
|
29
30
|
var _b = (0, useRealtime_1.default)(), pushNotification = _b.pushNotification, transaction = _b.transaction, walletHandlerInfo = _b.walletHandlerInfo;
|
|
30
31
|
var router = (0, useCustomRouter_1.default)();
|
|
31
32
|
var options = (0, TekWalletProvider_1.useWalletSetup)().options;
|
|
@@ -52,6 +53,15 @@ function EventHandlerProvider(props) {
|
|
|
52
53
|
(0, react_1.useEffect)(function () {
|
|
53
54
|
walletInfoHandler === null || walletInfoHandler === void 0 ? void 0 : walletInfoHandler(walletHandlerInfo);
|
|
54
55
|
}, [walletHandlerInfo]);
|
|
56
|
+
(0, useRefetchOnWindowFocused_1.useRefetchOnFocus)(function () {
|
|
57
|
+
updateData();
|
|
58
|
+
}, {
|
|
59
|
+
minIntervalMs: 1500,
|
|
60
|
+
onError: function (error) {
|
|
61
|
+
console.error("🚀 ~ useEffect ~ error:", error);
|
|
62
|
+
},
|
|
63
|
+
enabled: true,
|
|
64
|
+
});
|
|
55
65
|
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: props.children });
|
|
56
66
|
}
|
|
57
67
|
exports.default = EventHandlerProvider;
|