v9d Phase 2d: Vitals Module Refactoring (Baseline + Blood Pressure) #22

Merged
Lars merged 29 commits from develop into main 2026-03-23 16:27:03 +01:00
Showing only changes of commit 65846042e2 - Show all commits

View File

@ -250,6 +250,16 @@ export default function ProfileBuilder({ trainingType, onSave, onCancel, paramet
marginBottom: '8px' marginBottom: '8px'
}} }}
> >
{/* Labels Row */}
<div style={{ display: 'grid', gridTemplateColumns: '2fr 1.5fr 1fr 0.8fr 40px', gap: '8px', marginBottom: '4px' }}>
<div style={{ fontSize: '10px', color: 'var(--text3)', fontWeight: '600' }}>PARAMETER</div>
<div style={{ fontSize: '10px', color: 'var(--text3)', fontWeight: '600' }}>OPERATOR</div>
<div style={{ fontSize: '10px', color: 'var(--text3)', fontWeight: '600' }}>SCHWELLENWERT</div>
<div style={{ fontSize: '10px', color: 'var(--text3)', fontWeight: '600' }}>GEWICHT</div>
<div></div>
</div>
{/* Input Row */}
<div style={{ display: 'grid', gridTemplateColumns: '2fr 1.5fr 1fr 0.8fr 40px', gap: '8px', marginBottom: '8px' }}> <div style={{ display: 'grid', gridTemplateColumns: '2fr 1.5fr 1fr 0.8fr 40px', gap: '8px', marginBottom: '8px' }}>
{/* Parameter */} {/* Parameter */}
<select <select
@ -279,16 +289,16 @@ export default function ProfileBuilder({ trainingType, onSave, onCancel, paramet
{/* Value */} {/* Value */}
{rule.operator === 'between' ? ( {rule.operator === 'between' ? (
<div style={{ display: 'flex', gap: '4px' }}> <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>
<input <input
type="number" type="number"
className="form-input" className="form-input"
placeholder="Min" placeholder="Min"
value={Array.isArray(rule.value) ? rule.value[0] : 0} value={Array.isArray(rule.value) ? rule.value[0] : 0}
onChange={(e) => updateRule(idx, { onChange={(e) => updateRule(idx, {
value: [parseFloat(e.target.value), Array.isArray(rule.value) ? rule.value[1] : 0] value: [parseFloat(e.target.value) || 0, Array.isArray(rule.value) ? rule.value[1] : 0]
})} })}
style={{ fontSize: '13px' }} style={{ fontSize: '13px', padding: '4px 8px' }}
/> />
<input <input
type="number" type="number"
@ -296,15 +306,16 @@ export default function ProfileBuilder({ trainingType, onSave, onCancel, paramet
placeholder="Max" placeholder="Max"
value={Array.isArray(rule.value) ? rule.value[1] : 0} value={Array.isArray(rule.value) ? rule.value[1] : 0}
onChange={(e) => updateRule(idx, { onChange={(e) => updateRule(idx, {
value: [Array.isArray(rule.value) ? rule.value[0] : 0, parseFloat(e.target.value)] value: [Array.isArray(rule.value) ? rule.value[0] : 0, parseFloat(e.target.value) || 0]
})} })}
style={{ fontSize: '13px' }} style={{ fontSize: '13px', padding: '4px 8px' }}
/> />
</div> </div>
) : ( ) : (
<input <input
type="number" type="number"
className="form-input" className="form-input"
placeholder="z.B. 90"
value={rule.value} value={rule.value}
onChange={(e) => updateRule(idx, { value: parseFloat(e.target.value) || 0 })} onChange={(e) => updateRule(idx, { value: parseFloat(e.target.value) || 0 })}
style={{ fontSize: '13px' }} style={{ fontSize: '13px' }}
@ -315,13 +326,13 @@ export default function ProfileBuilder({ trainingType, onSave, onCancel, paramet
<input <input
type="number" type="number"
className="form-input" className="form-input"
placeholder="Gewicht" placeholder="1-10"
min="1" min="1"
max="10" max="10"
value={rule.weight} value={rule.weight}
onChange={(e) => updateRule(idx, { weight: parseInt(e.target.value) || 1 })} onChange={(e) => updateRule(idx, { weight: parseInt(e.target.value) || 1 })}
style={{ fontSize: '13px' }} style={{ fontSize: '13px' }}
title="Gewichtung 1-10" title="Gewichtung der Regel (1=niedrig, 10=hoch)"
/> />
{/* Delete */} {/* Delete */}
@ -329,6 +340,7 @@ export default function ProfileBuilder({ trainingType, onSave, onCancel, paramet
className="btn" className="btn"
onClick={() => removeRule(idx)} onClick={() => removeRule(idx)}
style={{ padding: '6px', minWidth: 'auto' }} style={{ padding: '6px', minWidth: 'auto' }}
title="Regel löschen"
> >
<Trash2 size={14} /> <Trash2 size={14} />
</button> </button>