Browse Source

feat(core): fallback to Window and AppHandle resource table on close (#11398)

this changes the resource plugin close() API to fallback to the parent window and AppHandle resource tables, letting the JS to delete global resources.
The need for this was brought up on https://github.com/tauri-apps/plugins-workspace/pull/1860#issuecomment-2419175001
the store plugin stores the resources in the AppHandle, and we want the existing close() API to work on global resources otherwise every consumer needs their own resource close commands
Lucas Fernandes Nogueira 9 months ago
parent
commit
eb61d44f9f
2 changed files with 13 additions and 1 deletions
  1. 5 0
      .changes/resources-close-fallback.md
  2. 8 1
      crates/tauri/src/resources/plugin.rs

+ 5 - 0
.changes/resources-close-fallback.md

@@ -0,0 +1,5 @@
+---
+"tauri": patch:enhance
+---
+
+Fallback to the Window and AppHandle resource table when closing a resource by ID.

+ 8 - 1
crates/tauri/src/resources/plugin.rs

@@ -12,7 +12,14 @@ use super::ResourceId;
 
 #[command(root = "crate")]
 fn close<R: Runtime>(webview: Webview<R>, rid: ResourceId) -> crate::Result<()> {
-  webview.resources_table().close(rid)
+  let mut result = webview.resources_table().close(rid);
+  if result.is_err() {
+    result = webview.window().resources_table().close(rid);
+    if result.is_err() {
+      result = webview.app_handle().resources_table().close(rid);
+    }
+  }
+  result
 }
 
 pub(crate) fn init<R: Runtime>() -> TauriPlugin<R> {