use anyhow::Result;
use yazi_fs::{File, FilesOp};
use yazi_macro::{act, render, succ};
use yazi_parser::mgr::RevealOpt;
use yazi_shared::{data::Data, url::UrlLike};
use crate::{Actor, Ctx};
pub struct Reveal;
impl Actor for Reveal {
type Options = RevealOpt;
const NAME: &str = "reveal";
fn act(cx: &mut Ctx, opt: Self::Options) -> Result<Data> {
let Some((parent, child)) = opt.target.pair() else { succ!() };
act!(mgr:cd, cx, (parent, opt.source))?;
let tab = cx.tab_mut();
render!(tab.current.hover(child));
if !opt.no_dummy && tab.hovered().is_none_or(|f| child != f.urn()) {
let op = FilesOp::Creating(parent.into(), vec![File::from_dummy(&opt.target, None)]);
tab.current.update_pub(tab.id, op);
}
act!(mgr:hover, cx, Some(child.into()))?;
act!(mgr:peek, cx)?;
act!(mgr:watch, cx)?;
succ!();
}
}