fix: no-undefined-or in object field types (#6640)

This commit is contained in:
eddie 2023-05-24 11:31:40 -07:00 committed by GitHub
parent c07c401189
commit d180aef306
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
72 changed files with 162 additions and 133 deletions

@ -14,6 +14,7 @@ module.exports = {
rules: {
'multiline-comment-style': ['error', 'separate-lines'],
'rulesdir/enforce-retry-on-import': 'error',
'rulesdir/no-undefined-or': 'error',
},
},
{

@ -0,0 +1,44 @@
/* eslint-env node */
module.exports = {
meta: {
type: 'suggestion',
docs: {
description: 'Enforce the use of optional object fields',
category: 'Best Practices',
recommended: true,
},
fixable: 'code',
schema: [],
},
create(context) {
return {
'TSPropertySignature > TSTypeAnnotation > TSUnionType': (node) => {
const types = node.types
const hasUndefined = types.some((typeNode) => typeNode.type === 'TSUndefinedKeyword')
if (hasUndefined) {
const typesWithoutUndefined = types.filter((typeNode) => typeNode.type !== 'TSUndefinedKeyword')
// If there is more than one type left after removing 'undefined',
// join them together with ' | ' to create a new union type.
const newTypeSource =
typesWithoutUndefined.length > 1
? typesWithoutUndefined.map((typeNode) => context.getSourceCode().getText(typeNode)).join(' | ')
: context.getSourceCode().getText(typesWithoutUndefined[0])
context.report({
node,
message: `Prefer optional properties to "Type | undefined".`,
fix(fixer) {
const propertySignature = node.parent.parent
const isAlreadyOptional = propertySignature.optional
const newTypeAnnotation = isAlreadyOptional ? `: ${newTypeSource}` : `?: ${newTypeSource}`
return fixer.replaceText(node.parent, newTypeAnnotation)
},
})
}
},
}
},
}

@ -49,7 +49,7 @@ const DEFAULT_CHAINS = [
SupportedChainId.CELO,
]
type UseMultiChainPositionsData = { positions: PositionInfo[] | undefined; loading: boolean }
type UseMultiChainPositionsData = { positions?: PositionInfo[]; loading: boolean }
/**
* Returns all positions for a given account on multiple chains.

@ -32,13 +32,7 @@ const LabelText = styled.div<{ color: string }>`
justify-content: flex-end;
`
export default function RangeBadge({
removed,
inRange,
}: {
removed: boolean | undefined
inRange: boolean | undefined
}) {
export default function RangeBadge({ removed, inRange }: { removed?: boolean; inRange?: boolean }) {
const theme = useTheme()
return (
<BadgeWrapper>

@ -19,7 +19,7 @@ interface SparklineChartProps {
width: number
height: number
tokenData: TopToken
pricePercentChange: number | undefined | null
pricePercentChange?: number | null
sparklineMap: SparklineMap
}

@ -14,7 +14,7 @@ const ContentWrapper = styled(Column)`
font-size: 12px;
`
interface ConnectedAccountBlockedProps {
account: string | null | undefined
account?: string | null
isOpen: boolean
}

@ -56,8 +56,8 @@ export default function FeeSelector({
disabled?: boolean
feeAmount?: FeeAmount
handleFeePoolSelect: (feeAmount: FeeAmount) => void
currencyA?: Currency | undefined
currencyB?: Currency | undefined
currencyA?: Currency
currencyB?: Currency
}) {
const { chainId } = useWeb3React()

@ -79,8 +79,8 @@ interface StepCounterProps {
width?: string
locked?: boolean // disable input
title: ReactNode
tokenA: string | undefined
tokenB: string | undefined
tokenA?: string
tokenB?: string
}
const StepCounter = ({

@ -4,7 +4,7 @@ import styled from 'styled-components/macro'
import { ChartEntry } from './types'
const Path = styled.path<{ fill: string | undefined }>`
const Path = styled.path<{ fill?: string }>`
opacity: 0.5;
stroke: ${({ fill, theme }) => fill ?? theme.accentAction};
fill: ${({ fill, theme }) => fill ?? theme.accentAction};
@ -23,7 +23,7 @@ export const Area = ({
yScale: ScaleLinear<number, number>
xValue: (d: ChartEntry) => number
yValue: (d: ChartEntry) => number
fill?: string | undefined
fill?: string
}) =>
useMemo(
() => (

@ -10,9 +10,9 @@ export function useDensityChartData({
currencyB,
feeAmount,
}: {
currencyA: Currency | undefined
currencyB: Currency | undefined
feeAmount: FeeAmount | undefined
currencyA?: Currency
currencyB?: Currency
feeAmount?: FeeAmount
}) {
const { isLoading, error, data } = usePoolActiveLiquidity(currencyA, currencyB, feeAmount)

@ -76,11 +76,11 @@ export default function LiquidityChartRangeInput({
onRightRangeInput,
interactive,
}: {
currencyA: Currency | undefined
currencyB: Currency | undefined
currencyA?: Currency
currencyB?: Currency
feeAmount?: FeeAmount
ticksAtLimit: { [bound in Bound]?: boolean | undefined }
price: number | undefined
price?: number
priceLower?: Price<Token, Token>
priceUpper?: Price<Token, Token>
onLeftRangeInput: (typedValue: string) => void

@ -54,7 +54,7 @@ export interface LiquidityChartRangeInputProps {
interactive?: boolean
brushLabels: (d: 'w' | 'e', x: number) => string
brushDomain: [number, number] | undefined
brushDomain?: [number, number]
onBrushDomainChange: (domain: [number, number], mode: string | undefined) => void
zoomLevels: ZoomLevels

@ -39,15 +39,7 @@ export function LoadingView({ children, onDismiss }: { children: any; onDismiss:
)
}
export function SubmittedView({
children,
onDismiss,
hash,
}: {
children: any
onDismiss: () => void
hash: string | undefined
}) {
export function SubmittedView({ children, onDismiss, hash }: { children: any; onDismiss: () => void; hash?: string }) {
const theme = useTheme()
const { chainId } = useWeb3React()

@ -33,7 +33,7 @@ interface SearchBarDropdownSectionProps {
suggestions: (GenieCollection | SearchToken)[]
header: JSX.Element
headerIcon?: JSX.Element
hoveredIndex: number | undefined
hoveredIndex?: number
startingIndex: number
setHoveredIndex: (index: number | undefined) => void
isLoading?: boolean

@ -21,7 +21,7 @@ const Tabs = styled.div`
justify-content: space-evenly;
`
const StyledHistoryLink = styled(HistoryLink)<{ flex: string | undefined }>`
const StyledHistoryLink = styled(HistoryLink)<{ flex?: string }>`
flex: ${({ flex }) => flex ?? 'none'};
${({ theme }) => theme.deprecated_mediaWidth.deprecated_upToMedium`
@ -64,9 +64,9 @@ export function AddRemoveTabs({
adding: boolean
creating: boolean
autoSlippage: Percent
positionID?: string | undefined
positionID?: string
showBackLink?: boolean
children?: ReactNode | undefined
children?: ReactNode
}) {
const theme = useTheme()
// reset states on back

@ -53,7 +53,7 @@ export const Input = React.memo(function InnerInput({
error?: boolean
fontSize?: string
align?: 'right' | 'left'
prependSymbol?: string | undefined
prependSymbol?: string
} & Omit<React.HTMLProps<HTMLInputElement>, 'ref' | 'onChange' | 'as'>) {
const enforcer = (nextUserInput: string) => {
if (nextUserInput === '' || inputRegex.test(escapeRegExp(nextUserInput))) {

@ -27,7 +27,7 @@ export const PositionPreview = ({
position: Position
title?: ReactNode
inRange: boolean
baseCurrencyDefault?: Currency | undefined
baseCurrencyDefault?: Currency
ticksAtLimit: { [bound: string]: boolean | undefined }
}) => {
const theme = useTheme()

@ -68,9 +68,9 @@ const ResourcesContainer = styled.div`
type AboutSectionProps = {
address: string
chainId: SupportedChainId
description?: string | null | undefined
homepageUrl?: string | null | undefined
twitterName?: string | null | undefined
description?: string | null
homepageUrl?: string | null
twitterName?: string | null
}
export function AboutSection({ address, chainId, description, homepageUrl, twitterName }: AboutSectionProps) {

@ -64,7 +64,7 @@ export function formatDelta(delta: number | null | undefined) {
return formattedDelta
}
export const DeltaText = styled.span<{ delta: number | undefined }>`
export const DeltaText = styled.span<{ delta?: number }>`
color: ${({ theme, delta }) =>
delta !== undefined ? (Math.sign(delta) < 0 ? theme.accentFailure : theme.accentSuccess) : theme.textPrimary};
`
@ -124,7 +124,7 @@ const timeOptionsHeight = 44
interface PriceChartProps {
width: number
height: number
prices: PricePoint[] | undefined | null
prices?: PricePoint[] | null
timePeriod: TimePeriod
}

@ -87,11 +87,11 @@ function useRelevantToken(
}
type TokenDetailsProps = {
urlAddress: string | undefined
urlAddress?: string
inputTokenAddress?: string
chain: Chain
tokenQuery: TokenQuery
tokenPriceQuery: TokenPriceQuery | undefined
tokenPriceQuery?: TokenPriceQuery
onChangeTimePeriod: OnChangeTimePeriod
}
export default function TokenDetails({

@ -94,9 +94,9 @@ function TransactionSubmittedContent({
inline,
}: {
onDismiss: () => void
hash: string | undefined
hash?: string
chainId: number
currencyToAdd?: Currency | undefined
currencyToAdd?: Currency
inline?: boolean // not in modal
}) {
const theme = useTheme()
@ -229,9 +229,9 @@ function L2Content({
inline,
}: {
onDismiss: () => void
hash: string | undefined
hash?: string
chainId: SupportedL2ChainId
currencyToAdd?: Currency | undefined
currencyToAdd?: Currency
pendingText: ReactNode
inline?: boolean // not in modal
}) {
@ -324,11 +324,11 @@ function L2Content({
interface ConfirmationModalProps {
isOpen: boolean
onDismiss: () => void
hash: string | undefined
hash?: string
content: () => ReactNode
attemptingTxn: boolean
pendingText: ReactNode
currencyToAdd?: Currency | undefined
currencyToAdd?: Currency
}
export default function TransactionConfirmationModal({

@ -30,15 +30,15 @@ export default function ConfirmSwapModal({
fiatValueOutput,
}: {
trade: InterfaceTrade
originalTrade: InterfaceTrade | undefined
originalTrade?: InterfaceTrade
attemptingTxn: boolean
txHash: string | undefined
txHash?: string
allowedSlippage: Percent
onAcceptChanges: () => void
onConfirm: () => void
swapErrorMessage: ReactNode | undefined
swapErrorMessage?: ReactNode
onDismiss: () => void
swapQuoteReceivedDate: Date | undefined
swapQuoteReceivedDate?: Date
fiatValueInput: { data?: number; isLoading: boolean }
fiatValueOutput: { data?: number; isLoading: boolean }
}) {

@ -92,7 +92,7 @@ const Wrapper = styled(Column)`
`
interface SwapDetailsInlineProps {
trade: InterfaceTrade | undefined
trade?: InterfaceTrade
syncing: boolean
loading: boolean
allowedSlippage: Percent

@ -58,12 +58,12 @@ export default function SwapModalFooter({
onAcceptChanges,
}: {
trade: InterfaceTrade
hash: string | undefined
hash?: string
allowedSlippage: Percent
onConfirm: () => void
swapErrorMessage: ReactNode | undefined
swapErrorMessage?: ReactNode
disabledConfirm: boolean
swapQuoteReceivedDate: Date | undefined
swapQuoteReceivedDate?: Date
fiatValueInput: { data?: number; isLoading: boolean }
fiatValueOutput: { data?: number; isLoading: boolean }
showAcceptChanges: boolean

@ -33,7 +33,7 @@ interface AmountProps {
field: Field
tooltipText?: ReactNode
label: ReactNode
amount: CurrencyAmount<Currency> | undefined
amount?: CurrencyAmount<Currency>
usdAmount?: number
}

@ -22,7 +22,7 @@ export const PageWrapper = styled.div`
`
// Mostly copied from `AppBody` but it was getting too hard to maintain backwards compatibility.
export const SwapWrapper = styled.main<{ chainId: number | undefined }>`
export const SwapWrapper = styled.main<{ chainId?: number }>`
position: relative;
background: ${({ theme }) => theme.backgroundSurface};
border-radius: 16px;

@ -37,7 +37,7 @@ const ConfirmedIcon = styled(ColumnCenter)`
interface ExecuteModalProps {
isOpen: boolean
onDismiss: () => void
proposalId: string | undefined // id for the proposal to execute
proposalId?: string // id for the proposal to execute
}
export default function ExecuteModal({ isOpen, onDismiss, proposalId }: ExecuteModalProps) {

@ -37,7 +37,7 @@ const ConfirmedIcon = styled(ColumnCenter)`
interface QueueModalProps {
isOpen: boolean
onDismiss: () => void
proposalId: string | undefined // id for the proposal to queue
proposalId?: string // id for the proposal to queue
}
export default function QueueModal({ isOpen, onDismiss, proposalId }: QueueModalProps) {

@ -39,8 +39,8 @@ const ConfirmedIcon = styled(ColumnCenter)`
interface VoteModalProps {
isOpen: boolean
onDismiss: () => void
voteOption: VoteOption | undefined
proposalId: string | undefined // id for the proposal to vote on
voteOption?: VoteOption
proposalId?: string // id for the proposal to vote on
}
export default function VoteModal({ isOpen, onDismiss, proposalId, voteOption }: VoteModalProps) {

@ -140,7 +140,7 @@ export type SparklineMap = { [key: string]: PricePoint[] | undefined }
export type TopToken = NonNullable<NonNullable<TopTokens100Query>['topTokens']>[number]
interface UseTopTokensReturnValue {
tokens: TopToken[] | undefined
tokens?: TopToken[]
tokenSortRank: Record<string, number>
loadingTokens: boolean
sparklines: SparklineMap

@ -153,7 +153,7 @@ export function getTokenDetailsURL({
export function unwrapToken<
T extends {
address?: string | null | undefined
address?: string | null
} | null
>(chainId: number, token: T): T {
if (!token?.address) return token

@ -37,7 +37,7 @@ export default function useFeeTierDistributionQuery(
token0: string | undefined,
token1: string | undefined,
interval: number
): { error: ApolloError | undefined; isLoading: boolean; data: FeeTierDistributionQuery } {
): { error?: ApolloError; isLoading: boolean; data: FeeTierDistributionQuery } {
const {
data,
loading: isLoading,

@ -33,7 +33,7 @@ export function useClientSideV3Trade<TTradeType extends TradeType>(
tradeType: TTradeType,
amountSpecified?: CurrencyAmount<Currency>,
otherCurrency?: Currency
): { state: TradeState; trade: InterfaceTrade | undefined } {
): { state: TradeState; trade?: InterfaceTrade } {
const [currencyIn, currencyOut] =
tradeType === TradeType.EXACT_INPUT
? [amountSpecified?.currency, otherCurrency]

@ -5,8 +5,8 @@ import { PositionDetails } from 'types/position'
import { useCurrency } from './Tokens'
export function useDerivedPositionInfo(positionDetails: PositionDetails | undefined): {
position: Position | undefined
pool: Pool | undefined
position?: Position
pool?: Pool
} {
const currency0 = useCurrency(positionDetails?.token0)
const currency1 = useCurrency(positionDetails?.token1)

@ -13,7 +13,7 @@ const MAX_DATA_BLOCK_AGE = 20
interface FeeTierDistribution {
isLoading: boolean
isError: boolean
largestUsageFeeTier?: FeeAmount | undefined
largestUsageFeeTier?: FeeAmount
// distributions as percentages of overall liquidity
distributions?: Record<FeeAmount, number | undefined>

@ -174,7 +174,7 @@ function useAllV3Ticks(
): {
isLoading: boolean
error: unknown
ticks: TickData[] | undefined
ticks?: TickData[]
} {
const useSubgraph = currencyA ? !CHAIN_IDS_MISSING_SUBGRAPH_DATA.includes(currencyA.chainId) : true
@ -213,8 +213,8 @@ export function usePoolActiveLiquidity(
): {
isLoading: boolean
error: any
activeTick: number | undefined
data: TickProcessed[] | undefined
activeTick?: number
data?: TickProcessed[]
} {
const pool = usePool(currencyA, currencyB, feeAmount)

@ -13,7 +13,7 @@ import { useUniversalRouterSwapCallback } from './useUniversalRouter'
// and the user has approved the slippage adjusted input amount for the trade
export function useSwapCallback(
trade: Trade<Currency, Currency, TradeType> | undefined, // trade to execute, required
fiatValues: { amountIn: number | undefined; amountOut: number | undefined }, // usd values for amount in and out, logged for analytics
fiatValues: { amountIn?: number; amountOut?: number }, // usd values for amount in and out, logged for analytics
allowedSlippage: Percent, // in bips
permitSignature: PermitSignature | undefined
): { callback: null | (() => Promise<string>) } {

@ -11,7 +11,7 @@ export function useTokenAllowance(
owner?: string,
spender?: string
): {
tokenAllowance: CurrencyAmount<Token> | undefined
tokenAllowance?: CurrencyAmount<Token>
isSyncing: boolean
} {
const contract = useTokenContract(token?.address, false)
@ -21,7 +21,7 @@ export function useTokenAllowance(
// This guarantees that the tokenAllowance is marked isSyncing upon approval and updated upon being synced.
const [blocksPerFetch, setBlocksPerFetch] = useState<1>()
const { result, syncing: isSyncing } = useSingleCallResult(contract, 'allowance', inputs, { blocksPerFetch }) as {
result: Awaited<ReturnType<NonNullable<typeof contract>['allowance']>> | undefined
result?: Awaited<ReturnType<NonNullable<typeof contract>['allowance']>>
syncing: boolean
}

@ -21,7 +21,7 @@ const ETH_AMOUNT_OUT: { [chainId: number]: CurrencyAmount<Currency> } = {
}
function useETHValue(currencyAmount?: CurrencyAmount<Currency>): {
data: CurrencyAmount<Currency> | undefined
data?: CurrencyAmount<Currency>
isLoading: boolean
} {
const chainId = currencyAmount?.currency?.chainId
@ -51,7 +51,7 @@ function useETHValue(currencyAmount?: CurrencyAmount<Currency>): {
}
export function useUSDPrice(currencyAmount?: CurrencyAmount<Currency>): {
data: number | undefined
data?: number
isLoading: boolean
} {
const chain = currencyAmount?.currency.chainId ? chainIdToBackendName(currencyAmount?.currency.chainId) : undefined

@ -45,7 +45,7 @@ interface SwapOptions {
export function useUniversalRouterSwapCallback(
trade: Trade<Currency, Currency, TradeType> | undefined,
fiatValues: { amountIn: number | undefined; amountOut: number | undefined },
fiatValues: { amountIn?: number; amountOut?: number },
options: SwapOptions
) {
const { account, chainId, provider } = useWeb3React()

@ -7,7 +7,7 @@ import { useV3NFTPositionManagerContract } from './useContract'
interface UseV3PositionsResults {
loading: boolean
positions: PositionDetails[] | undefined
positions?: PositionDetails[]
}
function useV3PositionsFromTokenIds(tokenIds: BigNumber[] | undefined): UseV3PositionsResults {
@ -51,7 +51,7 @@ function useV3PositionsFromTokenIds(tokenIds: BigNumber[] | undefined): UseV3Pos
interface UseV3PositionResults {
loading: boolean
position: PositionDetails | undefined
position?: PositionDetails
}
export function useV3PositionFromTokenId(tokenId: BigNumber | undefined): UseV3PositionResults {

@ -60,7 +60,7 @@ export default function useWrapCallback(
inputCurrency: Currency | undefined | null,
outputCurrency: Currency | undefined | null,
typedValue: string | undefined
): { wrapType: WrapType; execute?: undefined | (() => Promise<void>); inputError?: WrapInputError } {
): { wrapType: WrapType; execute?: () => Promise<void>; inputError?: WrapInputError } {
const { chainId, account } = useWeb3React()
const wethContract = useWETHContract()
const balance = useCurrencyBalance(account ?? undefined, inputCurrency ?? undefined)

@ -15,9 +15,9 @@ export function useRoutingAPIArguments({
tradeType,
routerPreference,
}: {
tokenIn: Currency | undefined
tokenOut: Currency | undefined
amount: CurrencyAmount<Currency> | undefined
tokenIn?: Currency
tokenOut?: Currency
amount?: CurrencyAmount<Currency>
tradeType: TradeType
routerPreference: RouterPreference | typeof INTERNAL_ROUTER_PREFERENCE_PRICE
}) {

@ -40,7 +40,7 @@ export const formatSwapSignedAnalyticsEventProperties = ({
txHash,
}: {
trade: InterfaceTrade | Trade<Currency, Currency, TradeType>
fiatValues: { amountIn: number | undefined; amountOut: number | undefined }
fiatValues: { amountIn?: number; amountOut?: number }
txHash: string
}) => ({
transaction_hash: txHash,

@ -3,7 +3,7 @@ import { DEFAULT_LOCALE, SUPPORTED_LOCALES } from 'constants/locales'
interface FormatLocaleNumberArgs {
number: CurrencyAmount<Currency> | Price<Currency, Currency> | number
locale: string | null | undefined
locale?: string | null
options?: Intl.NumberFormatOptions
sigFigs?: number
fixedDecimals?: number

@ -1,8 +1,6 @@
const ENS_NAME_REGEX = /^(([a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+)eth(\/.*)?$/
export default function parseENSAddress(
ensAddress: string
): { ensName: string; ensPath: string | undefined } | undefined {
export default function parseENSAddress(ensAddress: string): { ensName: string; ensPath?: string } | undefined {
const match = ensAddress.match(ENS_NAME_REGEX)
if (!match) return undefined
return { ensName: `${match[1].toLowerCase()}eth`, ensPath: match[4] }

@ -206,9 +206,9 @@ const InputCurrencyValue = ({
}: {
usingPayWithAnyToken: boolean
totalEthPrice: BigNumber
activeCurrency: Currency | undefined | null
activeCurrency?: Currency | null
tradeState: TradeState
trade: InterfaceTrade | undefined
trade?: InterfaceTrade
}) => {
if (!usingPayWithAnyToken) {
return (
@ -241,7 +241,7 @@ const FiatValue = ({
usingPayWithAnyToken,
}: {
usdcValue: CurrencyAmount<Token> | null
priceImpact: PriceImpact | undefined
priceImpact?: PriceImpact
tradeState: TradeState
usingPayWithAnyToken: boolean
}) => {

@ -82,7 +82,7 @@ const NoContentContainer = () => (
interface BagRowProps {
asset: UpdatedGenieAsset
usdPrice: number | undefined
usdPrice?: number
removeAsset: (assets: GenieAsset[]) => void
showRemove?: boolean
grayscale?: boolean
@ -168,7 +168,7 @@ export const BagRow = ({ asset, usdPrice, removeAsset, showRemove, grayscale, is
interface PriceChangeBagRowProps {
asset: UpdatedGenieAsset
usdPrice: number | undefined
usdPrice?: number
markAssetAsReviewed: (asset: UpdatedGenieAsset, toKeep: boolean) => void
top?: boolean
isMobile: boolean
@ -219,7 +219,7 @@ export const PriceChangeBagRow = ({ asset, usdPrice, markAssetAsReviewed, top, i
interface UnavailableAssetsHeaderRowProps {
assets?: UpdatedGenieAsset[]
usdPrice: number | undefined
usdPrice?: number
clearUnavailableAssets: () => void
didOpenUnavailableAssets: boolean
setDidOpenUnavailableAssets: (didOpen: boolean) => void

@ -111,7 +111,7 @@ const NftDisplayContainer = styled.div`
height: 34px;
`
const NftHolder = styled.div<{ index: number; src: string | undefined }>`
const NftHolder = styled.div<{ index: number; src?: string }>`
position: absolute;
top: 50%;
left: 50%;

@ -147,7 +147,7 @@ export const LoadingAssetActivity = ({ rowCount }: { rowCount: number }) => {
)
}
const AssetActivity = ({ events }: { events: ActivityEvent[] | undefined }) => {
const AssetActivity = ({ events }: { events?: ActivityEvent[] }) => {
return (
<ActivityTable>
{events &&

@ -128,7 +128,7 @@ function assetMediaType(asset: GenieAsset): MediaType {
return MediaType.Image
}
const RenderMediaShadow = ({ imageUrl }: { imageUrl: string | undefined }) => {
const RenderMediaShadow = ({ imageUrl }: { imageUrl?: string }) => {
const [contentNotAvailable, setContentNotAvailable] = useState(false)
if (!imageUrl || contentNotAvailable) {

@ -32,7 +32,7 @@ const InputWrapper = styled(Row)<{ borderColor: string }>`
box-sizing: border-box;
`
const CurrencyWrapper = styled.div<{ listPrice: number | undefined }>`
const CurrencyWrapper = styled.div<{ listPrice?: number }>`
color: ${({ listPrice, theme }) => (listPrice ? theme.textPrimary : theme.textSecondary)};
`

@ -313,7 +313,7 @@ const CollectionFilterItem = ({
collection,
setCollectionFilters,
}: {
collection: WalletCollection | undefined
collection?: WalletCollection
setCollectionFilters: (address: string) => void
}) => {
if (!collection) return null

@ -9,8 +9,8 @@ export default function useDerivedPayWithAnyTokenSwapInfo(
parsedOutputAmount?: CurrencyAmount<NativeCurrency | Token>
): {
state: TradeState
trade: InterfaceTrade | undefined
maximumAmountIn: CurrencyAmount<Token> | undefined
trade?: InterfaceTrade
maximumAmountIn?: CurrencyAmount<Token>
allowedSlippage: Percent
} {
const { state, trade } = useBestTrade(TradeType.EXACT_OUTPUT, parsedOutputAmount, inputCurrency ?? undefined)

@ -4,10 +4,10 @@ import { create } from 'zustand'
import { devtools } from 'zustand/middleware'
interface TokenInputState {
inputCurrency: Currency | undefined
inputCurrency?: Currency
setInputCurrency: (currency: Currency | undefined) => void
clearInputCurrency: () => void
tokenTradeInput: TokenTradeInput | undefined
tokenTradeInput?: TokenTradeInput
setTokenTradeInput: (tokenTradeInput: TokenTradeInput | undefined) => void
}

@ -8,7 +8,7 @@ interface WalletBalanceProps {
address: string
balance: string
weiBalance: BigNumber
provider: Web3Provider | undefined
provider?: Web3Provider
}
export function useWalletBalance(): WalletBalanceProps {

@ -88,7 +88,7 @@ export enum ListingStatus {
}
export interface AssetRow {
image: string | undefined
image?: string
name?: string
status: ListingStatus
marketplace: ListingMarket

@ -109,9 +109,9 @@ function buildTradeRouteInput(swap: Swap): TokenTradeRouteInput {
}
export function buildAllTradeRouteInputs(trade: InterfaceTrade): {
mixedTokenTradeRouteInputs: TokenTradeRouteInput[] | undefined
v2TokenTradeRouteInputs: TokenTradeRouteInput[] | undefined
v3TokenTradeRouteInputs: TokenTradeRouteInput[] | undefined
mixedTokenTradeRouteInputs?: TokenTradeRouteInput[]
v2TokenTradeRouteInputs?: TokenTradeRouteInput[]
v3TokenTradeRouteInputs?: TokenTradeRouteInput[]
} {
const mixedTokenTradeRouteInputs: TokenTradeRouteInput[] = []
const v2TokenTradeRouteInputs: TokenTradeRouteInput[] = []

@ -31,7 +31,7 @@ export const ProposalActionDetail = ({
}: {
className?: string
proposalAction: ProposalAction
currency: Currency | undefined
currency?: Currency
amount: string
toAddress: string
onCurrencySelect: (currency: Currency) => void

@ -15,7 +15,7 @@ export const ProposalSubmissionModal = ({
onDismiss,
}: {
isOpen: boolean
hash: string | undefined
hash?: string
onDismiss: () => void
}) => {
const theme = useTheme()

@ -172,7 +172,7 @@ export function Swap({
}: {
className?: string
prefilledState?: Partial<SwapState>
chainId: SupportedChainId | undefined
chainId?: SupportedChainId
onCurrencyChange?: (selected: Pick<SwapState, Field.INPUT | Field.OUTPUT>) => void
disableTokenInputs?: boolean
}) {
@ -334,10 +334,10 @@ export function Swap({
// modal and loading
const [{ showConfirm, tradeToConfirm, swapErrorMessage, attemptingTxn, txHash }, setSwapState] = useState<{
showConfirm: boolean
tradeToConfirm: InterfaceTrade | undefined
tradeToConfirm?: InterfaceTrade
attemptingTxn: boolean
swapErrorMessage: string | undefined
txHash: string | undefined
swapErrorMessage?: string
txHash?: string
}>({
showConfirm: false,
tradeToConfirm: undefined,

@ -22,7 +22,7 @@ const connectionSlice = createSlice({
reducers: {
updateConnectionError(
state,
{ payload: { connectionType, error } }: { payload: { connectionType: ConnectionType; error: string | undefined } }
{ payload: { connectionType, error } }: { payload: { connectionType: ConnectionType; error?: string } }
) {
state.errorByConnectionType[connectionType] = error
},

@ -362,7 +362,7 @@ export function useUserDelegatee(): string {
}
// gets the users current votes
export function useUserVotes(): { loading: boolean; votes: CurrencyAmount<Token> | undefined } {
export function useUserVotes(): { loading: boolean; votes?: CurrencyAmount<Token> } {
const { account, chainId } = useWeb3React()
const uniContract = useUniContract()

@ -21,7 +21,7 @@ enum LogsState {
}
interface UseLogsResult {
logs: Log[] | undefined
logs?: Log[]
state: LogsState
}

@ -126,7 +126,7 @@ export function useV3DerivedMintInfo(
currencyBalances: { [field in Field]?: CurrencyAmount<Currency> }
dependentField: Field
parsedAmounts: { [field in Field]?: CurrencyAmount<Currency> }
position: Position | undefined
position?: Position
noLiquidity?: boolean
errorMessage?: ReactNode
invalidPool: boolean

@ -58,7 +58,7 @@ interface StakingInfo {
// equivalent to percent of total supply * reward rate
rewardRate: CurrencyAmount<Token>
// when the period ends
periodFinish: Date | undefined
periodFinish?: Date
// if pool is active
active: boolean
// calculates a hypothetical amount of token distributed to the active account per second.

@ -78,7 +78,7 @@ export function useDerivedSwapInfo(
): {
currencies: { [field in Field]?: Currency | null }
currencyBalances: { [field in Field]?: CurrencyAmount<Currency> }
parsedAmount: CurrencyAmount<Currency> | undefined
parsedAmount?: CurrencyAmount<Currency>
inputError?: ReactNode
trade: {
trade?: InterfaceTrade

@ -8,10 +8,10 @@ export interface SwapState {
readonly independentField: Field
readonly typedValue: string
readonly [Field.INPUT]: {
readonly currencyId: string | undefined | null
readonly currencyId?: string | null
}
readonly [Field.OUTPUT]: {
readonly currencyId: string | undefined | null
readonly currencyId?: string | null
}
// the typed recipient address or ENS name, or null if swap should go to sender
readonly recipient: string | null

@ -10,7 +10,7 @@ import { SerializedPair, SerializedToken, SlippageTolerance } from './types'
const currentTimestamp = () => new Date().getTime()
export interface UserState {
buyFiatFlowCompleted: boolean | undefined
buyFiatFlowCompleted?: boolean
selectedWallet?: ConnectionType
@ -53,7 +53,7 @@ export interface UserState {
URLWarningVisible: boolean
hideUniswapWalletBanner: boolean
// undefined means has not gone through A/B split yet
showSurveyPopup: boolean | undefined
showSurveyPopup?: boolean
}
function pairKey(token0Address: string, token1Address: string) {

@ -24,7 +24,7 @@ export const priceToPreciseFloat = (price: Price<Currency, Currency> | undefined
}
interface FormatDollarArgs {
num: number | undefined | null
num?: number | null
isPrice?: boolean
lessPreciseStablecoinValues?: boolean
digits?: number

@ -4,7 +4,7 @@ import { Price, Token } from '@uniswap/sdk-core'
import { Bound } from '../state/mint/v3/actions'
interface FormatTickPriceArgs {
price: Price<Token, Token> | undefined
price?: Price<Token, Token>
atLimit: { [bound in Bound]?: boolean | undefined }
direction: Bound
placeholder?: string

@ -57,12 +57,12 @@ export const formatSwapPriceUpdatedEventProperties = (
interface AnalyticsEventProps {
trade: InterfaceTrade
hash: string | undefined
hash?: string
allowedSlippage: Percent
transactionDeadlineSecondsSinceEpoch: number | undefined
transactionDeadlineSecondsSinceEpoch?: number
isAutoSlippage: boolean
isAutoRouterApi: boolean
swapQuoteReceivedDate: Date | undefined
swapQuoteReceivedDate?: Date
routes: RoutingDiagramEntry[]
fiatValueInput?: number
fiatValueOutput?: number