From 8c160d64438789ae05c21458b31fb51d653aa3e3 Mon Sep 17 00:00:00 2001 From: Thigazhezhilan J Date: Wed, 8 Apr 2026 01:29:02 +0530 Subject: [PATCH] Clarify active strategy cadence in portfolio --- src/components/landing/PortfolioSection.tsx | 48 +++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/src/components/landing/PortfolioSection.tsx b/src/components/landing/PortfolioSection.tsx index e3d3e3bb..a9d1a09b 100644 --- a/src/components/landing/PortfolioSection.tsx +++ b/src/components/landing/PortfolioSection.tsx @@ -195,6 +195,16 @@ function getNetQuantity(item: any) { return getEffectiveQuantity(item); } +function formatFrequencyLabel(value?: number | null, unit?: string | null) { + const safeValue = Number(value); + if (!Number.isFinite(safeValue) || safeValue <= 0 || !unit) { + return null; + } + const normalizedUnit = unit === "minutes" ? "minute" : unit === "days" ? "day" : unit; + const pluralizedUnit = safeValue === 1 ? normalizedUnit : `${normalizedUnit}s`; + return `${safeValue} ${pluralizedUnit}`; +} + function getAveragePrice(item: any) { return firstNumber(item?.average_price, item?.avg_price); } @@ -762,6 +772,38 @@ export default function PortfolioSection() { : strategyStatus === "WAITING" ? "WAITING" : "STOPPED"; + const savedStrategyAmount = Number(strategyDetails?.config?.sip_amount); + const savedStrategyFrequencyValue = Number(strategyDetails?.config?.sip_frequency?.value); + const savedStrategyFrequencyUnit = + strategyDetails?.config?.sip_frequency?.unit === "minutes" + ? "minutes" + : strategyDetails?.config?.sip_frequency?.unit === "days" + ? "days" + : null; + const savedStrategyCadence = formatFrequencyLabel( + savedStrategyFrequencyValue, + savedStrategyFrequencyUnit, + ); + const savedStrategyAmountLabel = + Number.isFinite(savedStrategyAmount) && savedStrategyAmount > 0 + ? formatCurrency(savedStrategyAmount) + : null; + const savedStrategyMode = + strategyDetails?.config?.mode === "LIVE" + ? "Live" + : strategyDetails?.config?.mode === "PAPER" + ? "Paper" + : null; + const savedStrategyBroker = + strategyDetails?.config?.broker ? formatBrokerName(strategyDetails.config.broker) : null; + const savedStrategySummary = [ + savedStrategyAmountLabel ? `${savedStrategyAmountLabel} SIP` : null, + savedStrategyCadence ? `every ${savedStrategyCadence}` : null, + savedStrategyMode, + savedStrategyBroker, + ] + .filter(Boolean) + .join(" ยท "); const isStrategyActive = normalizedStrategyStatus === "RUNNING" || normalizedStrategyStatus === "WAITING"; @@ -1483,6 +1525,12 @@ export default function PortfolioSection() { Minutes mode is for live testing only. The engine checks every few seconds in this mode. ) : null} + {savedStrategySummary ? ( +
+ {isStrategyActive ? "Current run" : showResumeStrategy ? "Resume will continue" : "Saved strategy config"} + : {savedStrategySummary} +
+ ) : null} {showResumeStrategy ? (
Resume uses the previously saved SIP configuration. Choose restart to begin a fresh cycle.