l.parameterId === track.automation.selectedParameterId)?.visible
- ? '164px' // 32px header + 132px automation lane
- : track.automation?.showAutomation
- ? '32px' // Just header
- : '0px'
- }}
- >
- {/* Effects Header - Always visible */}
-
{
- onUpdateTrack(track.id, { effectsExpanded: !track.effectsExpanded });
- }}
- >
-
- {track.effectsExpanded ? (
-
- ) : (
-
- )}
- Effects
-
- ({track.effectChain.effects.length})
-
-
-
-
-
- {/* Effects Content - Collapsible */}
- {track.effectsExpanded && (
-
- {
- const updatedChain = {
- ...track.effectChain,
- effects: track.effectChain.effects.map((e) =>
- e.id === effectId ? { ...e, enabled: !e.enabled } : e
- ),
- };
- onUpdateTrack(track.id, { effectChain: updatedChain });
- }}
- onRemoveEffect={(effectId) => {
- const updatedChain = {
- ...track.effectChain,
- effects: track.effectChain.effects.filter((e) => e.id !== effectId),
- };
- onUpdateTrack(track.id, { effectChain: updatedChain });
- }}
- onUpdateEffect={(effectId, parameters) => {
- const updatedChain = {
- ...track.effectChain,
- effects: track.effectChain.effects.map((e) =>
- e.id === effectId ? { ...e, parameters } : e
- ),
- };
- onUpdateTrack(track.id, { effectChain: updatedChain });
- }}
- onAddEffect={(effectType) => {
- const newEffect = createEffect(
- effectType,
- EFFECT_NAMES[effectType]
- );
- const updatedChain = {
- ...track.effectChain,
- effects: [...track.effectChain.effects, newEffect],
- };
- onUpdateTrack(track.id, { effectChain: updatedChain });
- }}
- />
-
- )}
-
- )}