use std::cell::RefCell;
use std::mem::ManuallyDrop;
use layout_core::Direction;
thread_local! {
static FOLLOW: ManuallyDrop<RefCell<Option<reactive_core::Effect>>> =
ManuallyDrop::new(RefCell::new(None));
}
pub fn follow_locale_direction() {
let effect = reactive_core::effect(|| {
let direction = i18n_core::use_locale()
.as_deref()
.map(Direction::for_locale)
.unwrap_or_default();
ui_core::set_direction(direction);
});
FOLLOW.with(|f| *f.borrow_mut() = Some(effect));
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn switching_to_an_rtl_locale_flips_the_direction_and_back() {
follow_locale_direction();
i18n_core::set_locale("ar");
assert_eq!(ui_core::current_direction(), Direction::Rtl);
i18n_core::set_locale("es");
assert_eq!(ui_core::current_direction(), Direction::Ltr);
}
}