use ferridriver::file_chooser::FileChooser as CoreFileChooser;
use rquickjs::JsLifetime;
use rquickjs::class::Trace;
use crate::bindings::convert::FerriResultExt;
#[derive(JsLifetime, Trace)]
#[rquickjs::class(rename = "FileChooser")]
pub struct FileChooserJs {
#[qjs(skip_trace)]
inner: CoreFileChooser,
}
impl FileChooserJs {
#[must_use]
pub fn new(inner: CoreFileChooser) -> Self {
Self { inner }
}
}
#[rquickjs::methods]
impl FileChooserJs {
#[qjs(rename = "element")]
pub fn element(&self) -> crate::bindings::element_handle::ElementHandleJs {
crate::bindings::element_handle::ElementHandleJs::new(self.inner.element().clone())
}
#[qjs(rename = "isMultiple")]
pub fn is_multiple(&self) -> bool {
self.inner.is_multiple()
}
#[qjs(rename = "page")]
pub fn page(&self) -> crate::bindings::page::PageJs {
crate::bindings::page::PageJs::new(self.inner.page().clone())
}
#[qjs(rename = "setFiles")]
pub async fn set_files<'js>(
&self,
ctx: rquickjs::Ctx<'js>,
files: rquickjs::Value<'js>,
options: rquickjs::function::Opt<rquickjs::Value<'js>>,
) -> rquickjs::Result<()> {
let files = crate::bindings::convert::parse_input_files(&ctx, files)?;
let opts = crate::bindings::convert::parse_set_input_files_options(&ctx, options)?;
self.inner.set_files(files, opts).await.into_js()
}
}