UNPKG

@r3l/app

Version:
196 lines (157 loc) 7.47 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports.exchangeLink = exchangeLink; exports.tokenEnabled = tokenEnabled; exports.usePrice = usePrice; exports.default = PriceProvider; exports.PriceContext = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _numbers = require("../../utils/numbers"); require("../../utils/env"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } var _process$env = process.env, TOKEN_ADDRESS = _process$env.TOKEN_ADDRESS, DISABLE_PRICE = _process$env.DISABLE_PRICE; var UPDATE_INTERVAL = 1 * 60 * 1000; var PriceContext = /*#__PURE__*/_react.default.createContext(0); exports.PriceContext = PriceContext; function exchangeLink() { return "https://uniswap.exchange/swap?theme=dark&outputCurrency=".concat(TOKEN_ADDRESS); } function tokenEnabled() { return !!TOKEN_ADDRESS; } function usePrice(amount, type) { var _useContext = (0, _react.useContext)(PriceContext), price = _useContext.price; if (!price) return ''; if (type === 'number') return (0, _numbers.abbreviateNumber)(price * amount); return " ($".concat((0, _numbers.abbreviateNumber)(price * amount, 2), ")"); } PriceProvider.propTypes = { children: _propTypes.default.node }; function PriceProvider(_ref) { var children = _ref.children; var _useReducer = (0, _react.useReducer)(priceReducer, { loading: false, error: false, data: null, refresh: 0 }), _useReducer2 = (0, _slicedToArray2.default)(_useReducer, 2), state = _useReducer2[0], dispatch = _useReducer2[1]; (0, _react.useEffect)(function () { var didCancel = false; var fetchData = /*#__PURE__*/function () { var _ref2 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() { return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: dispatch({ type: 'FETCH_PRICE_INIT' }); if (!(!TOKEN_ADDRESS || DISABLE_PRICE)) { _context.next = 3; break; } return _context.abrupt("return"); case 3: try {// const tokenPrice = await getTokenReserves(TOKEN_ADDRESS); // const res = await fetch('https://api.infura.io/v1/ticker/ethusd'); // const ethPrice = await res.json(); // if (!didCancel) { // dispatch({ // type: 'FETCH_PRICE_SUCCESS', // payload: { ...tokenPrice, ethPrice: ethPrice.bid }, // }); // } } catch (err) { if (!didCancel) { dispatch({ type: 'FETCH_PRICE_ERROR', payload: err }); } } case 4: case "end": return _context.stop(); } } }, _callee); })); return function fetchData() { return _ref2.apply(this, arguments); }; }(); fetchData(); setTimeout(function () { dispatch({ type: 'REFRESH_PRICE' }); }, UPDATE_INTERVAL); return function () { didCancel = true; }; }, [state.refresh]); var price = computePrice(state.data); var priceString = "($".concat((0, _numbers.abbreviateNumber)(price, 2), ")"); return /*#__PURE__*/_react.default.createElement(PriceContext.Provider, { value: { price: price, priceString: priceString } }, children); } var priceReducer = function priceReducer(state, action) { switch (action.type) { case 'REFRESH_PRICE': return _objectSpread(_objectSpread({}, state), {}, { refresh: state.refresh + 1 }); case 'FETCH_PRICE_INIT': return _objectSpread(_objectSpread({}, state), {}, { loading: true, error: false }); case 'FETCH_PRICE_SUCCESS': return _objectSpread(_objectSpread({}, state), {}, { loading: false, error: false, data: action.payload }); case 'FETCH_PRICE_ERROR': return _objectSpread(_objectSpread({}, state), {}, { loading: false, error: action.payload }); default: throw new Error(); } }; function computePrice(data) { if (!data) return null; var ethReserve = data.ethReserve, tokenReserve = data.tokenReserve, ethPrice = data.ethPrice; if (!ethReserve || !tokenReserve) return null; var priceInEth = ethReserve.amount.div(tokenReserve.amount); var usdPrice = priceInEth.times(ethPrice); return parseFloat(usdPrice.toString()); } //# sourceMappingURL=price.context.js.map