import {html, watch, GoldElement} from "@benev/slate" import {Effect} from "./parts/effect.js" import {shadow_view} from "../../../../context/context.js" import {AudioEffect as XAudioEffect} from "../../../../context/types.js" import {Waveform} from "../../../../context/controllers/timeline/parts/waveform.js" export const AudioEffect = shadow_view(use => (effect: XAudioEffect, timeline: GoldElement) => { const media = use.context.controllers.media const compositor = use.context.controllers.compositor const [wave, setWave] = use.state(null) use.mount(() => { const wave = new Waveform(effect, use.context.controllers.media, use.context.state) setWave(wave.wave) const dispose = watch.track(() => use.context.state.zoom, (zoom) => wave!.update_waveform(use.context.state)) const dispose1 = media.on_media_change(async ({files, action}) => { if(action === "added") { for(const {hash} of files) { const is_effect_already_composed = compositor.managers.audioManager.get(effect.id) if(hash === effect.file_hash && !is_effect_already_composed) { wave.on_file_found(use.context.state) compositor.recreate({...use.context.state, effects: [effect]}, media) } } } }) return () => { dispose() dispose1() wave.dispose() } }) return html`${Effect([timeline, effect, html`${wave}`])}` })