Clarify active strategy cadence in portfolio

This commit is contained in:
Thigazhezhilan J 2026-04-08 01:29:02 +05:30
parent d10bb3dd78
commit 8c160d6443

View File

@ -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.
</div>
) : null}
{savedStrategySummary ? (
<div className="rounded-lg border border-border/60 bg-background/40 px-3 py-2 text-xs text-muted-foreground">
{isStrategyActive ? "Current run" : showResumeStrategy ? "Resume will continue" : "Saved strategy config"}
: <span className="font-medium text-foreground"> {savedStrategySummary}</span>
</div>
) : null}
{showResumeStrategy ? (
<div className="text-xs text-muted-foreground">
Resume uses the previously saved SIP configuration. Choose restart to begin a fresh cycle.