@velora-dex/widget 0.2.5-dev.4 → 0.2.5-dev.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/dist/components/widget/OrderExpiryInput/index.d.ts.map +1 -1
  2. package/dist/components/widget/OrderExpiryInput/index.js +49 -68
  3. package/dist/components/widget/OrderExpiryInput/index.js.map +1 -1
  4. package/dist/components/widget/SwapModeSwitcher/state/swapSideAtom.d.ts.map +1 -1
  5. package/dist/components/widget/SwapModeSwitcher/state/swapSideAtom.js +0 -5
  6. package/dist/components/widget/SwapModeSwitcher/state/swapSideAtom.js.map +1 -1
  7. package/dist/configurator/Configurator.d.ts.map +1 -1
  8. package/dist/configurator/components/FormPropsInputs.d.ts.map +1 -1
  9. package/dist/core/inputs/state/common.d.ts +7 -9
  10. package/dist/core/inputs/state/common.d.ts.map +1 -1
  11. package/dist/core/inputs/state/common.js +18 -24
  12. package/dist/core/inputs/state/common.js.map +1 -1
  13. package/dist/core/inputs/state/setTokenByAddressAtom.d.ts +1 -1
  14. package/dist/core/inputs/state/setTokenByAddressAtom.d.ts.map +1 -1
  15. package/dist/core/inputs/state/setTokenByAddressAtom.js +46 -40
  16. package/dist/core/inputs/state/setTokenByAddressAtom.js.map +1 -1
  17. package/dist/core/inputs/state/types.d.ts +1 -3
  18. package/dist/core/inputs/state/types.d.ts.map +1 -1
  19. package/dist/core/limit/state/deadlineAtom.d.ts +8 -4
  20. package/dist/core/limit/state/deadlineAtom.d.ts.map +1 -1
  21. package/dist/core/limit/state/deadlineAtom.js +16 -32
  22. package/dist/core/limit/state/deadlineAtom.js.map +1 -1
  23. package/dist/core/limit/state/limitInputActionsAtom.d.ts +3 -3
  24. package/dist/core/limit/state/limitInputActionsAtom.d.ts.map +1 -1
  25. package/dist/core/limit/state/limitInputActionsAtom.js +8 -8
  26. package/dist/core/limit/state/limitInputActionsAtom.js.map +1 -1
  27. package/dist/core/limit/state/utils.d.ts +2 -1
  28. package/dist/core/limit/state/utils.d.ts.map +1 -1
  29. package/dist/core/limit/state/utils.js +13 -1
  30. package/dist/core/limit/state/utils.js.map +1 -1
  31. package/dist/core/otc/state/deadlineAtom.d.ts +7 -6
  32. package/dist/core/otc/state/deadlineAtom.d.ts.map +1 -1
  33. package/dist/core/otc/state/deadlineAtom.js +16 -33
  34. package/dist/core/otc/state/deadlineAtom.js.map +1 -1
  35. package/dist/core/otc/state/otcInputActionsAtom.d.ts +3 -3
  36. package/dist/core/otc/state/otcInputActionsAtom.d.ts.map +1 -1
  37. package/dist/core/otc/state/otcInputActionsAtom.js +8 -8
  38. package/dist/core/otc/state/otcInputActionsAtom.js.map +1 -1
  39. package/dist/core/state/currentSwapInputAtom.d.ts +1 -1
  40. package/dist/core/state/currentSwapInputAtom.d.ts.map +1 -1
  41. package/dist/core/state/currentSwapInputAtom.js +1 -5
  42. package/dist/core/state/currentSwapInputAtom.js.map +1 -1
  43. package/package.json +1 -1
  44. package/dist/components/widget/SwapModeSwitcher/state/swapSideFromPropsAtom.d.ts +0 -5
  45. package/dist/components/widget/SwapModeSwitcher/state/swapSideFromPropsAtom.d.ts.map +0 -1
  46. package/dist/components/widget/SwapModeSwitcher/state/swapSideFromPropsAtom.js +0 -6
  47. package/dist/components/widget/SwapModeSwitcher/state/swapSideFromPropsAtom.js.map +0 -1
@@ -11,7 +11,7 @@ import { isSupportedChainId } from '../../../lib/web3/wagmi/utils.js';
11
11
  import { areTokensSame } from '../../../tokens/utils/areTokensSame.js';
12
12
  import { pickDefaultTokenPair } from '../../../tokens/defaultTokens.js';
13
13
  import { tradeModeAtom, userTradeModeAtom } from '../../state/tradeModeAtom.js';
14
- import { tradeModeToTokenAtoms, tradeModeToSetTokenAtoms, tradeModeToPayAmountUnitAtom, tradeModeToReceiveAmountUnitAtom, tradeModeToPriceRateAmountAtom, tradeModeToDeadlineFromPropsAtom } from './common.js';
14
+ import { tradeModeToTokenAtoms, tradeModeToSetTokenAtoms, sideToInputType, tradeModeToPayAmountUnitAtom, tradeModeToReceiveAmountUnitAtom, tradeModeToTimeUnitAtom } from './common.js';
15
15
  import { wrappedNativeCurrency } from '../../../lib/constants/weth.js';
16
16
  import { autoAddImportedTokenAtom } from '../../../tokens/state/addImportedTokenAtom.js';
17
17
  import { getLogger } from '../../logger.js';
@@ -20,7 +20,8 @@ import { bridgeInfoAtom } from '../../../hooks/swap/prices/delta/queries/useBrid
20
20
  import { isTradeMode } from '../../../lib/tradeMode.js';
21
21
  import { enabledTradeModesAtom } from '../../state/enabledTradeModesAtom.js';
22
22
  import { swapSideAtom } from '../../../components/widget/SwapModeSwitcher/state/swapSideAtom.js';
23
- import { swapSideFromPropsAtom } from '../../../components/widget/SwapModeSwitcher/state/swapSideFromPropsAtom.js';
23
+ import { currentSwapInputAtom } from '../../state/currentSwapInputAtom.js';
24
+ import { getClosestTimeUnit } from '../../limit/state/utils.js';
24
25
 
25
26
  const formInputPropsAtom = atom({});
26
27
  const logger = getLogger("FormInputProps");
