Skip to content

Commit 8081274

Browse files
committed
fix: price chart when pool price very small
1 parent 0807fa0 commit 8081274

3 files changed

Lines changed: 26 additions & 16 deletions

File tree

packages/liquidity-chart/src/constants/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import { POOL_CATEGORY } from '@kyber/schema';
22

33
export const PRICE_FIXED_DIGITS = 8;
44

5-
// Minimum allowed price value to prevent negative/zero prices in the chart and brush
6-
export const MIN_PRICE = 1 / 10 ** 6;
5+
// Keep the brush strictly positive without collapsing very small-price pools into the visible range.
6+
export const MIN_PRICE = 1 / 10 ** 30;
77

88
export const DEFAULT_DIMENSIONS = { width: 400, height: 200 };
99

packages/liquidity-widgets/src/components/LiquidityChart/index.tsx

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ import { useZapState } from '@/hooks/useZapState';
1111
import { usePoolStore } from '@/stores/usePoolStore';
1212
import { useWidgetStore } from '@/stores/useWidgetStore';
1313

14+
const parseChartPrice = (value: string | null) => {
15+
if (!value) return NaN;
16+
return parseFloat(value.toString().replace(/,/g, ''));
17+
};
18+
1419
export default function LiquidityChart() {
1520
const { positionId } = useWidgetStore(['positionId']);
1621
const { pool: rawPool, poolPrice, revertPrice } = usePoolStore(['pool', 'poolPrice', 'revertPrice']);
@@ -49,10 +54,10 @@ export default function LiquidityChart() {
4954
const tickLower = nearestUsableTick(Number(tickLowerFromPrice), tickSpacing);
5055
const tickUpper = nearestUsableTick(Number(tickUpperFromPrice), tickSpacing);
5156

52-
if (tickUpper) {
57+
if (tickUpper !== undefined) {
5358
revertPrice ? setTickLower(tickUpper) : setTickUpper(tickUpper);
5459
}
55-
if (tickLower) {
60+
if (tickLower !== undefined) {
5661
revertPrice ? setTickUpper(tickLower) : setTickLower(tickLower);
5762
}
5863
},
@@ -66,7 +71,7 @@ export default function LiquidityChart() {
6671

6772
if (tickFromPrice === undefined) return;
6873
const tick = nearestUsableTick(Number(tickFromPrice), tickSpacing);
69-
if (tick) revertPrice ? setTickUpper(tick) : setTickLower(tick);
74+
if (tick !== undefined) revertPrice ? setTickUpper(tick) : setTickLower(tick);
7075
},
7176
[positionId, revertPrice, setTickLower, setTickUpper, tickSpacing, token0, token1],
7277
);
@@ -78,16 +83,16 @@ export default function LiquidityChart() {
7883

7984
if (tickFromPrice === undefined) return;
8085
const tick = nearestUsableTick(Number(tickFromPrice), tickSpacing);
81-
if (tick) revertPrice ? setTickLower(tick) : setTickUpper(tick);
86+
if (tick !== undefined) revertPrice ? setTickLower(tick) : setTickUpper(tick);
8287
},
8388
[positionId, revertPrice, setTickLower, setTickUpper, tickSpacing, token0, token1],
8489
);
8590

8691
const onBrushDomainChange = useCallback(
8792
(domain: [number, number], mode: string | undefined) => {
8893
if (!minPrice || !maxPrice) return;
89-
const leftPrice = parseFloat(!revertPrice ? minPrice : maxPrice.toString().replace(/,/g, ''));
90-
const rightPrice = parseFloat(!revertPrice ? maxPrice : minPrice.toString().replace(/,/g, ''));
94+
const leftPrice = parseChartPrice(!revertPrice ? minPrice : maxPrice);
95+
const rightPrice = parseChartPrice(!revertPrice ? maxPrice : minPrice);
9196

9297
let leftRangeValue = Number(domain[0]);
9398
let rightRangeValue = Number(domain[1]);
@@ -100,7 +105,7 @@ export default function LiquidityChart() {
100105
}
101106

102107
const updateLeft =
103-
(!ticksAtLimit[!revertPrice ? Bound.LOWER : Bound.UPPER] || mode === 'handle' || mode === 'reset') &&
108+
(!ticksAtLimit[!revertPrice ? Bound.LOWER : Bound.UPPER] || mode === 'reset') &&
104109
leftRangeValue > 0 &&
105110
leftRangeValue !== leftPrice;
106111

packages/zap-migration-widgets/src/components/RangeInput/LiquidityChart.tsx

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@ import { usePoolStore } from '@/stores/usePoolStore';
1212
import { useWidgetStore } from '@/stores/useWidgetStore';
1313
import { useZapStore } from '@/stores/useZapStore';
1414

15+
const parseChartPrice = (value: string | null) => {
16+
if (!value) return NaN;
17+
return parseFloat(value.toString().replace(/,/g, ''));
18+
};
19+
1520
export default function LiquidityChart() {
1621
const { targetPoolType } = useWidgetStore(['targetPoolType']);
1722
const { targetPool, targetPoolPrice, revertPrice } = usePoolStore(['targetPool', 'targetPoolPrice', 'revertPrice']);
@@ -52,10 +57,10 @@ export default function LiquidityChart() {
5257
const tickLower = nearestUsableTick(Number(tickLowerFromPrice), tickSpacing);
5358
const tickUpper = nearestUsableTick(Number(tickUpperFromPrice), tickSpacing);
5459

55-
if (tickUpper) {
60+
if (tickUpper !== undefined) {
5661
revertPrice ? setTickLower(tickUpper) : setTickUpper(tickUpper);
5762
}
58-
if (tickLower) {
63+
if (tickLower !== undefined) {
5964
revertPrice ? setTickUpper(tickLower) : setTickLower(tickLower);
6065
}
6166
},
@@ -69,7 +74,7 @@ export default function LiquidityChart() {
6974

7075
if (tickFromPrice === undefined) return;
7176
const tick = nearestUsableTick(Number(tickFromPrice), tickSpacing);
72-
if (tick) revertPrice ? setTickUpper(tick) : setTickLower(tick);
77+
if (tick !== undefined) revertPrice ? setTickUpper(tick) : setTickLower(tick);
7378
},
7479
[revertPrice, setTickLower, setTickUpper, tickSpacing, token0, token1],
7580
);
@@ -81,16 +86,16 @@ export default function LiquidityChart() {
8186

8287
if (tickFromPrice === undefined) return;
8388
const tick = nearestUsableTick(Number(tickFromPrice), tickSpacing);
84-
if (tick) revertPrice ? setTickLower(tick) : setTickUpper(tick);
89+
if (tick !== undefined) revertPrice ? setTickLower(tick) : setTickUpper(tick);
8590
},
8691
[revertPrice, setTickLower, setTickUpper, tickSpacing, token0, token1],
8792
);
8893

8994
const onBrushDomainChange = useCallback(
9095
(domain: [number, number], mode: string | undefined) => {
9196
if (!minPrice || !maxPrice) return;
92-
const leftPrice = parseFloat(!revertPrice ? minPrice : maxPrice.toString().replace(/,/g, ''));
93-
const rightPrice = parseFloat(!revertPrice ? maxPrice : minPrice.toString().replace(/,/g, ''));
97+
const leftPrice = parseChartPrice(!revertPrice ? minPrice : maxPrice);
98+
const rightPrice = parseChartPrice(!revertPrice ? maxPrice : minPrice);
9499

95100
let leftRangeValue = Number(domain[0]);
96101
let rightRangeValue = Number(domain[1]);
@@ -103,7 +108,7 @@ export default function LiquidityChart() {
103108
}
104109

105110
const updateLeft =
106-
(!ticksAtLimit[!revertPrice ? Bound.LOWER : Bound.UPPER] || mode === 'handle' || mode === 'reset') &&
111+
(!ticksAtLimit[!revertPrice ? Bound.LOWER : Bound.UPPER] || mode === 'reset') &&
107112
leftRangeValue > 0 &&
108113
leftRangeValue !== leftPrice;
109114

0 commit comments

Comments
 (0)