|
1 | 1 | "use client"; |
2 | 2 | import React, { useMemo, useRef, useEffect } from "react"; |
3 | 3 | import { hasValidPrecision } from "@/lib/amount"; |
| 4 | +import { SECONDS_PER_UNIT, DurationUnit } from "@/lib/soroban"; |
4 | 5 |
|
5 | 6 | interface ScheduleStepProps { |
6 | 7 | duration: string; |
7 | | - durationUnit: "seconds" | "minutes" | "hours" | "days" | "weeks" | "months"; |
| 8 | + durationUnit: DurationUnit; |
8 | 9 | onDurationChange: (value: string) => void; |
9 | | - onUnitChange: (value: "seconds" | "minutes" | "hours" | "days" | "weeks" | "months") => void; |
| 10 | + onUnitChange: (value: DurationUnit) => void; |
10 | 11 | error?: string; |
11 | 12 | amount?: string; |
12 | 13 | token?: string; |
@@ -42,29 +43,10 @@ export const ScheduleStep: React.FC<ScheduleStepProps> = ({ |
42 | 43 | return null; |
43 | 44 | } |
44 | 45 |
|
45 | | - let seconds = parseFloat(duration); |
46 | | - |
47 | | - switch (durationUnit) { |
48 | | - case "seconds": |
49 | | - break; |
50 | | - case "minutes": |
51 | | - seconds *= 60; |
52 | | - break; |
53 | | - case "hours": |
54 | | - seconds *= 3600; |
55 | | - break; |
56 | | - case "days": |
57 | | - seconds *= 86400; |
58 | | - break; |
59 | | - case "weeks": |
60 | | - seconds *= 604800; |
61 | | - break; |
62 | | - case "months": |
63 | | - seconds *= 2592000; // 30 days |
64 | | - break; |
65 | | - } |
| 46 | + const seconds = parseFloat(duration); |
| 47 | + const multiplier = Number(SECONDS_PER_UNIT[durationUnit]); |
66 | 48 |
|
67 | | - return seconds; |
| 49 | + return seconds * multiplier; |
68 | 50 | }, [duration, durationUnit]); |
69 | 51 |
|
70 | 52 | const ratePerSecond = useMemo(() => { |
@@ -154,7 +136,7 @@ export const ScheduleStep: React.FC<ScheduleStepProps> = ({ |
154 | 136 | value={durationUnit} |
155 | 137 | onChange={(e) => |
156 | 138 | onUnitChange( |
157 | | - e.target.value as "seconds" | "minutes" | "hours" | "days" | "weeks" | "months" |
| 139 | + e.target.value as DurationUnit |
158 | 140 | ) |
159 | 141 | } |
160 | 142 | className="w-full px-4 py-3 rounded-lg bg-glass border border-glass-border focus:border-accent focus:ring-accent focus:outline-none focus:ring-2 focus:ring-opacity-50 transition-colors text-foreground" |
|
0 commit comments