@suiware/kit
Version:
Opinionated React components and hooks for building Sui dApps.
113 lines (107 loc) • 3.37 kB
JavaScript
;
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