diff --git a/frontend/src/components/CardActionModal.js b/frontend/src/components/CardActionModal.js index 90b99ad..69d21aa 100644 --- a/frontend/src/components/CardActionModal.js +++ b/frontend/src/components/CardActionModal.js @@ -353,9 +353,51 @@ export default function CardActionModal({ isOpen, onClose, item, initialAction, {/* Execution error */} {execError && ( -
- - {execError} +
+
+ + + {execError.includes('update_token') ? 'Cannot action via API — this asset has no update token.' : execError} + +
+ {execError.includes('update_token') && item?.host_id && ( +
+ + Action this asset directly in CARD instead: + + +
+ )}
)} diff --git a/frontend/src/components/CardDetailModal.js b/frontend/src/components/CardDetailModal.js index fdb8700..5896d00 100644 --- a/frontend/src/components/CardDetailModal.js +++ b/frontend/src/components/CardDetailModal.js @@ -7,7 +7,7 @@ */ import React, { useState, useEffect, useCallback } from 'react'; -import { X, Loader, AlertCircle, CheckCircle, XCircle, ArrowRightLeft } from 'lucide-react'; +import { X, Loader, AlertCircle, CheckCircle, XCircle, ArrowRightLeft, ExternalLink } from 'lucide-react'; // ⚠️ CONVENTION: Prefer using REACT_APP_API_BASE without an absolute URL fallback — other components use relative paths via the env var (e.g. '' default) rather than hardcoding http://localhost:3001/api const API_BASE = process.env.REACT_APP_API_BASE || 'http://localhost:3001/api'; @@ -338,9 +338,52 @@ export default function CardDetailModal({ isOpen, onClose, ip, ownerData: initia {/* Execution error */} {execError && ( -
- - {execError} +
+
+ + + {execError.includes('update_token') ? 'Cannot action via API — this asset has no update token.' : execError} + +
+ {execError.includes('update_token') && ( +
+ + Action this asset directly in CARD instead: + + +
+ )}
)}