use anyhow::Result;
use yazi_dds::Pubsub;
use yazi_macro::{err, render, succ, tab};
use yazi_parser::mgr::HoverOpt;
use yazi_shared::{data::Data, url::UrlLike};
use crate::{Actor, Ctx};
pub struct Hover;
impl Actor for Hover {
type Options = HoverOpt;
const NAME: &str = "hover";
fn act(cx: &mut Ctx, opt: Self::Options) -> Result<Data> {
let tab = tab!(cx);
if let Some(p) = &mut tab.parent {
render!(p.repos(tab.current.url.try_strip_prefix(&p.url).ok()));
}
tab.current.repos(opt.urn.as_ref().map(Into::into));
if let (Some(h), Some(u)) = (tab.hovered(), opt.urn)
&& h.urn() == u
{
tab.current.trace = Some(u.clone());
}
err!(Pubsub::pub_after_hover(tab.id, tab.hovered().map(|h| &h.url)));
succ!();
}
}