@@ -71,8 +72,7 @@ const formInputPropsEffectAtom = atomEffect((get, set) => {
71
72
  tokenFromAddress,
72
73
  srcChainId,
73
74
  sendAmount,
74
- receiveAmount,
75
- priceRateAmount
75
+ receiveAmount
76
76
  } = formInputProps;
77
77
  logger.log("using external props to set Widget form input", formInputProps);
78
78
  let destChainId = formInputProps.destChainId;
@@ -157,12 +157,24 @@ const formInputPropsEffectAtom = atomEffect((get, set) => {
157
157
  }
158
158
  let side = formInputProps.side;
159
159
  if (isValidSide(side)) {
160
- set(swapSideFromPropsAtom, side);
160
+ set(currentSwapInputAtom, sideToInputType[side]);
161
161
  } else {
162
- logger.warn("invalid side provided, must be BUY or SELL", {
163
- side
164
- });
165
- side = get.peek(swapSideAtom);
162
+ if (side) {
163
+ logger.warn("invalid side provided, must be BUY or SELL", {
164
+ side
165
+ });
166
+ }
167
+ if (selectedForm === "swap") {
168
+ if (sendAmount && !receiveAmount) {
169
+ side = "SELL";
170
+ } else if (receiveAmount && !sendAmount) {
171
+ side = "BUY";
172
+ } else {
173
+ side = get.peek(swapSideAtom);
174
+ }
175
+ } else {
176
+ side = get.peek(swapSideAtom);
177
+ }
166
178
  }
167
179
  assert(isValidSide(side), "side must be BUY or SELL");
168
180
  const isSwap = selectedForm === "swap";
@@ -176,7 +188,7 @@ const formInputPropsEffectAtom = atomEffect((get, set) => {
176
188
  set(formPayAmountAtom.write, sendAmount);
177
189
  }
178
190
  }
179
- if (receiveAmount && Number(receiveAmount) >= 0 && isSwapWithBuy) {
191
+ if (receiveAmount && Number(receiveAmount) >= 0 && (isSwapWithBuy || isLimitOrOtc)) {
180
192
  const formReceiveAmountAtom = tradeModeToReceiveAmountUnitAtom[selectedForm];
181
193
  const currentReceiveAmount = get.peek(formReceiveAmountAtom.read);
182
194
  if (currentReceiveAmount !== receiveAmount) {
@@ -184,20 +196,17 @@ const formInputPropsEffectAtom = atomEffect((get, set) => {
184
196
  }
185
197
  }
186
198
  if (selectedForm === "limit" || selectedForm === "otc") {
187
- if (priceRateAmount && Number(priceRateAmount) >= 0) {
188
- const formPriceRateAmountAtom = tradeModeToPriceRateAmountAtom[selectedForm];
189
- const currentPriceRateAmount = get.peek(formPriceRateAmountAtom.read);
190
- if (currentPriceRateAmount !== priceRateAmount) {
191
- set(formPriceRateAmountAtom.write, priceRateAmount);
192
- }
193
- }
194
199
  const orderDeadline = Number(formInputProps.orderDeadline);
195
200
  if (orderDeadline !== void 0 && !isNaN(orderDeadline)) {
196
- const deadlineAtom = tradeModeToDeadlineFromPropsAtom[selectedForm];
197
- const currentDeadline = get.peek(deadlineAtom);
198
- if (currentDeadline !== orderDeadline) {
199
- console.log("setting deadlineFromPropsAtom to", orderDeadline);
200
- set(deadlineAtom, orderDeadline);
201
+ const timeUnitAtom = tradeModeToTimeUnitAtom[selectedForm];
202
+ const currentTimeUnit = get.peek(timeUnitAtom);
203
+ if (currentTimeUnit.timestamp !== orderDeadline) {
204
+ set(timeUnitAtom, {
205
+ // set closest time unit for better UX
206
+ ...getClosestTimeUnit(orderDeadline),
207
+ // set exact timestamp
208
+ timestamp: orderDeadline
209
+ });
201
210
  }
202
211
  }
203
212
  }
@@ -236,7 +245,7 @@ function useActivateFormInputEffects() {
236
245
  useAtom(formInputPropsEffectAtom);
237
246
  }
238
247
  function useSetFormInputFromProps(t0) {
239
- const $ = distExports.c(15);
248
+ const $ = distExports.c(14);
240
249
  let t1;
241
250
  if ($[0] !== t0) {
242
251
  t1 = t0 === void 0 ? {} : t0;
@@ -254,13 +263,12 @@ function useSetFormInputFromProps(t0) {
254
263
  sendAmount,
255
264
  receiveAmount,
256
265
  side,
257
- priceRateAmount,
258
266
  orderDeadline
259
267
  } = t1;
260
268
  const setFormInputProps = useSetAtom(formInputPropsAtom);
261
269
  let t2;
262
270
  let t3;
263
- if ($[2] !== destChainId || $[3] !== orderDeadline || $[4] !== priceRateAmount || $[5] !== receiveAmount || $[6] !== selectedForm || $[7] !== sendAmount || $[8] !== setFormInputProps || $[9] !== side || $[10] !== srcChainId || $[11] !== tokenFromAddress || $[12] !== tokenToAddress) {
271
+ if ($[2] !== destChainId || $[3] !== orderDeadline || $[4] !== receiveAmount || $[5] !== selectedForm || $[6] !== sendAmount || $[7] !== setFormInputProps || $[8] !== side || $[9] !== srcChainId || $[10] !== tokenFromAddress || $[11] !== tokenToAddress) {
264
272
  t2 = () => {
265
273
  setFormInputProps({
266
274
  selectedForm,
@@ -271,27 +279,25 @@ function useSetFormInputFromProps(t0) {
271
279
  sendAmount,
272
280
  receiveAmount,
273
281
  side,
274
- priceRateAmount,
275
282
  orderDeadline
276
283
  });
277
284
  };
278
- t3 = [selectedForm, tokenFromAddress, srcChainId, tokenToAddress, destChainId, sendAmount, setFormInputProps, receiveAmount, side, priceRateAmount, orderDeadline];
285
+ t3 = [selectedForm, tokenFromAddress, srcChainId, tokenToAddress, destChainId, sendAmount, setFormInputProps, receiveAmount, side, orderDeadline];
279
286
  $[2] = destChainId;
280
287
  $[3] = orderDeadline;
281
- $[4] = priceRateAmount;
282
- $[5] = receiveAmount;
283
- $[6] = selectedForm;
284
- $[7] = sendAmount;
285
- $[8] = setFormInputProps;
286
- $[9] = side;
287
- $[10] = srcChainId;
288
- $[11] = tokenFromAddress;
289
- $[12] = tokenToAddress;
290
- $[13] = t2;
291
- $[14] = t3;
288
+ $[4] = receiveAmount;
289
+ $[5] = selectedForm;
290
+ $[6] = sendAmount;
291
+ $[7] = setFormInputProps;
292
+ $[8] = side;
293
+ $[9] = srcChainId;
294
+ $[10] = tokenFromAddress;
295
+ $[11] = tokenToAddress;
296
+ $[12] = t2;
297
+ $[13] = t3;
292
298
  } else {
293
- t2 = $[13];
294
- t3 = $[14];
299
+ t2 = $[12];
300
+ t3 = $[13];
295
301
  }
296
302
  useLayoutEffect(t2, t3);
297
303
  }
@@ -1 +1 @@
1
- {"version":3,"file":"setTokenByAddressAtom.js","sources":["../../../../src/core/inputs/state/setTokenByAddressAtom.ts"],"sourcesContent":["import { atom, useAtom, useSetAtom, type Setter } from \"jotai\";\nimport { atomEffect, type Effect } from \"jotai-effect\";\nimport { isAddress, type Address } from \"viem\";\nimport { isETHaddress } from \"@/tokens/utils/eth\";\nimport { nativeTokensByChainId } from \"@/tokens/constructor\";\nimport { fromListsAtom } from \"@/tokens/state/fromListsAtom\";\nimport {\n autoImportedTokensAtom,\n importedTokensAtom,\n} from \"@/tokens/state/importedTokensAtom\";\nimport type { Token } from \"@/tokens/state/types\";\nimport { useLayoutEffect } from \"react\";\nimport { isSupportedChainId } from \"@/lib/web3/wagmi/utils\";\nimport { areTokensSame } from \"@/tokens/utils/areTokensSame\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { pickDefaultTokenPair } from \"@/tokens/defaultTokens\";\nimport { tradeModeAtom, userTradeModeAtom } from \"@/core/state/tradeModeAtom\";\nimport {\n tradeModeToDeadlineFromPropsAtom,\n tradeModeToPayAmountUnitAtom,\n tradeModeToPriceRateAmountAtom,\n tradeModeToReceiveAmountUnitAtom,\n tradeModeToSetTokenAtoms,\n tradeModeToTokenAtoms,\n} from \"./common\";\nimport { wrappedNativeCurrency } from \"@/lib/constants/weth\";\nimport { autoAddImportedTokenAtom } from \"@/tokens/state/addImportedTokenAtom\";\nimport { getLogger } from \"@/core/logger\";\nimport { assert } from \"ts-essentials\";\nimport { bridgeInfoAtom } from \"@/hooks/swap/prices/delta/queries/useBridgeInfo\";\nimport { isTradeMode } from \"@/lib/tradeMode\";\nimport { enabledTradeModesAtom } from \"@/core/state/enabledTradeModesAtom\";\nimport type { FormInputProps } from \"./types\";\nimport type { SwapSideUnion } from \"@velora-dex/sdk\";\nimport { swapSideAtom } from \"@/components/widget/SwapModeSwitcher/state/swapSideAtom\";\nimport { swapSideFromPropsAtom } from \"@/components/widget/SwapModeSwitcher/state/swapSideFromPropsAtom\";\n\nexport const formInputPropsAtom = atom<FormInputProps>({});\n\n// in case formInputPros passed to Widget are not exactly expected types\ntype RelaxedFormInputProps = {\n [K in keyof FormInputProps]?: NonNullable<FormInputProps[K]> extends string\n ? string\n : NonNullable<FormInputProps[K]> extends number\n ? number\n : FormInputProps[K];\n};\n\nconst logger = getLogger(\"FormInputProps\");\n\ntype GetterWithPeek = Parameters<Effect>[0];\n\ntype FindTokenAtomsInput = {\n tokenToFind: { address: Address; network: SupportedChainId };\n get: GetterWithPeek;\n set: Setter;\n};\n\nfunction findTokenInAtoms({\n get,\n set,\n tokenToFind,\n}: FindTokenAtomsInput): Token | undefined {\n const tokenFromAddress = tokenToFind.address;\n const chainId = tokenToFind.network;\n\n if (isETHaddress(tokenFromAddress)) {\n // if tokenFrom is ETH, set the native token for tokenFrom Input\n const nativeToken = nativeTokensByChainId[chainId];\n return nativeToken;\n }\n\n const tokenFromLowercase = tokenFromAddress.toLowerCase();\n\n // find the token from the token Lists for the srcChainId,\n // and retry to find the token when allTokens are updated (token lists loaded)\n const tokensMap = get(fromListsAtom).listByChainId[chainId]?.addressMap;\n const tokenFromLists = tokensMap?.[tokenFromLowercase];\n if (tokenFromLists) {\n return tokenFromLists;\n }\n\n // find the token from the imported tokens,\n // don't retry if user imports more tokens during the session\n const importedTokens = get.peek(importedTokensAtom);\n const importedToken = importedTokens[chainId]?.find(\n (token) => token.address.toLowerCase() === tokenFromLowercase\n );\n if (importedToken) {\n return importedToken;\n }\n\n // subscribe to auto-imported tokens, which will be added to only when tokenAddress prop is supplied from outside the widget\n const autoImportedTokens = get(autoImportedTokensAtom);\n // looking through auto-imported tokens isn't strictly necessary because importedTokens atom is updated together with autoImportedTokens atom,\n // except for consistency, and so that we don't have to subscribe to importedTokens atom that would retrigger formProps matching on manual token import\n const autoImportedToken = autoImportedTokens.find(\n (token) =>\n token.address.toLowerCase() === tokenFromLowercase &&\n token.network === chainId\n );\n if (autoImportedToken) {\n return autoImportedToken;\n }\n\n logger.info(\n \"token not available in widget. Will attempt to import from chain\",\n {\n address: tokenFromAddress,\n chainId,\n }\n );\n\n // trigger Token fetch and eventual import when tokenFromAddress is not found in available token lists and atoms\n set(autoAddImportedTokenAtom, { address: tokenFromAddress, chainId });\n}\n\nfunction isValidSide(side: string | undefined): side is SwapSideUnion {\n return side === \"BUY\" || side === \"SELL\";\n}\n\nconst formInputPropsEffectAtom = atomEffect((get, set) => {\n // subscribe to bridgeInfoAtom to have up-to-date available crosses\n // and retry token finding each time when bridgeInfo changes\n get(bridgeInfoAtom);\n\n const enabledTradeModes = get(enabledTradeModesAtom);\n const formInputProps: RelaxedFormInputProps = get(formInputPropsAtom);\n const {\n tokenFromAddress,\n srcChainId,\n sendAmount,\n receiveAmount,\n priceRateAmount,\n } = formInputProps;\n\n logger.log(\"using external props to set Widget form input\", formInputProps);\n\n let destChainId = formInputProps.destChainId;\n let tokenToAddress = formInputProps.tokenToAddress;\n let selectedForm = formInputProps.selectedForm || \"swap\";\n if (!isTradeMode(selectedForm) || !enabledTradeModes.includes(selectedForm)) {\n // guard against invalid props passed through from outside the Widget\n logger.warn(\"invalid or disabled selectedForm provided\", { selectedForm });\n // fallback to first enabled trade mode from the config\n selectedForm = enabledTradeModes[0];\n }\n\n // necessary for type safety\n assert(isTradeMode(selectedForm), \"selectedForm must be a valid trade mode\");\n\n const formAtoms = tradeModeToTokenAtoms[selectedForm];\n const currentTokenFrom = get.peek(formAtoms.tokenFromAtom);\n const currentTokenTo = get.peek(formAtoms.tokenToAtom);\n\n const currentTradeMode = get.peek(tradeModeAtom);\n\n if (currentTradeMode !== selectedForm) {\n set(userTradeModeAtom, selectedForm);\n }\n\n let newTokenFrom: Token | undefined;\n let newTokenTo: Token | undefined;\n\n // if chain isn't given in props, match current srcChainId\n const defaultChainId = currentTokenFrom.network;\n\n if (selectedForm !== \"swap\") {\n // non-swap forms are single-chain only,\n // force destChainId = srcChainId\n destChainId = srcChainId;\n }\n\n if (\n selectedForm === \"otc\" &&\n tokenToAddress &&\n isETHaddress(tokenToAddress)\n ) {\n const wethMapping: Record<number, Address> = wrappedNativeCurrency;\n // OTC Orders don't support ETH as tokenTo=takerAsset,\n // more logical to use WETH instead of no token at all\n tokenToAddress = wethMapping[destChainId || defaultChainId];\n }\n\n {\n // match tokenFromAddress and srcChainId to a new tokenFrom to select\n const tokenToFind = getTokenToFind({\n tokenFromProps: { address: tokenFromAddress, network: srcChainId },\n currentToken: currentTokenFrom,\n defaultChainId,\n });\n if (tokenToFind) {\n newTokenFrom = findTokenInAtoms({\n get,\n tokenToFind,\n set,\n });\n }\n }\n\n {\n // match tokenToAddress and destChainId to a new tokenTo to select\n const tokenToFind = getTokenToFind({\n tokenFromProps: { address: tokenToAddress, network: destChainId },\n currentToken: currentTokenTo,\n defaultChainId,\n });\n if (tokenToFind) {\n newTokenTo = findTokenInAtoms({\n get,\n tokenToFind,\n set,\n });\n }\n }\n\n if (newTokenFrom && newTokenTo && areTokensSame(newTokenFrom, newTokenTo)) {\n // if tokens are the same, skip tokenTo\n newTokenTo = undefined;\n }\n\n if (\n !newTokenFrom &&\n !tokenFromAddress &&\n srcChainId &&\n isSupportedChainId(srcChainId) &&\n srcChainId !== currentTokenFrom.network\n ) {\n // no tokenAddress given, but chainId is provided and different from current\n const [defaultTokenFrom] = pickDefaultTokenPair(srcChainId, selectedForm);\n // set default token for the chain\n newTokenFrom = defaultTokenFrom;\n }\n\n if (\n !newTokenTo &&\n !tokenToAddress &&\n destChainId &&\n isSupportedChainId(destChainId) &&\n destChainId !== currentTokenTo?.network\n ) {\n // no tokenAddress given, but chainId is provided and different from current\n const [, defaultTokenTo] = pickDefaultTokenPair(destChainId, selectedForm);\n // set default token for the chain\n newTokenTo = defaultTokenTo;\n }\n\n if (newTokenFrom) {\n const selectTokenFromAtom =\n tradeModeToSetTokenAtoms[selectedForm].tokenFromAtom;\n set(selectTokenFromAtom, newTokenFrom);\n }\n if (newTokenTo) {\n const selectTokenToAtom =\n tradeModeToSetTokenAtoms[selectedForm].tokenToAtom;\n set(selectTokenToAtom, newTokenTo);\n }\n\n let side = formInputProps.side;\n if (isValidSide(side)) {\n set(swapSideFromPropsAtom, side);\n } else {\n // guard against invalid props passed through from outside the Widget\n logger.warn(\"invalid side provided, must be BUY or SELL\", { side });\n // fallback to current swap side\n side = get.peek(swapSideAtom);\n }\n\n // necessary for type safety\n assert(isValidSide(side), \"side must be BUY or SELL\");\n\n const isSwap = selectedForm === \"swap\";\n const isLimitOrOtc = selectedForm === \"limit\" || selectedForm === \"otc\";\n\n const isSwapWithSell = isSwap && side === \"SELL\";\n const isSwapWithBuy = isSwap && side === \"BUY\";\n\n if (\n sendAmount &&\n Number(sendAmount) >= 0 &&\n (isSwapWithSell || isLimitOrOtc)\n ) {\n const formPayAmountAtom = tradeModeToPayAmountUnitAtom[selectedForm];\n const currentSendAmount = get.peek(formPayAmountAtom.read);\n if (currentSendAmount !== sendAmount) {\n set(formPayAmountAtom.write, sendAmount);\n }\n }\n\n if (receiveAmount && Number(receiveAmount) >= 0 && isSwapWithBuy) {\n const formReceiveAmountAtom =\n tradeModeToReceiveAmountUnitAtom[selectedForm];\n const currentReceiveAmount = get.peek(formReceiveAmountAtom.read);\n if (currentReceiveAmount !== receiveAmount) {\n set(formReceiveAmountAtom.write, receiveAmount);\n }\n }\n\n if (selectedForm === \"limit\" || selectedForm === \"otc\") {\n if (priceRateAmount && Number(priceRateAmount) >= 0) {\n const formPriceRateAmountAtom =\n tradeModeToPriceRateAmountAtom[selectedForm];\n const currentPriceRateAmount = get.peek(formPriceRateAmountAtom.read);\n if (currentPriceRateAmount !== priceRateAmount) {\n set(formPriceRateAmountAtom.write, priceRateAmount);\n }\n }\n\n const orderDeadline = Number(formInputProps.orderDeadline);\n if (orderDeadline !== undefined && !isNaN(orderDeadline)) {\n const deadlineAtom = tradeModeToDeadlineFromPropsAtom[selectedForm];\n const currentDeadline = get.peek(deadlineAtom);\n\n if (currentDeadline !== orderDeadline) {\n console.log(\"setting deadlineFromPropsAtom to\", orderDeadline);\n set(deadlineAtom, orderDeadline);\n }\n }\n }\n});\n\nfunction getTokenToFind({\n tokenFromProps,\n currentToken,\n defaultChainId,\n}: {\n tokenFromProps: { address?: string; network?: number };\n currentToken?: Token;\n defaultChainId: SupportedChainId;\n}): { address: Address; network: SupportedChainId } | undefined {\n if (!tokenFromProps.address) return;\n // guard against malformed addresses passed through props\n if (!isAddress(tokenFromProps.address)) {\n logger.warn(\"malformed token address provided\", {\n address: tokenFromProps.address,\n });\n return;\n }\n\n const network = tokenFromProps.network || defaultChainId;\n\n // unsupported chainId provided, can't select this Token\n if (!isSupportedChainId(network)) {\n logger.warn(\"unsupported chainId provided\", { network });\n return;\n }\n\n if (\n currentToken &&\n areTokensSame(currentToken, {\n address: tokenFromProps.address,\n network,\n })\n ) {\n // same token already there\n return;\n }\n\n return { address: tokenFromProps.address, network };\n}\n\nexport function useActivateFormInputEffects() {\n useAtom(formInputPropsEffectAtom);\n}\n\nexport function useSetFormInputFromProps({\n selectedForm,\n tokenFromAddress,\n srcChainId,\n tokenToAddress,\n destChainId,\n sendAmount,\n receiveAmount,\n side,\n priceRateAmount,\n orderDeadline,\n}: FormInputProps = {}) {\n const setFormInputProps = useSetAtom(formInputPropsAtom);\n\n // match props together as they are supplied together from outside the Widget,\n // on any one prop change, the whole form input props are updated as long as they are passed together to the Widget\n useLayoutEffect(() => {\n setFormInputProps({\n selectedForm,\n tokenFromAddress,\n srcChainId,\n tokenToAddress,\n destChainId,\n sendAmount,\n receiveAmount,\n side,\n priceRateAmount,\n orderDeadline,\n });\n }, [\n selectedForm,\n tokenFromAddress,\n srcChainId,\n tokenToAddress,\n destChainId,\n sendAmount,\n setFormInputProps,\n receiveAmount,\n side,\n priceRateAmount,\n orderDeadline,\n ]);\n}\n"],"names":["formInputPropsAtom","atom","logger","getLogger","findTokenInAtoms","get","set","tokenToFind","tokenFromAddress","address","chainId","network","isETHaddress","nativeToken","nativeTokensByChainId","tokenFromLowercase","toLowerCase","tokensMap","fromListsAtom","listByChainId","addressMap","tokenFromLists","importedTokens","peek","importedTokensAtom","importedToken","find","token","autoImportedTokens","autoImportedTokensAtom","autoImportedToken","info","autoAddImportedTokenAtom","isValidSide","side","formInputPropsEffectAtom","atomEffect","bridgeInfoAtom","enabledTradeModes","enabledTradeModesAtom","formInputProps","srcChainId","sendAmount","receiveAmount","priceRateAmount","log","destChainId","tokenToAddress","selectedForm","isTradeMode","includes","warn","assert","formAtoms","tradeModeToTokenAtoms","currentTokenFrom","tokenFromAtom","currentTokenTo","tokenToAtom","currentTradeMode","tradeModeAtom","userTradeModeAtom","newTokenFrom","newTokenTo","defaultChainId","wethMapping","wrappedNativeCurrency","getTokenToFind","tokenFromProps","currentToken","areTokensSame","undefined","isSupportedChainId","defaultTokenFrom","pickDefaultTokenPair","defaultTokenTo","selectTokenFromAtom","tradeModeToSetTokenAtoms","selectTokenToAtom","swapSideFromPropsAtom","swapSideAtom","isSwap","isLimitOrOtc","isSwapWithSell","isSwapWithBuy","Number","formPayAmountAtom","tradeModeToPayAmountUnitAtom","currentSendAmount","read","write","formReceiveAmountAtom","tradeModeToReceiveAmountUnitAtom","currentReceiveAmount","formPriceRateAmountAtom","tradeModeToPriceRateAmountAtom","currentPriceRateAmount","orderDeadline","isNaN","deadlineAtom","tradeModeToDeadlineFromPropsAtom","currentDeadline","console","isAddress","useActivateFormInputEffects","useAtom","useSetFormInputFromProps","t0","$","_c","t1","setFormInputProps","useSetAtom","t2","t3","useLayoutEffect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAqCO,MAAMA,kBAAAA,GAAqBC,IAAAA,CAAqB,EAAE;AAWzD,MAAMC,MAAAA,GAASC,UAAU,gBAAgB,CAAA;AAUzC,SAASC,gBAAAA,CAAiB;AAAA,EACxBC,GAAAA;AAAAA,EACAC,GAAAA;AAAAA,EACAC;AACmB,CAAA,EAAsB;AACzC,EAAA,MAAMC,mBAAmBD,WAAAA,CAAYE,OAAAA;AACrC,EAAA,MAAMC,UAAUH,WAAAA,CAAYI,OAAAA;AAE5B,EAAA,IAAIC,YAAAA,CAAaJ,gBAAgB,CAAA,EAAG;AAElC,IAAA,MAAMK,WAAAA,GAAcC,sBAAsBJ,OAAO,CAAA;AACjD,IAAA,OAAOG,WAAAA;AAAAA,EACT;AAEA,EAAA,MAAME,kBAAAA,GAAqBP,iBAAiBQ,WAAAA,EAAY;AAIxD,EAAA,MAAMC,YAAYZ,GAAAA,CAAIa,aAAa,CAAA,CAAEC,aAAAA,CAAcT,OAAO,CAAA,EAAGU,UAAAA;AAC7D,EAAA,MAAMC,cAAAA,GAAiBJ,YAAYF,kBAAkB,CAAA;AACrD,EAAA,IAAIM,cAAAA,EAAgB;AAClB,IAAA,OAAOA,cAAAA;AAAAA,EACT;AAIA,EAAA,MAAMC,cAAAA,GAAiBjB,GAAAA,CAAIkB,IAAAA,CAAKC,kBAAkB,CAAA;AAClD,EAAA,MAAMC,aAAAA,GAAgBH,cAAAA,CAAeZ,OAAO,CAAA,EAAGgB,IAAAA,CAC5CC,WAAUA,KAAAA,CAAMlB,OAAAA,CAAQO,WAAAA,EAAY,KAAMD,kBAC7C,CAAA;AACA,EAAA,IAAIU,aAAAA,EAAe;AACjB,IAAA,OAAOA,aAAAA;AAAAA,EACT;AAGA,EAAA,MAAMG,kBAAAA,GAAqBvB,IAAIwB,sBAAsB,CAAA;AAGrD,EAAA,MAAMC,iBAAAA,GAAoBF,kBAAAA,CAAmBF,IAAAA,CAC1CC,CAAAA,KAAAA,KACCA,KAAAA,CAAMlB,OAAAA,CAAQO,WAAAA,EAAY,KAAMD,kBAAAA,IAChCY,KAAAA,CAAMhB,OAAAA,KAAYD,OACtB,CAAA;AACA,EAAA,IAAIoB,iBAAAA,EAAmB;AACrB,IAAA,OAAOA,iBAAAA;AAAAA,EACT;AAEA5B,EAAAA,MAAAA,CAAO6B,KACL,kEAAA,EACA;AAAA,IACEtB,OAAAA,EAASD,gBAAAA;AAAAA,IACTE;AAAAA,GAEJ,CAAA;AAGAJ,EAAAA,GAAAA,CAAI0B,wBAAAA,EAA0B;AAAA,IAAEvB,OAAAA,EAASD,gBAAAA;AAAAA,IAAkBE;AAAAA,GAAS,CAAA;AACtE;AAEA,SAASuB,YAAYC,IAAAA,EAAiD;AACpE,EAAA,OAAOA,IAAAA,KAAS,SAASA,IAAAA,KAAS,MAAA;AACpC;AAEA,MAAMC,wBAAAA,GAA2BC,UAAAA,CAAW,CAAC/B,GAAAA,EAAKC,GAAAA,KAAQ;AAGxDD,EAAAA,GAAAA,CAAIgC,cAAc,CAAA;AAElB,EAAA,MAAMC,iBAAAA,GAAoBjC,IAAIkC,qBAAqB,CAAA;AACnD,EAAA,MAAMC,cAAAA,GAAwCnC,IAAIL,kBAAkB,CAAA;AACpE,EAAA,MAAM;AAAA,IACJQ,gBAAAA;AAAAA,IACAiC,UAAAA;AAAAA,IACAC,UAAAA;AAAAA,IACAC,aAAAA;AAAAA,IACAC;AAAAA,GACF,GAAIJ,cAAAA;AAEJtC,EAAAA,MAAAA,CAAO2C,GAAAA,CAAI,iDAAiDL,cAAc,CAAA;AAE1E,EAAA,IAAIM,cAAcN,cAAAA,CAAeM,WAAAA;AACjC,EAAA,IAAIC,iBAAiBP,cAAAA,CAAeO,cAAAA;AACpC,EAAA,IAAIC,YAAAA,GAAeR,eAAeQ,YAAAA,IAAgB,MAAA;AAClD,EAAA,IAAI,CAACC,YAAYD,YAAY,CAAA,IAAK,CAACV,iBAAAA,CAAkBY,QAAAA,CAASF,YAAY,CAAA,EAAG;AAE3E9C,IAAAA,MAAAA,CAAOiD,KAAK,2CAAA,EAA6C;AAAA,MAAEH;AAAAA,KAAc,CAAA;AAEzEA,IAAAA,YAAAA,GAAeV,kBAAkB,CAAC,CAAA;AAAA,EACpC;AAGAc,EAAAA,MAAAA,CAAOH,WAAAA,CAAYD,YAAY,CAAA,EAAG,yCAAyC,CAAA;AAE3E,EAAA,MAAMK,SAAAA,GAAYC,sBAAsBN,YAAY,CAAA;AACpD,EAAA,MAAMO,gBAAAA,GAAmBlD,GAAAA,CAAIkB,IAAAA,CAAK8B,SAAAA,CAAUG,aAAa,CAAA;AACzD,EAAA,MAAMC,cAAAA,GAAiBpD,GAAAA,CAAIkB,IAAAA,CAAK8B,SAAAA,CAAUK,WAAW,CAAA;AAErD,EAAA,MAAMC,gBAAAA,GAAmBtD,GAAAA,CAAIkB,IAAAA,CAAKqC,aAAa,CAAA;AAE/C,EAAA,IAAID,qBAAqBX,YAAAA,EAAc;AACrC1C,IAAAA,GAAAA,CAAIuD,mBAAmBb,YAAY,CAAA;AAAA,EACrC;AAEA,EAAA,IAAIc,YAAAA;AACJ,EAAA,IAAIC,UAAAA;AAGJ,EAAA,MAAMC,iBAAiBT,gBAAAA,CAAiB5C,OAAAA;AAExC,EAAA,IAAIqC,iBAAiB,MAAA,EAAQ;AAG3BF,IAAAA,WAAAA,GAAcL,UAAAA;AAAAA,EAChB;AAEA,EAAA,IACEO,YAAAA,KAAiB,KAAA,IACjBD,cAAAA,IACAnC,YAAAA,CAAamC,cAAc,CAAA,EAC3B;AACA,IAAA,MAAMkB,WAAAA,GAAuCC,qBAAAA;AAG7CnB,IAAAA,cAAAA,GAAiBkB,WAAAA,CAAYnB,eAAekB,cAAc,CAAA;AAAA,EAC5D;AAEA,EAAA;AAEE,IAAA,MAAMzD,cAAc4D,cAAAA,CAAe;AAAA,MACjCC,cAAAA,EAAgB;AAAA,QAAE3D,OAAAA,EAASD,gBAAAA;AAAAA,QAAkBG,OAAAA,EAAS8B;AAAAA,OAAW;AAAA,MACjE4B,YAAAA,EAAcd,gBAAAA;AAAAA,MACdS;AAAAA,KACD,CAAA;AACD,IAAA,IAAIzD,WAAAA,EAAa;AACfuD,MAAAA,YAAAA,GAAe1D,gBAAAA,CAAiB;AAAA,QAC9BC,GAAAA;AAAAA,QACAE,WAAAA;AAAAA,QACAD;AAAAA,OACD,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA;AAEE,IAAA,MAAMC,cAAc4D,cAAAA,CAAe;AAAA,MACjCC,cAAAA,EAAgB;AAAA,QAAE3D,OAAAA,EAASsC,cAAAA;AAAAA,QAAgBpC,OAAAA,EAASmC;AAAAA,OAAY;AAAA,MAChEuB,YAAAA,EAAcZ,cAAAA;AAAAA,MACdO;AAAAA,KACD,CAAA;AACD,IAAA,IAAIzD,WAAAA,EAAa;AACfwD,MAAAA,UAAAA,GAAa3D,gBAAAA,CAAiB;AAAA,QAC5BC,GAAAA;AAAAA,QACAE,WAAAA;AAAAA,QACAD;AAAAA,OACD,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,IAAIwD,YAAAA,IAAgBC,UAAAA,IAAcO,aAAAA,CAAcR,YAAAA,EAAcC,UAAU,CAAA,EAAG;AAEzEA,IAAAA,UAAAA,GAAaQ,MAAAA;AAAAA,EACf;AAEA,EAAA,IACE,CAACT,YAAAA,IACD,CAACtD,gBAAAA,IACDiC,UAAAA,IACA+B,mBAAmB/B,UAAU,CAAA,IAC7BA,UAAAA,KAAec,gBAAAA,CAAiB5C,OAAAA,EAChC;AAEA,IAAA,MAAM,CAAC8D,gBAAgB,CAAA,GAAIC,oBAAAA,CAAqBjC,YAAYO,YAAY,CAAA;AAExEc,IAAAA,YAAAA,GAAeW,gBAAAA;AAAAA,EACjB;AAEA,EAAA,IACE,CAACV,UAAAA,IACD,CAAChB,cAAAA,IACDD,WAAAA,IACA0B,mBAAmB1B,WAAW,CAAA,IAC9BA,WAAAA,KAAgBW,cAAAA,EAAgB9C,OAAAA,EAChC;AAEA,IAAA,MAAM,GAAGgE,cAAc,CAAA,GAAID,oBAAAA,CAAqB5B,aAAaE,YAAY,CAAA;AAEzEe,IAAAA,UAAAA,GAAaY,cAAAA;AAAAA,EACf;AAEA,EAAA,IAAIb,YAAAA,EAAc;AAChB,IAAA,MAAMc,mBAAAA,GACJC,wBAAAA,CAAyB7B,YAAY,CAAA,CAAEQ,aAAAA;AACzClD,IAAAA,GAAAA,CAAIsE,qBAAqBd,YAAY,CAAA;AAAA,EACvC;AACA,EAAA,IAAIC,UAAAA,EAAY;AACd,IAAA,MAAMe,iBAAAA,GACJD,wBAAAA,CAAyB7B,YAAY,CAAA,CAAEU,WAAAA;AACzCpD,IAAAA,GAAAA,CAAIwE,mBAAmBf,UAAU,CAAA;AAAA,EACnC;AAEA,EAAA,IAAI7B,OAAOM,cAAAA,CAAeN,IAAAA;AAC1B,EAAA,IAAID,WAAAA,CAAYC,IAAI,CAAA,EAAG;AACrB5B,IAAAA,GAAAA,CAAIyE,uBAAuB7C,IAAI,CAAA;AAAA,EACjC,CAAA,MAAO;AAELhC,IAAAA,MAAAA,CAAOiD,KAAK,4CAAA,EAA8C;AAAA,MAAEjB;AAAAA,KAAM,CAAA;AAElEA,IAAAA,IAAAA,GAAO7B,GAAAA,CAAIkB,KAAKyD,YAAY,CAAA;AAAA,EAC9B;AAGA5B,EAAAA,MAAAA,CAAOnB,WAAAA,CAAYC,IAAI,CAAA,EAAG,0BAA0B,CAAA;AAEpD,EAAA,MAAM+C,SAASjC,YAAAA,KAAiB,MAAA;AAChC,EAAA,MAAMkC,YAAAA,GAAelC,YAAAA,KAAiB,OAAA,IAAWA,YAAAA,KAAiB,KAAA;AAElE,EAAA,MAAMmC,cAAAA,GAAiBF,UAAU/C,IAAAA,KAAS,MAAA;AAC1C,EAAA,MAAMkD,aAAAA,GAAgBH,UAAU/C,IAAAA,KAAS,KAAA;AAEzC,EAAA,IACEQ,cACA2C,MAAAA,CAAO3C,UAAU,CAAA,IAAK,CAAA,KACrByC,kBAAkBD,YAAAA,CAAAA,EACnB;AACA,IAAA,MAAMI,iBAAAA,GAAoBC,6BAA6BvC,YAAY,CAAA;AACnE,IAAA,MAAMwC,iBAAAA,GAAoBnF,GAAAA,CAAIkB,IAAAA,CAAK+D,iBAAAA,CAAkBG,IAAI,CAAA;AACzD,IAAA,IAAID,sBAAsB9C,UAAAA,EAAY;AACpCpC,MAAAA,GAAAA,CAAIgF,iBAAAA,CAAkBI,OAAOhD,UAAU,CAAA;AAAA,IACzC;AAAA,EACF;AAEA,EAAA,IAAIC,aAAAA,IAAiB0C,MAAAA,CAAO1C,aAAa,CAAA,IAAK,KAAKyC,aAAAA,EAAe;AAChE,IAAA,MAAMO,qBAAAA,GACJC,iCAAiC5C,YAAY,CAAA;AAC/C,IAAA,MAAM6C,oBAAAA,GAAuBxF,GAAAA,CAAIkB,IAAAA,CAAKoE,qBAAAA,CAAsBF,IAAI,CAAA;AAChE,IAAA,IAAII,yBAAyBlD,aAAAA,EAAe;AAC1CrC,MAAAA,GAAAA,CAAIqF,qBAAAA,CAAsBD,OAAO/C,aAAa,CAAA;AAAA,IAChD;AAAA,EACF;AAEA,EAAA,IAAIK,YAAAA,KAAiB,OAAA,IAAWA,YAAAA,KAAiB,KAAA,EAAO;AACtD,IAAA,IAAIJ,eAAAA,IAAmByC,MAAAA,CAAOzC,eAAe,CAAA,IAAK,CAAA,EAAG;AACnD,MAAA,MAAMkD,uBAAAA,GACJC,+BAA+B/C,YAAY,CAAA;AAC7C,MAAA,MAAMgD,sBAAAA,GAAyB3F,GAAAA,CAAIkB,IAAAA,CAAKuE,uBAAAA,CAAwBL,IAAI,CAAA;AACpE,MAAA,IAAIO,2BAA2BpD,eAAAA,EAAiB;AAC9CtC,QAAAA,GAAAA,CAAIwF,uBAAAA,CAAwBJ,OAAO9C,eAAe,CAAA;AAAA,MACpD;AAAA,IACF;AAEA,IAAA,MAAMqD,aAAAA,GAAgBZ,MAAAA,CAAO7C,cAAAA,CAAeyD,aAAa,CAAA;AACzD,IAAA,IAAIA,aAAAA,KAAkB1B,MAAAA,IAAa,CAAC2B,KAAAA,CAAMD,aAAa,CAAA,EAAG;AACxD,MAAA,MAAME,YAAAA,GAAeC,iCAAiCpD,YAAY,CAAA;AAClE,MAAA,MAAMqD,eAAAA,GAAkBhG,GAAAA,CAAIkB,IAAAA,CAAK4E,YAAY,CAAA;AAE7C,MAAA,IAAIE,oBAAoBJ,aAAAA,EAAe;AACrCK,QAAAA,OAAAA,CAAQzD,GAAAA,CAAI,oCAAoCoD,aAAa,CAAA;AAC7D3F,QAAAA,GAAAA,CAAI6F,cAAcF,aAAa,CAAA;AAAA,MACjC;AAAA,IACF;AAAA,EACF;AACF,CAAC,CAAA;AAED,SAAS9B,cAAAA,CAAe;AAAA,EACtBC,cAAAA;AAAAA,EACAC,YAAAA;AAAAA,EACAL;AAKF,CAAA,EAAgE;AAC9D,EAAA,IAAI,CAACI,eAAe3D,OAAAA,EAAS;AAE7B,EAAA,IAAI,CAAC8F,SAAAA,CAAUnC,cAAAA,CAAe3D,OAAO,CAAA,EAAG;AACtCP,IAAAA,MAAAA,CAAOiD,KAAK,kCAAA,EAAoC;AAAA,MAC9C1C,SAAS2D,cAAAA,CAAe3D;AAAAA,KACzB,CAAA;AACD,IAAA;AAAA,EACF;AAEA,EAAA,MAAME,OAAAA,GAAUyD,eAAezD,OAAAA,IAAWqD,cAAAA;AAG1C,EAAA,IAAI,CAACQ,kBAAAA,CAAmB7D,OAAO,CAAA,EAAG;AAChCT,IAAAA,MAAAA,CAAOiD,KAAK,8BAAA,EAAgC;AAAA,MAAExC;AAAAA,KAAS,CAAA;AACvD,IAAA;AAAA,EACF;AAEA,EAAA,IACE0D,YAAAA,IACAC,cAAcD,YAAAA,EAAc;AAAA,IAC1B5D,SAAS2D,cAAAA,CAAe3D,OAAAA;AAAAA,IACxBE;AAAAA,GACD,CAAA,EACD;AAEA,IAAA;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IAAEF,SAAS2D,cAAAA,CAAe3D,OAAAA;AAAAA,IAASE;AAAAA,GAAQ;AACpD;AAEO,SAAA6F,2BAAAA,GAAA;AACLC,EAAAA,OAAAA,CAAQtE,wBAAwB,CAAA;AAAC;AAG5B,SAAAuE,yBAAAC,EAAAA,EAAA;AAAA,EAAA,MAAAC,CAAAA,GAAAC,cAAA,EAAA,CAAA;AAAA,EAAA,IAAAC,EAAAA;AAAA,EAAA,IAAAF,CAAAA,QAAAD,EAAAA,EAAA;AAAkCG,IAAAA,EAAAA,GAAAH,EAAAA,KAAApC,MAAAA,GAAA,EAWpB,GAXoBoC,EAAAA;AAWnBC,IAAAA,CAAAA,MAAAD,EAAAA;AAAAC,IAAAA,CAAAA,MAAAE,EAAAA;AAAAA,EAAA,CAAA,MAAA;AAAAA,IAAAA,EAAAA,GAAAF,EAAA,CAAA,CAAA;AAAA,EAAA;AAXmB,EAAA,MAAA;AAAA,IAAA5D,YAAAA;AAAAA,IAAAxC,gBAAAA;AAAAA,IAAAiC,UAAAA;AAAAA,IAAAM,cAAAA;AAAAA,IAAAD,WAAAA;AAAAA,IAAAJ,UAAAA;AAAAA,IAAAC,aAAAA;AAAAA,IAAAT,IAAAA;AAAAA,IAAAU,eAAAA;AAAAA,IAAAqD;AAAAA,GAAA,GAAAa,EAAAA;AAYvC,EAAA,MAAAC,iBAAAA,GAA0BC,WAAWhH,kBAAkB,CAAA;AAAE,EAAA,IAAAiH,EAAAA;AAAA,EAAA,IAAAC,EAAAA;AAAA,EAAA,IAAAN,EAAA,CAAA,CAAA,KAAA9D,eAAA8D,CAAAA,CAAA,CAAA,MAAAX,aAAAA,IAAAW,CAAAA,QAAAhE,eAAAA,IAAAgE,EAAA,CAAA,CAAA,KAAAjE,iBAAAiE,CAAAA,CAAA,CAAA,MAAA5D,YAAAA,IAAA4D,CAAAA,CAAA,CAAA,CAAA,KAAAlE,UAAAA,IAAAkE,EAAA,CAAA,CAAA,KAAAG,qBAAAH,CAAAA,QAAA1E,IAAAA,IAAA0E,CAAAA,CAAA,EAAA,CAAA,KAAAnE,UAAAA,IAAAmE,EAAA,EAAA,CAAA,KAAApG,oBAAAoG,CAAAA,SAAA7D,cAAAA,EAAA;AAIzCkE,IAAAA,EAAAA,GAAAA,MAAA;AACdF,MAAAA,iBAAAA,CAAkB;AAAA,QAAA/D,YAAAA;AAAAA,QAAAxC,gBAAAA;AAAAA,QAAAiC,UAAAA;AAAAA,QAAAM,cAAAA;AAAAA,QAAAD,WAAAA;AAAAA,QAAAJ,UAAAA;AAAAA,QAAAC,aAAAA;AAAAA,QAAAT,IAAAA;AAAAA,QAAAU,eAAAA;AAAAA,QAAAqD;AAAAA,OAWjB,CAAA;AAAA,IAAC,CAAA;AACDiB,IAAAA,EAAAA,GAAA,CACDlE,YAAAA,EACAxC,gBAAAA,EACAiC,UAAAA,EACAM,cAAAA,EACAD,WAAAA,EACAJ,UAAAA,EACAqE,iBAAAA,EACApE,aAAAA,EACAT,IAAAA,EACAU,eAAAA,EACAqD,aAAa,CAAA;AACdW,IAAAA,CAAAA,MAAA9D,WAAAA;AAAA8D,IAAAA,CAAAA,MAAAX,aAAAA;AAAAW,IAAAA,CAAAA,MAAAhE,eAAAA;AAAAgE,IAAAA,CAAAA,MAAAjE,aAAAA;AAAAiE,IAAAA,CAAAA,MAAA5D,YAAAA;AAAA4D,IAAAA,CAAAA,MAAAlE,UAAAA;AAAAkE,IAAAA,CAAAA,MAAAG,iBAAAA;AAAAH,IAAAA,CAAAA,MAAA1E,IAAAA;AAAA0E,IAAAA,CAAAA,OAAAnE,UAAAA;AAAAmE,IAAAA,CAAAA,OAAApG,gBAAAA;AAAAoG,IAAAA,CAAAA,OAAA7D,cAAAA;AAAA6D,IAAAA,CAAAA,OAAAK,EAAAA;AAAAL,IAAAA,CAAAA,OAAAM,EAAAA;AAAAA,EAAA,CAAA,MAAA;AAAAD,IAAAA,EAAAA,GAAAL,EAAA,EAAA,CAAA;AAAAM,IAAAA,EAAAA,GAAAN,EAAA,EAAA,CAAA;AAAA,EAAA;AAzBDO,EAAAA,eAAAA,CAAgBF,IAabC,EAYF,CAAA;AAAC;;;;"}
1
+ {"version":3,"file":"setTokenByAddressAtom.js","sources":["../../../../src/core/inputs/state/setTokenByAddressAtom.ts"],"sourcesContent":["import { atom, useAtom, useSetAtom, type Setter } from \"jotai\";\nimport { atomEffect, type Effect } from \"jotai-effect\";\nimport { isAddress, type Address } from \"viem\";\nimport { isETHaddress } from \"@/tokens/utils/eth\";\nimport { nativeTokensByChainId } from \"@/tokens/constructor\";\nimport { fromListsAtom } from \"@/tokens/state/fromListsAtom\";\nimport {\n autoImportedTokensAtom,\n importedTokensAtom,\n} from \"@/tokens/state/importedTokensAtom\";\nimport type { Token } from \"@/tokens/state/types\";\nimport { useLayoutEffect } from \"react\";\nimport { isSupportedChainId } from \"@/lib/web3/wagmi/utils\";\nimport { areTokensSame } from \"@/tokens/utils/areTokensSame\";\nimport type { SupportedChainId } from \"@/lib/web3/wagmi/types\";\nimport { pickDefaultTokenPair } from \"@/tokens/defaultTokens\";\nimport { tradeModeAtom, userTradeModeAtom } from \"@/core/state/tradeModeAtom\";\nimport {\n sideToInputType,\n tradeModeToPayAmountUnitAtom,\n tradeModeToReceiveAmountUnitAtom,\n tradeModeToSetTokenAtoms,\n tradeModeToTimeUnitAtom,\n tradeModeToTokenAtoms,\n} from \"./common\";\nimport { wrappedNativeCurrency } from \"@/lib/constants/weth\";\nimport { autoAddImportedTokenAtom } from \"@/tokens/state/addImportedTokenAtom\";\nimport { getLogger } from \"@/core/logger\";\nimport { assert } from \"ts-essentials\";\nimport { bridgeInfoAtom } from \"@/hooks/swap/prices/delta/queries/useBridgeInfo\";\nimport { isTradeMode } from \"@/lib/tradeMode\";\nimport { enabledTradeModesAtom } from \"@/core/state/enabledTradeModesAtom\";\nimport type { FormInputProps } from \"./types\";\nimport type { SwapSideUnion } from \"@velora-dex/sdk\";\nimport { swapSideAtom } from \"@/components/widget/SwapModeSwitcher/state/swapSideAtom\";\nimport { currentSwapInputAtom } from \"@/core/state/currentSwapInputAtom\";\nimport { getClosestTimeUnit } from \"@/core/limit/state/utils\";\n\nexport const formInputPropsAtom = atom<FormInputProps>({});\n\n// in case formInputPros passed to Widget are not exactly expected types\ntype RelaxedFormInputProps = {\n [K in keyof FormInputProps]?: NonNullable<FormInputProps[K]> extends string\n ? string\n : NonNullable<FormInputProps[K]> extends number\n ? number\n : FormInputProps[K];\n};\n\nconst logger = getLogger(\"FormInputProps\");\n\ntype GetterWithPeek = Parameters<Effect>[0];\n\ntype FindTokenAtomsInput = {\n tokenToFind: { address: Address; network: SupportedChainId };\n get: GetterWithPeek;\n set: Setter;\n};\n\nfunction findTokenInAtoms({\n get,\n set,\n tokenToFind,\n}: FindTokenAtomsInput): Token | undefined {\n const tokenFromAddress = tokenToFind.address;\n const chainId = tokenToFind.network;\n\n if (isETHaddress(tokenFromAddress)) {\n // if tokenFrom is ETH, set the native token for tokenFrom Input\n const nativeToken = nativeTokensByChainId[chainId];\n return nativeToken;\n }\n\n const tokenFromLowercase = tokenFromAddress.toLowerCase();\n\n // find the token from the token Lists for the srcChainId,\n // and retry to find the token when allTokens are updated (token lists loaded)\n const tokensMap = get(fromListsAtom).listByChainId[chainId]?.addressMap;\n const tokenFromLists = tokensMap?.[tokenFromLowercase];\n if (tokenFromLists) {\n return tokenFromLists;\n }\n\n // find the token from the imported tokens,\n // don't retry if user imports more tokens during the session\n const importedTokens = get.peek(importedTokensAtom);\n const importedToken = importedTokens[chainId]?.find(\n (token) => token.address.toLowerCase() === tokenFromLowercase\n );\n if (importedToken) {\n return importedToken;\n }\n\n // subscribe to auto-imported tokens, which will be added to only when tokenAddress prop is supplied from outside the widget\n const autoImportedTokens = get(autoImportedTokensAtom);\n // looking through auto-imported tokens isn't strictly necessary because importedTokens atom is updated together with autoImportedTokens atom,\n // except for consistency, and so that we don't have to subscribe to importedTokens atom that would retrigger formProps matching on manual token import\n const autoImportedToken = autoImportedTokens.find(\n (token) =>\n token.address.toLowerCase() === tokenFromLowercase &&\n token.network === chainId\n );\n if (autoImportedToken) {\n return autoImportedToken;\n }\n\n logger.info(\n \"token not available in widget. Will attempt to import from chain\",\n {\n address: tokenFromAddress,\n chainId,\n }\n );\n\n // trigger Token fetch and eventual import when tokenFromAddress is not found in available token lists and atoms\n set(autoAddImportedTokenAtom, { address: tokenFromAddress, chainId });\n}\n\nfunction isValidSide(side: string | undefined): side is SwapSideUnion {\n return side === \"BUY\" || side === \"SELL\";\n}\n\nconst formInputPropsEffectAtom = atomEffect((get, set) => {\n // subscribe to bridgeInfoAtom to have up-to-date available crosses\n // and retry token finding each time when bridgeInfo changes\n get(bridgeInfoAtom);\n\n const enabledTradeModes = get(enabledTradeModesAtom);\n const formInputProps: RelaxedFormInputProps = get(formInputPropsAtom);\n const { tokenFromAddress, srcChainId, sendAmount, receiveAmount } =\n formInputProps;\n\n logger.log(\"using external props to set Widget form input\", formInputProps);\n\n let destChainId = formInputProps.destChainId;\n let tokenToAddress = formInputProps.tokenToAddress;\n let selectedForm = formInputProps.selectedForm || \"swap\";\n if (!isTradeMode(selectedForm) || !enabledTradeModes.includes(selectedForm)) {\n // guard against invalid props passed through from outside the Widget\n logger.warn(\"invalid or disabled selectedForm provided\", { selectedForm });\n // fallback to first enabled trade mode from the config\n selectedForm = enabledTradeModes[0];\n }\n\n // necessary for type safety\n assert(isTradeMode(selectedForm), \"selectedForm must be a valid trade mode\");\n\n const formAtoms = tradeModeToTokenAtoms[selectedForm];\n const currentTokenFrom = get.peek(formAtoms.tokenFromAtom);\n const currentTokenTo = get.peek(formAtoms.tokenToAtom);\n\n const currentTradeMode = get.peek(tradeModeAtom);\n\n if (currentTradeMode !== selectedForm) {\n set(userTradeModeAtom, selectedForm);\n }\n\n let newTokenFrom: Token | undefined;\n let newTokenTo: Token | undefined;\n\n // if chain isn't given in props, match current srcChainId\n const defaultChainId = currentTokenFrom.network;\n\n if (selectedForm !== \"swap\") {\n // non-swap forms are single-chain only,\n // force destChainId = srcChainId\n destChainId = srcChainId;\n }\n\n if (\n selectedForm === \"otc\" &&\n tokenToAddress &&\n isETHaddress(tokenToAddress)\n ) {\n const wethMapping: Record<number, Address> = wrappedNativeCurrency;\n // OTC Orders don't support ETH as tokenTo=takerAsset,\n // more logical to use WETH instead of no token at all\n tokenToAddress = wethMapping[destChainId || defaultChainId];\n }\n\n {\n // match tokenFromAddress and srcChainId to a new tokenFrom to select\n const tokenToFind = getTokenToFind({\n tokenFromProps: { address: tokenFromAddress, network: srcChainId },\n currentToken: currentTokenFrom,\n defaultChainId,\n });\n if (tokenToFind) {\n newTokenFrom = findTokenInAtoms({\n get,\n tokenToFind,\n set,\n });\n }\n }\n\n {\n // match tokenToAddress and destChainId to a new tokenTo to select\n const tokenToFind = getTokenToFind({\n tokenFromProps: { address: tokenToAddress, network: destChainId },\n currentToken: currentTokenTo,\n defaultChainId,\n });\n if (tokenToFind) {\n newTokenTo = findTokenInAtoms({\n get,\n tokenToFind,\n set,\n });\n }\n }\n\n if (newTokenFrom && newTokenTo && areTokensSame(newTokenFrom, newTokenTo)) {\n // if tokens are the same, skip tokenTo\n newTokenTo = undefined;\n }\n\n if (\n !newTokenFrom &&\n !tokenFromAddress &&\n srcChainId &&\n isSupportedChainId(srcChainId) &&\n srcChainId !== currentTokenFrom.network\n ) {\n // no tokenAddress given, but chainId is provided and different from current\n const [defaultTokenFrom] = pickDefaultTokenPair(srcChainId, selectedForm);\n // set default token for the chain\n newTokenFrom = defaultTokenFrom;\n }\n\n if (\n !newTokenTo &&\n !tokenToAddress &&\n destChainId &&\n isSupportedChainId(destChainId) &&\n destChainId !== currentTokenTo?.network\n ) {\n // no tokenAddress given, but chainId is provided and different from current\n const [, defaultTokenTo] = pickDefaultTokenPair(destChainId, selectedForm);\n // set default token for the chain\n newTokenTo = defaultTokenTo;\n }\n\n if (newTokenFrom) {\n const selectTokenFromAtom =\n tradeModeToSetTokenAtoms[selectedForm].tokenFromAtom;\n set(selectTokenFromAtom, newTokenFrom);\n }\n if (newTokenTo) {\n const selectTokenToAtom =\n tradeModeToSetTokenAtoms[selectedForm].tokenToAtom;\n set(selectTokenToAtom, newTokenTo);\n }\n\n let side = formInputProps.side;\n if (isValidSide(side)) {\n set(currentSwapInputAtom, sideToInputType[side]);\n } else {\n if (side) {\n // guard against invalid props passed through from outside the Widget\n logger.warn(\"invalid side provided, must be BUY or SELL\", { side });\n }\n if (selectedForm === \"swap\") {\n if (sendAmount && !receiveAmount) {\n side = \"SELL\"; // sendAmount is given and receiveAmount isn't -> SELL\n } else if (receiveAmount && !sendAmount) {\n side = \"BUY\"; // receiveAmount is given and sendAmount isn't -> BUY\n } else {\n // fallback to current swap side if both or none amounts are given\n side = get.peek(swapSideAtom);\n }\n } else {\n // fallback to current swap side for non-swap forms\n side = get.peek(swapSideAtom);\n }\n }\n\n // necessary for type safety\n assert(isValidSide(side), \"side must be BUY or SELL\");\n\n const isSwap = selectedForm === \"swap\";\n const isLimitOrOtc = selectedForm === \"limit\" || selectedForm === \"otc\";\n\n const isSwapWithSell = isSwap && side === \"SELL\";\n const isSwapWithBuy = isSwap && side === \"BUY\";\n\n if (\n sendAmount &&\n Number(sendAmount) >= 0 &&\n (isSwapWithSell || isLimitOrOtc)\n ) {\n const formPayAmountAtom = tradeModeToPayAmountUnitAtom[selectedForm];\n const currentSendAmount = get.peek(formPayAmountAtom.read);\n if (currentSendAmount !== sendAmount) {\n set(formPayAmountAtom.write, sendAmount);\n }\n }\n\n if (\n receiveAmount &&\n Number(receiveAmount) >= 0 &&\n (isSwapWithBuy || isLimitOrOtc)\n ) {\n const formReceiveAmountAtom =\n tradeModeToReceiveAmountUnitAtom[selectedForm];\n const currentReceiveAmount = get.peek(formReceiveAmountAtom.read);\n if (currentReceiveAmount !== receiveAmount) {\n set(formReceiveAmountAtom.write, receiveAmount);\n }\n }\n\n if (selectedForm === \"limit\" || selectedForm === \"otc\") {\n const orderDeadline = Number(formInputProps.orderDeadline);\n if (orderDeadline !== undefined && !isNaN(orderDeadline)) {\n const timeUnitAtom = tradeModeToTimeUnitAtom[selectedForm];\n const currentTimeUnit = get.peek(timeUnitAtom);\n\n if (currentTimeUnit.timestamp !== orderDeadline) {\n set(timeUnitAtom, {\n // set closest time unit for better UX\n ...getClosestTimeUnit(orderDeadline),\n // set exact timestamp\n timestamp: orderDeadline,\n });\n }\n }\n }\n});\n\nfunction getTokenToFind({\n tokenFromProps,\n currentToken,\n defaultChainId,\n}: {\n tokenFromProps: { address?: string; network?: number };\n currentToken?: Token;\n defaultChainId: SupportedChainId;\n}): { address: Address; network: SupportedChainId } | undefined {\n if (!tokenFromProps.address) return;\n // guard against malformed addresses passed through props\n if (!isAddress(tokenFromProps.address)) {\n logger.warn(\"malformed token address provided\", {\n address: tokenFromProps.address,\n });\n return;\n }\n\n const network = tokenFromProps.network || defaultChainId;\n\n // unsupported chainId provided, can't select this Token\n if (!isSupportedChainId(network)) {\n logger.warn(\"unsupported chainId provided\", { network });\n return;\n }\n\n if (\n currentToken &&\n areTokensSame(currentToken, {\n address: tokenFromProps.address,\n network,\n })\n ) {\n // same token already there\n return;\n }\n\n return { address: tokenFromProps.address, network };\n}\n\nexport function useActivateFormInputEffects() {\n useAtom(formInputPropsEffectAtom);\n}\n\nexport function useSetFormInputFromProps({\n selectedForm,\n tokenFromAddress,\n srcChainId,\n tokenToAddress,\n destChainId,\n sendAmount,\n receiveAmount,\n side,\n orderDeadline,\n}: FormInputProps = {}) {\n const setFormInputProps = useSetAtom(formInputPropsAtom);\n\n // match props together as they are supplied together from outside the Widget,\n // on any one prop change, the whole form input props are updated as long as they are passed together to the Widget\n useLayoutEffect(() => {\n setFormInputProps({\n selectedForm,\n tokenFromAddress,\n srcChainId,\n tokenToAddress,\n destChainId,\n sendAmount,\n receiveAmount,\n side,\n orderDeadline,\n });\n }, [\n selectedForm,\n tokenFromAddress,\n srcChainId,\n tokenToAddress,\n destChainId,\n sendAmount,\n setFormInputProps,\n receiveAmount,\n side,\n orderDeadline,\n ]);\n}\n"],"names":["formInputPropsAtom","atom","logger","getLogger","findTokenInAtoms","get","set","tokenToFind","tokenFromAddress","address","chainId","network","isETHaddress","nativeToken","nativeTokensByChainId","tokenFromLowercase","toLowerCase","tokensMap","fromListsAtom","listByChainId","addressMap","tokenFromLists","importedTokens","peek","importedTokensAtom","importedToken","find","token","autoImportedTokens","autoImportedTokensAtom","autoImportedToken","info","autoAddImportedTokenAtom","isValidSide","side","formInputPropsEffectAtom","atomEffect","bridgeInfoAtom","enabledTradeModes","enabledTradeModesAtom","formInputProps","srcChainId","sendAmount","receiveAmount","log","destChainId","tokenToAddress","selectedForm","isTradeMode","includes","warn","assert","formAtoms","tradeModeToTokenAtoms","currentTokenFrom","tokenFromAtom","currentTokenTo","tokenToAtom","currentTradeMode","tradeModeAtom","userTradeModeAtom","newTokenFrom","newTokenTo","defaultChainId","wethMapping","wrappedNativeCurrency","getTokenToFind","tokenFromProps","currentToken","areTokensSame","undefined","isSupportedChainId","defaultTokenFrom","pickDefaultTokenPair","defaultTokenTo","selectTokenFromAtom","tradeModeToSetTokenAtoms","selectTokenToAtom","currentSwapInputAtom","sideToInputType","swapSideAtom","isSwap","isLimitOrOtc","isSwapWithSell","isSwapWithBuy","Number","formPayAmountAtom","tradeModeToPayAmountUnitAtom","currentSendAmount","read","write","formReceiveAmountAtom","tradeModeToReceiveAmountUnitAtom","currentReceiveAmount","orderDeadline","isNaN","timeUnitAtom","tradeModeToTimeUnitAtom","currentTimeUnit","timestamp","getClosestTimeUnit","isAddress","useActivateFormInputEffects","useAtom","useSetFormInputFromProps","t0","$","_c","t1","setFormInputProps","useSetAtom","t2","t3","useLayoutEffect"],"mappings":"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"}
@@ -13,12 +13,10 @@ export type FormInputProps = {
13
13
  destChainId?: SupportedChainId;
14
14
  /** @description The amount of the pay input, functional when selectedForm is "limit" or "otc", or when selectedForm is "swap" with side = "SELL" */
15
15
  sendAmount?: string;
16
- /** @description The amount of the receive input, only functional together with selectedForm = "swap" and side = "BUY" */
16
+ /** @description The amount of the receive input, functional when selectedForm is "limit" or "otc", or when selectedForm is "swap" with side = "BUY" */
17
17
  receiveAmount?: string;
18
18
  /** @description The side of the swap, only functional together with selectedForm = "swap" */
19
19
  side?: SwapSideUnion;
20
- /** @description The price rate amount, only functional together with selectedForm = "limit" or "otc" */
21
- priceRateAmount?: string;
22
20
  /** @description The order deadline in seconds, only functional together with selectedForm = "limit" or "otc" */
23
21
  orderDeadline?: string;
24
22
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/inputs/state/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,MAAM,MAAM,cAAc,GAAG;IAC3B,4DAA4D;IAC5D,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mGAAmG;IACnG,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kGAAkG;IAClG,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,oJAAoJ;IACpJ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yHAAyH;IACzH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6FAA6F;IAC7F,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,wGAAwG;IACxG,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gHAAgH;IAChH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/inputs/state/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC,MAAM,MAAM,cAAc,GAAG;IAC3B,4DAA4D;IAC5D,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,mGAAmG;IACnG,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kGAAkG;IAClG,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,oJAAoJ;IACpJ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uJAAuJ;IACvJ,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6FAA6F;IAC7F,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,gHAAgH;IAChH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC"}
@@ -5,11 +5,15 @@ export type TimeUnitObject = {
5
5
  label: TimeUnit;
6
6
  value: number;
7
7
  };
8
- export declare const timeUnitAtom: import('jotai').WritableAtom<TimeUnitObject, [newTimeUnit: SetStateAction<TimeUnitObject>, resetDeadlineFromProps?: boolean | undefined], void> & {
9
- init: TimeUnitObject;
8
+ export type TimeUnitState = TimeUnitObject & {
9
+ timestamp: number;
10
10
  };
11
- export declare const deadlineFromPropsAtom: import('jotai').WritableAtom<number | undefined, [number | undefined], void> & {
12
- init: number | undefined;
11
+ export declare const timeUnitAtom: import('jotai').WritableAtom<TimeUnitState, [SetStateAction<{
12
+ label: TimeUnit;
13
+ value: number;
14
+ timestamp?: number | undefined;
15
+ }>], void> & {
16
+ init: TimeUnitState;
13
17
  };
14
18
  export declare const deadlineAtom: import('jotai').Atom<number>;
15
19
  export declare const useLimitDeadline: () => number;
@@ -1 +1 @@
1
- {"version":3,"file":"deadlineAtom.d.ts","sourceRoot":"","sources":["../../../../src/core/limit/state/deadlineAtom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAgC,SAAS,EAAE,MAAM,aAAa,CAAC;AAGtE,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AAE3D,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,YAAY;;CAiBvB,CAAC;AAEH,eAAO,MAAM,qBAAqB;;CAmBjC,CAAC;AAEF,eAAO,MAAM,YAAY,8BAiBvB,CAAC;AAEH,eAAO,MAAM,gBAAgB,cAE5B,CAAC"}
1
+ {"version":3,"file":"deadlineAtom.d.ts","sourceRoot":"","sources":["../../../../src/core/limit/state/deadlineAtom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAIL,SAAS,EACV,MAAM,aAAa,CAAC;AAIrB,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;AAE3D,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,cAAc,GAAG;IAC3C,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,YAAY;WARhB,QAAQ;WACR,MAAM;;;;CAkCb,CAAC;AAEH,eAAO,MAAM,YAAY,8BAA6C,CAAC;AAEvE,eAAO,MAAM,gBAAgB,cAE5B,CAAC"}
@@ -1,41 +1,25 @@
1
1
  import { atom, useAtomValue } from 'jotai';
2
- import { defaultTimeUnit, minTimeUnit } from './constants.js';
3
- import { getClosestTimeUnit, timeUnitToSeconds } from './utils.js';
2
+ import { neverTimeUnit, minTimeUnit, defaultTimeUnit } from './constants.js';
3
+ import { getTimeUnitState } from './utils.js';
4
4
 
5
- const timeUnitAtom = atom(defaultTimeUnit, (get, set, newTimeUnit, resetDeadlineFromProps) => {
6
- const updatedTimeUnit = typeof newTimeUnit === "function" ? newTimeUnit(get(timeUnitAtom)) : newTimeUnit;
7
- set(timeUnitAtom, updatedTimeUnit);
8
- if (resetDeadlineFromProps) {
9
- set(deadlineFromPropsAtom, void 0);
5
+ const timeUnitAtom = atom(getTimeUnitState(defaultTimeUnit), (get, set, _newState) => {
6
+ const newState = typeof _newState === "function" ? _newState(get(timeUnitAtom)) : _newState;
7
+ let stateToSet = getTimeUnitState(newState);
8
+ const minTimeUnitState = getTimeUnitState(minTimeUnit);
9
+ const isTimestampInvalid = (
10
+ // Limit orders cannot have 0 deadline
11
+ stateToSet.timestamp <= 0 || stateToSet.timestamp > 0 && stateToSet.timestamp < minTimeUnitState.timestamp
12
+ );
13
+ const isUnitInvalid = stateToSet.label === neverTimeUnit.label || stateToSet.label === minTimeUnit.label && stateToSet.value < minTimeUnitState.value;
14
+ if (isTimestampInvalid || isUnitInvalid) {
15
+ stateToSet = minTimeUnitState;
10
16
  }
17
+ set(timeUnitAtom, stateToSet);
11
18
  });
12
- const deadlineFromPropsAtom = atom(
13
- void 0,
14
- // timestamp in seconds
15
- (get, set, newDeadline) => {
16
- set(deadlineFromPropsAtom, newDeadline);
17
- if (newDeadline === void 0) return;
18
- const currentDeadlineTimeUnit = get(timeUnitAtom);
19
- const newDeadlineTimeUnit = getClosestTimeUnit(newDeadline);
20
- if (currentDeadlineTimeUnit.label !== newDeadlineTimeUnit.label || currentDeadlineTimeUnit.value !== newDeadlineTimeUnit.value) {
21
- set(timeUnitAtom, newDeadlineTimeUnit, false);
22
- }
23
- }
24
- );
25
- const deadlineAtom = atom((get) => {
26
- const deadlineFromProps = get(deadlineFromPropsAtom);
27
- if (deadlineFromProps) {
28
- return deadlineFromProps;
29
- }
30
- let timeUnit = get(timeUnitAtom);
31
- if (timeUnit.label === minTimeUnit.label && timeUnit.value < minTimeUnit.value) {
32
- timeUnit = minTimeUnit;
33
- }
34
- return Math.floor(Date.now() / 1e3 + timeUnitToSeconds(timeUnit));
35
- });
19
+ const deadlineAtom = atom((get) => get(timeUnitAtom).timestamp);
36
20
  const useLimitDeadline = () => {
37
21
  return useAtomValue(deadlineAtom);
38
22
  };
39
23
 
40
- export { deadlineAtom, deadlineFromPropsAtom, timeUnitAtom, useLimitDeadline };
24
+ export { deadlineAtom, timeUnitAtom, useLimitDeadline };
41
25
  //# sourceMappingURL=deadlineAtom.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deadlineAtom.js","sources":["../../../../src/core/limit/state/deadlineAtom.ts"],"sourcesContent":["import { atom, useAtomValue, type SetStateAction } from \"jotai\";\nimport { defaultTimeUnit, minTimeUnit, timeUnits } from \"./constants\";\nimport { getClosestTimeUnit, timeUnitToSeconds } from \"./utils\";\n\nexport type TimeUnit = (typeof timeUnits)[number][\"label\"];\n\nexport type TimeUnitObject = {\n label: TimeUnit;\n value: number;\n};\n\nexport const timeUnitAtom = atom<\n TimeUnitObject,\n [\n newTimeUnit: SetStateAction<TimeUnitObject>,\n resetDeadlineFromProps?: boolean,\n ],\n void\n>(defaultTimeUnit, (get, set, newTimeUnit, resetDeadlineFromProps) => {\n const updatedTimeUnit =\n typeof newTimeUnit === \"function\"\n ? newTimeUnit(get(timeUnitAtom))\n : newTimeUnit;\n set(timeUnitAtom, updatedTimeUnit);\n\n if (resetDeadlineFromProps) {\n set(deadlineFromPropsAtom, undefined);\n }\n});\n\nexport const deadlineFromPropsAtom = atom<\n number | undefined,\n [number | undefined],\n void\n>(\n undefined, // timestamp in seconds\n (get, set, newDeadline) => {\n set(deadlineFromPropsAtom, newDeadline);\n if (newDeadline === undefined) return;\n\n const currentDeadlineTimeUnit = get(timeUnitAtom);\n const newDeadlineTimeUnit = getClosestTimeUnit(newDeadline);\n if (\n currentDeadlineTimeUnit.label !== newDeadlineTimeUnit.label ||\n currentDeadlineTimeUnit.value !== newDeadlineTimeUnit.value\n ) {\n set(timeUnitAtom, newDeadlineTimeUnit, false);\n }\n }\n);\n\nexport const deadlineAtom = atom((get) => {\n const deadlineFromProps = get(deadlineFromPropsAtom);\n\n if (deadlineFromProps) {\n return deadlineFromProps;\n }\n\n let timeUnit = get(timeUnitAtom);\n\n if (\n timeUnit.label === minTimeUnit.label &&\n timeUnit.value < minTimeUnit.value\n ) {\n timeUnit = minTimeUnit;\n }\n\n return Math.floor(Date.now() / 1000 + timeUnitToSeconds(timeUnit));\n});\n\nexport const useLimitDeadline = () => {\n return useAtomValue(deadlineAtom);\n};\n"],"names":["timeUnitAtom","atom","defaultTimeUnit","get","set","newTimeUnit","resetDeadlineFromProps","updatedTimeUnit","deadlineFromPropsAtom","undefined","newDeadline","currentDeadlineTimeUnit","newDeadlineTimeUnit","getClosestTimeUnit","label","value","deadlineAtom","deadlineFromProps","timeUnit","minTimeUnit","Math","floor","Date","now","timeUnitToSeconds","useLimitDeadline","useAtomValue"],"mappings":";;;;AAWO,MAAMA,eAAeC,IAAAA,CAO1BC,eAAAA,EAAiB,CAACC,GAAAA,EAAKC,GAAAA,EAAKC,aAAaC,sBAAAA,KAA2B;AACpE,EAAA,MAAMC,eAAAA,GACJ,OAAOF,WAAAA,KAAgB,UAAA,GACnBA,YAAYF,GAAAA,CAAIH,YAAY,CAAC,CAAA,GAC7BK,WAAAA;AACND,EAAAA,GAAAA,CAAIJ,cAAcO,eAAe,CAAA;AAEjC,EAAA,IAAID,sBAAAA,EAAwB;AAC1BF,IAAAA,GAAAA,CAAII,uBAAuBC,MAAS,CAAA;AAAA,EACtC;AACF,CAAC;AAEM,MAAMD,qBAAAA,GAAwBP,IAAAA;AAAAA,EAKnCQ,MAAAA;AAAAA;AAAAA,EACA,CAACN,GAAAA,EAAKC,GAAAA,EAAKM,WAAAA,KAAgB;AACzBN,IAAAA,GAAAA,CAAII,uBAAuBE,WAAW,CAAA;AACtC,IAAA,IAAIA,gBAAgBD,MAAAA,EAAW;AAE/B,IAAA,MAAME,uBAAAA,GAA0BR,IAAIH,YAAY,CAAA;AAChD,IAAA,MAAMY,mBAAAA,GAAsBC,mBAAmBH,WAAW,CAAA;AAC1D,IAAA,IACEC,wBAAwBG,KAAAA,KAAUF,mBAAAA,CAAoBE,SACtDH,uBAAAA,CAAwBI,KAAAA,KAAUH,oBAAoBG,KAAAA,EACtD;AACAX,MAAAA,GAAAA,CAAIJ,YAAAA,EAAcY,qBAAqB,KAAK,CAAA;AAAA,IAC9C;AAAA,EACF;AACF;AAEO,MAAMI,YAAAA,GAAef,KAAME,CAAAA,GAAAA,KAAQ;AACxC,EAAA,MAAMc,iBAAAA,GAAoBd,IAAIK,qBAAqB,CAAA;AAEnD,EAAA,IAAIS,iBAAAA,EAAmB;AACrB,IAAA,OAAOA,iBAAAA;AAAAA,EACT;AAEA,EAAA,IAAIC,QAAAA,GAAWf,IAAIH,YAAY,CAAA;AAE/B,EAAA,IACEkB,SAASJ,KAAAA,KAAUK,WAAAA,CAAYL,SAC/BI,QAAAA,CAASH,KAAAA,GAAQI,YAAYJ,KAAAA,EAC7B;AACAG,IAAAA,QAAAA,GAAWC,WAAAA;AAAAA,EACb;AAEA,EAAA,OAAOC,IAAAA,CAAKC,MAAMC,IAAAA,CAAKC,GAAAA,KAAQ,GAAA,GAAOC,iBAAAA,CAAkBN,QAAQ,CAAC,CAAA;AACnE,CAAC;AAEM,MAAMO,mBAAmBA,MAAA;AAAA,EAAA,OACvBC,aAAaV,YAAY,CAAA;AAAC;;;;"}
1
+ {"version":3,"file":"deadlineAtom.js","sources":["../../../../src/core/limit/state/deadlineAtom.ts"],"sourcesContent":["import { atom, useAtomValue, type SetStateAction } from \"jotai\";\nimport {\n defaultTimeUnit,\n minTimeUnit,\n neverTimeUnit,\n timeUnits,\n} from \"./constants\";\nimport { getTimeUnitState } from \"./utils\";\nimport type { MarkOptional } from \"ts-essentials\";\n\nexport type TimeUnit = (typeof timeUnits)[number][\"label\"];\n\nexport type TimeUnitObject = {\n label: TimeUnit;\n value: number;\n};\n\nexport type TimeUnitState = TimeUnitObject & {\n timestamp: number;\n};\n\nexport const timeUnitAtom = atom<\n TimeUnitState,\n [SetStateAction<MarkOptional<TimeUnitState, \"timestamp\">>],\n void\n>(getTimeUnitState(defaultTimeUnit), (get, set, _newState) => {\n const newState =\n typeof _newState === \"function\" ? _newState(get(timeUnitAtom)) : _newState;\n\n let stateToSet = getTimeUnitState(newState);\n\n const minTimeUnitState = getTimeUnitState(minTimeUnit);\n\n const isTimestampInvalid =\n // Limit orders cannot have 0 deadline\n stateToSet.timestamp <= 0 ||\n (stateToSet.timestamp > 0 &&\n stateToSet.timestamp < minTimeUnitState.timestamp);\n const isUnitInvalid =\n stateToSet.label === neverTimeUnit.label ||\n (stateToSet.label === minTimeUnit.label &&\n stateToSet.value < minTimeUnitState.value);\n\n if (isTimestampInvalid || isUnitInvalid) {\n stateToSet = minTimeUnitState;\n }\n\n set(timeUnitAtom, stateToSet);\n});\n\nexport const deadlineAtom = atom((get) => get(timeUnitAtom).timestamp);\n\nexport const useLimitDeadline = () => {\n return useAtomValue(deadlineAtom);\n};\n"],"names":["timeUnitAtom","atom","getTimeUnitState","defaultTimeUnit","get","set","_newState","newState","stateToSet","minTimeUnitState","minTimeUnit","isTimestampInvalid","timestamp","isUnitInvalid","label","neverTimeUnit","value","deadlineAtom","useLimitDeadline","useAtomValue"],"mappings":";;;;AAqBO,MAAMA,YAAAA,GAAeC,KAI1BC,gBAAAA,CAAiBC,eAAe,GAAG,CAACC,GAAAA,EAAKC,KAAKC,SAAAA,KAAc;AAC5D,EAAA,MAAMC,QAAAA,GACJ,OAAOD,SAAAA,KAAc,UAAA,GAAaA,UAAUF,GAAAA,CAAIJ,YAAY,CAAC,CAAA,GAAIM,SAAAA;AAEnE,EAAA,IAAIE,UAAAA,GAAaN,iBAAiBK,QAAQ,CAAA;AAE1C,EAAA,MAAME,gBAAAA,GAAmBP,iBAAiBQ,WAAW,CAAA;AAErD,EAAA,MAAMC,kBAAAA;AAAAA;AAAAA,IAEJH,UAAAA,CAAWI,aAAa,CAAA,IACvBJ,UAAAA,CAAWI,YAAY,CAAA,IACtBJ,UAAAA,CAAWI,YAAYH,gBAAAA,CAAiBG;AAAAA,GAAAA;AAC5C,EAAA,MAAMC,aAAAA,GACJL,UAAAA,CAAWM,KAAAA,KAAUC,aAAAA,CAAcD,KAAAA,IAClCN,UAAAA,CAAWM,KAAAA,KAAUJ,WAAAA,CAAYI,KAAAA,IAChCN,UAAAA,CAAWQ,KAAAA,GAAQP,gBAAAA,CAAiBO,KAAAA;AAExC,EAAA,IAAIL,sBAAsBE,aAAAA,EAAe;AACvCL,IAAAA,UAAAA,GAAaC,gBAAAA;AAAAA,EACf;AAEAJ,EAAAA,GAAAA,CAAIL,cAAcQ,UAAU,CAAA;AAC9B,CAAC;AAEM,MAAMS,eAAehB,IAAAA,CAAMG,CAAAA,GAAAA,KAAQA,GAAAA,CAAIJ,YAAY,EAAEY,SAAS;AAE9D,MAAMM,mBAAmBA,MAAA;AAAA,EAAA,OACvBC,aAAaF,YAAY,CAAA;AAAC;;;;"}
@@ -5,13 +5,13 @@ export declare const setLimitPriceRatesAtom: import('jotai').WritableAtom<null,
5
5
  export declare const setLimitPayAmountAtom: import('jotai').WritableAtom<null, [payAmount: string], void> & {
6
6
  init: null;
7
7
  };
8
- export declare const setLimitAmountAtomFromProps: import('jotai').WritableAtom<null, [amount: string], void> & {
8
+ export declare const setLimitPayAmountAtomFromProps: import('jotai').WritableAtom<null, [amount: string], void> & {
9
9
  init: null;
10
10
  };
11
- export declare const setLimitPriceAmountAtomFromProps: import('jotai').WritableAtom<null, [amount: string], void> & {
11
+ export declare const setLimitReceiveAmountAtom: import('jotai').WritableAtom<null, [receiveAmount: string], void> & {
12
12
  init: null;
13
13
  };
14
- export declare const setLimitReceiveAmountAtom: import('jotai').WritableAtom<null, [receiveAmount: string], void> & {
14
+ export declare const setLimitReceiveAmountAtomFromProps: import('jotai').WritableAtom<null, [amount: string], void> & {
15
15
  init: null;
16
16
  };
17
17
  export declare const resetLimitPriceAtom: import('jotai').WritableAtom<null, [priceRates?: PriceRates | undefined], void> & {
@@ -1 +1 @@
1
- {"version":3,"file":"limitInputActionsAtom.d.ts","sourceRoot":"","sources":["../../../../src/core/limit/state/limitInputActionsAtom.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,eAAO,MAAM,sBAAsB;;CAwBlC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;CAyBjC,CAAC;AAEF,eAAO,MAAM,2BAA2B;;CAMvC,CAAC;AAEF,eAAO,MAAM,gCAAgC;;CAM5C,CAAC;AAEF,eAAO,MAAM,yBAAyB;;CA2BrC,CAAC;AAEF,eAAO,MAAM,mBAAmB;;CAiB/B,CAAC;AAEF,eAAO,MAAM,oBAAoB;;CAE/B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;CAGnC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;CAGtC,CAAC"}
1
+ {"version":3,"file":"limitInputActionsAtom.d.ts","sourceRoot":"","sources":["../../../../src/core/limit/state/limitInputActionsAtom.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,eAAO,MAAM,sBAAsB;;CAwBlC,CAAC;AAEF,eAAO,MAAM,qBAAqB;;CAyBjC,CAAC;AAEF,eAAO,MAAM,8BAA8B;;CAM1C,CAAC;AAEF,eAAO,MAAM,yBAAyB;;CA2BrC,CAAC;AAEF,eAAO,MAAM,kCAAkC;;CAM9C,CAAC;AAEF,eAAO,MAAM,mBAAmB;;CAiB/B,CAAC;AAEF,eAAO,MAAM,oBAAoB;;CAE/B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;CAGnC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;CAGtC,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import { atom } from 'jotai';
2
- import { limitReceiveInputAmountAtom, limitPriceRatesAtom, limitPayInputAmountAtom, limitPriceAmountAtom } from './limitInputAmountAtom.js';
2
+ import { limitPayInputAmountAtom, limitPriceRatesAtom, limitPriceAmountAtom, limitReceiveInputAmountAtom } from './limitInputAmountAtom.js';
3
3
  import { isLimitPriceLockedAtom } from './isLimitPriceLockedAtom.js';
4
4
  import Big from 'big.js';
5
5
  import { currentLimitInputAtom } from './currentLimitInputAtom.js';
6
6
  import { isLimitPriceReversedAtom } from './isLimitPriceReversedAtom.js';
7
- import { calculatePayAmount, calculateRates, getUpdatedRates, calculateReceiveAmount } from './utils.js';
7
+ import { calculateReceiveAmount, calculatePayAmount, calculateRates } from './utils.js';
8
8
  import { zeroRates } from './constants.js';
9
9
 
10
10
  const setLimitPriceRatesAtom = atom(null, (get, set, priceRates, recalculateReceive = true) => {
@@ -30,14 +30,10 @@ const setLimitPayAmountAtom = atom(null, (get, set, payAmount) => {
30
30
  const newReceiveAmount = calculateReceiveAmount(payAmount, priceRates, isReversed);
31
31
  set(setLimitReceiveAmountAtom, newReceiveAmount);
32
32
  });
33
- const setLimitAmountAtomFromProps = atom(null, (_, set, amount) => {
33
+ const setLimitPayAmountAtomFromProps = atom(null, (_, set, amount) => {
34
34
  set(currentLimitInputAtom, "from");
35
35
  set(setLimitPayAmountAtom, amount);
36
36
  });
37
- const setLimitPriceAmountAtomFromProps = atom(null, (_, set, amount) => {
38
- const updatedRates = getUpdatedRates(amount, false);
39
- set(setLimitPriceRatesAtom, updatedRates, true);
40
- });
41
37
  const setLimitReceiveAmountAtom = atom(null, (get, set, receiveAmount) => {
42
38
  set(limitReceiveInputAmountAtom, receiveAmount);
43
39
  if (get(currentLimitInputAtom) !== "to") return;
@@ -53,6 +49,10 @@ const setLimitReceiveAmountAtom = atom(null, (get, set, receiveAmount) => {
53
49
  set(setLimitPriceRatesAtom, updatedRates, false);
54
50
  }
55
51
  });
52
+ const setLimitReceiveAmountAtomFromProps = atom(null, (_, set, amount) => {
53
+ set(currentLimitInputAtom, "to");
54
+ set(setLimitReceiveAmountAtom, amount);
55
+ });
56
56
  const resetLimitPriceAtom = atom(null, (get, set, priceRates = zeroRates) => {
57
57
  const isLocked = get(isLimitPriceLockedAtom);
58
58
  if (isLocked) return;
@@ -74,5 +74,5 @@ const toggleLimitPriceReverseAtom = atom(null, (get, set) => {
74
74
  set(isLimitPriceReversedAtom, !isReversed);
75
75
  });
76
76
 
77
- export { resetLimitPriceAtom, setLimitAmountAtomFromProps, setLimitPayAmountAtom, setLimitPriceAmountAtomFromProps, setLimitPriceRatesAtom, setLimitReceiveAmountAtom, toggleLimitPriceLockAtom, toggleLimitPriceReverseAtom, unlockLimitPriceAtom };
77
+ export { resetLimitPriceAtom, setLimitPayAmountAtom, setLimitPayAmountAtomFromProps, setLimitPriceRatesAtom, setLimitReceiveAmountAtom, setLimitReceiveAmountAtomFromProps, toggleLimitPriceLockAtom, toggleLimitPriceReverseAtom, unlockLimitPriceAtom };
78
78
  //# sourceMappingURL=limitInputActionsAtom.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"limitInputActionsAtom.js","sources":["../../../../src/core/limit/state/limitInputActionsAtom.ts"],"sourcesContent":["import { atom } from \"jotai\";\nimport {\n limitPayInputAmountAtom,\n limitReceiveInputAmountAtom,\n limitPriceRatesAtom,\n limitPriceAmountAtom,\n} from \"./limitInputAmountAtom\";\nimport { isLimitPriceLockedAtom } from \"./isLimitPriceLockedAtom\";\nimport Big from \"big.js\";\nimport { currentLimitInputAtom } from \"./currentLimitInputAtom\";\nimport { isLimitPriceReversedAtom } from \"./isLimitPriceReversedAtom\";\nimport {\n calculateReceiveAmount,\n calculatePayAmount,\n calculateRates,\n getUpdatedRates,\n} from \"./utils\";\n\nimport { zeroRates } from \"./constants\";\nimport type { PriceRates } from \"../types\";\n\nexport const setLimitPriceRatesAtom = atom(\n null,\n (get, set, priceRates: PriceRates, recalculateReceive: boolean = true) => {\n const isLocked = get(isLimitPriceLockedAtom);\n // ignore updates if price is locked\n if (isLocked) return;\n\n set(limitPriceRatesAtom, priceRates);\n\n const payAmount = get(limitPayInputAmountAtom);\n const payGtZero = Big(payAmount || \"0\").gt(0);\n\n // ignore updates if pay amount is zero,\n // as it would lead to setLimitReceiveAmountAtom(0) anyway\n if (recalculateReceive && payGtZero) {\n const isReversed = get(isLimitPriceReversedAtom);\n const newReceiveAmount = calculateReceiveAmount(\n payAmount,\n priceRates,\n isReversed\n );\n set(setLimitReceiveAmountAtom, newReceiveAmount);\n }\n }\n);\n\nexport const setLimitPayAmountAtom = atom(\n null,\n (get, set, payAmount: string) => {\n set(limitPayInputAmountAtom, payAmount);\n\n // ignore updates that did not come from pay input\n if (get(currentLimitInputAtom) !== \"from\") return;\n\n const priceRates = get(limitPriceRatesAtom);\n const isReversed = get(isLimitPriceReversedAtom);\n\n const limitPriceAmount = get(limitPriceAmountAtom);\n const limitPriceGtZero = Big(limitPriceAmount || \"0\").gt(0);\n // ignore updates if limit price is zero,\n // as it would lead to setLimitReceiveAmountAtom(0) anyway\n if (!limitPriceGtZero) return;\n\n // update receive amount\n const newReceiveAmount = calculateReceiveAmount(\n payAmount,\n priceRates,\n isReversed\n );\n set(setLimitReceiveAmountAtom, newReceiveAmount);\n }\n);\n\nexport const setLimitAmountAtomFromProps = atom(\n null,\n (_, set, amount: string) => {\n set(currentLimitInputAtom, \"from\"); // unblock pay -> receive sync if it was previously blocked\n set(setLimitPayAmountAtom, amount);\n }\n);\n\nexport const setLimitPriceAmountAtomFromProps = atom(\n null,\n (_, set, amount: string) => {\n const updatedRates = getUpdatedRates(amount, false);\n set(setLimitPriceRatesAtom, updatedRates, true);\n }\n);\n\nexport const setLimitReceiveAmountAtom = atom(\n null,\n (get, set, receiveAmount: string) => {\n set(limitReceiveInputAmountAtom, receiveAmount);\n\n // ignore updates that did not come from receive input\n if (get(currentLimitInputAtom) !== \"to\") return;\n\n const isLocked = get(isLimitPriceLockedAtom);\n const isReversed = get(isLimitPriceReversedAtom);\n\n if (isLocked) {\n // update pay amount if price is locked\n const priceRates = get(limitPriceRatesAtom);\n const newPayAmount = calculatePayAmount(\n receiveAmount,\n priceRates,\n isReversed\n );\n set(setLimitPayAmountAtom, newPayAmount);\n } else {\n // update limit price otherwise\n const payAmount = get(limitPayInputAmountAtom);\n const updatedRates = calculateRates(receiveAmount, payAmount);\n set(setLimitPriceRatesAtom, updatedRates, false);\n }\n }\n);\n\nexport const resetLimitPriceAtom = atom(\n null,\n (get, set, priceRates: PriceRates = zeroRates) => {\n const isLocked = get(isLimitPriceLockedAtom);\n if (isLocked) return;\n\n set(setLimitPriceRatesAtom, priceRates);\n\n const isReversed = get(isLimitPriceReversedAtom);\n const payAmount = get(limitPayInputAmountAtom);\n const newReceiveAmount = calculateReceiveAmount(\n payAmount,\n priceRates,\n isReversed\n );\n set(setLimitReceiveAmountAtom, newReceiveAmount);\n }\n);\n\nexport const unlockLimitPriceAtom = atom(null, (_, set) => {\n set(isLimitPriceLockedAtom, false);\n});\n\nexport const toggleLimitPriceLockAtom = atom(null, (get, set) => {\n const isLocked = get(isLimitPriceLockedAtom);\n set(isLimitPriceLockedAtom, !isLocked);\n});\n\nexport const toggleLimitPriceReverseAtom = atom(null, (get, set) => {\n const isReversed = get(isLimitPriceReversedAtom);\n set(isLimitPriceReversedAtom, !isReversed);\n});\n"],"names":["setLimitPriceRatesAtom","atom","get","set","priceRates","recalculateReceive","isLocked","isLimitPriceLockedAtom","limitPriceRatesAtom","payAmount","limitPayInputAmountAtom","payGtZero","Big","gt","isReversed","isLimitPriceReversedAtom","newReceiveAmount","calculateReceiveAmount","setLimitReceiveAmountAtom","setLimitPayAmountAtom","currentLimitInputAtom","limitPriceAmount","limitPriceAmountAtom","limitPriceGtZero","setLimitAmountAtomFromProps","_","amount","setLimitPriceAmountAtomFromProps","updatedRates","getUpdatedRates","receiveAmount","limitReceiveInputAmountAtom","newPayAmount","calculatePayAmount","calculateRates","resetLimitPriceAtom","zeroRates","unlockLimitPriceAtom","toggleLimitPriceLockAtom","toggleLimitPriceReverseAtom"],"mappings":"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"}
1
+ {"version":3,"file":"limitInputActionsAtom.js","sources":["../../../../src/core/limit/state/limitInputActionsAtom.ts"],"sourcesContent":["import { atom } from \"jotai\";\nimport {\n limitPayInputAmountAtom,\n limitReceiveInputAmountAtom,\n limitPriceRatesAtom,\n limitPriceAmountAtom,\n} from \"./limitInputAmountAtom\";\nimport { isLimitPriceLockedAtom } from \"./isLimitPriceLockedAtom\";\nimport Big from \"big.js\";\nimport { currentLimitInputAtom } from \"./currentLimitInputAtom\";\nimport { isLimitPriceReversedAtom } from \"./isLimitPriceReversedAtom\";\nimport {\n calculateReceiveAmount,\n calculatePayAmount,\n calculateRates,\n} from \"./utils\";\n\nimport { zeroRates } from \"./constants\";\nimport type { PriceRates } from \"../types\";\n\nexport const setLimitPriceRatesAtom = atom(\n null,\n (get, set, priceRates: PriceRates, recalculateReceive: boolean = true) => {\n const isLocked = get(isLimitPriceLockedAtom);\n // ignore updates if price is locked\n if (isLocked) return;\n\n set(limitPriceRatesAtom, priceRates);\n\n const payAmount = get(limitPayInputAmountAtom);\n const payGtZero = Big(payAmount || \"0\").gt(0);\n\n // ignore updates if pay amount is zero,\n // as it would lead to setLimitReceiveAmountAtom(0) anyway\n if (recalculateReceive && payGtZero) {\n const isReversed = get(isLimitPriceReversedAtom);\n const newReceiveAmount = calculateReceiveAmount(\n payAmount,\n priceRates,\n isReversed\n );\n set(setLimitReceiveAmountAtom, newReceiveAmount);\n }\n }\n);\n\nexport const setLimitPayAmountAtom = atom(\n null,\n (get, set, payAmount: string) => {\n set(limitPayInputAmountAtom, payAmount);\n\n // ignore updates that did not come from pay input\n if (get(currentLimitInputAtom) !== \"from\") return;\n\n const priceRates = get(limitPriceRatesAtom);\n const isReversed = get(isLimitPriceReversedAtom);\n\n const limitPriceAmount = get(limitPriceAmountAtom);\n const limitPriceGtZero = Big(limitPriceAmount || \"0\").gt(0);\n // ignore updates if limit price is zero,\n // as it would lead to setLimitReceiveAmountAtom(0) anyway\n if (!limitPriceGtZero) return;\n\n // update receive amount\n const newReceiveAmount = calculateReceiveAmount(\n payAmount,\n priceRates,\n isReversed\n );\n set(setLimitReceiveAmountAtom, newReceiveAmount);\n }\n);\n\nexport const setLimitPayAmountAtomFromProps = atom(\n null,\n (_, set, amount: string) => {\n set(currentLimitInputAtom, \"from\"); // unblock pay -> receive sync if it was previously blocked\n set(setLimitPayAmountAtom, amount);\n }\n);\n\nexport const setLimitReceiveAmountAtom = atom(\n null,\n (get, set, receiveAmount: string) => {\n set(limitReceiveInputAmountAtom, receiveAmount);\n\n // ignore updates that did not come from receive input\n if (get(currentLimitInputAtom) !== \"to\") return;\n\n const isLocked = get(isLimitPriceLockedAtom);\n const isReversed = get(isLimitPriceReversedAtom);\n\n if (isLocked) {\n // update pay amount if price is locked\n const priceRates = get(limitPriceRatesAtom);\n const newPayAmount = calculatePayAmount(\n receiveAmount,\n priceRates,\n isReversed\n );\n set(setLimitPayAmountAtom, newPayAmount);\n } else {\n // update limit price otherwise\n const payAmount = get(limitPayInputAmountAtom);\n const updatedRates = calculateRates(receiveAmount, payAmount);\n set(setLimitPriceRatesAtom, updatedRates, false);\n }\n }\n);\n\nexport const setLimitReceiveAmountAtomFromProps = atom(\n null,\n (_, set, amount: string) => {\n set(currentLimitInputAtom, \"to\"); // unblock receive -> pay sync if it was previously blocked\n set(setLimitReceiveAmountAtom, amount);\n }\n);\n\nexport const resetLimitPriceAtom = atom(\n null,\n (get, set, priceRates: PriceRates = zeroRates) => {\n const isLocked = get(isLimitPriceLockedAtom);\n if (isLocked) return;\n\n set(setLimitPriceRatesAtom, priceRates);\n\n const isReversed = get(isLimitPriceReversedAtom);\n const payAmount = get(limitPayInputAmountAtom);\n const newReceiveAmount = calculateReceiveAmount(\n payAmount,\n priceRates,\n isReversed\n );\n set(setLimitReceiveAmountAtom, newReceiveAmount);\n }\n);\n\nexport const unlockLimitPriceAtom = atom(null, (_, set) => {\n set(isLimitPriceLockedAtom, false);\n});\n\nexport const toggleLimitPriceLockAtom = atom(null, (get, set) => {\n const isLocked = get(isLimitPriceLockedAtom);\n set(isLimitPriceLockedAtom, !isLocked);\n});\n\nexport const toggleLimitPriceReverseAtom = atom(null, (get, set) => {\n const isReversed = get(isLimitPriceReversedAtom);\n set(isLimitPriceReversedAtom, !isReversed);\n});\n"],"names":["setLimitPriceRatesAtom","atom","get","set","priceRates","recalculateReceive","isLocked","isLimitPriceLockedAtom","limitPriceRatesAtom","payAmount","limitPayInputAmountAtom","payGtZero","Big","gt","isReversed","isLimitPriceReversedAtom","newReceiveAmount","calculateReceiveAmount","setLimitReceiveAmountAtom","setLimitPayAmountAtom","currentLimitInputAtom","limitPriceAmount","limitPriceAmountAtom","limitPriceGtZero","setLimitPayAmountAtomFromProps","_","amount","receiveAmount","limitReceiveInputAmountAtom","newPayAmount","calculatePayAmount","updatedRates","calculateRates","setLimitReceiveAmountAtomFromProps","resetLimitPriceAtom","zeroRates","unlockLimitPriceAtom","toggleLimitPriceLockAtom","toggleLimitPriceReverseAtom"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
- import { TimeUnitObject } from './deadlineAtom';
1
+ import { TimeUnitObject, TimeUnitState } from './deadlineAtom';
2
2
  import { PriceRates } from '../types';
3
3
  export declare function timeUnitToSeconds(timeUnitObj: TimeUnitObject): number;
4
+ export declare function getTimeUnitState(timeUnitObj: TimeUnitObject | TimeUnitState): TimeUnitState;
4
5
  export declare function getClosestTimeUnit(timestampS: number): {
5
6
  readonly label: "never";
6
7
  readonly value: 0;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/core/limit/state/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,cAAc,UAa5D;AASD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM;;;;;;EAoBpD;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,OAAO,UAcpB;AAED,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,OAAO,UAcpB;AAED,wBAAgB,cAAc,CAC5B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,GAChB,UAAU,CAYZ;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,OAAO,GAClB,UAAU,CAWZ"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/core/limit/state/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,cAAc,UAa5D;AAED,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,cAAc,GAAG,aAAa,GAC1C,aAAa,CAWf;AAeD,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM;;;;;;EAoBpD;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,OAAO,UAcpB;AAED,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,OAAO,UAcpB;AAED,wBAAgB,cAAc,CAC5B,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,GAChB,UAAU,CAYZ;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,OAAO,GAClB,UAAU,CAWZ"}
@@ -15,6 +15,18 @@ function timeUnitToSeconds(timeUnitObj) {
15
15
  return 0;
16
16
  }
17
17
  }
18
+ function getTimeUnitState(timeUnitObj) {
19
+ if (isTimeUnitState(timeUnitObj)) {
20
+ return timeUnitObj;
21
+ }
22
+ return {
23
+ ...timeUnitObj,
24
+ timestamp: timeUnitObj.label === neverTimeUnit.label ? 0 : Math.floor(Date.now() / 1e3 + timeUnitToSeconds(timeUnitObj))
25
+ };
26
+ }
27
+ function isTimeUnitState(timeUnitObj) {
28
+ return "timestamp" in timeUnitObj && timeUnitObj.timestamp !== void 0;
29
+ }
18
30
  const units = [{
19
31
  label: "months",
20
32
  ms: 30 * 24 * 60 * 60 * 1e3
@@ -92,5 +104,5 @@ function getUpdatedRates(value, isReversed) {
92
104
  return zeroRates;
93
105
  }
94
106
 
95
- export { calculatePayAmount, calculateRates, calculateReceiveAmount, getClosestTimeUnit, getUpdatedRates, timeUnitToSeconds };
107
+ export { calculatePayAmount, calculateRates, calculateReceiveAmount, getClosestTimeUnit, getTimeUnitState, getUpdatedRates, timeUnitToSeconds };
96
108
  //# sourceMappingURL=utils.js.map