@suiware/kit
Version:
Opinionated React components and hooks for building Sui dApps.
81 lines (76 loc) • 2.4 kB
JavaScript
;
var themes = require('@radix-ui/themes');
var dappKit = require('@mysten/dapp-kit');
var react = require('react');
var jsxRuntime = require('react/jsx-runtime');
// src/components/NetworkType.tsx
// src/helpers/formatNetworkType.ts
var formatNetworkType = (machineName) => {
if (machineName.startsWith("sui:")) {
return machineName.substring(4);
}
return machineName;
};
// src/hooks/useNetworkType.tsx
var DEFAULT_REFETCH_INTERVAL = 3e3;
var useNetworkType = ({
autoSync,
autoSyncInterval
} = {}) => {
const wallet = dappKit.useCurrentWallet();
const ctx = dappKit.useSuiClientContext();
const [networkType, setNetworkType] = react.useState(void 0);
const synchronizeNetworkType = (wallet2, ctx2) => {
var _a, _b, _c;
if (!wallet2.isConnected) {
setNetworkType(void 0);
return;
}
const newNetwork = formatNetworkType(
(_c = (_b = (_a = wallet2.currentWallet) == null ? void 0 : _a.accounts) == null ? void 0 : _b[0].chains) == null ? void 0 : _c[0]
);
setNetworkType(newNetwork);
if (newNetwork != null) {
ctx2.selectNetwork(newNetwork);
}
};
react.useEffect(() => {
synchronizeNetworkType(wallet, ctx);
if (autoSync == null || autoSync === false) {
return;
}
const interval = setInterval(
() => {
if (!wallet.isConnected || !autoSync) {
setNetworkType(void 0);
clearInterval(interval);
return;
}
synchronizeNetworkType(wallet, ctx);
},
autoSync && autoSyncInterval != null ? autoSyncInterval : DEFAULT_REFETCH_INTERVAL
);
return () => {
clearTimeout(interval);
};
}, [autoSync, autoSyncInterval, wallet, ctx]);
return {
networkType,
synchronize: () => synchronizeNetworkType(wallet, ctx)
};
};
var useNetworkType_default = useNetworkType;
var NetworkType = () => {
const { networkType } = useNetworkType_default({ autoSync: true });
let color = "amber";
if (networkType == null) {
color = "tomato";
} else if (networkType === "mainnet") {
color = "green";
}
return /* @__PURE__ */ jsxRuntime.jsx(themes.Badge, { color, className: "sk-network-badge", children: networkType || "disconnected" });
};
var NetworkType_default = NetworkType;
module.exports = NetworkType_default;
//# sourceMappingURL=NetworkType.js.map
//# sourceMappingURL=NetworkType.js.map