feat: add opt out analytics (#6983)
* making shared settings toggle component * adding description to analytics toggle * trace analytics wrapper * changing sendAnalytics to optOut * updating functions * moving atom location * adding back testid to testnet toggle * sending data on page load * defaulting to true * refactoring toggles * renaming and moving to new filepath * exporting everything out of analytics * updating eslint * typo * responding to requested changes * fixing merge conflicts
This commit is contained in:
parent
ff3bcc4693
commit
9262fec093
17
.eslintrc.js
17
.eslintrc.js
@ -57,5 +57,22 @@ module.exports = {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
files: ['**/*.ts', '**/*.tsx'],
|
||||||
|
excludedFiles: ['src/analytics/*'],
|
||||||
|
rules: {
|
||||||
|
'no-restricted-imports': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
paths: [
|
||||||
|
{
|
||||||
|
name: '@uniswap/analytics',
|
||||||
|
message: `Do not import from '@uniswap/analytics' directly. Use 'analytics' instead.`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
47
src/analytics/index.tsx
Normal file
47
src/analytics/index.tsx
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
import {
|
||||||
|
sendAnalyticsEvent as sendAnalyticsTraceEvent,
|
||||||
|
Trace as AnalyticsTrace,
|
||||||
|
TraceEvent as AnalyticsEvent,
|
||||||
|
} from '@uniswap/analytics'
|
||||||
|
import { atomWithStorage, useAtomValue } from 'jotai/utils'
|
||||||
|
import { memo } from 'react'
|
||||||
|
|
||||||
|
export { getDeviceId, initializeAnalytics, OriginApplication, user, useTrace } from '@uniswap/analytics'
|
||||||
|
|
||||||
|
const allowAnalyticsAtomKey = 'allow_analytics'
|
||||||
|
export const allowAnalyticsAtom = atomWithStorage<boolean>(allowAnalyticsAtomKey, true)
|
||||||
|
|
||||||
|
export const Trace = memo((props: React.ComponentProps<typeof AnalyticsTrace>) => {
|
||||||
|
const allowAnalytics = useAtomValue(allowAnalyticsAtom)
|
||||||
|
const shouldLogImpression = allowAnalytics ? props.shouldLogImpression : false
|
||||||
|
|
||||||
|
return <AnalyticsTrace {...props} shouldLogImpression={shouldLogImpression} />
|
||||||
|
})
|
||||||
|
|
||||||
|
Trace.displayName = 'Trace'
|
||||||
|
|
||||||
|
export const TraceEvent = memo((props: React.ComponentProps<typeof AnalyticsEvent>) => {
|
||||||
|
const allowAnalytics = useAtomValue(allowAnalyticsAtom)
|
||||||
|
const shouldLogImpression = allowAnalytics ? props.shouldLogImpression : false
|
||||||
|
|
||||||
|
return <AnalyticsEvent {...props} shouldLogImpression={shouldLogImpression} />
|
||||||
|
})
|
||||||
|
|
||||||
|
TraceEvent.displayName = 'TraceEvent'
|
||||||
|
|
||||||
|
export const sendAnalyticsEvent: typeof sendAnalyticsTraceEvent = (event, properties) => {
|
||||||
|
let allowAnalytics = true
|
||||||
|
|
||||||
|
try {
|
||||||
|
const value = localStorage.getItem(allowAnalyticsAtomKey)
|
||||||
|
|
||||||
|
if (typeof value === 'string') {
|
||||||
|
allowAnalytics = JSON.parse(value)
|
||||||
|
}
|
||||||
|
// eslint-disable-next-line no-empty
|
||||||
|
} catch {}
|
||||||
|
|
||||||
|
if (allowAnalytics) {
|
||||||
|
sendAnalyticsTraceEvent(event, properties)
|
||||||
|
}
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, SharedEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, SharedEventName } from '@uniswap/analytics-events'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import { useDisableNFTRoutes } from 'hooks/useDisableNFTRoutes'
|
import { useDisableNFTRoutes } from 'hooks/useDisableNFTRoutes'
|
||||||
import styled from 'styled-components/macro'
|
import styled from 'styled-components/macro'
|
||||||
import { BREAKPOINTS, ExternalLink, StyledRouterLink } from 'theme'
|
import { BREAKPOINTS, ExternalLink, StyledRouterLink } from 'theme'
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, SharedEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, SharedEventName } from '@uniswap/analytics-events'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import { Link } from 'react-router-dom'
|
import { Link } from 'react-router-dom'
|
||||||
import styled, { DefaultTheme } from 'styled-components/macro'
|
import styled, { DefaultTheme } from 'styled-components/macro'
|
||||||
import { BREAKPOINTS } from 'theme'
|
import { BREAKPOINTS } from 'theme'
|
||||||
|
18
src/components/AccountDrawer/AnalyticsToggle.tsx
Normal file
18
src/components/AccountDrawer/AnalyticsToggle.tsx
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import { t } from '@lingui/macro'
|
||||||
|
import { allowAnalyticsAtom } from 'analytics'
|
||||||
|
import { useAtom } from 'jotai'
|
||||||
|
|
||||||
|
import { SettingsToggle } from './SettingsToggle'
|
||||||
|
|
||||||
|
export function AnalyticsToggle() {
|
||||||
|
const [allowAnalytics, updateAllowAnalytics] = useAtom(allowAnalyticsAtom)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<SettingsToggle
|
||||||
|
title={t`Allow analytics`}
|
||||||
|
description={t`We use anonymized data to enhance your experience with Uniswap Labs products.`}
|
||||||
|
isActive={allowAnalytics}
|
||||||
|
toggle={() => void updateAllowAnalytics((value) => !value)}
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
@ -1,9 +1,9 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { sendAnalyticsEvent, TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, InterfaceEventName, SharedEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, InterfaceEventName, SharedEventName } from '@uniswap/analytics-events'
|
||||||
import { formatNumber, NumberType } from '@uniswap/conedison/format'
|
import { formatNumber, NumberType } from '@uniswap/conedison/format'
|
||||||
import { CurrencyAmount, Token } from '@uniswap/sdk-core'
|
import { CurrencyAmount, Token } from '@uniswap/sdk-core'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { sendAnalyticsEvent, TraceEvent } from 'analytics'
|
||||||
import { ButtonEmphasis, ButtonSize, LoadingButtonSpinner, ThemeButton } from 'components/Button'
|
import { ButtonEmphasis, ButtonSize, LoadingButtonSpinner, ThemeButton } from 'components/Button'
|
||||||
import Column from 'components/Column'
|
import Column from 'components/Column'
|
||||||
import { AutoRow } from 'components/Row'
|
import { AutoRow } from 'components/Row'
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, SharedEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, SharedEventName } from '@uniswap/analytics-events'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import Column from 'components/Column'
|
import Column from 'components/Column'
|
||||||
import AlertTriangleFilled from 'components/Icons/AlertTriangleFilled'
|
import AlertTriangleFilled from 'components/Icons/AlertTriangleFilled'
|
||||||
import { LoaderV2 } from 'components/Icons/LoadingSpinner'
|
import { LoaderV2 } from 'components/Icons/LoadingSpinner'
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { sendAnalyticsEvent, useTrace } from '@uniswap/analytics'
|
|
||||||
import { InterfaceElementName, SharedEventName } from '@uniswap/analytics-events'
|
import { InterfaceElementName, SharedEventName } from '@uniswap/analytics-events'
|
||||||
|
import { sendAnalyticsEvent, useTrace } from 'analytics'
|
||||||
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
||||||
import Column from 'components/Column'
|
import Column from 'components/Column'
|
||||||
import Row from 'components/Row'
|
import Row from 'components/Row'
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { t } from '@lingui/macro'
|
import { t } from '@lingui/macro'
|
||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, SharedEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, SharedEventName } from '@uniswap/analytics-events'
|
||||||
import { formatNumber, NumberType } from '@uniswap/conedison/format'
|
import { formatNumber, NumberType } from '@uniswap/conedison/format'
|
||||||
import { Position } from '@uniswap/v3-sdk'
|
import { Position } from '@uniswap/v3-sdk'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
||||||
import Row from 'components/Row'
|
import Row from 'components/Row'
|
||||||
import { MouseoverTooltip } from 'components/Tooltip'
|
import { MouseoverTooltip } from 'components/Tooltip'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, SharedEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, SharedEventName } from '@uniswap/analytics-events'
|
||||||
import { formatNumber, NumberType } from '@uniswap/conedison/format'
|
import { formatNumber, NumberType } from '@uniswap/conedison/format'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import { useCachedPortfolioBalancesQuery } from 'components/AccountDrawer/PrefetchBalancesWrapper'
|
import { useCachedPortfolioBalancesQuery } from 'components/AccountDrawer/PrefetchBalancesWrapper'
|
||||||
import Row from 'components/Row'
|
import Row from 'components/Row'
|
||||||
import { formatDelta } from 'components/Tokens/TokenDetails/PriceChart'
|
import { formatDelta } from 'components/Tokens/TokenDetails/PriceChart'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { Trace, TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, InterfaceSectionName, SharedEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, InterfaceSectionName, SharedEventName } from '@uniswap/analytics-events'
|
||||||
|
import { Trace, TraceEvent } from 'analytics'
|
||||||
import Column from 'components/Column'
|
import Column from 'components/Column'
|
||||||
import { LoaderV2 } from 'components/Icons/LoadingSpinner'
|
import { LoaderV2 } from 'components/Icons/LoadingSpinner'
|
||||||
import { AutoRow } from 'components/Row'
|
import { AutoRow } from 'components/Row'
|
||||||
|
@ -8,6 +8,7 @@ import styled, { useTheme } from 'styled-components/macro'
|
|||||||
import { ClickableStyle, ThemedText } from 'theme'
|
import { ClickableStyle, ThemedText } from 'theme'
|
||||||
import ThemeToggle from 'theme/components/ThemeToggle'
|
import ThemeToggle from 'theme/components/ThemeToggle'
|
||||||
|
|
||||||
|
import { AnalyticsToggle } from './AnalyticsToggle'
|
||||||
import { GitVersionRow } from './GitVersionRow'
|
import { GitVersionRow } from './GitVersionRow'
|
||||||
import { SlideOutMenu } from './SlideOutMenu'
|
import { SlideOutMenu } from './SlideOutMenu'
|
||||||
import { SmallBalanceToggle } from './SmallBalanceToggle'
|
import { SmallBalanceToggle } from './SmallBalanceToggle'
|
||||||
@ -63,6 +64,7 @@ export default function SettingsMenu({ onClose }: { onClose: () => void }) {
|
|||||||
<ToggleWrapper>
|
<ToggleWrapper>
|
||||||
<ThemeToggle />
|
<ThemeToggle />
|
||||||
<SmallBalanceToggle />
|
<SmallBalanceToggle />
|
||||||
|
<AnalyticsToggle />
|
||||||
<TestnetsToggle />
|
<TestnetsToggle />
|
||||||
</ToggleWrapper>
|
</ToggleWrapper>
|
||||||
|
|
||||||
|
37
src/components/AccountDrawer/SettingsToggle.tsx
Normal file
37
src/components/AccountDrawer/SettingsToggle.tsx
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
import Column from 'components/Column'
|
||||||
|
import Row from 'components/Row'
|
||||||
|
import Toggle from 'components/Toggle'
|
||||||
|
import styled from 'styled-components/macro'
|
||||||
|
import { ThemedText } from 'theme'
|
||||||
|
|
||||||
|
const StyledColumn = styled(Column)`
|
||||||
|
width: 100%;
|
||||||
|
`
|
||||||
|
|
||||||
|
interface SettingsToggleProps {
|
||||||
|
title: string
|
||||||
|
description?: string
|
||||||
|
dataid?: string
|
||||||
|
isActive: boolean
|
||||||
|
toggle: () => void
|
||||||
|
}
|
||||||
|
|
||||||
|
export function SettingsToggle({ title, description, dataid, isActive, toggle }: SettingsToggleProps) {
|
||||||
|
return (
|
||||||
|
<Row align="center">
|
||||||
|
<StyledColumn>
|
||||||
|
<Row>
|
||||||
|
<ThemedText.SubHeaderSmall color="textPrimary">{title}</ThemedText.SubHeaderSmall>
|
||||||
|
</Row>
|
||||||
|
{description && (
|
||||||
|
<Row>
|
||||||
|
<ThemedText.Caption color="textSecondary" lineHeight="16px">
|
||||||
|
{description}
|
||||||
|
</ThemedText.Caption>
|
||||||
|
</Row>
|
||||||
|
)}
|
||||||
|
</StyledColumn>
|
||||||
|
<Toggle id={dataid} isActive={isActive} toggle={toggle} />
|
||||||
|
</Row>
|
||||||
|
)
|
||||||
|
}
|
@ -1,9 +1,8 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { t } from '@lingui/macro'
|
||||||
import Row from 'components/Row'
|
|
||||||
import Toggle from 'components/Toggle'
|
|
||||||
import { useAtom } from 'jotai'
|
import { useAtom } from 'jotai'
|
||||||
import { atomWithStorage } from 'jotai/utils'
|
import { atomWithStorage } from 'jotai/utils'
|
||||||
import { ThemedText } from 'theme'
|
|
||||||
|
import { SettingsToggle } from './SettingsToggle'
|
||||||
|
|
||||||
export const hideSmallBalancesAtom = atomWithStorage<boolean>('hideSmallBalances', true)
|
export const hideSmallBalancesAtom = atomWithStorage<boolean>('hideSmallBalances', true)
|
||||||
|
|
||||||
@ -11,20 +10,10 @@ export function SmallBalanceToggle() {
|
|||||||
const [hideSmallBalances, updateHideSmallBalances] = useAtom(hideSmallBalancesAtom)
|
const [hideSmallBalances, updateHideSmallBalances] = useAtom(hideSmallBalancesAtom)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Row align="center">
|
<SettingsToggle
|
||||||
<Row width="50%">
|
title={t`Hide small balances`}
|
||||||
<ThemedText.SubHeaderSmall color="primary">
|
|
||||||
<Trans>Hide small balances</Trans>
|
|
||||||
</ThemedText.SubHeaderSmall>
|
|
||||||
</Row>
|
|
||||||
<Row width="50%" justify="flex-end">
|
|
||||||
<Toggle
|
|
||||||
isActive={hideSmallBalances}
|
isActive={hideSmallBalances}
|
||||||
toggle={() => {
|
toggle={() => void updateHideSmallBalances((value) => !value)}
|
||||||
updateHideSmallBalances(!hideSmallBalances)
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
</Row>
|
|
||||||
</Row>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { t } from '@lingui/macro'
|
||||||
import Row from 'components/Row'
|
|
||||||
import Toggle from 'components/Toggle'
|
|
||||||
import { useAtom } from 'jotai'
|
import { useAtom } from 'jotai'
|
||||||
import { atomWithStorage } from 'jotai/utils'
|
import { atomWithStorage } from 'jotai/utils'
|
||||||
import { ThemedText } from 'theme'
|
|
||||||
|
import { SettingsToggle } from './SettingsToggle'
|
||||||
|
|
||||||
export const showTestnetsAtom = atomWithStorage<boolean>('showTestnets', false)
|
export const showTestnetsAtom = atomWithStorage<boolean>('showTestnets', false)
|
||||||
|
|
||||||
@ -11,21 +10,11 @@ export function TestnetsToggle() {
|
|||||||
const [showTestnets, updateShowTestnets] = useAtom(showTestnetsAtom)
|
const [showTestnets, updateShowTestnets] = useAtom(showTestnetsAtom)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Row align="center">
|
<SettingsToggle
|
||||||
<Row width="50%">
|
title={t`Show testnets`}
|
||||||
<ThemedText.SubHeaderSmall color="primary">
|
dataid="testnets-toggle"
|
||||||
<Trans>Show testnets</Trans>
|
|
||||||
</ThemedText.SubHeaderSmall>
|
|
||||||
</Row>
|
|
||||||
<Row width="50%" justify="flex-end">
|
|
||||||
<Toggle
|
|
||||||
id="testnets-toggle"
|
|
||||||
isActive={showTestnets}
|
isActive={showTestnets}
|
||||||
toggle={() => {
|
toggle={() => void updateShowTestnets((value) => !value)}
|
||||||
updateShowTestnets(!showTestnets)
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
</Row>
|
|
||||||
</Row>
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { sendAnalyticsEvent } from '@uniswap/analytics'
|
|
||||||
import { InterfaceElementName } from '@uniswap/analytics-events'
|
import { InterfaceElementName } from '@uniswap/analytics-events'
|
||||||
import { WalletConnect as WalletConnectv2 } from '@web3-react/walletconnect-v2'
|
import { WalletConnect as WalletConnectv2 } from '@web3-react/walletconnect-v2'
|
||||||
|
import { sendAnalyticsEvent } from 'analytics'
|
||||||
import Column, { AutoColumn } from 'components/Column'
|
import Column, { AutoColumn } from 'components/Column'
|
||||||
import Modal from 'components/Modal'
|
import Modal from 'components/Modal'
|
||||||
import { RowBetween } from 'components/Row'
|
import { RowBetween } from 'components/Row'
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceEventName } from '@uniswap/analytics-events'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import { ScrollBarStyles } from 'components/Common'
|
import { ScrollBarStyles } from 'components/Common'
|
||||||
import { useWindowSize } from 'hooks/useWindowSize'
|
import { useWindowSize } from 'hooks/useWindowSize'
|
||||||
import { atom } from 'jotai'
|
import { atom } from 'jotai'
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, SwapEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, SwapEventName } from '@uniswap/analytics-events'
|
||||||
import { formatCurrencyAmount, NumberType } from '@uniswap/conedison/format'
|
import { formatCurrencyAmount, NumberType } from '@uniswap/conedison/format'
|
||||||
import { Currency, CurrencyAmount, Percent } from '@uniswap/sdk-core'
|
import { Currency, CurrencyAmount, Percent } from '@uniswap/sdk-core'
|
||||||
import { Pair } from '@uniswap/v2-sdk'
|
import { Pair } from '@uniswap/v2-sdk'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import PrefetchBalancesWrapper from 'components/AccountDrawer/PrefetchBalancesWrapper'
|
import PrefetchBalancesWrapper from 'components/AccountDrawer/PrefetchBalancesWrapper'
|
||||||
import { AutoColumn } from 'components/Column'
|
import { AutoColumn } from 'components/Column'
|
||||||
import { LoadingOpacityContainer, loadingOpacityMixin } from 'components/Loader/styled'
|
import { LoadingOpacityContainer, loadingOpacityMixin } from 'components/Loader/styled'
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, SwapEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, SwapEventName } from '@uniswap/analytics-events'
|
||||||
import { Currency, CurrencyAmount } from '@uniswap/sdk-core'
|
import { Currency, CurrencyAmount } from '@uniswap/sdk-core'
|
||||||
import { Pair } from '@uniswap/v2-sdk'
|
import { Pair } from '@uniswap/v2-sdk'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import { AutoColumn } from 'components/Column'
|
import { AutoColumn } from 'components/Column'
|
||||||
import { LoadingOpacityContainer, loadingOpacityMixin } from 'components/Loader/styled'
|
import { LoadingOpacityContainer, loadingOpacityMixin } from 'components/Loader/styled'
|
||||||
import { isSupportedChain } from 'constants/chains'
|
import { isSupportedChain } from 'constants/chains'
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
// eslint-disable-next-line no-restricted-imports
|
// eslint-disable-next-line no-restricted-imports
|
||||||
import { t } from '@lingui/macro'
|
import { t } from '@lingui/macro'
|
||||||
import { sendAnalyticsEvent, Trace, TraceEvent, useTrace } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, InterfaceEventName, InterfaceSectionName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, InterfaceEventName, InterfaceSectionName } from '@uniswap/analytics-events'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { sendAnalyticsEvent, Trace, TraceEvent, useTrace } from 'analytics'
|
||||||
import clsx from 'clsx'
|
import clsx from 'clsx'
|
||||||
import { useCollectionSearch } from 'graphql/data/nft/CollectionSearch'
|
import { useCollectionSearch } from 'graphql/data/nft/CollectionSearch'
|
||||||
import { useSearchTokens } from 'graphql/data/SearchTokens'
|
import { useSearchTokens } from 'graphql/data/SearchTokens'
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { useTrace } from '@uniswap/analytics'
|
|
||||||
import { InterfaceSectionName, NavBarSearchTypes } from '@uniswap/analytics-events'
|
import { InterfaceSectionName, NavBarSearchTypes } from '@uniswap/analytics-events'
|
||||||
import { ChainId } from '@uniswap/sdk-core'
|
import { ChainId } from '@uniswap/sdk-core'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { useTrace } from 'analytics'
|
||||||
import clsx from 'clsx'
|
import clsx from 'clsx'
|
||||||
import Badge from 'components/Badge'
|
import Badge from 'components/Badge'
|
||||||
import { getChainInfo } from 'constants/chainInfo'
|
import { getChainInfo } from 'constants/chainInfo'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { sendAnalyticsEvent } from '@uniswap/analytics'
|
|
||||||
import { InterfaceEventName } from '@uniswap/analytics-events'
|
import { InterfaceEventName } from '@uniswap/analytics-events'
|
||||||
import { formatUSDPrice } from '@uniswap/conedison/format'
|
import { formatUSDPrice } from '@uniswap/conedison/format'
|
||||||
|
import { sendAnalyticsEvent } from 'analytics'
|
||||||
import clsx from 'clsx'
|
import clsx from 'clsx'
|
||||||
import QueryTokenLogo from 'components/Logo/QueryTokenLogo'
|
import QueryTokenLogo from 'components/Logo/QueryTokenLogo'
|
||||||
import TokenSafetyIcon from 'components/TokenSafety/TokenSafetyIcon'
|
import TokenSafetyIcon from 'components/TokenSafety/TokenSafetyIcon'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, InterfaceEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, InterfaceEventName } from '@uniswap/analytics-events'
|
||||||
import { Currency } from '@uniswap/sdk-core'
|
import { Currency } from '@uniswap/sdk-core'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import { AutoColumn } from 'components/Column'
|
import { AutoColumn } from 'components/Column'
|
||||||
import CurrencyLogo from 'components/Logo/CurrencyLogo'
|
import CurrencyLogo from 'components/Logo/CurrencyLogo'
|
||||||
import { AutoRow } from 'components/Row'
|
import { AutoRow } from 'components/Row'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, InterfaceEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, InterfaceEventName } from '@uniswap/analytics-events'
|
||||||
import { Currency, CurrencyAmount, Token } from '@uniswap/sdk-core'
|
import { Currency, CurrencyAmount, Token } from '@uniswap/sdk-core'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import Loader from 'components/Icons/LoadingSpinner'
|
import Loader from 'components/Icons/LoadingSpinner'
|
||||||
import TokenSafetyIcon from 'components/TokenSafety/TokenSafetyIcon'
|
import TokenSafetyIcon from 'components/TokenSafety/TokenSafetyIcon'
|
||||||
import { checkWarning } from 'constants/tokenSafety'
|
import { checkWarning } from 'constants/tokenSafety'
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
// eslint-disable-next-line no-restricted-imports
|
// eslint-disable-next-line no-restricted-imports
|
||||||
import { t, Trans } from '@lingui/macro'
|
import { t, Trans } from '@lingui/macro'
|
||||||
import { Trace } from '@uniswap/analytics'
|
|
||||||
import { InterfaceEventName, InterfaceModalName } from '@uniswap/analytics-events'
|
import { InterfaceEventName, InterfaceModalName } from '@uniswap/analytics-events'
|
||||||
import { Currency, Token } from '@uniswap/sdk-core'
|
import { Currency, Token } from '@uniswap/sdk-core'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { Trace } from 'analytics'
|
||||||
import { useCachedPortfolioBalancesQuery } from 'components/AccountDrawer/PrefetchBalancesWrapper'
|
import { useCachedPortfolioBalancesQuery } from 'components/AccountDrawer/PrefetchBalancesWrapper'
|
||||||
import { sendEvent } from 'components/analytics'
|
import { sendEvent } from 'components/analytics'
|
||||||
import { supportedChainIdFromGQLChain } from 'graphql/data/util'
|
import { supportedChainIdFromGQLChain } from 'graphql/data/util'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { Trace } from '@uniswap/analytics'
|
|
||||||
import { InterfacePageName } from '@uniswap/analytics-events'
|
import { InterfacePageName } from '@uniswap/analytics-events'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { Trace } from 'analytics'
|
||||||
import CurrencyLogo from 'components/Logo/CurrencyLogo'
|
import CurrencyLogo from 'components/Logo/CurrencyLogo'
|
||||||
import { AboutSection } from 'components/Tokens/TokenDetails/About'
|
import { AboutSection } from 'components/Tokens/TokenDetails/About'
|
||||||
import AddressSection from 'components/Tokens/TokenDetails/AddressSection'
|
import AddressSection from 'components/Tokens/TokenDetails/AddressSection'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, InterfaceEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, InterfaceEventName } from '@uniswap/analytics-events'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import searchIcon from 'assets/svg/search.svg'
|
import searchIcon from 'assets/svg/search.svg'
|
||||||
import xIcon from 'assets/svg/x.svg'
|
import xIcon from 'assets/svg/x.svg'
|
||||||
import useDebounce from 'hooks/useDebounce'
|
import useDebounce from 'hooks/useDebounce'
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { sendAnalyticsEvent } from '@uniswap/analytics'
|
|
||||||
import { InterfaceEventName } from '@uniswap/analytics-events'
|
import { InterfaceEventName } from '@uniswap/analytics-events'
|
||||||
import { formatNumber, formatUSDPrice, NumberType } from '@uniswap/conedison/format'
|
import { formatNumber, formatUSDPrice, NumberType } from '@uniswap/conedison/format'
|
||||||
import { ParentSize } from '@visx/responsive'
|
import { ParentSize } from '@visx/responsive'
|
||||||
|
import { sendAnalyticsEvent } from 'analytics'
|
||||||
import SparklineChart from 'components/Charts/SparklineChart'
|
import SparklineChart from 'components/Charts/SparklineChart'
|
||||||
import QueryTokenLogo from 'components/Logo/QueryTokenLogo'
|
import QueryTokenLogo from 'components/Logo/QueryTokenLogo'
|
||||||
import { MouseoverTooltip } from 'components/Tooltip'
|
import { MouseoverTooltip } from 'components/Tooltip'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, InterfaceEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, InterfaceEventName } from '@uniswap/analytics-events'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
||||||
import Loader from 'components/Icons/LoadingSpinner'
|
import Loader from 'components/Icons/LoadingSpinner'
|
||||||
import { ActivationStatus, useActivationState } from 'connection/activate'
|
import { ActivationStatus, useActivationState } from 'connection/activate'
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { act, render } from '@testing-library/react'
|
import { act, render } from '@testing-library/react'
|
||||||
import { sendAnalyticsEvent, user } from '@uniswap/analytics'
|
|
||||||
import { InterfaceEventName, WalletConnectionResult } from '@uniswap/analytics-events'
|
import { InterfaceEventName, WalletConnectionResult } from '@uniswap/analytics-events'
|
||||||
import { initializeConnector, MockEIP1193Provider } from '@web3-react/core'
|
import { initializeConnector, MockEIP1193Provider } from '@web3-react/core'
|
||||||
import { EIP1193 } from '@web3-react/eip1193'
|
import { EIP1193 } from '@web3-react/eip1193'
|
||||||
import { Provider as EIP1193Provider } from '@web3-react/types'
|
import { Provider as EIP1193Provider } from '@web3-react/types'
|
||||||
|
import { sendAnalyticsEvent, user } from 'analytics'
|
||||||
import { getConnection } from 'connection'
|
import { getConnection } from 'connection'
|
||||||
import { Connection, ConnectionType } from 'connection/types'
|
import { Connection, ConnectionType } from 'connection/types'
|
||||||
import useEagerlyConnect from 'hooks/useEagerlyConnect'
|
import useEagerlyConnect from 'hooks/useEagerlyConnect'
|
||||||
@ -15,7 +15,7 @@ import { mocked } from 'test-utils/mocked'
|
|||||||
|
|
||||||
import Web3Provider from '.'
|
import Web3Provider from '.'
|
||||||
|
|
||||||
jest.mock('@uniswap/analytics', () => ({
|
jest.mock('analytics', () => ({
|
||||||
sendAnalyticsEvent: jest.fn(),
|
sendAnalyticsEvent: jest.fn(),
|
||||||
user: { set: jest.fn(), postInsert: jest.fn() },
|
user: { set: jest.fn(), postInsert: jest.fn() },
|
||||||
}))
|
}))
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { sendAnalyticsEvent, user } from '@uniswap/analytics'
|
|
||||||
import { CustomUserProperties, InterfaceEventName, WalletConnectionResult } from '@uniswap/analytics-events'
|
import { CustomUserProperties, InterfaceEventName, WalletConnectionResult } from '@uniswap/analytics-events'
|
||||||
import { getWalletMeta } from '@uniswap/conedison/provider/meta'
|
import { getWalletMeta } from '@uniswap/conedison/provider/meta'
|
||||||
import { useWeb3React, Web3ReactHooks, Web3ReactProvider } from '@web3-react/core'
|
import { useWeb3React, Web3ReactHooks, Web3ReactProvider } from '@web3-react/core'
|
||||||
import { Connector } from '@web3-react/types'
|
import { Connector } from '@web3-react/types'
|
||||||
|
import { sendAnalyticsEvent, user } from 'analytics'
|
||||||
import { getConnection } from 'connection'
|
import { getConnection } from 'connection'
|
||||||
import { isSupportedChain } from 'constants/chains'
|
import { isSupportedChain } from 'constants/chains'
|
||||||
import { RPC_PROVIDERS } from 'constants/providers'
|
import { RPC_PROVIDERS } from 'constants/providers'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { sendAnalyticsEvent, TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, InterfaceEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, InterfaceEventName } from '@uniswap/analytics-events'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { sendAnalyticsEvent, TraceEvent } from 'analytics'
|
||||||
import PortfolioDrawer, { useAccountDrawer } from 'components/AccountDrawer'
|
import PortfolioDrawer, { useAccountDrawer } from 'components/AccountDrawer'
|
||||||
import PrefetchBalancesWrapper from 'components/AccountDrawer/PrefetchBalancesWrapper'
|
import PrefetchBalancesWrapper from 'components/AccountDrawer/PrefetchBalancesWrapper'
|
||||||
import Loader from 'components/Icons/LoadingSpinner'
|
import Loader from 'components/Icons/LoadingSpinner'
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { Plural, Trans } from '@lingui/macro'
|
import { Plural, Trans } from '@lingui/macro'
|
||||||
import { sendAnalyticsEvent } from '@uniswap/analytics'
|
|
||||||
import { InterfaceElementName, SwapEventName } from '@uniswap/analytics-events'
|
import { InterfaceElementName, SwapEventName } from '@uniswap/analytics-events'
|
||||||
import { formatCurrencyAmount, formatNumber, formatPriceImpact, NumberType } from '@uniswap/conedison/format'
|
import { formatCurrencyAmount, formatNumber, formatPriceImpact, NumberType } from '@uniswap/conedison/format'
|
||||||
import { Percent, TradeType } from '@uniswap/sdk-core'
|
import { Percent, TradeType } from '@uniswap/sdk-core'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { sendAnalyticsEvent } from 'analytics'
|
||||||
import { LoadingRows } from 'components/Loader/styled'
|
import { LoadingRows } from 'components/Loader/styled'
|
||||||
import { SUPPORTED_GAS_ESTIMATE_CHAIN_IDS } from 'constants/chains'
|
import { SUPPORTED_GAS_ESTIMATE_CHAIN_IDS } from 'constants/chains'
|
||||||
import useNativeCurrency from 'lib/hooks/useNativeCurrency'
|
import useNativeCurrency from 'lib/hooks/useNativeCurrency'
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { sendAnalyticsEvent, Trace, useTrace } from '@uniswap/analytics'
|
|
||||||
import {
|
import {
|
||||||
InterfaceEventName,
|
InterfaceEventName,
|
||||||
InterfaceModalName,
|
InterfaceModalName,
|
||||||
@ -9,6 +8,7 @@ import {
|
|||||||
import { formatCurrencyAmount, NumberType } from '@uniswap/conedison/format'
|
import { formatCurrencyAmount, NumberType } from '@uniswap/conedison/format'
|
||||||
import { Currency, Percent } from '@uniswap/sdk-core'
|
import { Currency, Percent } from '@uniswap/sdk-core'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { sendAnalyticsEvent, Trace, useTrace } from 'analytics'
|
||||||
import Badge from 'components/Badge'
|
import Badge from 'components/Badge'
|
||||||
import Modal, { MODAL_TRANSITION_DURATION } from 'components/Modal'
|
import Modal, { MODAL_TRANSITION_DURATION } from 'components/Modal'
|
||||||
import { RowFixed } from 'components/Row'
|
import { RowFixed } from 'components/Row'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { sendAnalyticsEvent } from '@uniswap/analytics'
|
|
||||||
import { InterfaceElementName, SwapEventName } from '@uniswap/analytics-events'
|
import { InterfaceElementName, SwapEventName } from '@uniswap/analytics-events'
|
||||||
import { formatNumber, NumberType } from '@uniswap/conedison/format'
|
import { formatNumber, NumberType } from '@uniswap/conedison/format'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { sendAnalyticsEvent } from 'analytics'
|
||||||
import { LoadingOpacityContainer } from 'components/Loader/styled'
|
import { LoadingOpacityContainer } from 'components/Loader/styled'
|
||||||
import { UniswapXRouterIcon } from 'components/RouterLabel/UniswapXRouterLabel'
|
import { UniswapXRouterIcon } from 'components/RouterLabel/UniswapXRouterLabel'
|
||||||
import Row, { RowFixed } from 'components/Row'
|
import Row, { RowFixed } from 'components/Row'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, SharedEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, SharedEventName } from '@uniswap/analytics-events'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import { useAccountDrawer } from 'components/AccountDrawer'
|
import { useAccountDrawer } from 'components/AccountDrawer'
|
||||||
import { ButtonText } from 'components/Button'
|
import { ButtonText } from 'components/Button'
|
||||||
import { MouseoverTooltip } from 'components/Tooltip'
|
import { MouseoverTooltip } from 'components/Tooltip'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { TraceEvent, useTrace } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, SwapEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, SwapEventName } from '@uniswap/analytics-events'
|
||||||
import { Percent } from '@uniswap/sdk-core'
|
import { Percent } from '@uniswap/sdk-core'
|
||||||
|
import { TraceEvent, useTrace } from 'analytics'
|
||||||
import AnimatedDropdown from 'components/AnimatedDropdown'
|
import AnimatedDropdown from 'components/AnimatedDropdown'
|
||||||
import Column from 'components/Column'
|
import Column from 'components/Column'
|
||||||
import { LoadingOpacityContainer } from 'components/Loader/styled'
|
import { LoadingOpacityContainer } from 'components/Loader/styled'
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { Plural, Trans } from '@lingui/macro'
|
import { Plural, Trans } from '@lingui/macro'
|
||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, SwapEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, SwapEventName } from '@uniswap/analytics-events'
|
||||||
import { formatNumber, formatPriceImpact, NumberType } from '@uniswap/conedison/format'
|
import { formatNumber, formatPriceImpact, NumberType } from '@uniswap/conedison/format'
|
||||||
import { Percent, TradeType } from '@uniswap/sdk-core'
|
import { Percent, TradeType } from '@uniswap/sdk-core'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import Column from 'components/Column'
|
import Column from 'components/Column'
|
||||||
import { MouseoverTooltip, TooltipSize } from 'components/Tooltip'
|
import { MouseoverTooltip, TooltipSize } from 'components/Tooltip'
|
||||||
import { SwapResult } from 'hooks/useSwapCallback'
|
import { SwapResult } from 'hooks/useSwapCallback'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { sendAnalyticsEvent } from '@uniswap/analytics'
|
|
||||||
import { ChainId } from '@uniswap/sdk-core'
|
import { ChainId } from '@uniswap/sdk-core'
|
||||||
import { URI_AVAILABLE, WalletConnect, WalletConnectConstructorArgs } from '@web3-react/walletconnect-v2'
|
import { URI_AVAILABLE, WalletConnect, WalletConnectConstructorArgs } from '@web3-react/walletconnect-v2'
|
||||||
|
import { sendAnalyticsEvent } from 'analytics'
|
||||||
import { L1_CHAIN_IDS, L2_CHAIN_IDS } from 'constants/chains'
|
import { L1_CHAIN_IDS, L2_CHAIN_IDS } from 'constants/chains'
|
||||||
import { Z_INDEX } from 'theme/zIndex'
|
import { Z_INDEX } from 'theme/zIndex'
|
||||||
import { isIOS } from 'utils/userAgent'
|
import { isIOS } from 'utils/userAgent'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { sendAnalyticsEvent } from '@uniswap/analytics'
|
|
||||||
import { InterfaceEventName, WalletConnectionResult } from '@uniswap/analytics-events'
|
import { InterfaceEventName, WalletConnectionResult } from '@uniswap/analytics-events'
|
||||||
import { ChainId } from '@uniswap/sdk-core'
|
import { ChainId } from '@uniswap/sdk-core'
|
||||||
|
import { sendAnalyticsEvent } from 'analytics'
|
||||||
import { Connection } from 'connection/types'
|
import { Connection } from 'connection/types'
|
||||||
import { atom } from 'jotai'
|
import { atom } from 'jotai'
|
||||||
import { useAtomValue, useUpdateAtom } from 'jotai/utils'
|
import { useAtomValue, useUpdateAtom } from 'jotai/utils'
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { sendAnalyticsEvent, useTrace } from '@uniswap/analytics'
|
|
||||||
import { SwapEventName } from '@uniswap/analytics-events'
|
import { SwapEventName } from '@uniswap/analytics-events'
|
||||||
import { signTypedData } from '@uniswap/conedison/provider/signing'
|
import { signTypedData } from '@uniswap/conedison/provider/signing'
|
||||||
import { Percent } from '@uniswap/sdk-core'
|
import { Percent } from '@uniswap/sdk-core'
|
||||||
import { DutchOrder, DutchOrderBuilder } from '@uniswap/uniswapx-sdk'
|
import { DutchOrder, DutchOrderBuilder } from '@uniswap/uniswapx-sdk'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { sendAnalyticsEvent, useTrace } from 'analytics'
|
||||||
import { formatSwapSignedAnalyticsEventProperties } from 'lib/utils/analytics'
|
import { formatSwapSignedAnalyticsEventProperties } from 'lib/utils/analytics'
|
||||||
import { useCallback } from 'react'
|
import { useCallback } from 'react'
|
||||||
import { DutchOrderTrade, TradeFillType } from 'state/routing/types'
|
import { DutchOrderTrade, TradeFillType } from 'state/routing/types'
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import { BigNumber } from '@ethersproject/bignumber'
|
import { BigNumber } from '@ethersproject/bignumber'
|
||||||
import { t } from '@lingui/macro'
|
import { t } from '@lingui/macro'
|
||||||
import { sendAnalyticsEvent, useTrace } from '@uniswap/analytics'
|
|
||||||
import { SwapEventName } from '@uniswap/analytics-events'
|
import { SwapEventName } from '@uniswap/analytics-events'
|
||||||
import { Percent } from '@uniswap/sdk-core'
|
import { Percent } from '@uniswap/sdk-core'
|
||||||
import { SwapRouter, UNIVERSAL_ROUTER_ADDRESS } from '@uniswap/universal-router-sdk'
|
import { SwapRouter, UNIVERSAL_ROUTER_ADDRESS } from '@uniswap/universal-router-sdk'
|
||||||
import { FeeOptions, toHex } from '@uniswap/v3-sdk'
|
import { FeeOptions, toHex } from '@uniswap/v3-sdk'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { sendAnalyticsEvent, useTrace } from 'analytics'
|
||||||
import { formatSwapSignedAnalyticsEventProperties } from 'lib/utils/analytics'
|
import { formatSwapSignedAnalyticsEventProperties } from 'lib/utils/analytics'
|
||||||
import { useCallback } from 'react'
|
import { useCallback } from 'react'
|
||||||
import { ClassicTrade, TradeFillType } from 'state/routing/types'
|
import { ClassicTrade, TradeFillType } from 'state/routing/types'
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { sendAnalyticsEvent } from '@uniswap/analytics'
|
|
||||||
import { InterfaceEventName } from '@uniswap/analytics-events'
|
import { InterfaceEventName } from '@uniswap/analytics-events'
|
||||||
import { Currency } from '@uniswap/sdk-core'
|
import { Currency } from '@uniswap/sdk-core'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { sendAnalyticsEvent } from 'analytics'
|
||||||
import useNativeCurrency from 'lib/hooks/useNativeCurrency'
|
import useNativeCurrency from 'lib/hooks/useNativeCurrency'
|
||||||
import { formatToDecimal, getTokenAddress } from 'lib/utils/analytics'
|
import { formatToDecimal, getTokenAddress } from 'lib/utils/analytics'
|
||||||
import tryParseCurrencyAmount from 'lib/utils/tryParseCurrencyAmount'
|
import tryParseCurrencyAmount from 'lib/utils/tryParseCurrencyAmount'
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { MaxUint256 } from '@ethersproject/constants'
|
import { MaxUint256 } from '@ethersproject/constants'
|
||||||
import type { TransactionResponse } from '@ethersproject/providers'
|
import type { TransactionResponse } from '@ethersproject/providers'
|
||||||
import { sendAnalyticsEvent } from '@uniswap/analytics'
|
|
||||||
import { InterfaceEventName } from '@uniswap/analytics-events'
|
import { InterfaceEventName } from '@uniswap/analytics-events'
|
||||||
import { Currency, CurrencyAmount, Token } from '@uniswap/sdk-core'
|
import { Currency, CurrencyAmount, Token } from '@uniswap/sdk-core'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { sendAnalyticsEvent } from 'analytics'
|
||||||
import { useTokenContract } from 'hooks/useContract'
|
import { useTokenContract } from 'hooks/useContract'
|
||||||
import { useTokenAllowance } from 'hooks/useTokenAllowance'
|
import { useTokenAllowance } from 'hooks/useTokenAllowance'
|
||||||
import { getTokenAddress } from 'lib/utils/analytics'
|
import { getTokenAddress } from 'lib/utils/analytics'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { sendAnalyticsEvent } from '@uniswap/analytics'
|
|
||||||
import { NFTEventName } from '@uniswap/analytics-events'
|
import { NFTEventName } from '@uniswap/analytics-events'
|
||||||
|
import { sendAnalyticsEvent } from 'analytics'
|
||||||
import { useIsNftDetailsPage, useIsNftPage, useIsNftProfilePage } from 'hooks/useIsNftPage'
|
import { useIsNftDetailsPage, useIsNftPage, useIsNftProfilePage } from 'hooks/useIsNftPage'
|
||||||
import { BagFooter } from 'nft/components/bag/BagFooter'
|
import { BagFooter } from 'nft/components/bag/BagFooter'
|
||||||
import { Box } from 'nft/components/Box'
|
import { Box } from 'nft/components/Box'
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { sendAnalyticsEvent, Trace } from '@uniswap/analytics'
|
|
||||||
import { NFTEventName } from '@uniswap/analytics-events'
|
import { NFTEventName } from '@uniswap/analytics-events'
|
||||||
|
import { sendAnalyticsEvent, Trace } from 'analytics'
|
||||||
import { BagRow, PriceChangeBagRow, UnavailableAssetsHeaderRow } from 'nft/components/bag/BagRow'
|
import { BagRow, PriceChangeBagRow, UnavailableAssetsHeaderRow } from 'nft/components/bag/BagRow'
|
||||||
import { Column } from 'nft/components/Flex'
|
import { Column } from 'nft/components/Flex'
|
||||||
import { useBag, useIsMobile } from 'nft/hooks'
|
import { useBag, useIsMobile } from 'nft/hooks'
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import { BigNumber } from '@ethersproject/bignumber'
|
import { BigNumber } from '@ethersproject/bignumber'
|
||||||
import { formatEther, parseEther } from '@ethersproject/units'
|
import { formatEther, parseEther } from '@ethersproject/units'
|
||||||
import { t, Trans } from '@lingui/macro'
|
import { t, Trans } from '@lingui/macro'
|
||||||
import { sendAnalyticsEvent, TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, NFTEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, NFTEventName } from '@uniswap/analytics-events'
|
||||||
import { ChainId, Currency, CurrencyAmount, Token } from '@uniswap/sdk-core'
|
import { ChainId, Currency, CurrencyAmount, Token } from '@uniswap/sdk-core'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { sendAnalyticsEvent, TraceEvent } from 'analytics'
|
||||||
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
||||||
import Column from 'components/Column'
|
import Column from 'components/Column'
|
||||||
import Loader from 'components/Icons/LoadingSpinner'
|
import Loader from 'components/Icons/LoadingSpinner'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { sendAnalyticsEvent, useTrace } from '@uniswap/analytics'
|
|
||||||
import { InterfacePageName, NFTEventName } from '@uniswap/analytics-events'
|
import { InterfacePageName, NFTEventName } from '@uniswap/analytics-events'
|
||||||
import { ChainId } from '@uniswap/sdk-core'
|
import { ChainId } from '@uniswap/sdk-core'
|
||||||
|
import { sendAnalyticsEvent, useTrace } from 'analytics'
|
||||||
import { MouseoverTooltip } from 'components/Tooltip'
|
import { MouseoverTooltip } from 'components/Tooltip'
|
||||||
import { NftActivityType, NftMarketplace, OrderStatus } from 'graphql/data/__generated__/types-and-hooks'
|
import { NftActivityType, NftMarketplace, OrderStatus } from 'graphql/data/__generated__/types-and-hooks'
|
||||||
import { Box } from 'nft/components/Box'
|
import { Box } from 'nft/components/Box'
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, NFTEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, NFTEventName } from '@uniswap/analytics-events'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import { Box } from 'nft/components/Box'
|
import { Box } from 'nft/components/Box'
|
||||||
import { Row } from 'nft/components/Flex'
|
import { Row } from 'nft/components/Flex'
|
||||||
import { useIsCollectionLoading } from 'nft/hooks'
|
import { useIsCollectionLoading } from 'nft/hooks'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { BigNumber } from '@ethersproject/bignumber'
|
import { BigNumber } from '@ethersproject/bignumber'
|
||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { sendAnalyticsEvent, useTrace } from '@uniswap/analytics'
|
|
||||||
import { InterfacePageName, NFTEventName } from '@uniswap/analytics-events'
|
import { InterfacePageName, NFTEventName } from '@uniswap/analytics-events'
|
||||||
|
import { sendAnalyticsEvent, useTrace } from 'analytics'
|
||||||
import { NftCard, NftCardDisplayProps } from 'nft/components/card'
|
import { NftCard, NftCardDisplayProps } from 'nft/components/card'
|
||||||
import { Ranking as RankingContainer, Suspicious as SuspiciousContainer } from 'nft/components/card/icons'
|
import { Ranking as RankingContainer, Suspicious as SuspiciousContainer } from 'nft/components/card/icons'
|
||||||
import { useBag } from 'nft/hooks'
|
import { useBag } from 'nft/hooks'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { BigNumber } from '@ethersproject/bignumber'
|
import { BigNumber } from '@ethersproject/bignumber'
|
||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, NFTEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, NFTEventName } from '@uniswap/analytics-events'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import clsx from 'clsx'
|
import clsx from 'clsx'
|
||||||
import { OpacityHoverState } from 'components/Common'
|
import { OpacityHoverState } from 'components/Common'
|
||||||
import { parseEther } from 'ethers/lib/utils'
|
import { parseEther } from 'ethers/lib/utils'
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { sendAnalyticsEvent } from '@uniswap/analytics'
|
|
||||||
import { NFTEventName, NFTFilterTypes } from '@uniswap/analytics-events'
|
import { NFTEventName, NFTFilterTypes } from '@uniswap/analytics-events'
|
||||||
|
import { sendAnalyticsEvent } from 'analytics'
|
||||||
import clsx from 'clsx'
|
import clsx from 'clsx'
|
||||||
import { Box } from 'nft/components/Box'
|
import { Box } from 'nft/components/Box'
|
||||||
import * as styles from 'nft/components/collection/Filters.css'
|
import * as styles from 'nft/components/collection/Filters.css'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import 'rc-slider/assets/index.css'
|
import 'rc-slider/assets/index.css'
|
||||||
|
|
||||||
import { sendAnalyticsEvent } from '@uniswap/analytics'
|
|
||||||
import { NFTEventName, NFTFilterTypes } from '@uniswap/analytics-events'
|
import { NFTEventName, NFTFilterTypes } from '@uniswap/analytics-events'
|
||||||
|
import { sendAnalyticsEvent } from 'analytics'
|
||||||
import { Box } from 'nft/components/Box'
|
import { Box } from 'nft/components/Box'
|
||||||
import { Row } from 'nft/components/Flex'
|
import { Row } from 'nft/components/Flex'
|
||||||
import { NumericInput } from 'nft/components/layout/Input'
|
import { NumericInput } from 'nft/components/layout/Input'
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { sendAnalyticsEvent } from '@uniswap/analytics'
|
|
||||||
import { NFTEventName, NFTFilterTypes } from '@uniswap/analytics-events'
|
import { NFTEventName, NFTFilterTypes } from '@uniswap/analytics-events'
|
||||||
|
import { sendAnalyticsEvent } from 'analytics'
|
||||||
import useDebounce from 'hooks/useDebounce'
|
import useDebounce from 'hooks/useDebounce'
|
||||||
import { Box } from 'nft/components/Box'
|
import { Box } from 'nft/components/Box'
|
||||||
import { Column, Row } from 'nft/components/Flex'
|
import { Column, Row } from 'nft/components/Flex'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { formatEther } from '@ethersproject/units'
|
import { formatEther } from '@ethersproject/units'
|
||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { Trace, useTrace } from '@uniswap/analytics'
|
|
||||||
import { InterfaceModalName, NFTEventName } from '@uniswap/analytics-events'
|
import { InterfaceModalName, NFTEventName } from '@uniswap/analytics-events'
|
||||||
|
import { Trace, useTrace } from 'analytics'
|
||||||
import clsx from 'clsx'
|
import clsx from 'clsx'
|
||||||
import { OpacityHoverState } from 'components/Common'
|
import { OpacityHoverState } from 'components/Common'
|
||||||
import { Box } from 'nft/components/Box'
|
import { Box } from 'nft/components/Box'
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import { useTrace } from '@uniswap/analytics'
|
|
||||||
import { sendAnalyticsEvent } from '@uniswap/analytics'
|
|
||||||
import { NFTEventName } from '@uniswap/analytics-events'
|
import { NFTEventName } from '@uniswap/analytics-events'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { sendAnalyticsEvent, useTrace } from 'analytics'
|
||||||
import { OpacityHoverState } from 'components/Common'
|
import { OpacityHoverState } from 'components/Common'
|
||||||
import { useNftBalance } from 'graphql/data/nft/NftBalance'
|
import { useNftBalance } from 'graphql/data/nft/NftBalance'
|
||||||
import { CancelListingIcon, VerifiedIcon } from 'nft/components/icons'
|
import { CancelListingIcon, VerifiedIcon } from 'nft/components/icons'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, NFTEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, NFTEventName } from '@uniswap/analytics-events'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import { LoadingBubble } from 'components/Tokens/loading'
|
import { LoadingBubble } from 'components/Tokens/loading'
|
||||||
import { useWindowSize } from 'hooks/useWindowSize'
|
import { useWindowSize } from 'hooks/useWindowSize'
|
||||||
import { useIsMobile } from 'nft/hooks'
|
import { useIsMobile } from 'nft/hooks'
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { sendAnalyticsEvent, useTrace } from '@uniswap/analytics'
|
|
||||||
import { InterfaceModalName, NFTEventName } from '@uniswap/analytics-events'
|
import { InterfaceModalName, NFTEventName } from '@uniswap/analytics-events'
|
||||||
import { formatCurrencyAmount, NumberType } from '@uniswap/conedison/format'
|
import { formatCurrencyAmount, NumberType } from '@uniswap/conedison/format'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { sendAnalyticsEvent, useTrace } from 'analytics'
|
||||||
import Column from 'components/Column'
|
import Column from 'components/Column'
|
||||||
import Row from 'components/Row'
|
import Row from 'components/Row'
|
||||||
import { useStablecoinValue } from 'hooks/useStablecoinPrice'
|
import { useStablecoinValue } from 'hooks/useStablecoinPrice'
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { sendAnalyticsEvent, Trace, useTrace } from '@uniswap/analytics'
|
|
||||||
import { InterfaceModalName, NFTEventName } from '@uniswap/analytics-events'
|
import { InterfaceModalName, NFTEventName } from '@uniswap/analytics-events'
|
||||||
import { formatCurrencyAmount, NumberType } from '@uniswap/conedison/format'
|
import { formatCurrencyAmount, NumberType } from '@uniswap/conedison/format'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { sendAnalyticsEvent, Trace, useTrace } from 'analytics'
|
||||||
import { useStablecoinValue } from 'hooks/useStablecoinPrice'
|
import { useStablecoinValue } from 'hooks/useStablecoinPrice'
|
||||||
import useNativeCurrency from 'lib/hooks/useNativeCurrency'
|
import useNativeCurrency from 'lib/hooks/useNativeCurrency'
|
||||||
import tryParseCurrencyAmount from 'lib/utils/tryParseCurrencyAmount'
|
import tryParseCurrencyAmount from 'lib/utils/tryParseCurrencyAmount'
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { useTrace } from '@uniswap/analytics'
|
|
||||||
import { sendAnalyticsEvent } from '@uniswap/analytics'
|
|
||||||
import { NFTEventName } from '@uniswap/analytics-events'
|
import { NFTEventName } from '@uniswap/analytics-events'
|
||||||
|
import { sendAnalyticsEvent, useTrace } from 'analytics'
|
||||||
import { NftCard, NftCardDisplayProps } from 'nft/components/card'
|
import { NftCard, NftCardDisplayProps } from 'nft/components/card'
|
||||||
import { detailsHref } from 'nft/components/card/utils'
|
import { detailsHref } from 'nft/components/card/utils'
|
||||||
import { VerifiedIcon } from 'nft/components/icons'
|
import { VerifiedIcon } from 'nft/components/icons'
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { sendAnalyticsEvent } from '@uniswap/analytics'
|
|
||||||
import { InterfaceEventName } from '@uniswap/analytics-events'
|
import { InterfaceEventName } from '@uniswap/analytics-events'
|
||||||
import { ChainId, CurrencyAmount, Token } from '@uniswap/sdk-core'
|
import { ChainId, CurrencyAmount, Token } from '@uniswap/sdk-core'
|
||||||
import { UNIVERSAL_ROUTER_ADDRESS } from '@uniswap/universal-router-sdk'
|
import { UNIVERSAL_ROUTER_ADDRESS } from '@uniswap/universal-router-sdk'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { sendAnalyticsEvent } from 'analytics'
|
||||||
import { isSupportedChain } from 'constants/chains'
|
import { isSupportedChain } from 'constants/chains'
|
||||||
import usePermit2Allowance, { AllowanceState } from 'hooks/usePermit2Allowance'
|
import usePermit2Allowance, { AllowanceState } from 'hooks/usePermit2Allowance'
|
||||||
import { useCallback, useMemo, useState } from 'react'
|
import { useCallback, useMemo, useState } from 'react'
|
||||||
|
@ -3,8 +3,8 @@ import { BigNumber } from '@ethersproject/bignumber'
|
|||||||
import { hexStripZeros } from '@ethersproject/bytes'
|
import { hexStripZeros } from '@ethersproject/bytes'
|
||||||
import { ContractReceipt } from '@ethersproject/contracts'
|
import { ContractReceipt } from '@ethersproject/contracts'
|
||||||
import type { JsonRpcSigner } from '@ethersproject/providers'
|
import type { JsonRpcSigner } from '@ethersproject/providers'
|
||||||
import { sendAnalyticsEvent } from '@uniswap/analytics'
|
|
||||||
import { NFTEventName } from '@uniswap/analytics-events'
|
import { NFTEventName } from '@uniswap/analytics-events'
|
||||||
|
import { sendAnalyticsEvent } from 'analytics'
|
||||||
import { create } from 'zustand'
|
import { create } from 'zustand'
|
||||||
import { devtools } from 'zustand/middleware'
|
import { devtools } from 'zustand/middleware'
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Trace } from '@uniswap/analytics'
|
|
||||||
import { InterfacePageName } from '@uniswap/analytics-events'
|
import { InterfacePageName } from '@uniswap/analytics-events'
|
||||||
|
import { Trace } from 'analytics'
|
||||||
import { useDetailsV2Enabled } from 'featureFlags/flags/nftDetails'
|
import { useDetailsV2Enabled } from 'featureFlags/flags/nftDetails'
|
||||||
import { useNftAssetDetails } from 'graphql/data/nft/Details'
|
import { useNftAssetDetails } from 'graphql/data/nft/Details'
|
||||||
import { AssetDetails } from 'nft/components/details/AssetDetails'
|
import { AssetDetails } from 'nft/components/details/AssetDetails'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Trace } from '@uniswap/analytics'
|
|
||||||
import { InterfacePageName } from '@uniswap/analytics-events'
|
import { InterfacePageName } from '@uniswap/analytics-events'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { Trace } from 'analytics'
|
||||||
import Column from 'components/Column'
|
import Column from 'components/Column'
|
||||||
import { OpacityHoverState } from 'components/Common'
|
import { OpacityHoverState } from 'components/Common'
|
||||||
import Row from 'components/Row'
|
import Row from 'components/Row'
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Trace } from '@uniswap/analytics'
|
|
||||||
import { InterfacePageName } from '@uniswap/analytics-events'
|
import { InterfacePageName } from '@uniswap/analytics-events'
|
||||||
|
import { Trace } from 'analytics'
|
||||||
import Banner from 'nft/components/explore/Banner'
|
import Banner from 'nft/components/explore/Banner'
|
||||||
import TrendingCollections from 'nft/components/explore/TrendingCollections'
|
import TrendingCollections from 'nft/components/explore/TrendingCollections'
|
||||||
import { useBag } from 'nft/hooks'
|
import { useBag } from 'nft/hooks'
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { Trace } from '@uniswap/analytics'
|
|
||||||
import { InterfacePageName } from '@uniswap/analytics-events'
|
import { InterfacePageName } from '@uniswap/analytics-events'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { Trace } from 'analytics'
|
||||||
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
||||||
import { ButtonPrimary } from 'components/Button'
|
import { ButtonPrimary } from 'components/Button'
|
||||||
import { XXXL_BAG_WIDTH } from 'nft/components/bag/Bag'
|
import { XXXL_BAG_WIDTH } from 'nft/components/bag/Bag'
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
import { BigNumber } from '@ethersproject/bignumber'
|
import { BigNumber } from '@ethersproject/bignumber'
|
||||||
import type { TransactionResponse } from '@ethersproject/providers'
|
import type { TransactionResponse } from '@ethersproject/providers'
|
||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, InterfaceEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, InterfaceEventName } from '@uniswap/analytics-events'
|
||||||
import { Currency, CurrencyAmount, NONFUNGIBLE_POSITION_MANAGER_ADDRESSES, Percent } from '@uniswap/sdk-core'
|
import { Currency, CurrencyAmount, NONFUNGIBLE_POSITION_MANAGER_ADDRESSES, Percent } from '@uniswap/sdk-core'
|
||||||
import { FeeAmount, NonfungiblePositionManager } from '@uniswap/v3-sdk'
|
import { FeeAmount, NonfungiblePositionManager } from '@uniswap/v3-sdk'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
||||||
import OwnershipWarning from 'components/addLiquidity/OwnershipWarning'
|
import OwnershipWarning from 'components/addLiquidity/OwnershipWarning'
|
||||||
import { sendEvent } from 'components/analytics'
|
import { sendEvent } from 'components/analytics'
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import { BigNumber } from '@ethersproject/bignumber'
|
import { BigNumber } from '@ethersproject/bignumber'
|
||||||
import type { TransactionResponse } from '@ethersproject/providers'
|
import type { TransactionResponse } from '@ethersproject/providers'
|
||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, InterfaceEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, InterfaceEventName } from '@uniswap/analytics-events'
|
||||||
import { Currency, CurrencyAmount, Percent } from '@uniswap/sdk-core'
|
import { Currency, CurrencyAmount, Percent } from '@uniswap/sdk-core'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
||||||
import { sendEvent } from 'components/analytics'
|
import { sendEvent } from 'components/analytics'
|
||||||
import UnsupportedCurrencyFooter from 'components/swap/UnsupportedCurrencyFooter'
|
import UnsupportedCurrencyFooter from 'components/swap/UnsupportedCurrencyFooter'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { getDeviceId, sendAnalyticsEvent, Trace, user } from '@uniswap/analytics'
|
|
||||||
import { CustomUserProperties, getBrowser, SharedEventName } from '@uniswap/analytics-events'
|
import { CustomUserProperties, getBrowser, SharedEventName } from '@uniswap/analytics-events'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { getDeviceId, sendAnalyticsEvent, Trace, user } from 'analytics'
|
||||||
import Loader from 'components/Icons/LoadingSpinner'
|
import Loader from 'components/Icons/LoadingSpinner'
|
||||||
import TopLevelModals from 'components/TopLevelModals'
|
import TopLevelModals from 'components/TopLevelModals'
|
||||||
import { useFeatureFlagsIsLoaded } from 'featureFlags'
|
import { useFeatureFlagsIsLoaded } from 'featureFlags'
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import { defaultAbiCoder } from '@ethersproject/abi'
|
import { defaultAbiCoder } from '@ethersproject/abi'
|
||||||
import { getAddress, isAddress } from '@ethersproject/address'
|
import { getAddress, isAddress } from '@ethersproject/address'
|
||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { Trace } from '@uniswap/analytics'
|
|
||||||
import { InterfacePageName } from '@uniswap/analytics-events'
|
import { InterfacePageName } from '@uniswap/analytics-events'
|
||||||
import { Currency, CurrencyAmount, Token } from '@uniswap/sdk-core'
|
import { Currency, CurrencyAmount, Token } from '@uniswap/sdk-core'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { Trace } from 'analytics'
|
||||||
import { ButtonError } from 'components/Button'
|
import { ButtonError } from 'components/Button'
|
||||||
import { BlueCard } from 'components/Card'
|
import { BlueCard } from 'components/Card'
|
||||||
import { AutoColumn } from 'components/Column'
|
import { AutoColumn } from 'components/Column'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { Trace, TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, InterfacePageName, SharedEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, InterfacePageName, SharedEventName } from '@uniswap/analytics-events'
|
||||||
|
import { Trace, TraceEvent } from 'analytics'
|
||||||
import { AboutFooter } from 'components/About/AboutFooter'
|
import { AboutFooter } from 'components/About/AboutFooter'
|
||||||
import Card, { CardType } from 'components/About/Card'
|
import Card, { CardType } from 'components/About/Card'
|
||||||
import { MAIN_CARDS, MORE_CARDS } from 'components/About/constants'
|
import { MAIN_CARDS, MORE_CARDS } from 'components/About/constants'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { Trace } from '@uniswap/analytics'
|
|
||||||
import { InterfacePageName } from '@uniswap/analytics-events'
|
import { InterfacePageName } from '@uniswap/analytics-events'
|
||||||
|
import { Trace } from 'analytics'
|
||||||
import { SmallButtonPrimary } from 'components/Button'
|
import { SmallButtonPrimary } from 'components/Button'
|
||||||
import { useIsMobile } from 'nft/hooks'
|
import { useIsMobile } from 'nft/hooks'
|
||||||
import { Link } from 'react-router-dom'
|
import { Link } from 'react-router-dom'
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { BigNumber } from '@ethersproject/bignumber'
|
import { BigNumber } from '@ethersproject/bignumber'
|
||||||
import type { TransactionResponse } from '@ethersproject/providers'
|
import type { TransactionResponse } from '@ethersproject/providers'
|
||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { Trace } from '@uniswap/analytics'
|
|
||||||
import { InterfacePageName } from '@uniswap/analytics-events'
|
import { InterfacePageName } from '@uniswap/analytics-events'
|
||||||
import { formatPrice, NumberType } from '@uniswap/conedison/format'
|
import { formatPrice, NumberType } from '@uniswap/conedison/format'
|
||||||
import { ChainId, Currency, CurrencyAmount, Fraction, Percent, Price, Token } from '@uniswap/sdk-core'
|
import { ChainId, Currency, CurrencyAmount, Fraction, Percent, Price, Token } from '@uniswap/sdk-core'
|
||||||
import { NonfungiblePositionManager, Pool, Position } from '@uniswap/v3-sdk'
|
import { NonfungiblePositionManager, Pool, Position } from '@uniswap/v3-sdk'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { Trace } from 'analytics'
|
||||||
import { sendEvent } from 'components/analytics'
|
import { sendEvent } from 'components/analytics'
|
||||||
import Badge from 'components/Badge'
|
import Badge from 'components/Badge'
|
||||||
import { ButtonConfirmed, ButtonGray, ButtonPrimary } from 'components/Button'
|
import { ButtonConfirmed, ButtonGray, ButtonPrimary } from 'components/Button'
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { Trace, TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, InterfaceEventName, InterfacePageName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, InterfaceEventName, InterfacePageName } from '@uniswap/analytics-events'
|
||||||
import { V2_FACTORY_ADDRESSES } from '@uniswap/sdk-core'
|
import { V2_FACTORY_ADDRESSES } from '@uniswap/sdk-core'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { Trace, TraceEvent } from 'analytics'
|
||||||
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
||||||
import { ButtonGray, ButtonPrimary, ButtonText } from 'components/Button'
|
import { ButtonGray, ButtonPrimary, ButtonText } from 'components/Button'
|
||||||
import { AutoColumn } from 'components/Column'
|
import { AutoColumn } from 'components/Column'
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { Trace } from '@uniswap/analytics'
|
|
||||||
import { InterfacePageName } from '@uniswap/analytics-events'
|
import { InterfacePageName } from '@uniswap/analytics-events'
|
||||||
import { Pair } from '@uniswap/v2-sdk'
|
import { Pair } from '@uniswap/v2-sdk'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { Trace } from 'analytics'
|
||||||
import { UNSUPPORTED_V2POOL_CHAIN_IDS } from 'constants/chains'
|
import { UNSUPPORTED_V2POOL_CHAIN_IDS } from 'constants/chains'
|
||||||
import JSBI from 'jsbi'
|
import JSBI from 'jsbi'
|
||||||
import { useMemo } from 'react'
|
import { useMemo } from 'react'
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { Trace } from '@uniswap/analytics'
|
|
||||||
import { InterfacePageName } from '@uniswap/analytics-events'
|
import { InterfacePageName } from '@uniswap/analytics-events'
|
||||||
import { Currency, CurrencyAmount, Token } from '@uniswap/sdk-core'
|
import { Currency, CurrencyAmount, Token } from '@uniswap/sdk-core'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { Trace } from 'analytics'
|
||||||
import JSBI from 'jsbi'
|
import JSBI from 'jsbi'
|
||||||
import { useCallback, useEffect, useState } from 'react'
|
import { useCallback, useEffect, useState } from 'react'
|
||||||
import { Plus } from 'react-feather'
|
import { Plus } from 'react-feather'
|
||||||
|
@ -2,10 +2,10 @@ import { BigNumber } from '@ethersproject/bignumber'
|
|||||||
import { Contract } from '@ethersproject/contracts'
|
import { Contract } from '@ethersproject/contracts'
|
||||||
import type { TransactionResponse } from '@ethersproject/providers'
|
import type { TransactionResponse } from '@ethersproject/providers'
|
||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { TraceEvent } from '@uniswap/analytics'
|
|
||||||
import { BrowserEvent, InterfaceElementName, InterfaceEventName } from '@uniswap/analytics-events'
|
import { BrowserEvent, InterfaceElementName, InterfaceEventName } from '@uniswap/analytics-events'
|
||||||
import { Currency, Percent } from '@uniswap/sdk-core'
|
import { Currency, Percent } from '@uniswap/sdk-core'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { TraceEvent } from 'analytics'
|
||||||
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
||||||
import { sendEvent } from 'components/analytics'
|
import { sendEvent } from 'components/analytics'
|
||||||
import { isSupportedChain } from 'constants/chains'
|
import { isSupportedChain } from 'constants/chains'
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { sendAnalyticsEvent, Trace } from '@uniswap/analytics'
|
import { sendAnalyticsEvent, Trace } from 'analytics'
|
||||||
import Column from 'components/Column'
|
import Column from 'components/Column'
|
||||||
import UniswapXBrandMark from 'components/Logo/UniswapXBrandMark'
|
import UniswapXBrandMark from 'components/Logo/UniswapXBrandMark'
|
||||||
import { Arrow } from 'components/Popover'
|
import { Arrow } from 'components/Popover'
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { sendAnalyticsEvent, Trace, TraceEvent, useTrace } from '@uniswap/analytics'
|
|
||||||
import {
|
import {
|
||||||
BrowserEvent,
|
BrowserEvent,
|
||||||
InterfaceElementName,
|
InterfaceElementName,
|
||||||
@ -13,6 +12,7 @@ import { formatCurrencyAmount, NumberType } from '@uniswap/conedison/format'
|
|||||||
import { ChainId, Currency, CurrencyAmount, Percent, Token } from '@uniswap/sdk-core'
|
import { ChainId, Currency, CurrencyAmount, Percent, Token } from '@uniswap/sdk-core'
|
||||||
import { UNIVERSAL_ROUTER_ADDRESS } from '@uniswap/universal-router-sdk'
|
import { UNIVERSAL_ROUTER_ADDRESS } from '@uniswap/universal-router-sdk'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { sendAnalyticsEvent, Trace, TraceEvent, useTrace } from 'analytics'
|
||||||
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
import { useToggleAccountDrawer } from 'components/AccountDrawer'
|
||||||
import AddressInputPanel from 'components/AddressInputPanel'
|
import AddressInputPanel from 'components/AddressInputPanel'
|
||||||
import { ButtonError, ButtonLight, ButtonPrimary } from 'components/Button'
|
import { ButtonError, ButtonLight, ButtonPrimary } from 'components/Button'
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { Trace } from '@uniswap/analytics'
|
|
||||||
import { InterfacePageName } from '@uniswap/analytics-events'
|
import { InterfacePageName } from '@uniswap/analytics-events'
|
||||||
|
import { Trace } from 'analytics'
|
||||||
import { MAX_WIDTH_MEDIA_BREAKPOINT, MEDIUM_MEDIA_BREAKPOINT } from 'components/Tokens/constants'
|
import { MAX_WIDTH_MEDIA_BREAKPOINT, MEDIUM_MEDIA_BREAKPOINT } from 'components/Tokens/constants'
|
||||||
import { filterStringAtom } from 'components/Tokens/state'
|
import { filterStringAtom } from 'components/Tokens/state'
|
||||||
import NetworkFilter from 'components/Tokens/TokenTable/NetworkFilter'
|
import NetworkFilter from 'components/Tokens/TokenTable/NetworkFilter'
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { Trace } from '@uniswap/analytics'
|
|
||||||
import { InterfacePageName } from '@uniswap/analytics-events'
|
import { InterfacePageName } from '@uniswap/analytics-events'
|
||||||
import { CurrencyAmount, Token } from '@uniswap/sdk-core'
|
import { CurrencyAmount, Token } from '@uniswap/sdk-core'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { Trace } from 'analytics'
|
||||||
import { ButtonPrimary } from 'components/Button'
|
import { ButtonPrimary } from 'components/Button'
|
||||||
import { AutoColumn } from 'components/Column'
|
import { AutoColumn } from 'components/Column'
|
||||||
import { CardBGImage, CardNoise, CardSection, DataCard } from 'components/earn/styled'
|
import { CardBGImage, CardNoise, CardSection, DataCard } from 'components/earn/styled'
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { BigNumber } from '@ethersproject/bignumber'
|
import { BigNumber } from '@ethersproject/bignumber'
|
||||||
import { Trans } from '@lingui/macro'
|
import { Trans } from '@lingui/macro'
|
||||||
import { Trace } from '@uniswap/analytics'
|
|
||||||
import { InterfacePageName } from '@uniswap/analytics-events'
|
import { InterfacePageName } from '@uniswap/analytics-events'
|
||||||
import { CurrencyAmount, Fraction, Token } from '@uniswap/sdk-core'
|
import { CurrencyAmount, Fraction, Token } from '@uniswap/sdk-core'
|
||||||
import { useWeb3React } from '@web3-react/core'
|
import { useWeb3React } from '@web3-react/core'
|
||||||
|
import { Trace } from 'analytics'
|
||||||
import ExecuteModal from 'components/vote/ExecuteModal'
|
import ExecuteModal from 'components/vote/ExecuteModal'
|
||||||
import QueueModal from 'components/vote/QueueModal'
|
import QueueModal from 'components/vote/QueueModal'
|
||||||
import { useActiveLocale } from 'hooks/useActiveLocale'
|
import { useActiveLocale } from 'hooks/useActiveLocale'
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { sendAnalyticsEvent } from '@uniswap/analytics'
|
|
||||||
import { MoonpayEventName } from '@uniswap/analytics-events'
|
import { MoonpayEventName } from '@uniswap/analytics-events'
|
||||||
|
import { sendAnalyticsEvent } from 'analytics'
|
||||||
import { DEFAULT_TXN_DISMISS_MS } from 'constants/misc'
|
import { DEFAULT_TXN_DISMISS_MS } from 'constants/misc'
|
||||||
import { useCallback, useEffect, useMemo, useState } from 'react'
|
import { useCallback, useEffect, useMemo, useState } from 'react'
|
||||||
import { useAppDispatch, useAppSelector } from 'state/hooks'
|
import { useAppDispatch, useAppSelector } from 'state/hooks'
|
||||||
|
@ -2,8 +2,8 @@ import 'components/analytics'
|
|||||||
|
|
||||||
import * as Sentry from '@sentry/react'
|
import * as Sentry from '@sentry/react'
|
||||||
import { BrowserTracing } from '@sentry/tracing'
|
import { BrowserTracing } from '@sentry/tracing'
|
||||||
import { initializeAnalytics, OriginApplication } from '@uniswap/analytics'
|
|
||||||
import { SharedEventName } from '@uniswap/analytics-events'
|
import { SharedEventName } from '@uniswap/analytics-events'
|
||||||
|
import { initializeAnalytics, OriginApplication } from 'analytics'
|
||||||
import { isSentryEnabled } from 'utils/env'
|
import { isSentryEnabled } from 'utils/env'
|
||||||
import { getEnvName, isProductionEnv } from 'utils/env'
|
import { getEnvName, isProductionEnv } from 'utils/env'
|
||||||
import { v4 as uuidv4 } from 'uuid'
|
import { v4 as uuidv4 } from 'uuid'
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { sendAnalyticsEvent } from '@uniswap/analytics'
|
|
||||||
import { InterfaceElementName, InterfaceEventName } from '@uniswap/analytics-events'
|
import { InterfaceElementName, InterfaceEventName } from '@uniswap/analytics-events'
|
||||||
|
import { sendAnalyticsEvent } from 'analytics'
|
||||||
import { isIOS } from 'utils/userAgent'
|
import { isIOS } from 'utils/userAgent'
|
||||||
|
|
||||||
const APP_STORE_LINK = 'https://apps.apple.com/app/apple-store/id6443944476'
|
const APP_STORE_LINK = 'https://apps.apple.com/app/apple-store/id6443944476'
|
||||||
|
Loading…
Reference in New Issue
Block a user