Skip to content

Commit 84be14e

Browse files
marcinciarkapiotrkonowrockipiotrwitekcodesandbot
authored
🍿 [Portfolio] New portfolio view (#3052)
* 🍿 [Portfolio] Route component (#3030) * New portfolio empty page * new portfolio link * 🍿 [Portfolio] Wallet endpoint (#3038) * Added api/portfolio/wallet endpoint, some types, logging on the new empty portfolio page * add debank env * remove switch * 🍿 [Portfolio] Positions mock (#3043) * mock skeleton * new reply types * the rest of the mock and types * 🍿 [Portfolio] First batch of components - header + overview (#3056) * PortfolioHeader and PortfolioLayout * PortfolioOverview, PortfolioOverviewItem and Tag component + i18n type fixes * fancy supplied number * type fixes + rwd simple view * 🍿 [Portfolio] Second batch of components (#3059) * separated change helpers (#3063) * Added lambdas and infra provisioning (#3048) * Added lambdas and infra provisioning * Added infra integration helpers Added new infra env variables Added infra documentation * Updated lambda build flow * Fixed local dev bug in getProductBorrowNavItems.ts * fixed undefined issue * improved validation * cleanup * format fix * updated ts config * fix lint * tsc check * test * cleanup * test * moved server side call to fe * added cors headers * Refactored to use shared validators Added new lambdas for positions and assers * install lambdas deps on post * fix * fix review comments * Pw/integrate-lambdas (#3068) * improved error handling * added backend client integrated views with backend integrated lambda with fe types * added mock to lambda * 🍿 [Portfolio] Position components (#3064) * Portfolio wallet tab (#3069) * summary * PortfolioWalletSummary * top assets * real data + skeleton * top assets data connection * assets list * assets list * parse products * list with products * guards * resolve wallet changes --------- Co-authored-by: codesandbox-bot <codesandbot@codesandbox.io> * 🍿 [Portfolio] Build fixes (#3071) * fixes and updates to lambdas (#3072) * fixes and updates to lambdas * fixed comments --------- Co-authored-by: Marcin Ciarka <marcin@oazoapps.com> * Fixed types naming * Fixed lambda logic Updated overview * Fixed portfolio overview --------- Co-authored-by: Piotr Konowrocki <piotr@oazoapps.com> Co-authored-by: Piotr Witek <739075+piotrwitek@users.noreply.github.com> Co-authored-by: codesandbox-bot <codesandbot@codesandbox.io>
1 parent b153806 commit 84be14e

File tree

234 files changed

+9106
-1144
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

234 files changed

+9106
-1144
lines changed

.env.template

+5-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ INFURA_PROJECT_ID_BACKEND="de82b2d602264e4fbc0929dec0c45baa"
1212
OPTIMISM_MAINNET_RPC_URL=""
1313
ARBITRUM_MAINNET_RPC_URL=""
1414

15+
# AWS INFRA
16+
AWS_API_GATEWAY_URL=""
17+
AWS_API_GATEWAY_KEY=""
18+
1519
# APIs
1620
ETHERSCAN_API_KEY="34JVYM6RPM3J1SK8QXQFRNSHD9XG4UHXVU"
1721
ONE_INCH_API_URL="https://api-oasis.1inch.io"
@@ -62,4 +66,4 @@ NOTIFICATIONS_HOST=""
6266
NOTIFICATIONS_HOST_GOERLI=""
6367

6468
RPC_GATEWAY=
65-
GROOVE_WIDGET_ID=
69+
GROOVE_WIDGET_ID=

.eslintrc.json

+4-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"ignorePatterns": ["node_modules", "types", "coverage"],
2+
"ignorePatterns": ["node_modules", "types", "coverage", "infra", "lambdas"],
33
"env": {
44
"es6": true
55
},
@@ -24,7 +24,7 @@
2424
"react/jsx-uses-react": "error",
2525
"react/jsx-uses-vars": "error",
2626
"import/no-duplicates": "error",
27-
"simple-import-sort/sort": [
27+
"simple-import-sort/imports": [
2828
"error",
2929
{
3030
"groups": [
@@ -47,6 +47,8 @@
4747
"@typescript-eslint/no-useless-constructor": "error",
4848
"@typescript-eslint/no-non-null-assertion": "warn",
4949
"@typescript-eslint/no-shadow": ["warn", { "builtinGlobals": true, "hoist": "all" }],
50+
"no-unused-vars": "off",
51+
"@typescript-eslint/no-unused-vars": ["error"],
5052
"@typescript-eslint/consistent-type-imports": [
5153
"error",
5254
{

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ yalc.lock
1313
.log
1414
.DS_Store
1515
.sentryclirc
16+
*.zip
17+
artifacts
1618

1719
public/precache.*.*.js
1820
public/sw.js

.prettierignore

+2
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,5 @@ coverage
1111
.run
1212
.swc
1313
.vercel
14+
jest.config.js
15+
setup.js

blockchain/contracts/arbitrum.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@ import { ADDRESSES } from '@oasisdex/addresses'
22
import * as aaveV2PriceOracle from 'blockchain/abi/aave-v2-price-oracle.json'
33
import * as aaveV2ProtocolDataProvider from 'blockchain/abi/aave-v2-protocol-data-provider.json'
44
import * as aaveV3Oracle from 'blockchain/abi/aave-v3-oracle.json'
5-
import * as aaveV3PoolDataProvider from 'blockchain/abi/aave-v3-pool-data-provider.json'
65
import * as aaveV3Pool from 'blockchain/abi/aave-v3-pool.json'
6+
import * as aaveV3PoolDataProvider from 'blockchain/abi/aave-v3-pool-data-provider.json'
77
import * as accountFactory from 'blockchain/abi/account-factory.json'
88
import * as accountGuard from 'blockchain/abi/account-guard.json'
99
import * as ajnaERC20PoolFactory from 'blockchain/abi/ajna-erc20-pool-factory.json'
10-
import * as ajnaPoolInfo from 'blockchain/abi/ajna-pool-info.json'
1110
import * as ajnaPool from 'blockchain/abi/ajna-pool.json'
11+
import * as ajnaPoolInfo from 'blockchain/abi/ajna-pool-info.json'
1212
import * as ajnaProxyActions from 'blockchain/abi/ajna-proxy-actions.json'
13+
import * as automationBot from 'blockchain/abi/automation-bot.json'
1314
import * as automationBotAggregator from 'blockchain/abi/automation-bot-aggregator.json'
1415
import * as automationBotV2 from 'blockchain/abi/automation-bot-v2.json'
15-
import * as automationBot from 'blockchain/abi/automation-bot.json'
1616
import * as balancerVault from 'blockchain/abi/balancer-vault.json'
1717
import * as cdpRegistry from 'blockchain/abi/cdp-registry.json'
1818
import * as chainLinkPriceOracle from 'blockchain/abi/chainlink-price-oracle.json'
@@ -22,10 +22,10 @@ import * as dssCdpManager from 'blockchain/abi/dss-cdp-manager.json'
2222
import * as dssCharter from 'blockchain/abi/dss-charter.json'
2323
import * as dssCropper from 'blockchain/abi/dss-cropper.json'
2424
import * as guniProxyActions from 'blockchain/abi/dss-guni-proxy-actions.json'
25+
import * as dssProxyActions from 'blockchain/abi/dss-proxy-actions.json'
2526
import * as dssProxyActionsCharter from 'blockchain/abi/dss-proxy-actions-charter.json'
2627
import * as dssProxyActionsCropjoin from 'blockchain/abi/dss-proxy-actions-cropjoin.json'
2728
import * as dssProxyActionsDsr from 'blockchain/abi/dss-proxy-actions-dsr.json'
28-
import * as dssProxyActions from 'blockchain/abi/dss-proxy-actions.json'
2929
import * as exchange from 'blockchain/abi/exchange.json'
3030
import * as getCdps from 'blockchain/abi/get-cdps.json'
3131
import * as lidoCrvLiquidityFarmingReward from 'blockchain/abi/lido-crv-liquidity-farming-reward.json'

blockchain/contracts/base.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@ import { ADDRESSES } from '@oasisdex/addresses'
22
import * as aaveV2PriceOracle from 'blockchain/abi/aave-v2-price-oracle.json'
33
import * as aaveV2ProtocolDataProvider from 'blockchain/abi/aave-v2-protocol-data-provider.json'
44
import * as aaveV3Oracle from 'blockchain/abi/aave-v3-oracle.json'
5-
import * as aaveV3PoolDataProvider from 'blockchain/abi/aave-v3-pool-data-provider.json'
65
import * as aaveV3Pool from 'blockchain/abi/aave-v3-pool.json'
6+
import * as aaveV3PoolDataProvider from 'blockchain/abi/aave-v3-pool-data-provider.json'
77
import * as accountFactory from 'blockchain/abi/account-factory.json'
88
import * as accountGuard from 'blockchain/abi/account-guard.json'
99
import * as ajnaERC20PoolFactory from 'blockchain/abi/ajna-erc20-pool-factory.json'
10-
import * as ajnaPoolInfo from 'blockchain/abi/ajna-pool-info.json'
1110
import * as ajnaPool from 'blockchain/abi/ajna-pool.json'
11+
import * as ajnaPoolInfo from 'blockchain/abi/ajna-pool-info.json'
1212
import * as ajnaProxyActions from 'blockchain/abi/ajna-proxy-actions.json'
13+
import * as automationBot from 'blockchain/abi/automation-bot.json'
1314
import * as automationBotAggregator from 'blockchain/abi/automation-bot-aggregator.json'
1415
import * as automationBotV2 from 'blockchain/abi/automation-bot-v2.json'
15-
import * as automationBot from 'blockchain/abi/automation-bot.json'
1616
import * as balancerVault from 'blockchain/abi/balancer-vault.json'
1717
import * as cdpRegistry from 'blockchain/abi/cdp-registry.json'
1818
import * as dsProxyFactory from 'blockchain/abi/ds-proxy-factory.json'
@@ -21,10 +21,10 @@ import * as dssCdpManager from 'blockchain/abi/dss-cdp-manager.json'
2121
import * as dssCharter from 'blockchain/abi/dss-charter.json'
2222
import * as dssCropper from 'blockchain/abi/dss-cropper.json'
2323
import * as guniProxyActions from 'blockchain/abi/dss-guni-proxy-actions.json'
24+
import * as dssProxyActions from 'blockchain/abi/dss-proxy-actions.json'
2425
import * as dssProxyActionsCharter from 'blockchain/abi/dss-proxy-actions-charter.json'
2526
import * as dssProxyActionsCropjoin from 'blockchain/abi/dss-proxy-actions-cropjoin.json'
2627
import * as dssProxyActionsDsr from 'blockchain/abi/dss-proxy-actions-dsr.json'
27-
import * as dssProxyActions from 'blockchain/abi/dss-proxy-actions.json'
2828
import * as exchange from 'blockchain/abi/exchange.json'
2929
import * as getCdps from 'blockchain/abi/get-cdps.json'
3030
import * as lidoCrvLiquidityFarmingReward from 'blockchain/abi/lido-crv-liquidity-farming-reward.json'

blockchain/contracts/goerli.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ import * as aaveV2LendingPool from 'blockchain/abi/aave-v2-lending-pool.json'
33
import * as aaveV2PriceOracle from 'blockchain/abi/aave-v2-price-oracle.json'
44
import * as aaveV2ProtocolDataProvider from 'blockchain/abi/aave-v2-protocol-data-provider.json'
55
import * as aaveV3Oracle from 'blockchain/abi/aave-v3-oracle.json'
6-
import * as aaveV3PoolDataProvider from 'blockchain/abi/aave-v3-pool-data-provider.json'
76
import * as aaveV3Pool from 'blockchain/abi/aave-v3-pool.json'
7+
import * as aaveV3PoolDataProvider from 'blockchain/abi/aave-v3-pool-data-provider.json'
88
import * as accountFactory from 'blockchain/abi/account-factory.json'
99
import * as accountGuard from 'blockchain/abi/account-guard.json'
1010
import * as ajnaERC20PoolFactory from 'blockchain/abi/ajna-erc20-pool-factory.json'
11-
import * as ajnaPoolInfo from 'blockchain/abi/ajna-pool-info.json'
1211
import * as ajnaPool from 'blockchain/abi/ajna-pool.json'
12+
import * as ajnaPoolInfo from 'blockchain/abi/ajna-pool-info.json'
1313
import * as ajnaProxyActions from 'blockchain/abi/ajna-proxy-actions.json'
14+
import * as automationBot from 'blockchain/abi/automation-bot.json'
1415
import * as automationBotAggregator from 'blockchain/abi/automation-bot-aggregator.json'
1516
import * as automationBotV2 from 'blockchain/abi/automation-bot-v2.json'
16-
import * as automationBot from 'blockchain/abi/automation-bot.json'
1717
import * as balancerVault from 'blockchain/abi/balancer-vault.json'
1818
import * as cdpRegistry from 'blockchain/abi/cdp-registry.json'
1919
import * as chainLinkPriceOracle from 'blockchain/abi/chainlink-price-oracle.json'
@@ -23,10 +23,10 @@ import * as dssCdpManager from 'blockchain/abi/dss-cdp-manager.json'
2323
import * as dssCharter from 'blockchain/abi/dss-charter.json'
2424
import * as dssCropper from 'blockchain/abi/dss-cropper.json'
2525
import * as guniProxyActions from 'blockchain/abi/dss-guni-proxy-actions.json'
26+
import * as dssProxyActions from 'blockchain/abi/dss-proxy-actions.json'
2627
import * as dssProxyActionsCharter from 'blockchain/abi/dss-proxy-actions-charter.json'
2728
import * as dssProxyActionsCropjoin from 'blockchain/abi/dss-proxy-actions-cropjoin.json'
2829
import * as dssProxyActionsDsr from 'blockchain/abi/dss-proxy-actions-dsr.json'
29-
import * as dssProxyActions from 'blockchain/abi/dss-proxy-actions.json'
3030
import * as exchange from 'blockchain/abi/exchange.json'
3131
import * as getCdps from 'blockchain/abi/get-cdps.json'
3232
import * as lidoCrvLiquidityFarmingReward from 'blockchain/abi/lido-crv-liquidity-farming-reward.json'

blockchain/contracts/mainnet.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ import * as aaveV2LendingPool from 'blockchain/abi/aave-v2-lending-pool.json'
33
import * as aaveV2PriceOracle from 'blockchain/abi/aave-v2-price-oracle.json'
44
import * as aaveV2ProtocolDataProvider from 'blockchain/abi/aave-v2-protocol-data-provider.json'
55
import * as aaveV3Oracle from 'blockchain/abi/aave-v3-oracle.json'
6-
import * as aaveV3PoolDataProvider from 'blockchain/abi/aave-v3-pool-data-provider.json'
76
import * as aaveV3Pool from 'blockchain/abi/aave-v3-pool.json'
7+
import * as aaveV3PoolDataProvider from 'blockchain/abi/aave-v3-pool-data-provider.json'
88
import * as accountFactory from 'blockchain/abi/account-factory.json'
99
import * as accountGuard from 'blockchain/abi/account-guard.json'
1010
import * as ajnaERC20PoolFactory from 'blockchain/abi/ajna-erc20-pool-factory.json'
11-
import * as ajnaPoolInfo from 'blockchain/abi/ajna-pool-info.json'
1211
import * as ajnaPool from 'blockchain/abi/ajna-pool.json'
12+
import * as ajnaPoolInfo from 'blockchain/abi/ajna-pool-info.json'
1313
import * as ajnaProxyActions from 'blockchain/abi/ajna-proxy-actions.json'
14+
import * as automationBot from 'blockchain/abi/automation-bot.json'
1415
import * as automationBotAggregator from 'blockchain/abi/automation-bot-aggregator.json'
1516
import * as automationBotV2 from 'blockchain/abi/automation-bot-v2.json'
16-
import * as automationBot from 'blockchain/abi/automation-bot.json'
1717
import * as balancerVault from 'blockchain/abi/balancer-vault.json'
1818
import * as cdpRegistry from 'blockchain/abi/cdp-registry.json'
1919
import * as chainLinkPriceOracle from 'blockchain/abi/chainlink-price-oracle.json'
@@ -23,10 +23,10 @@ import * as dssCdpManager from 'blockchain/abi/dss-cdp-manager.json'
2323
import * as dssCharter from 'blockchain/abi/dss-charter.json'
2424
import * as dssCropper from 'blockchain/abi/dss-cropper.json'
2525
import * as guniProxyActions from 'blockchain/abi/dss-guni-proxy-actions.json'
26+
import * as dssProxyActions from 'blockchain/abi/dss-proxy-actions.json'
2627
import * as dssProxyActionsCharter from 'blockchain/abi/dss-proxy-actions-charter.json'
2728
import * as dssProxyActionsCropjoin from 'blockchain/abi/dss-proxy-actions-cropjoin.json'
2829
import * as dssProxyActionsDsr from 'blockchain/abi/dss-proxy-actions-dsr.json'
29-
import * as dssProxyActions from 'blockchain/abi/dss-proxy-actions.json'
3030
import * as exchange from 'blockchain/abi/exchange.json'
3131
import * as getCdps from 'blockchain/abi/get-cdps.json'
3232
import * as lidoCrvLiquidityFarmingReward from 'blockchain/abi/lido-crv-liquidity-farming-reward.json'
@@ -42,8 +42,8 @@ import * as dssMultiplyProxyActions from 'blockchain/abi/multiply-proxy-actions.
4242
import * as operationExecutor from 'blockchain/abi/operation-executor.json'
4343
import * as otcSupport from 'blockchain/abi/otc-support-methods.json'
4444
import * as sparkV3Oracle from 'blockchain/abi/spark-v3-oracle.json'
45-
import * as sparkV3PoolDataProvider from 'blockchain/abi/spark-v3-pool-data-provider.json'
4645
import * as sparkV3Pool from 'blockchain/abi/spark-v3-pool.json'
46+
import * as sparkV3PoolDataProvider from 'blockchain/abi/spark-v3-pool-data-provider.json'
4747
import * as vat from 'blockchain/abi/vat.json'
4848
import {
4949
getCollateralJoinContracts,

blockchain/contracts/optimism.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@ import { ADDRESSES } from '@oasisdex/addresses'
22
import * as aaveV2PriceOracle from 'blockchain/abi/aave-v2-price-oracle.json'
33
import * as aaveV2ProtocolDataProvider from 'blockchain/abi/aave-v2-protocol-data-provider.json'
44
import * as aaveV3Oracle from 'blockchain/abi/aave-v3-oracle.json'
5-
import * as aaveV3PoolDataProvider from 'blockchain/abi/aave-v3-pool-data-provider.json'
65
import * as aaveV3Pool from 'blockchain/abi/aave-v3-pool.json'
6+
import * as aaveV3PoolDataProvider from 'blockchain/abi/aave-v3-pool-data-provider.json'
77
import * as accountFactory from 'blockchain/abi/account-factory.json'
88
import * as accountGuard from 'blockchain/abi/account-guard.json'
99
import * as ajnaERC20PoolFactory from 'blockchain/abi/ajna-erc20-pool-factory.json'
10-
import * as ajnaPoolInfo from 'blockchain/abi/ajna-pool-info.json'
1110
import * as ajnaPool from 'blockchain/abi/ajna-pool.json'
11+
import * as ajnaPoolInfo from 'blockchain/abi/ajna-pool-info.json'
1212
import * as ajnaProxyActions from 'blockchain/abi/ajna-proxy-actions.json'
13+
import * as automationBot from 'blockchain/abi/automation-bot.json'
1314
import * as automationBotAggregator from 'blockchain/abi/automation-bot-aggregator.json'
1415
import * as automationBotV2 from 'blockchain/abi/automation-bot-v2.json'
15-
import * as automationBot from 'blockchain/abi/automation-bot.json'
1616
import * as balancerVault from 'blockchain/abi/balancer-vault.json'
1717
import * as cdpRegistry from 'blockchain/abi/cdp-registry.json'
1818
import * as chainLinkPriceOracle from 'blockchain/abi/chainlink-price-oracle.json'
@@ -22,10 +22,10 @@ import * as dssCdpManager from 'blockchain/abi/dss-cdp-manager.json'
2222
import * as dssCharter from 'blockchain/abi/dss-charter.json'
2323
import * as dssCropper from 'blockchain/abi/dss-cropper.json'
2424
import * as guniProxyActions from 'blockchain/abi/dss-guni-proxy-actions.json'
25+
import * as dssProxyActions from 'blockchain/abi/dss-proxy-actions.json'
2526
import * as dssProxyActionsCharter from 'blockchain/abi/dss-proxy-actions-charter.json'
2627
import * as dssProxyActionsCropjoin from 'blockchain/abi/dss-proxy-actions-cropjoin.json'
2728
import * as dssProxyActionsDsr from 'blockchain/abi/dss-proxy-actions-dsr.json'
28-
import * as dssProxyActions from 'blockchain/abi/dss-proxy-actions.json'
2929
import * as exchange from 'blockchain/abi/exchange.json'
3030
import * as gasPriceOracle from 'blockchain/abi/gas-price-oracle.json'
3131
import * as getCdps from 'blockchain/abi/get-cdps.json'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { NetworkNames } from './network-names'
2+
3+
// based on https://docs.cloud.debank.com/en/readme/api-pro-reference/chain#returns-1
4+
export enum DebankNetworkNames {
5+
ethereumMainnet = 'eth',
6+
arbitrumMainnet = 'arb',
7+
polygonMainnet = 'matic',
8+
optimismMainnet = 'op',
9+
baseMainnet = 'base',
10+
}
11+
12+
export const DebankNetworkNameToOurs = {
13+
[DebankNetworkNames.ethereumMainnet]: NetworkNames.ethereumMainnet,
14+
[DebankNetworkNames.arbitrumMainnet]: NetworkNames.arbitrumMainnet,
15+
[DebankNetworkNames.polygonMainnet]: NetworkNames.polygonMainnet,
16+
[DebankNetworkNames.optimismMainnet]: NetworkNames.optimismMainnet,
17+
[DebankNetworkNames.baseMainnet]: NetworkNames.baseMainnet,
18+
}
19+
20+
export const OursNameToDebankNetworkName = {
21+
[NetworkNames.ethereumMainnet]: DebankNetworkNames.ethereumMainnet,
22+
[NetworkNames.arbitrumMainnet]: DebankNetworkNames.arbitrumMainnet,
23+
[NetworkNames.polygonMainnet]: DebankNetworkNames.polygonMainnet,
24+
[NetworkNames.optimismMainnet]: DebankNetworkNames.optimismMainnet,
25+
[NetworkNames.baseMainnet]: DebankNetworkNames.baseMainnet,
26+
}

components/AnimatedWrapper.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import type { PropsWithChildren } from 'react'
22
import React from 'react'
3+
import { slideInAnimation } from 'theme/animations'
34
import type { ThemeUIStyleObject } from 'theme-ui'
45
import { Box } from 'theme-ui'
5-
import { slideInAnimation } from 'theme/animations'
66

77
export function AnimatedWrapper({ children, sx }: PropsWithChildren<{ sx?: ThemeUIStyleObject }>) {
88
return (

components/Announcement.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React, { useLayoutEffect, useState } from 'react'
2-
import { Box, Flex, Text } from 'theme-ui'
32
import { announcement } from 'theme/icons'
3+
import { Box, Flex, Text } from 'theme-ui'
44

55
import { Icon } from './Icon'
66
import { AppLink } from './Links'

components/AutomationIcon.tsx

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import { Icon } from 'components/Icon'
2+
import { StatefulTooltip } from 'components/Tooltip'
3+
import React from 'react'
4+
import { useTranslation } from 'react-i18next'
5+
import { auto_buy, auto_sell, stop_loss, take_profit } from 'theme/icons'
6+
import { Text } from 'theme-ui'
7+
8+
import type { PortfolioPosition } from 'lambdas/src/portfolio-positions/types'
9+
10+
const automationIconMap: Record<keyof PortfolioPosition['automations'], typeof stop_loss> = {
11+
autoBuy: auto_buy,
12+
autoSell: auto_sell,
13+
takeProfit: take_profit,
14+
stopLoss: stop_loss,
15+
}
16+
17+
export const AutomationIcon = ({
18+
enabled,
19+
type,
20+
}: {
21+
enabled: boolean
22+
type: keyof PortfolioPosition['automations']
23+
}) => {
24+
const { t: tPortfolio } = useTranslation('portfolio')
25+
return (
26+
<StatefulTooltip
27+
tooltip={<Text variant="paragraph4">{tPortfolio(`automation-details.${type}`)}</Text>}
28+
tooltipSx={{
29+
mt: '-98px', // just above the icon
30+
height: '58px',
31+
borderRadius: 'medium',
32+
}}
33+
containerSx={{
34+
width: '34px',
35+
height: '34px',
36+
backgroundColor: enabled ? 'success100' : 'secondary60',
37+
':hover': {
38+
backgroundColor: enabled ? 'success10' : 'secondary60',
39+
'& path': {
40+
color: enabled ? 'success100' : 'primary60',
41+
},
42+
},
43+
cursor: 'pointer',
44+
borderRadius: 'round',
45+
mr: 2,
46+
display: 'flex',
47+
alignItems: 'center',
48+
justifyContent: 'center',
49+
}}
50+
>
51+
<Icon
52+
icon={automationIconMap[type]}
53+
size={20}
54+
sx={{
55+
'& path': {
56+
color: enabled ? 'white' : 'primary60',
57+
},
58+
}}
59+
/>
60+
</StatefulTooltip>
61+
)
62+
}

components/BenefitCard.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import { staticFilesRuntimeUrl } from 'helpers/staticPaths'
22
import { useTranslation } from 'next-i18next'
33
import type { PropsWithChildren } from 'react'
44
import React from 'react'
5-
import { Box, Card, Flex, Grid, Image, Text } from 'theme-ui'
65
import { slideInAnimation } from 'theme/animations'
6+
import { Box, Card, Flex, Grid, Image, Text } from 'theme-ui'
77

88
export function BenefitCardsWrapper({ children }: PropsWithChildren<{}>) {
99
return (

components/Checkbox.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { FC, MouseEventHandler } from 'react'
22
import React from 'react'
3-
import { Flex } from 'theme-ui'
43
import { checkmark } from 'theme/icons'
4+
import { Flex } from 'theme-ui'
55

66
import { Icon } from './Icon'
77

components/ChevronUpDown.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from 'react'
2-
import type { ThemeUIStyleObject } from 'theme-ui'
32
import { chevron_down, chevron_up } from 'theme/icons'
3+
import type { ThemeUIStyleObject } from 'theme-ui'
44

55
import { Icon } from './Icon'
66
import type { IconProps } from './Icon.types'

components/DetailsSectionContentCard.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import { useModal } from 'helpers/modalHook'
55
import type { TranslateStringType } from 'helpers/translateStringType'
66
import type { PropsWithChildren, ReactNode } from 'react'
77
import React, { useState } from 'react'
8+
import { question_o } from 'theme/icons'
89
import type { ThemeUIStyleObject } from 'theme-ui'
910
import { Box, Flex, Grid, Text } from 'theme-ui'
10-
import { question_o } from 'theme/icons'
1111

1212
import { Icon } from './Icon'
1313
import { AppLink } from './Links'

components/DetailsSectionFooterItem.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import { useModal } from 'helpers/modalHook'
44
import type { TranslateStringType } from 'helpers/translateStringType'
55
import type { ReactNode } from 'react'
66
import React, { useState } from 'react'
7+
import { question_o } from 'theme/icons'
78
import type { ThemeUIStyleObject } from 'theme-ui'
89
import { Box, Flex, Grid, Text } from 'theme-ui'
9-
import { question_o } from 'theme/icons'
1010

1111
import type { DetailsSectionContentCardChangePillProps } from './DetailsSectionContentCard'
1212
import { DetailsSectionContentCardChangePill } from './DetailsSectionContentCard'

0 commit comments

Comments
 (0)