Pauan / rust-dominator

Zero-cost ultra-high-performance declarative DOM library using FRP signals for Rust!
MIT License
960 stars 62 forks source link

Feat: dynamic_class_signal #44

Open dakom opened 3 years ago

dakom commented 3 years ago

As discussed on Discord, sometimes it's needed to add/remove a class with a dynamic name

@Pauan suggested a fn dynamic_class_signal<S>(self, signal: S) -> Self where S: Signal<Item = Option<String>>

which makes something like this much more ergonomic:

.with_node!(element => {
    .future({
        let mut old = None;

        signal.for_each(move |value| {
            if let Some(old) = old.as_deref() {
                element.class_list().remove_1(old).unwrap();
            }

            let name = ...;
            element.class_list().add_1(name).unwrap();
            old = Some(name);
            ready(())
        })
    })
})
dakom commented 3 years ago

I've temporarily made a version of this available here