UNPKG

@suiware/kit

Version:

Opinionated React components and hooks for building Sui dApps.

113 lines (107 loc) 3.37 kB
'use strict'; var utils = require('@mysten/sui/utils'); var debounce = require('lodash.debounce'); var react = require('react'); var jsxRuntime = require('react/jsx-runtime'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var debounce__default = /*#__PURE__*/_interopDefault(debounce); 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()); }); }; // src/helpers/suins.ts var resolveSuinsName = (suinsClient, name) => __async(void 0, null, function* () { const nameRecord = yield suinsClient.getNameRecord(name); return (nameRecord == null ? void 0 : nameRecord.targetAddress) || null; }); var DEBOUNCE_DELAY = 500; var AddressInput = ({ value, onChange, placeholder, className = "", disabled = false, suinsClient }) => { const [inputValue, setInputValue] = react.useState(value); const [error, setError] = react.useState(null); const debouncedResolve = react.useCallback( debounce__default.default((name) => __async(void 0, null, function* () { if (!suinsClient) { setError( "SuinsClient is not available. Pass it through component props to make SuiNS name resolving work." ); return; } try { const resolvedAddress = yield resolveSuinsName(suinsClient, name); if (resolvedAddress) { setError(null); onChange(resolvedAddress); } else { setError("Invalid SuiNS name"); } } catch (err) { setError("Failed to resolve SuiNS name"); } }), DEBOUNCE_DELAY), [suinsClient, onChange] ); const handleChange = (e) => __async(void 0, null, function* () { const newValue = e.target.value.trim(); setInputValue(newValue); if (newValue.endsWith(".sui") || newValue.startsWith("@")) { debouncedResolve(newValue); return; } if (newValue && !utils.isValidSuiAddress(newValue)) { setError("Invalid Sui address"); onChange(newValue); return; } setError(null); onChange(newValue); }); react.useEffect(() => { setInputValue(value); }, [value]); react.useEffect(() => { return () => { debouncedResolve.cancel(); }; }, [debouncedResolve]); return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: `sk-address-input ${className}`, children: [ /* @__PURE__ */ jsxRuntime.jsx( "input", { type: "text", value: inputValue, onChange: handleChange, placeholder: placeholder || "Enter Sui address" + (suinsClient != null ? " or SuiNS name" : ""), disabled, className: error ? "error" : "" } ), error && /* @__PURE__ */ jsxRuntime.jsx("span", { children: error }) ] }); }; var AddressInput_default = AddressInput; module.exports = AddressInput_default; //# sourceMappingURL=AddressInput.js.map //# sourceMappingURL=AddressInput.js.map