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 &&
}
-