6.7.0: Описание товаров и редизайн выполнения
All checks were successful
Build and Push Docker Image / build-and-push (push) Successful in 1m24s

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
poignatov
2026-03-10 16:39:23 +03:00
parent 79fa0538f9
commit e962f49407
9 changed files with 190 additions and 32 deletions

View File

@@ -127,8 +127,44 @@ function ShoppingItemDetail({ itemId, onClose, onRefresh, onItemCompleted, onNav
{!loading && !error && item && (
<>
<div className="progression-section">
<label className="progression-label">Объём</label>
{item.description && (
<div className="shopping-item-description-card">
<div className="shopping-item-description">
{item.description.split(/(https?:\/\/[^\s<>"'`,;!)\]]+)/gi).map((part, i) => {
if (/^https?:\/\//i.test(part)) {
let host
try {
host = new URL(part).host.replace(/^www\./, '')
} catch {
host = 'Открыть ссылку'
}
return (
<a key={i} href={part} target="_blank" rel="noopener noreferrer" className="shopping-item-description-link">
{host}
</a>
)
}
return <span key={i}>{part}</span>
})}
</div>
<button
type="button"
className="shopping-item-history-button"
onClick={() => {}}
title="История"
>
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path>
<polyline points="14 2 14 8 20 8"></polyline>
<line x1="16" y1="13" x2="8" y2="13"></line>
<line x1="16" y1="17" x2="8" y2="17"></line>
<polyline points="10 9 9 9 8 9"></polyline>
</svg>
</button>
</div>
)}
<div className="shopping-item-complete-row">
<div className="progression-input-wrapper">
<input
type="number"
@@ -163,22 +199,19 @@ function ShoppingItemDetail({ itemId, onClose, onRefresh, onItemCompleted, onNav
</button>
</div>
</div>
</div>
<div className="task-detail-divider"></div>
<div className="task-actions-section">
<div className="task-actions-buttons">
<div className="task-action-left">
<button
onClick={handleComplete}
disabled={isCompleting}
className="action-button action-button-check"
>
{isCompleting ? 'Выполнение...' : 'Выполнить'}
</button>
</div>
</div>
<button
onClick={handleComplete}
disabled={isCompleting}
className="shopping-item-complete-button"
>
{isCompleting ? (
<div className="shopping-item-complete-spinner"></div>
) : (
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round">
<polyline points="20 6 9 17 4 12"></polyline>
</svg>
)}
</button>
</div>
</>
)}