From 03be48c69ac36f636b7cb9d5451257bc9807f2b1 Mon Sep 17 00:00:00 2001 From: Bob van der Helm <34470358+bobthebuidlr@users.noreply.github.com> Date: Mon, 15 Jan 2024 16:29:46 +0100 Subject: [PATCH] margin slider variations --- .../InputOverlay.tsx | 35 +++++++++++++------ .../{RangeInput => MarginSlider}/index.tsx | 13 ++++--- .../Perps/Module/PerpsManageModule/index.tsx | 4 +-- src/components/Perps/Module/PerpsModule.tsx | 4 +-- .../Perps/PerpsInfo/FundingRate.tsx | 6 ++-- .../Trade/TradeModule/SwapForm/index.tsx | 5 +-- tailwind.config.js | 10 ++++++ 7 files changed, 52 insertions(+), 25 deletions(-) rename src/components/{RangeInput => MarginSlider}/InputOverlay.tsx (60%) rename src/components/{RangeInput => MarginSlider}/index.tsx (88%) diff --git a/src/components/RangeInput/InputOverlay.tsx b/src/components/MarginSlider/InputOverlay.tsx similarity index 60% rename from src/components/RangeInput/InputOverlay.tsx rename to src/components/MarginSlider/InputOverlay.tsx index f68cce2c..20d72b67 100644 --- a/src/components/RangeInput/InputOverlay.tsx +++ b/src/components/MarginSlider/InputOverlay.tsx @@ -1,17 +1,19 @@ import classNames from 'classnames' import { VerticalThreeLine } from 'components/Icons' +import { MarginSliderType } from 'components/MarginSlider' import { formatValue } from 'utils/formatters' interface Props { value: number marginThreshold?: number max: number + type: MarginSliderType } const THUMB_WIDTH = 33 -function InputOverlay({ max, value, marginThreshold }: Props) { +function InputOverlay({ max, value, marginThreshold, type }: Props) { const thumbPosPercent = max === 0 ? 0 : 100 / (max / value) const thumbPadRight = (thumbPosPercent / 100) * THUMB_WIDTH const markPosPercent = 100 / (max / (marginThreshold ?? 1)) @@ -21,12 +23,16 @@ function InputOverlay({ max, value, marginThreshold }: Props) { return ( <>
{Array.from(Array(9).keys()).map((i) => (
@@ -47,14 +53,21 @@ function InputOverlay({ max, value, marginThreshold }: Props) {
- {formatValue(value, { maxDecimals: 2, abbreviated: true, rounded: true })} + {formatValue(value, { + maxDecimals: 2, + abbreviated: true, + rounded: true, + suffix: type !== 'trade' ? 'x' : '', + })}
) diff --git a/src/components/RangeInput/index.tsx b/src/components/MarginSlider/index.tsx similarity index 88% rename from src/components/RangeInput/index.tsx rename to src/components/MarginSlider/index.tsx index b5872152..e0d6836e 100644 --- a/src/components/RangeInput/index.tsx +++ b/src/components/MarginSlider/index.tsx @@ -1,13 +1,14 @@ import classNames from 'classnames' import { ChangeEvent, useCallback } from 'react' -import InputOverlay from 'components/RangeInput/InputOverlay' +import InputOverlay from 'components/MarginSlider/InputOverlay' const LEFT_MARGIN = 5 type Props = { max: number value: number + type: MarginSliderType disabled?: boolean marginThreshold?: number wrapperClassName?: string @@ -15,8 +16,10 @@ type Props = { onBlur?: () => void } -function RangeInput(props: Props) { - const { value, max, onChange, wrapperClassName, disabled, marginThreshold, onBlur } = props +export type MarginSliderType = 'trade' | 'long' | 'short' + +function MarginSlider(props: Props) { + const { value, max, onChange, wrapperClassName, disabled, marginThreshold, onBlur, type } = props const handleOnChange = useCallback( (event: ChangeEvent) => { @@ -52,7 +55,7 @@ function RangeInput(props: Props) { onChange={handleOnChange} onBlur={onBlur} /> - +
{markPosPercent > LEFT_MARGIN ? 0 : ''} @@ -62,4 +65,4 @@ function RangeInput(props: Props) { ) } -export default RangeInput +export default MarginSlider diff --git a/src/components/Perps/Module/PerpsManageModule/index.tsx b/src/components/Perps/Module/PerpsManageModule/index.tsx index ae7d2b99..142841dc 100644 --- a/src/components/Perps/Module/PerpsManageModule/index.tsx +++ b/src/components/Perps/Module/PerpsManageModule/index.tsx @@ -2,11 +2,11 @@ import classNames from 'classnames' import { useState } from 'react' import { Cross } from 'components/Icons' +import MarginSlider from 'components/MarginSlider' import { LeverageButtons } from 'components/Perps/Module/LeverageButtons' import { Or } from 'components/Perps/Module/Or' import usePerpsManageModule from 'components/Perps/Module/PerpsManageModule/usePerpsManageModule' import PerpsSummary from 'components/Perps/Module/Summary' -import RangeInput from 'components/RangeInput' import { Spacer } from 'components/Spacer' import Text from 'components/Text' import AssetAmountInput from 'components/Trade/TradeModule/SwapForm/AssetAmountInput' @@ -56,7 +56,7 @@ export function PerpsManageModule() { /> Position Leverage - {}} /> + {}} type={tradeDirection || 'long'} /> Position Leverage - {}} /> + +
@@ -49,7 +49,7 @@ export default function FundingRate() { setInterval(key as Interval) toggleShow(false) }} - className='w-full text-left px-4 py-2 flex gap-2 items-center hover:bg-white/5 [&:not(:last-child)]:border-b border-white/10' + className='w-full text-center px-3 py-1.5 flex gap-2 items-center hover:bg-white/5 text-[10px]' > {key} diff --git a/src/components/Trade/TradeModule/SwapForm/index.tsx b/src/components/Trade/TradeModule/SwapForm/index.tsx index b6fd395e..ea02b55d 100644 --- a/src/components/Trade/TradeModule/SwapForm/index.tsx +++ b/src/components/Trade/TradeModule/SwapForm/index.tsx @@ -5,7 +5,7 @@ import estimateExactIn from 'api/swap/estimateExactIn' import AvailableLiquidityMessage from 'components/AvailableLiquidityMessage' import DepositCapMessage from 'components/DepositCapMessage' import Divider from 'components/Divider' -import RangeInput from 'components/RangeInput' +import MarginSlider from 'components/MarginSlider' import Text from 'components/Text' import AssetSelectorPair from 'components/Trade/TradeModule/AssetSelector/AssetSelectorPair' import AssetSelectorSingle from 'components/Trade/TradeModule/AssetSelector/AssetSelectorSingle' @@ -393,7 +393,7 @@ export default function SwapForm(props: Props) { )} {!isAdvanced && } -