말림목록 매매 버튼 추가

This commit is contained in:
Macbook
2026-06-06 03:25:11 +09:00
parent 4c057a3e07
commit 63c56a11b2
3 changed files with 32 additions and 0 deletions
+13
View File
@@ -12188,6 +12188,19 @@ html.theme-light .tam-disclaimer { color: #90a4ae; }
} }
.tnl-row-chart:hover { background: var(--bg4); color: var(--text); } .tnl-row-chart:hover { background: var(--bg4); color: var(--text); }
.tnl-row-trade {
padding: 0 14px;
border: none;
border-left: 1px solid var(--border);
background: rgba(38, 132, 255, 0.15);
color: #2684ff;
font-size: 12px;
font-weight: 600;
cursor: pointer;
transition: background 0.15s;
}
.tnl-row-trade:hover { background: rgba(38, 132, 255, 0.28); color: #5ba0ff; }
/* TopMenuBar 앱 다운로드 버튼 */ /* TopMenuBar 앱 다운로드 버튼 */
.tmb-app-download-btn { .tmb-app-download-btn {
display: flex; display: flex;
@@ -190,6 +190,16 @@ export const TradeNotificationListPage: React.FC<Props> = ({
setRightTab('trade'); setRightTab('trade');
}, [tickers]); }, [tickers]);
/** 알림 목록 아이템 "매매" 버튼 — 우측 패널 열고 해당 종목 현재가 입력 */
const handleTradeFromAlert = useCallback((item: TradeNotificationItem) => {
if (!item.isRead) markAsRead(item.id);
const price = coerceFiniteNumber(tickers?.get(item.market)?.tradePrice)
?? coerceFiniteNumber(item.price);
handleSelectMarket(item.market, price ?? undefined);
setRightOpen(true);
setRightTab('trade');
}, [markAsRead, tickers, handleSelectMarket]);
const selectedCount = selectedIds.size; const selectedCount = selectedIds.size;
const handleNotificationSelect = useCallback((item: TradeNotificationItem) => { const handleNotificationSelect = useCallback((item: TradeNotificationItem) => {
@@ -509,6 +519,7 @@ export const TradeNotificationListPage: React.FC<Props> = ({
markAsRead(item.id); markAsRead(item.id);
setFullscreenItem(item); setFullscreenItem(item);
}} }}
onTrade={() => handleTradeFromAlert(item)}
tickers={tickers} tickers={tickers}
/> />
))} ))}
@@ -51,6 +51,8 @@ interface Props {
onDelete: (e: React.MouseEvent) => void; onDelete: (e: React.MouseEvent) => void;
onDetail: () => void; onDetail: () => void;
onGoToChart: () => void; onGoToChart: () => void;
/** 매매 버튼 클릭 → 우측 매매 패널 열기 */
onTrade?: () => void;
} }
const MAX_INDICATOR_CARDS = 8; const MAX_INDICATOR_CARDS = 8;
@@ -67,6 +69,7 @@ const TradeNotificationListRow: React.FC<Props> = ({
onDelete, onDelete,
onDetail, onDetail,
onGoToChart, onGoToChart,
onTrade,
}) => { }) => {
useTradeAlertTimeFormat(); useTradeAlertTimeFormat();
const isBuy = item.signalType === 'BUY'; const isBuy = item.signalType === 'BUY';
@@ -309,6 +312,11 @@ const TradeNotificationListRow: React.FC<Props> = ({
<button type="button" className="tnl-row-chart" onClick={onGoToChart}> <button type="button" className="tnl-row-chart" onClick={onGoToChart}>
</button> </button>
{onTrade && (
<button type="button" className="tnl-row-trade" onClick={onTrade}>
</button>
)}
</div> </div>
</article> </article>
); );