@lifi/widget
Version:
LI.FI Widget for cross-chain bridging and swapping. It will drive your multi-chain strategy and attract new users from everywhere.
57 lines (56 loc) • 2.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useTokenSelect = void 0;
const widget_1 = require("@lifi/widget");
const react_1 = require("react");
const react_hook_form_1 = require("react-hook-form");
const providers_1 = require("../../providers");
const useTokenSelect = (formType, onClick) => {
const tokenKey = providers_1.FormKeyHelper.getTokenKey(formType);
const { field: { onChange, onBlur }, } = (0, react_hook_form_1.useController)({ name: tokenKey });
const { setValue, getValues } = (0, react_hook_form_1.useFormContext)();
const { subvariant } = (0, providers_1.useWidgetConfig)();
const emitter = (0, widget_1.useWidgetEvents)();
return (0, react_1.useCallback)((tokenAddress, chainId) => {
onChange(tokenAddress);
onBlur();
const selectedChainId = chainId ?? getValues(providers_1.FormKeyHelper.getChainKey(formType));
// Set chain again to trigger URL builder update
setValue(providers_1.FormKeyHelper.getChainKey(formType), selectedChainId, {
shouldDirty: true,
shouldTouch: true,
});
setValue(providers_1.FormKeyHelper.getAmountKey(formType), '');
const oppositeFormType = formType === 'from' ? 'to' : 'from';
const [selectedOppositeToken, selectedOppositeChainId] = getValues([
providers_1.FormKeyHelper.getTokenKey(oppositeFormType),
providers_1.FormKeyHelper.getChainKey(oppositeFormType),
]);
if (selectedOppositeToken === tokenAddress &&
selectedOppositeChainId === selectedChainId &&
subvariant !== 'nft') {
setValue(providers_1.FormKeyHelper.getTokenKey(oppositeFormType), '', {
shouldDirty: true,
shouldTouch: true,
});
}
const eventToEmit = formType === 'from'
? widget_1.WidgetEvent.SourceChainTokenSelected
: widget_1.WidgetEvent.DestinationChainTokenSelected;
emitter.emit(eventToEmit, {
chainId: selectedChainId,
tokenAddress,
});
onClick?.();
}, [
emitter,
formType,
getValues,
onBlur,
onChange,
onClick,
setValue,
subvariant,
]);
};
exports.useTokenSelect = useTokenSelect;