diff --git a/packages/app/components/stackbox/FrequencyOptionsCard.tsx b/packages/app/components/stackbox/FrequencyOptionsCard.tsx index 4c1d66da..4d7277f6 100644 --- a/packages/app/components/stackbox/FrequencyOptionsCard.tsx +++ b/packages/app/components/stackbox/FrequencyOptionsCard.tsx @@ -2,9 +2,10 @@ import { ChangeEvent, useEffect, useState } from "react"; -import { add } from "date-fns"; +import { add, daysToWeeks } from "date-fns"; import { twMerge } from "tailwind-merge"; +import { useStrategyContext } from "@/contexts"; import { FREQUENCY_OPTIONS } from "@/models"; import { BodyText, RadioButton, TextInput } from "@/ui"; import { cx } from "class-variance-authority"; @@ -54,6 +55,26 @@ const getCroppedFrequency = (frequency: FREQUENCY_OPTIONS) => { return isMonthFrequency ? frequency.substring(0, 2) : frequency.charAt(0); }; +const parseDaysToFrequencyAmount = ( + days: number, + frequency: FREQUENCY_OPTIONS +) => { + switch (frequency) { + case FREQUENCY_OPTIONS.hour: + return days * 24; + case FREQUENCY_OPTIONS.day: + return days; + case FREQUENCY_OPTIONS.week: + return daysToWeeks(days); + case FREQUENCY_OPTIONS.month: + return days / 30; + default: { + console.error("Invalid frequency option", frequency); + return maxCustomFrequencies[frequency]; + } + } +}; + export const FrequencyOptionsCard = ({ frequency, setEndDate, @@ -63,6 +84,8 @@ export const FrequencyOptionsCard = ({ ); const [customFrequency, setCustomFrequency] = useState(""); + const { deselectStrategy, selectedStrategy } = useStrategyContext(); + const handleCustomFrequencyChange = ( event: ChangeEvent ) => { @@ -82,6 +105,8 @@ export const FrequencyOptionsCard = ({ setDefaultFrequency(""); setCustomFrequency(newValue); } + + if (selectedStrategy) deselectStrategy(); }; useEffect(() => { @@ -97,6 +122,26 @@ export const FrequencyOptionsCard = ({ // eslint-disable-next-line react-hooks/exhaustive-deps }, [defaultFrequency, customFrequency]); + useEffect(() => { + if (selectedStrategy) { + const frequencyAmount = parseDaysToFrequencyAmount( + selectedStrategy.daysAmount, + frequency + ).toString(); + + const isDefaultStrategy = + defaultFrequencyOptions[frequency].includes(frequencyAmount); + + if (isDefaultStrategy) { + setDefaultFrequency(frequencyAmount); + setCustomFrequency(""); + } else { + setCustomFrequency(frequencyAmount); + setDefaultFrequency(""); + } + } + }, [frequency, selectedStrategy]); + return (
{ setDefaultFrequency(event.target.value as FREQUENCY_OPTIONS); if (!!customFrequency) setCustomFrequency(""); + if (selectedStrategy) deselectStrategy(); }} value={freqOption} > diff --git a/packages/app/components/strategies/constants.tsx b/packages/app/components/strategies/constants.tsx index 8c7d9250..324ae423 100644 --- a/packages/app/components/strategies/constants.tsx +++ b/packages/app/components/strategies/constants.tsx @@ -93,7 +93,7 @@ export const STRATEGY_CATEGORIES: { [chainId: number]: ChainStrategies } = { { id: 3, buyToken: gnosisTokens.WETH, - daysAmount: 10, + daysAmount: 4, frequency: FREQUENCY_OPTIONS.hour, sellAmountPerTimeframe: 5, sellToken: gnosisTokens.USDC, @@ -136,7 +136,7 @@ export const STRATEGY_CATEGORIES: { [chainId: number]: ChainStrategies } = { { id: 3, buyToken: arbitrumTokens.WETH, - daysAmount: 10, + daysAmount: 4, frequency: FREQUENCY_OPTIONS.hour, sellAmountPerTimeframe: 5, sellToken: arbitrumTokens.USDC, @@ -179,7 +179,7 @@ export const STRATEGY_CATEGORIES: { [chainId: number]: ChainStrategies } = { { id: 3, buyToken: baseTokens.CBBTC, - daysAmount: 10, + daysAmount: 4, frequency: FREQUENCY_OPTIONS.hour, sellAmountPerTimeframe: 5, sellToken: baseTokens.USDC,