tek-wallet 0.0.514 → 0.0.516
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/ui/SendExternalToken/index.d.ts +1 -3
- package/dist/components/ui/SendExternalToken/index.js +49 -59
- package/dist/components/ui/WithdrawFunction/index.js +124 -51
- package/dist/services/axios/validate-wallet-address-service/index.d.ts +2 -2
- package/dist/services/axios/validate-wallet-address-service/index.js +23 -3
- package/dist/services/axios/validate-wallet-address-service/type.d.ts +11 -0
- package/dist/services/axios/validate-wallet-address-service/type.js +9 -0
- package/package.json +1 -1
|
@@ -8,10 +8,8 @@ interface SendExternalDataType extends Omit<SendExternalBody, "network" | "passc
|
|
|
8
8
|
interface SendExternalTokenProps extends Omit<ConfirmLayoutProps, "action"> {
|
|
9
9
|
sendExternalData: SendExternalDataType;
|
|
10
10
|
onSuccess?: (data: SendExternalResponse) => any;
|
|
11
|
+
initFeeData?: FeesDataType;
|
|
11
12
|
onStart?: () => void;
|
|
12
|
-
setEstimateFee?: (data: FeesDataType) => void;
|
|
13
|
-
setAmountError?: (data: number | undefined) => void;
|
|
14
|
-
setIsLoadingEstimateFee?: (data: boolean) => void;
|
|
15
13
|
}
|
|
16
14
|
export interface SendExternalTokenRef {
|
|
17
15
|
open: () => void;
|
|
@@ -95,6 +95,7 @@ var ConfirmByPasscode_1 = __importDefault(require("../ConfirmByPasscode"));
|
|
|
95
95
|
var react_1 = require("react");
|
|
96
96
|
var Text_1 = __importDefault(require("../Text"));
|
|
97
97
|
var RequireConnect_1 = __importDefault(require("../RequireConnect"));
|
|
98
|
+
var useWalletData_1 = __importDefault(require("../../../hooks/useWalletData"));
|
|
98
99
|
var useWithdrawData_1 = __importDefault(require("../../../hooks/useWithdrawData"));
|
|
99
100
|
var send_external_service_1 = __importDefault(require("../../../services/axios/send-external-service"));
|
|
100
101
|
var Icon_1 = __importDefault(require("../Icon"));
|
|
@@ -102,7 +103,6 @@ var Fees_1 = __importDefault(require("../Fees"));
|
|
|
102
103
|
var get_est_fee_service_1 = __importDefault(require("../../../services/axios/get-est-fee-service"));
|
|
103
104
|
var type_1 = require("../../../services/axios/get-activities-service/type");
|
|
104
105
|
var Activities_1 = __importDefault(require("../Activities"));
|
|
105
|
-
var createDebounce_1 = __importDefault(require("../../../utils/createDebounce"));
|
|
106
106
|
var SendExternalTokenError;
|
|
107
107
|
(function (SendExternalTokenError) {
|
|
108
108
|
SendExternalTokenError["TOKEN_NOT_FOUND"] = "Token not found";
|
|
@@ -111,88 +111,71 @@ var SendExternalTokenError;
|
|
|
111
111
|
SendExternalTokenError["MIN_AMOUNT"] = "Min amount";
|
|
112
112
|
SendExternalTokenError["FAILED"] = "Failed";
|
|
113
113
|
})(SendExternalTokenError || (exports.SendExternalTokenError = SendExternalTokenError = {}));
|
|
114
|
-
var getEstimateFeeDebounce = (0, createDebounce_1.default)(1000);
|
|
115
114
|
var transactionSlug = type_1.TransactionSlug.Withdrawn;
|
|
116
115
|
var SendExternalToken = (0, react_1.forwardRef)(function (props, ref) {
|
|
117
|
-
var _a
|
|
116
|
+
var _a;
|
|
118
117
|
var theme = (0, material_1.useTheme)();
|
|
119
118
|
var withdrawTokens = (0, useWithdrawData_1.default)().withdrawTokens;
|
|
119
|
+
var isAuthenticated = (0, useWalletData_1.default)().isAuthenticated;
|
|
120
120
|
var confirmLayoutDrawerRef = (0, react_1.useRef)(null);
|
|
121
|
-
var
|
|
122
|
-
var
|
|
123
|
-
var
|
|
124
|
-
var
|
|
125
|
-
var
|
|
126
|
-
var
|
|
121
|
+
var _b = (0, react_1.useState)(undefined), token = _b[0], setToken = _b[1];
|
|
122
|
+
var _c = (0, react_1.useState)(undefined), error = _c[0], setError = _c[1];
|
|
123
|
+
var _d = (0, react_1.useState)(undefined), errorAmount = _d[0], setErrorAmount = _d[1];
|
|
124
|
+
var _e = (0, react_1.useState)(Button_1.BUTTON_STATUS.ENABLED), buttonStatus = _e[0], setButtonStatus = _e[1];
|
|
125
|
+
var _f = (0, react_1.useState)(props.initFeeData), estimateFee = _f[0], setEstimateFee = _f[1];
|
|
126
|
+
var _g = (0, react_1.useState)(false), isLoadingEstimateFee = _g[0], setIsLoadingEstimateFee = _g[1];
|
|
127
127
|
var activitiesRef = (0, react_1.useRef)(null);
|
|
128
128
|
var amount = props.sendExternalData.amount;
|
|
129
129
|
var network = props.sendExternalData.network;
|
|
130
130
|
var memo = props.sendExternalData.memo;
|
|
131
131
|
var toAddress = props.sendExternalData.to_address;
|
|
132
132
|
var tokenSlug = props.sendExternalData.currency_slug;
|
|
133
|
-
var
|
|
134
|
-
var
|
|
135
|
-
|
|
133
|
+
var getEstimateFee = (0, react_1.useCallback)(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
134
|
+
var response;
|
|
135
|
+
return __generator(this, function (_a) {
|
|
136
|
+
switch (_a.label) {
|
|
137
|
+
case 0:
|
|
138
|
+
if (!tokenSlug || !!errorAmount)
|
|
139
|
+
return [2 /*return*/];
|
|
140
|
+
setIsLoadingEstimateFee(true);
|
|
141
|
+
return [4 /*yield*/, (0, get_est_fee_service_1.default)({
|
|
142
|
+
amount: "".concat(amount),
|
|
143
|
+
transaction_type: transactionSlug,
|
|
144
|
+
currency: tokenSlug || "",
|
|
145
|
+
})];
|
|
146
|
+
case 1:
|
|
147
|
+
response = _a.sent();
|
|
148
|
+
setIsLoadingEstimateFee(false);
|
|
149
|
+
setEstimateFee(response === null || response === void 0 ? void 0 : response.data);
|
|
150
|
+
return [2 /*return*/];
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}); }, [amount, tokenSlug, errorAmount]);
|
|
154
|
+
var validateAmount = (0, react_1.useCallback)(function (sendExternalData) {
|
|
155
|
+
var token = withdrawTokens === null || withdrawTokens === void 0 ? void 0 : withdrawTokens.find(function (token) { return token.slug === sendExternalData.currency_slug; });
|
|
136
156
|
setToken(token);
|
|
137
157
|
if (!token) {
|
|
138
158
|
setError(SendExternalTokenError.TOKEN_NOT_FOUND);
|
|
139
159
|
return;
|
|
140
160
|
}
|
|
141
|
-
if (amount > token.max_value) {
|
|
161
|
+
if (+sendExternalData.amount > token.max_value) {
|
|
142
162
|
setError(SendExternalTokenError.MAX_AMOUNT);
|
|
143
|
-
|
|
163
|
+
setErrorAmount(token.max_value);
|
|
144
164
|
return;
|
|
145
165
|
}
|
|
146
|
-
if (amount < token.min_value) {
|
|
166
|
+
if (+sendExternalData.amount < token.min_value) {
|
|
147
167
|
setError(SendExternalTokenError.MIN_AMOUNT);
|
|
148
|
-
|
|
168
|
+
setErrorAmount(token.min_value);
|
|
149
169
|
return;
|
|
150
170
|
}
|
|
151
|
-
if (amount > +token.balance) {
|
|
171
|
+
if (+sendExternalData.amount > +token.balance) {
|
|
152
172
|
setError(SendExternalTokenError.NOT_ENOUGH_BALANCE);
|
|
153
|
-
|
|
173
|
+
setErrorAmount(token.balance);
|
|
154
174
|
return;
|
|
155
175
|
}
|
|
156
176
|
setError(undefined);
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
}, [withdrawTokens, (_a = props.sendExternalData) === null || _a === void 0 ? void 0 : _a.currency_slug, (_b = props.sendExternalData) === null || _b === void 0 ? void 0 : _b.amount]);
|
|
160
|
-
var getEstimateFee = (0, react_1.useCallback)(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
161
|
-
return __generator(this, function (_a) {
|
|
162
|
-
if (!tokenSlug) {
|
|
163
|
-
setIsLoadingEstimateFee(false);
|
|
164
|
-
return [2 /*return*/];
|
|
165
|
-
}
|
|
166
|
-
setIsLoadingEstimateFee(true);
|
|
167
|
-
getEstimateFeeDebounce(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
168
|
-
var isValidateAmount, response, fee;
|
|
169
|
-
var _a;
|
|
170
|
-
return __generator(this, function (_b) {
|
|
171
|
-
switch (_b.label) {
|
|
172
|
-
case 0:
|
|
173
|
-
isValidateAmount = validateAmount();
|
|
174
|
-
if (!isValidateAmount) {
|
|
175
|
-
setIsLoadingEstimateFee(false);
|
|
176
|
-
return [2 /*return*/];
|
|
177
|
-
}
|
|
178
|
-
return [4 /*yield*/, (0, get_est_fee_service_1.default)({
|
|
179
|
-
amount: "".concat(amount),
|
|
180
|
-
transaction_type: transactionSlug,
|
|
181
|
-
currency: tokenSlug || "",
|
|
182
|
-
})];
|
|
183
|
-
case 1:
|
|
184
|
-
response = _b.sent();
|
|
185
|
-
setIsLoadingEstimateFee(false);
|
|
186
|
-
fee = response === null || response === void 0 ? void 0 : response.data;
|
|
187
|
-
setEstimateFee(fee);
|
|
188
|
-
(_a = props.setEstimateFee) === null || _a === void 0 ? void 0 : _a.call(props, fee);
|
|
189
|
-
return [2 /*return*/];
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
}); });
|
|
193
|
-
return [2 /*return*/];
|
|
194
|
-
});
|
|
195
|
-
}); }, [validateAmount, tokenSlug, amount]);
|
|
177
|
+
setErrorAmount(undefined);
|
|
178
|
+
}, [withdrawTokens]);
|
|
196
179
|
var handleSendExternalToken = function (passcode) { return __awaiter(void 0, void 0, void 0, function () {
|
|
197
180
|
var response, err_1;
|
|
198
181
|
var _a, _b;
|
|
@@ -231,10 +214,14 @@ var SendExternalToken = (0, react_1.forwardRef)(function (props, ref) {
|
|
|
231
214
|
}); };
|
|
232
215
|
var handleOpen = function () {
|
|
233
216
|
var _a;
|
|
217
|
+
if (!isAuthenticated)
|
|
218
|
+
throw new Error("Please connect your wallet");
|
|
234
219
|
(_a = confirmLayoutDrawerRef.current) === null || _a === void 0 ? void 0 : _a.open();
|
|
235
220
|
};
|
|
236
221
|
var handleClose = function () {
|
|
237
222
|
var _a;
|
|
223
|
+
if (!isAuthenticated)
|
|
224
|
+
throw new Error("Please connect your wallet");
|
|
238
225
|
(_a = confirmLayoutDrawerRef.current) === null || _a === void 0 ? void 0 : _a.close();
|
|
239
226
|
};
|
|
240
227
|
(0, react_1.useImperativeHandle)(ref, function () { return ({
|
|
@@ -249,12 +236,15 @@ var SendExternalToken = (0, react_1.forwardRef)(function (props, ref) {
|
|
|
249
236
|
(0, react_1.useEffect)(function () {
|
|
250
237
|
getEstimateFee();
|
|
251
238
|
}, [getEstimateFee]);
|
|
239
|
+
(0, react_1.useEffect)(function () {
|
|
240
|
+
validateAmount(props.sendExternalData);
|
|
241
|
+
}, [validateAmount, props.sendExternalData]);
|
|
252
242
|
return ((0, jsx_runtime_1.jsx)(RequireConnect_1.default, { children: (0, jsx_runtime_1.jsxs)(ConfirmLayout_1.default, { ref: confirmLayoutDrawerRef, action: transactionSlug, trigger: props.children, children: [(0, jsx_runtime_1.jsxs)(material_1.Box, { sx: __assign(__assign({}, theme.mixins.column), { gap: theme.mixins.gaps.g12 }), children: [(0, jsx_runtime_1.jsxs)(material_1.Box, { sx: __assign({}, theme.mixins.paper), children: [(0, jsx_runtime_1.jsx)(LineValue_1.default, { field: "Recipient address", value: (0, jsx_runtime_1.jsx)(Text_1.default, { sx: {
|
|
253
243
|
wordBreak: "break-all",
|
|
254
|
-
}, children: toAddress }) }), (0, jsx_runtime_1.jsx)(LineValue_1.default, { field: "Network", value: (0, jsx_runtime_1.jsxs)(material_1.Box, { sx: __assign(__assign({}, theme.mixins.row), { gap: theme.mixins.gaps.g6, ml: "auto" }), children: [(0, jsx_runtime_1.jsx)(Icon_1.default, { width: 20, src: network === null || network === void 0 ? void 0 : network.icon }), (0, jsx_runtime_1.jsx)(Text_1.default, { sx: __assign({}, theme.mixins.value), children: network === null || network === void 0 ? void 0 : network.name })] }) }), (0, jsx_runtime_1.jsx)(LineValue_1.default, { field: "Amount", value: (0, jsx_runtime_1.jsx)(Formatter_1.default, { value: amount, unit: " ".concat(token === null || token === void 0 ? void 0 : token.name) }) }), !!memo && (0, jsx_runtime_1.jsx)(LineValue_1.default, { field: "Memo", value: memo }), ((
|
|
244
|
+
}, children: toAddress }) }), (0, jsx_runtime_1.jsx)(LineValue_1.default, { field: "Network", value: (0, jsx_runtime_1.jsxs)(material_1.Box, { sx: __assign(__assign({}, theme.mixins.row), { gap: theme.mixins.gaps.g6, ml: "auto" }), children: [(0, jsx_runtime_1.jsx)(Icon_1.default, { width: 20, src: network === null || network === void 0 ? void 0 : network.icon }), (0, jsx_runtime_1.jsx)(Text_1.default, { sx: __assign({}, theme.mixins.value), children: network === null || network === void 0 ? void 0 : network.name })] }) }), (0, jsx_runtime_1.jsx)(LineValue_1.default, { field: "Amount", value: (0, jsx_runtime_1.jsx)(Formatter_1.default, { value: amount, unit: " ".concat(token === null || token === void 0 ? void 0 : token.name) }) }), !!memo && (0, jsx_runtime_1.jsx)(LineValue_1.default, { field: "Memo", value: memo }), ((_a = estimateFee === null || estimateFee === void 0 ? void 0 : estimateFee.feeDetail) === null || _a === void 0 ? void 0 : _a.length) && !!amount && ((0, jsx_runtime_1.jsx)(Fees_1.default, { feesData: JSON.stringify(estimateFee), amount: +amount })), (0, jsx_runtime_1.jsx)(LineValue_1.default, { field: "Receive amount estimated", value: (0, jsx_runtime_1.jsx)(Text_1.default, { sx: {
|
|
255
245
|
fontWeight: theme.typography.fontWeight600,
|
|
256
246
|
fontSize: theme.typography.fontSize16,
|
|
257
|
-
}, children: (0, jsx_runtime_1.jsx)(Formatter_1.default, { value: estimateReceive, unit: " ".concat(token === null || token === void 0 ? void 0 : token.name) }) }) }), !!error && ((0, jsx_runtime_1.jsxs)(Text_1.default, { sx: __assign(__assign({}, theme.mixins.validationError), { mt: theme.mixins.gaps.g6 }), children: [error, " ", !!
|
|
247
|
+
}, children: (0, jsx_runtime_1.jsx)(Formatter_1.default, { value: estimateReceive, unit: " ".concat(token === null || token === void 0 ? void 0 : token.name) }) }) }), !!error && ((0, jsx_runtime_1.jsxs)(Text_1.default, { sx: __assign(__assign({}, theme.mixins.validationError), { mt: theme.mixins.gaps.g6 }), children: [error, " ", !!errorAmount && (0, jsx_runtime_1.jsx)(Formatter_1.default, { value: errorAmount, unit: " ".concat(token === null || token === void 0 ? void 0 : token.name) })] }))] }), (0, jsx_runtime_1.jsx)(ConfirmByPasscode_1.default, { action: transactionSlug, onConfirmSuccess: handleSendExternalToken, children: (0, jsx_runtime_1.jsx)(Button_1.default.Primary, { status: !!error || isLoadingEstimateFee ? Button_1.BUTTON_STATUS.DISABLED : buttonStatus, sx: { width: "100%" }, children: "Confirm" }) })] }), (0, jsx_runtime_1.jsx)(Activities_1.default, { ref: activitiesRef })] }) }));
|
|
258
248
|
});
|
|
259
249
|
SendExternalToken.displayName = "SendExternalToken";
|
|
260
250
|
exports.default = SendExternalToken;
|
|
@@ -113,10 +113,13 @@ var AppBackDrop_1 = __importDefault(require("../AppBackDrop"));
|
|
|
113
113
|
var DialogContentLayout_1 = __importDefault(require("../DialogContentLayout"));
|
|
114
114
|
var AppDialog_1 = __importDefault(require("../AppDialog"));
|
|
115
115
|
var Formatter_1 = __importDefault(require("../Formatter"));
|
|
116
|
+
var get_est_fee_service_1 = __importDefault(require("../../../services/axios/get-est-fee-service"));
|
|
116
117
|
var Fees_1 = __importDefault(require("../Fees"));
|
|
117
|
-
var
|
|
118
|
+
var type_1 = require("../../../services/axios/get-activities-service/type");
|
|
119
|
+
// import SendExternalToken from "../SendExternalToken";
|
|
118
120
|
var SendInternalToken_1 = __importDefault(require("../SendInternalToken"));
|
|
119
121
|
var createDebounce_1 = __importDefault(require("../../../utils/createDebounce"));
|
|
122
|
+
var type_2 = require("../../../services/axios/validate-wallet-address-service/type");
|
|
120
123
|
var SendMethods;
|
|
121
124
|
(function (SendMethods) {
|
|
122
125
|
SendMethods["SCAN_QR_CODE"] = "scan qr code";
|
|
@@ -144,6 +147,7 @@ var AmountError;
|
|
|
144
147
|
AmountError["MAX_LIMIT"] = "The maximum amount is";
|
|
145
148
|
AmountError["MIN_LIMIT"] = "The minimum amount is";
|
|
146
149
|
})(AmountError || (exports.AmountError = AmountError = {}));
|
|
150
|
+
var getEstimateFeeDebounce = (0, createDebounce_1.default)(500);
|
|
147
151
|
var validateAddressDebounce = (0, createDebounce_1.default)(500);
|
|
148
152
|
var WithdrawFunction = (0, react_1.forwardRef)(function (props, ref) {
|
|
149
153
|
var _a;
|
|
@@ -164,7 +168,7 @@ var WithdrawFunction = (0, react_1.forwardRef)(function (props, ref) {
|
|
|
164
168
|
var _m = (0, react_1.useState)(), amountError = _m[0], setAmountError = _m[1];
|
|
165
169
|
var scannerAllQrCodeRef = (0, react_1.useRef)(null);
|
|
166
170
|
var scannerAddressQrCodeRef = (0, react_1.useRef)(null);
|
|
167
|
-
var
|
|
171
|
+
var loadingDropRef = (0, react_1.useRef)(null);
|
|
168
172
|
var suggestUseTransferInternalDialogRef = (0, react_1.useRef)(null);
|
|
169
173
|
var suggestUseTransferExternalDialogRef = (0, react_1.useRef)(null);
|
|
170
174
|
var _o = (0, react_1.useState)(), selectedMethod = _o[0], setSelectedMethod = _o[1];
|
|
@@ -240,6 +244,28 @@ var WithdrawFunction = (0, react_1.forwardRef)(function (props, ref) {
|
|
|
240
244
|
open: open,
|
|
241
245
|
close: close,
|
|
242
246
|
}); });
|
|
247
|
+
var validateAmount = (0, react_1.useCallback)(function () {
|
|
248
|
+
var _a, _b;
|
|
249
|
+
if (!selectedToken)
|
|
250
|
+
return false;
|
|
251
|
+
if (+amount < +(selectedToken === null || selectedToken === void 0 ? void 0 : selectedToken.min_value)) {
|
|
252
|
+
setAmountErrorMessage(AmountError.MIN_LIMIT);
|
|
253
|
+
setAmountError(+((_a = selectedToken === null || selectedToken === void 0 ? void 0 : selectedToken.min_value) !== null && _a !== void 0 ? _a : 0));
|
|
254
|
+
return false;
|
|
255
|
+
}
|
|
256
|
+
if (+amount > +(selectedToken === null || selectedToken === void 0 ? void 0 : selectedToken.max_value)) {
|
|
257
|
+
setAmountErrorMessage(AmountError.MAX_LIMIT);
|
|
258
|
+
setAmountError(+((_b = selectedToken === null || selectedToken === void 0 ? void 0 : selectedToken.max_value) !== null && _b !== void 0 ? _b : 0));
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
if (+amount > +(selectedToken === null || selectedToken === void 0 ? void 0 : selectedToken.balance)) {
|
|
262
|
+
setAmountErrorMessage(AmountError.INSUFFICIENT_BALANCE);
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
setAmountError(undefined);
|
|
266
|
+
setAmountErrorMessage(undefined);
|
|
267
|
+
return true;
|
|
268
|
+
}, [amount, selectedToken]);
|
|
243
269
|
var handleClearInfoDialogContent = function () {
|
|
244
270
|
setInfoDialogContent(undefined);
|
|
245
271
|
};
|
|
@@ -329,6 +355,39 @@ var WithdrawFunction = (0, react_1.forwardRef)(function (props, ref) {
|
|
|
329
355
|
break;
|
|
330
356
|
}
|
|
331
357
|
};
|
|
358
|
+
var getEstimateFee = (0, react_1.useCallback)(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
359
|
+
var isValidateAmount;
|
|
360
|
+
return __generator(this, function (_a) {
|
|
361
|
+
if (!selectedToken)
|
|
362
|
+
return [2 /*return*/];
|
|
363
|
+
isValidateAmount = validateAmount();
|
|
364
|
+
console.warn("🚀 ~ getEstimateFee ~ isValidateAmount:", isValidateAmount);
|
|
365
|
+
if (!isValidateAmount)
|
|
366
|
+
return [2 /*return*/];
|
|
367
|
+
console.warn("🚀 ~ getEstimateFee ~ isValidateAmount 2:", isValidateAmount);
|
|
368
|
+
setIsLoadingEstimateFee(true);
|
|
369
|
+
getEstimateFeeDebounce(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
370
|
+
var response;
|
|
371
|
+
return __generator(this, function (_a) {
|
|
372
|
+
switch (_a.label) {
|
|
373
|
+
case 0: return [4 /*yield*/, (0, get_est_fee_service_1.default)({
|
|
374
|
+
amount: "".concat(amount),
|
|
375
|
+
transaction_type: selectedMethod === SendMethods.TRANSFER_EXTERNAL
|
|
376
|
+
? type_1.TransactionSlug.Withdrawn
|
|
377
|
+
: type_1.TransactionSlug.TransferInternal,
|
|
378
|
+
currency: (selectedToken === null || selectedToken === void 0 ? void 0 : selectedToken.slug) || "",
|
|
379
|
+
})];
|
|
380
|
+
case 1:
|
|
381
|
+
response = _a.sent();
|
|
382
|
+
setIsLoadingEstimateFee(false);
|
|
383
|
+
setEstimateFee(response === null || response === void 0 ? void 0 : response.data);
|
|
384
|
+
return [2 /*return*/];
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
}); });
|
|
388
|
+
return [2 /*return*/];
|
|
389
|
+
});
|
|
390
|
+
}); }, [selectedToken, validateAmount, amount, selectedMethod]);
|
|
332
391
|
var openScannerAddressQrCode = function () {
|
|
333
392
|
var _a;
|
|
334
393
|
(_a = scannerAddressQrCodeRef.current) === null || _a === void 0 ? void 0 : _a.open();
|
|
@@ -365,7 +424,7 @@ var WithdrawFunction = (0, react_1.forwardRef)(function (props, ref) {
|
|
|
365
424
|
return __generator(this, function (_a) {
|
|
366
425
|
setIsValidatingAddress(true);
|
|
367
426
|
validateAddressDebounce(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
368
|
-
var
|
|
427
|
+
var result, message;
|
|
369
428
|
var _a;
|
|
370
429
|
return __generator(this, function (_b) {
|
|
371
430
|
switch (_b.label) {
|
|
@@ -374,22 +433,28 @@ var WithdrawFunction = (0, react_1.forwardRef)(function (props, ref) {
|
|
|
374
433
|
network: network,
|
|
375
434
|
})];
|
|
376
435
|
case 1:
|
|
377
|
-
|
|
436
|
+
result = _b.sent();
|
|
437
|
+
message = result.message;
|
|
378
438
|
setIsValidatingAddress(false);
|
|
379
|
-
if (
|
|
380
|
-
setRecipientAddressError(
|
|
439
|
+
if (message === type_2.ValidateWalletAddressResultMessage.ERROR) {
|
|
440
|
+
setRecipientAddressError("Something went wrong, please try again");
|
|
441
|
+
return [2 /*return*/];
|
|
381
442
|
}
|
|
382
|
-
if (
|
|
443
|
+
if (message === type_2.ValidateWalletAddressResultMessage.IN_VALID) {
|
|
444
|
+
setRecipientAddressError("Invalid wallet address");
|
|
445
|
+
return [2 /*return*/];
|
|
446
|
+
}
|
|
447
|
+
if (message === type_2.ValidateWalletAddressResultMessage.IS_CURRENT_WALLET) {
|
|
448
|
+
setInfoDialogContent("You can not send to yourself wallet");
|
|
449
|
+
return [2 /*return*/];
|
|
450
|
+
}
|
|
451
|
+
if (message === type_2.ValidateWalletAddressResultMessage.INTERNAL_WALLET) {
|
|
383
452
|
(_a = suggestUseTransferInternalDialogRef.current) === null || _a === void 0 ? void 0 : _a.open();
|
|
384
453
|
}
|
|
385
|
-
|
|
386
|
-
//external
|
|
454
|
+
if (message === type_2.ValidateWalletAddressResultMessage.EXTERNAL_WALLET) {
|
|
387
455
|
handleSelectContinueTransferExternal();
|
|
388
456
|
}
|
|
389
|
-
|
|
390
|
-
// setInfoDialogContent("Unsupported QR");
|
|
391
|
-
setRecipientAddressError("Invalid wallet address");
|
|
392
|
-
}
|
|
457
|
+
setRecipientAddressError(undefined);
|
|
393
458
|
return [2 /*return*/];
|
|
394
459
|
}
|
|
395
460
|
});
|
|
@@ -398,7 +463,7 @@ var WithdrawFunction = (0, react_1.forwardRef)(function (props, ref) {
|
|
|
398
463
|
});
|
|
399
464
|
}); };
|
|
400
465
|
var handleScanAllQrCode = function (result) { return __awaiter(void 0, void 0, void 0, function () {
|
|
401
|
-
var text, isReceiveInternal, tonTransferParam,
|
|
466
|
+
var text, isReceiveInternal, tonTransferParam, validateResult, message, validateData;
|
|
402
467
|
var _a, _b, _c, _d, _e, _f;
|
|
403
468
|
return __generator(this, function (_g) {
|
|
404
469
|
switch (_g.label) {
|
|
@@ -411,49 +476,47 @@ var WithdrawFunction = (0, react_1.forwardRef)(function (props, ref) {
|
|
|
411
476
|
tonTransferParam = isReceiveInternal
|
|
412
477
|
? JSON.parse(text)
|
|
413
478
|
: (0, parseTonTransferUrl_1.default)(text);
|
|
414
|
-
(_c =
|
|
479
|
+
(_c = loadingDropRef.current) === null || _c === void 0 ? void 0 : _c.open();
|
|
415
480
|
return [4 /*yield*/, (0, validate_wallet_address_service_1.default)({
|
|
416
481
|
address: tonTransferParam === null || tonTransferParam === void 0 ? void 0 : tonTransferParam.address,
|
|
417
482
|
network: (selectedNetwork === null || selectedNetwork === void 0 ? void 0 : selectedNetwork.slug) || "ton",
|
|
418
483
|
})];
|
|
419
484
|
case 1:
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
485
|
+
validateResult = _g.sent();
|
|
486
|
+
message = validateResult.message, validateData = validateResult.data;
|
|
487
|
+
if (message === type_2.ValidateWalletAddressResultMessage.ERROR) {
|
|
488
|
+
setInfoDialogContent("Something went wrong, please try again");
|
|
489
|
+
// setRecipientAddressError("Invalid wallet address");
|
|
423
490
|
return [2 /*return*/];
|
|
424
491
|
}
|
|
425
|
-
if (
|
|
426
|
-
|
|
427
|
-
}
|
|
428
|
-
setSendInfoGet(tonTransferParam);
|
|
429
|
-
(_d = backDropRef.current) === null || _d === void 0 ? void 0 : _d.close();
|
|
430
|
-
if (validateWalletAddress === null || validateWalletAddress === void 0 ? void 0 : validateWalletAddress.is_current_wallet) {
|
|
431
|
-
setInfoDialogContent("You can not send to your own wallet");
|
|
492
|
+
if (message === type_2.ValidateWalletAddressResultMessage.IN_VALID) {
|
|
493
|
+
setInfoDialogContent("Unsupported QR");
|
|
432
494
|
return [2 /*return*/];
|
|
433
495
|
}
|
|
434
|
-
if (
|
|
435
|
-
|
|
496
|
+
if (message === type_2.ValidateWalletAddressResultMessage.IS_CURRENT_WALLET) {
|
|
497
|
+
setInfoDialogContent("You can not send to yourself wallet");
|
|
498
|
+
return [2 /*return*/];
|
|
436
499
|
}
|
|
437
|
-
|
|
500
|
+
setRecipientAddressError(undefined);
|
|
501
|
+
if (message === type_2.ValidateWalletAddressResultMessage.INTERNAL_WALLET) {
|
|
502
|
+
tonTransferParam.address = validateData.master_wallet_address;
|
|
438
503
|
if (isReceiveInternal || selectedMethod === SendMethods.TRANSFER_INTERNAL) {
|
|
439
504
|
handleSelectTransferInternal(tonTransferParam);
|
|
440
505
|
}
|
|
441
506
|
else {
|
|
442
|
-
(
|
|
507
|
+
(_d = suggestUseTransferInternalDialogRef.current) === null || _d === void 0 ? void 0 : _d.open();
|
|
443
508
|
}
|
|
444
509
|
}
|
|
445
|
-
|
|
510
|
+
if (message === type_2.ValidateWalletAddressResultMessage.EXTERNAL_WALLET) {
|
|
446
511
|
if (selectedMethod === SendMethods.TRANSFER_EXTERNAL || selectedMethod === SendMethods.SCAN_QR_CODE) {
|
|
447
512
|
handleSelectContinueTransferExternal(tonTransferParam);
|
|
448
513
|
}
|
|
449
514
|
else {
|
|
450
|
-
(
|
|
515
|
+
(_e = suggestUseTransferExternalDialogRef.current) === null || _e === void 0 ? void 0 : _e.open();
|
|
451
516
|
}
|
|
452
517
|
}
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
setRecipientAddressError("Invalid wallet address");
|
|
456
|
-
}
|
|
518
|
+
setSendInfoGet(tonTransferParam);
|
|
519
|
+
(_f = loadingDropRef.current) === null || _f === void 0 ? void 0 : _f.close();
|
|
457
520
|
_g.label = 2;
|
|
458
521
|
case 2: return [2 /*return*/];
|
|
459
522
|
}
|
|
@@ -476,6 +539,9 @@ var WithdrawFunction = (0, react_1.forwardRef)(function (props, ref) {
|
|
|
476
539
|
updateSendInternalToken();
|
|
477
540
|
}
|
|
478
541
|
}, [isAuthenticated, withdrawTokens, sendInternalTokens]);
|
|
542
|
+
(0, react_1.useEffect)(function () {
|
|
543
|
+
getEstimateFee();
|
|
544
|
+
}, [getEstimateFee]);
|
|
479
545
|
return ((0, jsx_runtime_1.jsx)(RequireConnect_1.default, { children: (0, jsx_runtime_1.jsx)(DrawerComponent_1.default, { ref: drawerRef, trigger: props.children, onOpen: props.onOpen, onClose: handleOnClose, children: (0, jsx_runtime_1.jsxs)(ModalLayout_1.default, { overrideHeader: (0, jsx_runtime_1.jsx)(BackHeader_1.default, { sx: {
|
|
480
546
|
width: "100%",
|
|
481
547
|
display: "flex",
|
|
@@ -521,21 +587,28 @@ var WithdrawFunction = (0, react_1.forwardRef)(function (props, ref) {
|
|
|
521
587
|
placeholder: "Enter memo",
|
|
522
588
|
value: memo,
|
|
523
589
|
onChange: handleChangeMemo,
|
|
524
|
-
} })] })), !!((_a = estimateFee === null || estimateFee === void 0 ? void 0 : estimateFee.feeDetail) === null || _a === void 0 ? void 0 : _a.length) && !!amount && ((0, jsx_runtime_1.jsx)(Fees_1.default, { feesData: JSON.stringify(estimateFee), amount: +amount })), estimateReceive !== undefined && !amountError && ((0, jsx_runtime_1.jsxs)(material_1.Box, { sx: __assign({}, theme.mixins.row), children: [(0, jsx_runtime_1.jsx)(Text_1.default, { sx: __assign({}, theme.mixins.fieldTitle), children: "Receive amount estimated" }), (0, jsx_runtime_1.jsx)(Text_1.default, { sx: __assign(__assign({}, theme.mixins.value), { ml: "auto" }), children: (0, jsx_runtime_1.jsx)(Formatter_1.default, { value: estimateReceive }) })] })), selectedMethod === SendMethods.TRANSFER_EXTERNAL && (
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
590
|
+
} })] })), !!((_a = estimateFee === null || estimateFee === void 0 ? void 0 : estimateFee.feeDetail) === null || _a === void 0 ? void 0 : _a.length) && !!amount && ((0, jsx_runtime_1.jsx)(Fees_1.default, { feesData: JSON.stringify(estimateFee), amount: +amount })), estimateReceive !== undefined && !amountError && ((0, jsx_runtime_1.jsxs)(material_1.Box, { sx: __assign({}, theme.mixins.row), children: [(0, jsx_runtime_1.jsx)(Text_1.default, { sx: __assign({}, theme.mixins.fieldTitle), children: "Receive amount estimated" }), (0, jsx_runtime_1.jsx)(Text_1.default, { sx: __assign(__assign({}, theme.mixins.value), { ml: "auto" }), children: (0, jsx_runtime_1.jsx)(Formatter_1.default, { value: estimateReceive }) })] })), selectedMethod === SendMethods.TRANSFER_EXTERNAL && (
|
|
591
|
+
// <SendExternalToken
|
|
592
|
+
// initFeeData={estimateFee}
|
|
593
|
+
// sendExternalData={{
|
|
594
|
+
// amount: `${amount}`,
|
|
595
|
+
// currency_slug: selectedToken?.slug || "",
|
|
596
|
+
// to_address: recipientAddress || "",
|
|
597
|
+
// network: selectedNetwork as NetworkData,
|
|
598
|
+
// memo: memo || "",
|
|
599
|
+
// }}
|
|
600
|
+
// onSuccess={close}
|
|
601
|
+
// >
|
|
602
|
+
// </SendExternalToken>
|
|
603
|
+
(0, jsx_runtime_1.jsx)(Button_1.default.Primary, { sx: { width: "100%" }, status: !!amountError ||
|
|
604
|
+
!!recipientAddressError ||
|
|
605
|
+
!recipientAddress ||
|
|
606
|
+
!amount ||
|
|
607
|
+
!selectedToken ||
|
|
608
|
+
isLoadingEstimateFee ||
|
|
609
|
+
isValidatingAddress
|
|
610
|
+
? Button_1.BUTTON_STATUS.DISABLED
|
|
611
|
+
: Button_1.BUTTON_STATUS.ENABLED, children: "Continue" })), selectedMethod === SendMethods.TRANSFER_INTERNAL && ((0, jsx_runtime_1.jsx)(SendInternalToken_1.default, { initFeeData: estimateFee, sendInternalData: {
|
|
539
612
|
amount: "".concat(amount),
|
|
540
613
|
currency_slug: (selectedToken === null || selectedToken === void 0 ? void 0 : selectedToken.slug) || "",
|
|
541
614
|
to_address: recipientAddress || "",
|
|
@@ -547,7 +620,7 @@ var WithdrawFunction = (0, react_1.forwardRef)(function (props, ref) {
|
|
|
547
620
|
isLoadingEstimateFee ||
|
|
548
621
|
isValidatingAddress
|
|
549
622
|
? Button_1.BUTTON_STATUS.DISABLED
|
|
550
|
-
: Button_1.BUTTON_STATUS.ENABLED, children: "Continue" }) }))] }) }, WithdrawStep.FORM)] }), (0, jsx_runtime_1.jsx)(QrCodeReader_1.default, { ref: scannerAllQrCodeRef, onResult: handleScanAllQrCode }), (0, jsx_runtime_1.jsx)(QrCodeReader_1.default, { ref: scannerAddressQrCodeRef, onResult: handleScanAddressQrCode }), (0, jsx_runtime_1.jsx)(AppBackDrop_1.default, { ref:
|
|
623
|
+
: Button_1.BUTTON_STATUS.ENABLED, children: "Continue" }) }))] }) }, WithdrawStep.FORM)] }), (0, jsx_runtime_1.jsx)(QrCodeReader_1.default, { ref: scannerAllQrCodeRef, onResult: handleScanAllQrCode }), (0, jsx_runtime_1.jsx)(QrCodeReader_1.default, { ref: scannerAddressQrCodeRef, onResult: handleScanAddressQrCode }), (0, jsx_runtime_1.jsx)(AppBackDrop_1.default, { ref: loadingDropRef }), (0, jsx_runtime_1.jsx)(AppDialog_1.default, { overrideOpen: !!infoDialogContent, children: (0, jsx_runtime_1.jsx)(DialogContentLayout_1.default, { content: (0, jsx_runtime_1.jsx)(Text_1.default, { sx: {
|
|
551
624
|
textAlign: "center",
|
|
552
625
|
display: "inline-block",
|
|
553
626
|
width: "100%",
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { ValidateWalletAddressBody,
|
|
2
|
-
declare const validateWalletAddressService: (body: ValidateWalletAddressBody) => Promise<
|
|
1
|
+
import { ValidateWalletAddressBody, ValidateWalletAddressResult } from "./type";
|
|
2
|
+
declare const validateWalletAddressService: (body: ValidateWalletAddressBody) => Promise<ValidateWalletAddressResult>;
|
|
3
3
|
export default validateWalletAddressService;
|
|
@@ -40,8 +40,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
40
40
|
};
|
|
41
41
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
42
|
var userClientRequest_1 = __importDefault(require("../clients/userClientRequest"));
|
|
43
|
+
var type_1 = require("./type");
|
|
43
44
|
var validateWalletAddressService = function (body) { return __awaiter(void 0, void 0, void 0, function () {
|
|
44
|
-
var response, error_1;
|
|
45
|
+
var response, data, error_1;
|
|
45
46
|
var _a;
|
|
46
47
|
return __generator(this, function (_b) {
|
|
47
48
|
switch (_b.label) {
|
|
@@ -50,11 +51,30 @@ var validateWalletAddressService = function (body) { return __awaiter(void 0, vo
|
|
|
50
51
|
return [4 /*yield*/, userClientRequest_1.default.get("/crypto/validate-address/".concat(body.network, "?address=").concat(body.address))];
|
|
51
52
|
case 1:
|
|
52
53
|
response = _b.sent();
|
|
53
|
-
|
|
54
|
+
data = (_a = response.data) === null || _a === void 0 ? void 0 : _a.data;
|
|
55
|
+
if (!(data === null || data === void 0 ? void 0 : data.valid)) {
|
|
56
|
+
return [2 /*return*/, {
|
|
57
|
+
message: type_1.ValidateWalletAddressResultMessage.IN_VALID,
|
|
58
|
+
data: data,
|
|
59
|
+
}];
|
|
60
|
+
}
|
|
61
|
+
if (data === null || data === void 0 ? void 0 : data.master_wallet_address) {
|
|
62
|
+
return [2 /*return*/, {
|
|
63
|
+
message: type_1.ValidateWalletAddressResultMessage.INTERNAL_WALLET,
|
|
64
|
+
data: data,
|
|
65
|
+
}];
|
|
66
|
+
}
|
|
67
|
+
return [2 /*return*/, {
|
|
68
|
+
message: type_1.ValidateWalletAddressResultMessage.EXTERNAL_WALLET,
|
|
69
|
+
data: data,
|
|
70
|
+
}];
|
|
54
71
|
case 2:
|
|
55
72
|
error_1 = _b.sent();
|
|
56
73
|
console.error(error_1);
|
|
57
|
-
return [2 /*return
|
|
74
|
+
return [2 /*return*/, {
|
|
75
|
+
message: type_1.ValidateWalletAddressResultMessage.ERROR,
|
|
76
|
+
data: undefined,
|
|
77
|
+
}];
|
|
58
78
|
case 3: return [2 /*return*/];
|
|
59
79
|
}
|
|
60
80
|
});
|
|
@@ -16,3 +16,14 @@ export interface ValidateWalletAddressBody {
|
|
|
16
16
|
address: string;
|
|
17
17
|
network: string;
|
|
18
18
|
}
|
|
19
|
+
export interface ValidateWalletAddressResult {
|
|
20
|
+
message: ValidateWalletAddressResultMessage;
|
|
21
|
+
data: ValidateWalletAddressData | undefined;
|
|
22
|
+
}
|
|
23
|
+
export declare enum ValidateWalletAddressResultMessage {
|
|
24
|
+
IN_VALID = "invalid",
|
|
25
|
+
INTERNAL_WALLET = "internal wallet",
|
|
26
|
+
EXTERNAL_WALLET = "external wallet",
|
|
27
|
+
ERROR = "error",
|
|
28
|
+
IS_CURRENT_WALLET = "is current wallet"
|
|
29
|
+
}
|
|
@@ -1,2 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ValidateWalletAddressResultMessage = void 0;
|
|
4
|
+
var ValidateWalletAddressResultMessage;
|
|
5
|
+
(function (ValidateWalletAddressResultMessage) {
|
|
6
|
+
ValidateWalletAddressResultMessage["IN_VALID"] = "invalid";
|
|
7
|
+
ValidateWalletAddressResultMessage["INTERNAL_WALLET"] = "internal wallet";
|
|
8
|
+
ValidateWalletAddressResultMessage["EXTERNAL_WALLET"] = "external wallet";
|
|
9
|
+
ValidateWalletAddressResultMessage["ERROR"] = "error";
|
|
10
|
+
ValidateWalletAddressResultMessage["IS_CURRENT_WALLET"] = "is current wallet";
|
|
11
|
+
})(ValidateWalletAddressResultMessage || (exports.ValidateWalletAddressResultMessage = ValidateWalletAddressResultMessage = {}));
|