diff --git a/src-tauri/src/template_callback.rs b/src-tauri/src/template_callback.rs index 0725a304..22a69f50 100644 --- a/src-tauri/src/template_callback.rs +++ b/src-tauri/src/template_callback.rs @@ -1,6 +1,6 @@ use std::collections::HashMap; use tauri::{AppHandle, Manager}; -use yaak_plugin_runtime::events::RenderPurpose; +use yaak_plugin_runtime::events::{RenderPurpose, TemplateFunctionArg}; use yaak_plugin_runtime::manager::PluginManager; use yaak_templates::TemplateCallback; @@ -12,7 +12,10 @@ pub struct PluginTemplateCallback { impl PluginTemplateCallback { pub fn new(app_handle: AppHandle) -> PluginTemplateCallback { - PluginTemplateCallback { app_handle, purpose: RenderPurpose::Preview } + PluginTemplateCallback { + app_handle, + purpose: RenderPurpose::Preview, + } } pub fn for_send(&self) -> PluginTemplateCallback { @@ -25,8 +28,32 @@ impl PluginTemplateCallback { impl TemplateCallback for PluginTemplateCallback { async fn run(&self, fn_name: &str, args: HashMap) -> Result { let plugin_manager = self.app_handle.state::(); + let function = plugin_manager + .get_template_functions() + .await + .map_err(|e| e.to_string())? + .iter() + .flat_map(|f| f.functions.clone()) + .find(|f| f.name == fn_name) + .ok_or("")?; + + let mut args_with_defaults = args.clone(); + + // Fill in default values for all args + for a_def in function.args { + let base = match a_def { + TemplateFunctionArg::Text(a) => a.base, + TemplateFunctionArg::Select(a) => a.base, + TemplateFunctionArg::Checkbox(a) => a.base, + TemplateFunctionArg::HttpRequest(a) => a.base, + }; + if let None = args_with_defaults.get(base.name.as_str()) { + args_with_defaults.insert(base.name, base.default_value.unwrap_or_default()); + } + } + let resp = plugin_manager - .call_template_function(fn_name, args, self.purpose.clone()) + .call_template_function(fn_name, args_with_defaults, self.purpose.clone()) .await .map_err(|e| e.to_string())?; Ok(resp.unwrap_or_default())