@suiware/kit
Version:
Opinionated React components and hooks for building Sui dApps.
108 lines (104 loc) • 3.04 kB
JavaScript
;
var themes = require('@radix-ui/themes');
var lucideReact = require('lucide-react');
var dappKit = require('@mysten/dapp-kit');
var utils = require('@mysten/sui/utils');
var faucet = require('@mysten/sui/faucet');
var jsxRuntime = require('react/jsx-runtime');
var __async = (__this, __arguments, generator) => {
return new Promise((resolve, reject) => {
var fulfilled = (value) => {
try {
step(generator.next(value));
} catch (e) {
reject(e);
}
};
var rejected = (value) => {
try {
step(generator.throw(value));
} catch (e) {
reject(e);
}
};
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
step((generator = generator.apply(__this, __arguments)).next());
});
};
var fundAddress = (address, network) => __async(void 0, null, function* () {
return yield faucet.requestSuiFromFaucetV1({
host: faucet.getFaucetHost(network),
recipient: address
});
});
var getTestnetFaucetLink = (address) => {
return `https://faucet.sui.io/?address=${address}`;
};
// src/hooks/useFaucet.tsx
var useFaucet = ({
onError,
onSuccess
}) => {
const ctx = dappKit.useSuiClientContext();
const currentAccount = dappKit.useCurrentAccount();
const fund = (address) => __async(void 0, null, function* () {
if (!["localnet", "devnet", "testnet"].includes(ctx.network)) {
onError != null && onError(null, `The ${ctx.network} network does not have a faucet`);
return;
}
const fundedAddress = address == null ? currentAccount == null ? void 0 : currentAccount.address : void 0;
if (fundedAddress == null) {
onError != null && onError(null, "Please connect your wallet first");
return;
}
if (ctx.network === "testnet") {
window.open(getTestnetFaucetLink(fundedAddress), "_blank");
return;
}
try {
const { error } = yield fundAddress(
fundedAddress,
ctx.network
);
if (error) {
onError != null && onError(
new Error(error),
"Cannot fund the address on this network at the moment"
);
}
} catch (e) {
onError != null && onError(e, "Cannot fund the address");
return;
}
onSuccess != null && onSuccess(
`The ${utils.formatAddress(fundedAddress)} address has been funded successfully`
);
});
return {
fund
};
};
var useFaucet_default = useFaucet;
var Faucet = (props) => {
const { onError, onSuccess } = props;
const { fund } = useFaucet_default({
onError,
onSuccess
});
return /* @__PURE__ */ jsxRuntime.jsxs(
themes.Button,
{
variant: "surface",
className: "sk-faucet-button",
onClick: () => fund(),
children: [
/* @__PURE__ */ jsxRuntime.jsx(lucideReact.HandCoinsIcon, {}),
"Faucet"
]
}
);
};
var Faucet_default = Faucet;
module.exports = Faucet_default;
//# sourceMappingURL=Faucet.js.map
//# sourceMappingURL=Faucet.js.map