@suilend/sui-fe-next 0.1.47
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/README.md +8 -0
- package/contexts/SettingsContext.d.ts +17 -0
- package/contexts/SettingsContext.jsx +79 -0
- package/contexts/WalletContext.d.ts +55 -0
- package/contexts/WalletContext.jsx +616 -0
- package/contexts/index.d.ts +2 -0
- package/contexts/index.js +2 -0
- package/fetchers/index.d.ts +1 -0
- package/fetchers/index.js +1 -0
- package/fetchers/useFetchBalances.d.ts +5 -0
- package/fetchers/useFetchBalances.js +94 -0
- package/hooks/index.d.ts +5 -0
- package/hooks/index.js +5 -0
- package/hooks/useCoinMetadataMap.d.ts +3 -0
- package/hooks/useCoinMetadataMap.js +76 -0
- package/hooks/useIsAndroid.d.ts +2 -0
- package/hooks/useIsAndroid.jsx +2 -0
- package/hooks/useIsTouchscreen.d.ts +2 -0
- package/hooks/useIsTouchscreen.jsx +7 -0
- package/hooks/useIsiOS.d.ts +2 -0
- package/hooks/useIsiOS.jsx +7 -0
- package/hooks/useRefreshOnBalancesChange.d.ts +2 -0
- package/hooks/useRefreshOnBalancesChange.js +82 -0
- package/index.d.ts +4 -0
- package/index.js +4 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +2 -0
- package/lib/router.d.ts +4 -0
- package/lib/router.js +2 -0
- package/lib/toasts.d.ts +5 -0
- package/lib/toasts.jsx +55 -0
- package/package.json +1 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
13
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
14
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
16
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
17
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
18
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
22
|
+
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);
|
|
23
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
24
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
25
|
+
function step(op) {
|
|
26
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
27
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
28
|
+
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;
|
|
29
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
30
|
+
switch (op[0]) {
|
|
31
|
+
case 0: case 1: t = op; break;
|
|
32
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
33
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
34
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
35
|
+
default:
|
|
36
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
37
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
38
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
39
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
40
|
+
if (t[2]) _.ops.pop();
|
|
41
|
+
_.trys.pop(); continue;
|
|
42
|
+
}
|
|
43
|
+
op = body.call(thisArg, _);
|
|
44
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
45
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
import { normalizeStructTag } from "@mysten/sui/utils";
|
|
49
|
+
import BigNumber from "bignumber.js";
|
|
50
|
+
import useSWR from "swr";
|
|
51
|
+
import { useSettingsContext } from "../contexts/SettingsContext";
|
|
52
|
+
import { useWalletContext } from "../contexts/WalletContext";
|
|
53
|
+
import { showErrorToast } from "../lib/toasts";
|
|
54
|
+
export default function useFetchBalances() {
|
|
55
|
+
var _this = this;
|
|
56
|
+
var suiClient = useSettingsContext().suiClient;
|
|
57
|
+
var address = useWalletContext().address;
|
|
58
|
+
var dataFetcher = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
59
|
+
var balancesMap, rawBalances, _i, rawBalances_1, rawBalance, totalBalance;
|
|
60
|
+
return __generator(this, function (_a) {
|
|
61
|
+
switch (_a.label) {
|
|
62
|
+
case 0:
|
|
63
|
+
balancesMap = {};
|
|
64
|
+
if (!address) return [3 /*break*/, 2];
|
|
65
|
+
return [4 /*yield*/, suiClient.getAllBalances({
|
|
66
|
+
owner: address,
|
|
67
|
+
})];
|
|
68
|
+
case 1:
|
|
69
|
+
rawBalances = (_a.sent())
|
|
70
|
+
.map(function (cb) { return (__assign(__assign({}, cb), { coinType: normalizeStructTag(cb.coinType) })); })
|
|
71
|
+
.sort(function (a, b) { return (a.coinType < b.coinType ? -1 : 1); });
|
|
72
|
+
for (_i = 0, rawBalances_1 = rawBalances; _i < rawBalances_1.length; _i++) {
|
|
73
|
+
rawBalance = rawBalances_1[_i];
|
|
74
|
+
totalBalance = new BigNumber(rawBalance.totalBalance);
|
|
75
|
+
if (totalBalance.gt(0))
|
|
76
|
+
balancesMap[rawBalance.coinType] = totalBalance;
|
|
77
|
+
}
|
|
78
|
+
_a.label = 2;
|
|
79
|
+
case 2: return [2 /*return*/, balancesMap];
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}); };
|
|
83
|
+
var _a = useSWR("balances-".concat(address), dataFetcher, {
|
|
84
|
+
refreshInterval: 15 * 1000,
|
|
85
|
+
onSuccess: function (data) {
|
|
86
|
+
console.log("Refreshed wallet balances", data);
|
|
87
|
+
},
|
|
88
|
+
onError: function (err) {
|
|
89
|
+
showErrorToast("Failed to refresh wallet balances", err);
|
|
90
|
+
console.error(err);
|
|
91
|
+
},
|
|
92
|
+
}), data = _a.data, mutate = _a.mutate;
|
|
93
|
+
return { data: data, mutateData: mutate };
|
|
94
|
+
}
|
package/hooks/index.d.ts
ADDED
package/hooks/index.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
13
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
14
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
15
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
16
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
17
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
18
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
22
|
+
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);
|
|
23
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
24
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
25
|
+
function step(op) {
|
|
26
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
27
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
28
|
+
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;
|
|
29
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
30
|
+
switch (op[0]) {
|
|
31
|
+
case 0: case 1: t = op; break;
|
|
32
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
33
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
34
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
35
|
+
default:
|
|
36
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
37
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
38
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
39
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
40
|
+
if (t[2]) _.ops.pop();
|
|
41
|
+
_.trys.pop(); continue;
|
|
42
|
+
}
|
|
43
|
+
op = body.call(thisArg, _);
|
|
44
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
45
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
import { useEffect, useRef, useState } from "react";
|
|
49
|
+
import { getCoinMetadataMap } from "@suilend/sui-fe";
|
|
50
|
+
var useCoinMetadataMap = function (coinTypes) {
|
|
51
|
+
// State
|
|
52
|
+
var _a = useState(undefined), coinMetadataMap = _a[0], setCoinMetadataMap = _a[1];
|
|
53
|
+
var coinTypesBeingFetchedRef = useRef([]);
|
|
54
|
+
useEffect(function () {
|
|
55
|
+
(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
56
|
+
var filteredCoinTypes, coinMetadataMap;
|
|
57
|
+
var _a;
|
|
58
|
+
return __generator(this, function (_b) {
|
|
59
|
+
switch (_b.label) {
|
|
60
|
+
case 0:
|
|
61
|
+
filteredCoinTypes = Array.from(new Set(coinTypes)).filter(function (coinType) { return !coinTypesBeingFetchedRef.current.includes(coinType); });
|
|
62
|
+
if (filteredCoinTypes.length === 0)
|
|
63
|
+
return [2 /*return*/];
|
|
64
|
+
(_a = coinTypesBeingFetchedRef.current).push.apply(_a, filteredCoinTypes);
|
|
65
|
+
return [4 /*yield*/, getCoinMetadataMap(filteredCoinTypes)];
|
|
66
|
+
case 1:
|
|
67
|
+
coinMetadataMap = _b.sent();
|
|
68
|
+
setCoinMetadataMap(function (prev) { return (__assign(__assign({}, (prev !== null && prev !== void 0 ? prev : {})), coinMetadataMap)); });
|
|
69
|
+
return [2 /*return*/];
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}); })();
|
|
73
|
+
}, [coinTypes]);
|
|
74
|
+
return coinMetadataMap;
|
|
75
|
+
};
|
|
76
|
+
export default useCoinMetadataMap;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
var useIsiOS = function () {
|
|
2
|
+
return /iPad/i.test(navigator.userAgent) ||
|
|
3
|
+
/iPhone/i.test(navigator.userAgent) ||
|
|
4
|
+
/iPod/i.test(navigator.userAgent) ||
|
|
5
|
+
(navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1);
|
|
6
|
+
}; // iPad iOS 13
|
|
7
|
+
export default useIsiOS;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
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);
|
|
12
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
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;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
import { useEffect, useRef } from "react";
|
|
38
|
+
import { isEqual } from "lodash";
|
|
39
|
+
import { useSettingsContext, useWalletContext } from "../contexts";
|
|
40
|
+
var useRefreshOnBalancesChange = function (refresh) {
|
|
41
|
+
var suiClient = useSettingsContext().suiClient;
|
|
42
|
+
var address = useWalletContext().address;
|
|
43
|
+
var previousBalancesRef = useRef(undefined);
|
|
44
|
+
useEffect(function () {
|
|
45
|
+
if (!address)
|
|
46
|
+
return;
|
|
47
|
+
previousBalancesRef.current = undefined;
|
|
48
|
+
var interval = setInterval(function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
49
|
+
var balances, err_1;
|
|
50
|
+
return __generator(this, function (_a) {
|
|
51
|
+
switch (_a.label) {
|
|
52
|
+
case 0:
|
|
53
|
+
_a.trys.push([0, 4, , 5]);
|
|
54
|
+
return [4 /*yield*/, suiClient.getAllBalances({
|
|
55
|
+
owner: address,
|
|
56
|
+
})];
|
|
57
|
+
case 1:
|
|
58
|
+
balances = _a.sent();
|
|
59
|
+
if (!(previousBalancesRef.current !== undefined &&
|
|
60
|
+
!isEqual(balances, previousBalancesRef.current))) return [3 /*break*/, 3];
|
|
61
|
+
return [4 /*yield*/, refresh()];
|
|
62
|
+
case 2:
|
|
63
|
+
_a.sent();
|
|
64
|
+
_a.label = 3;
|
|
65
|
+
case 3:
|
|
66
|
+
previousBalancesRef.current = balances;
|
|
67
|
+
return [3 /*break*/, 5];
|
|
68
|
+
case 4:
|
|
69
|
+
err_1 = _a.sent();
|
|
70
|
+
console.error(err_1);
|
|
71
|
+
return [3 /*break*/, 5];
|
|
72
|
+
case 5: return [2 /*return*/];
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}); }, 1000 * 5);
|
|
76
|
+
return function () {
|
|
77
|
+
if (interval !== undefined)
|
|
78
|
+
clearInterval(interval);
|
|
79
|
+
};
|
|
80
|
+
}, [address, suiClient, refresh]);
|
|
81
|
+
};
|
|
82
|
+
export default useRefreshOnBalancesChange;
|
package/index.d.ts
ADDED
package/index.js
ADDED
package/lib/index.d.ts
ADDED
package/lib/index.js
ADDED
package/lib/router.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { UrlObject } from "url";
|
|
2
|
+
import { NextRouter } from "next/router";
|
|
3
|
+
export declare const shallowPushQuery: (router: NextRouter, query: UrlObject["query"]) => Promise<boolean>;
|
|
4
|
+
export declare const shallowReplaceQuery: (router: NextRouter, query: UrlObject["query"]) => Promise<boolean>;
|
package/lib/router.js
ADDED
package/lib/toasts.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ExternalToast } from "sonner";
|
|
2
|
+
export declare const showSuccessToast: (title: string, data?: Omit<ExternalToast, "duration">, isTxn?: boolean) => void;
|
|
3
|
+
export declare const showInfoToast: (title: string, data?: Omit<ExternalToast, "duration">) => void;
|
|
4
|
+
export declare const showWarningToast: (title: string, data?: Omit<ExternalToast, "duration">) => void;
|
|
5
|
+
export declare const showErrorToast: (title: string, err: Error, data?: Omit<ExternalToast, "description" | "duration">, isTxn?: boolean) => void;
|
package/lib/toasts.jsx
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import BigNumber from "bignumber.js";
|
|
13
|
+
import { toast as sonnerToast } from "sonner";
|
|
14
|
+
import { TOAST_DURATION_MS, TX_TOAST_DURATION as TX_TOAST_DURATION_MS, formatToken, } from "@suilend/sui-fe";
|
|
15
|
+
var onDismiss = function (callback) {
|
|
16
|
+
for (var i = 0; i < 10; i++)
|
|
17
|
+
sonnerToast.dismiss();
|
|
18
|
+
setTimeout(function () {
|
|
19
|
+
callback();
|
|
20
|
+
}, 250);
|
|
21
|
+
};
|
|
22
|
+
export var showSuccessToast = function (title, data, isTxn) {
|
|
23
|
+
onDismiss(function () {
|
|
24
|
+
return sonnerToast.success(title, __assign(__assign({}, (data || {})), { duration: isTxn ? TX_TOAST_DURATION_MS : TOAST_DURATION_MS }));
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
export var showInfoToast = function (title, data) {
|
|
28
|
+
onDismiss(function () {
|
|
29
|
+
return sonnerToast.info(title, __assign(__assign({}, (data || {})), { duration: TOAST_DURATION_MS }));
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
export var showWarningToast = function (title, data) {
|
|
33
|
+
onDismiss(function () {
|
|
34
|
+
return sonnerToast.warning(title, __assign(__assign({}, (data || {})), { duration: TOAST_DURATION_MS }));
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
export var showErrorToast = function (title, err, data, isTxn) {
|
|
38
|
+
var description = (err === null || err === void 0 ? void 0 : err.message) || "An unknown error occurred";
|
|
39
|
+
// RPC errors
|
|
40
|
+
if (description.toLowerCase().includes("Invalid u256 value".toLowerCase()))
|
|
41
|
+
return;
|
|
42
|
+
// Insufficient SUI balance to pay for gas
|
|
43
|
+
if (description.toLowerCase().includes("Balance of gas object".toLowerCase())) {
|
|
44
|
+
var match = description.match(/Balance of gas object (\d+) is lower than the needed amount: (\d+)/);
|
|
45
|
+
if (match) {
|
|
46
|
+
var balanceRaw = match[1], neededAmountRaw = match[2];
|
|
47
|
+
description = "Insufficient SUI balance to pay for gas. Balance: ".concat(formatToken(new BigNumber(balanceRaw).div(Math.pow(10, 9)), { dp: 9, trimTrailingZeros: true }), " SUI. Required: ").concat(formatToken(new BigNumber(neededAmountRaw).div(Math.pow(10, 9)), { dp: 9, trimTrailingZeros: true }), " SUI");
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (description[0].toLowerCase() === description[0])
|
|
51
|
+
description = "".concat(description[0].toUpperCase()).concat(description.slice(1));
|
|
52
|
+
onDismiss(function () {
|
|
53
|
+
return sonnerToast.error(title, __assign(__assign({}, (data || {})), { description: description, duration: isTxn ? TX_TOAST_DURATION_MS : TOAST_DURATION_MS }));
|
|
54
|
+
});
|
|
55
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"name":"@suilend/sui-fe-next","version":"0.1.47","private":false,"description":"A collection of TypeScript frontend components and hooks","author":"Suilend","license":"MIT","main":"./index.js","exports":{".":"./index.js","./contexts/SettingsContext":"./contexts/SettingsContext.jsx","./contexts/WalletContext":"./contexts/WalletContext.jsx","./contexts":"./contexts/index.js","./fetchers":"./fetchers/index.js","./fetchers/useFetchBalances":"./fetchers/useFetchBalances.js","./hooks":"./hooks/index.js","./hooks/useCoinMetadataMap":"./hooks/useCoinMetadataMap.js","./hooks/useIsAndroid":"./hooks/useIsAndroid.jsx","./hooks/useIsTouchscreen":"./hooks/useIsTouchscreen.jsx","./hooks/useIsiOS":"./hooks/useIsiOS.jsx","./hooks/useRefreshOnBalancesChange":"./hooks/useRefreshOnBalancesChange.js","./lib":"./lib/index.js","./lib/router":"./lib/router.js","./lib/toasts":"./lib/toasts.jsx"},"types":"./index.js","scripts":{"build":"rm -rf ./dist && bun tsc","eslint":"eslint --fix \"./src/**/*.ts\"","prettier":"prettier --write \"./src/**/*\"","lint":"bun eslint && bun prettier && bun tsc --noEmit","release":"bun run build && bun ts-node ./release.ts && cd ./dist && npm publish --access public"},"repository":{"type":"git","url":"git+https://github.com/suilend/sui-fe.git"},"bugs":{"url":"https://github.com/suilend/sui-fe/issues"},"dependencies":{"@sentry/nextjs":"^8.38.0","@tanstack/react-query":"^5.60.2","bignumber.js":"^9.1.2","launchdarkly-react-client-sdk":"^3.6.0","lodash":"^4.17.21","mixpanel-browser":"^2.56.0","next":"^15.0.3","react":"18.3.1","react-dom":"18.3.1","react-responsive":"^10.0.0","shio-sdk":"^1.0.8","sonner":"1.4.41","swr":"^2.2.5","tailwind-merge":"^2.5.4","usehooks-ts":"^3.1.1"},"devDependencies":{"@tsconfig/next":"^2.0.3","@types/lodash":"^4.17.13","@types/mixpanel-browser":"^2.50.2","@types/node":"^22.9.0","@types/react":"^18.3.12","@types/react-dom":"^18.3.1","@typescript-eslint/eslint-plugin":"^8.14.0","@typescript-eslint/parser":"^8.14.0","eslint":"^9.14.0","eslint-config-next":"^15.0.3","eslint-config-prettier":"^9.1.0","eslint-plugin-import":"^2.31.0","eslint-plugin-prettier":"^5.2.1","prettier":"^3.3.3","ts-node":"^10.9.2","typescript":"^5.6.3"},"peerDependencies":{"@mysten/dapp-kit":"0.16.0","@mysten/sui":"1.28.2","@mysten/wallet-standard":"0.14.7","@suilend/sui-fe":"^0.2.72"}}
|