@thespidercode/openbook-swap
Version:
Ready-to-use swap tool using Openbook DEX
62 lines (61 loc) • 3.43 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.TokenInput = void 0;
const react_1 = require("react");
const react_2 = __importDefault(require("react"));
const pair_search_1 = require("./pair-search");
const react_currency_input_field_1 = __importDefault(require("react-currency-input-field"));
function TokenInput(props) {
const pairToken = (0, react_1.useMemo)(() => {
return props.pair.base.mint.toString() == props.token.mint.toString() ? props.pair.quote : props.pair.base;
}, [props.token]);
const options = (0, react_1.useMemo)(() => {
const visited = new Set();
const response = [];
props.markets.forEach((market) => {
if (!visited.has(market.base.name)) {
response.push({
value: market.base.mint.toString(),
label: market.base.name,
imageUrl: market.base.logo,
pair: market
});
visited.add(market.base.name);
}
if (!visited.has(market.quote.name)) {
response.push({
value: market.quote.mint.toString(),
label: market.quote.name,
imageUrl: market.quote.logo,
pair: market
});
visited.add(market.quote.name);
}
});
return response;
}, [pairToken]);
const currentOption = (0, react_1.useMemo)(() => {
try {
return options.find((option) => option.value === props.token.mint.toString()) ?? null;
}
catch (error) {
return null;
}
}, [options]);
return (react_2.default.createElement("div", { className: "flex row between mt-3 responsive-column" },
react_2.default.createElement("div", { className: "flex column center responsive-row" },
react_2.default.createElement(pair_search_1.PairSearch, { currentOption: currentOption, options: options, setPair: props.setPair })),
react_2.default.createElement("div", { className: `input-wrapper` },
(props.amount && Number(props.amount) > 0) &&
react_2.default.createElement("span", { className: "token-dollars-value" },
"\u2248$",
Number(Number(props.amount) * props.token.price).toLocaleString(undefined, { minimumFractionDigits: 2 })),
react_2.default.createElement("div", { className: `balance-buttons ${Number(props.amount) > 0 || !props.balance ? 'no-display' : ''}` },
react_2.default.createElement("button", { onClick: () => props.onValueChange((props.balance ? (props.balance / 2) : 0).toFixed(3)) }, "HALF"),
react_2.default.createElement("button", { onClick: () => props.onValueChange(props.balance ? props.balance : 0) }, "MAX")),
react_2.default.createElement(react_currency_input_field_1.default, { className: `${props.amount && Number(props.amount) > 0 ? 'move-top' : ''}`, disabled: false, placeholder: "0.00", value: props.amount, decimalsLimit: 10, allowNegativeValue: false, step: props.token.name == 'BONK' ? 1000 : 0.01, onValueChange: props.onValueChange }))));
}
exports.TokenInput = TokenInput;