feat: support message dialogs with 3 buttons (#2641)

* feat: support message dialogs with 3 buttons

* change file

* From<String>

* untagged & YesNoCancel

* revert package.json

* Update plugins/dialog/src/desktop.rs

Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com>

* no optional

* Update desktop.rs

* Update plugins/dialog/src/models.rs

Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com>

* change to an enum

* convert back into union

* regen

* update @since

* map buttons for linux

* enhance type

* Add examples

---------

Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com>
Co-authored-by: Lucas Nogueira <lucas@tauri.app>
Co-authored-by: Tony <legendmastertony@gmail.com>
This commit is contained in:
Amr Bashir
2025-08-27 09:40:47 -03:00
committed by GitHub
co-authored by Tony Lucas Nogueira Tony
parent 9ac5fe84e7
commit 509eba8d44
11 changed files with 368 additions and 93 deletions
+21 -21
View File
@@ -9,8 +9,8 @@ use tauri::{command, Manager, Runtime, State, Window};
use tauri_plugin_fs::FsExt;
use crate::{
Dialog, FileDialogBuilder, FilePath, MessageDialogButtons, MessageDialogKind, Result, CANCEL,
NO, OK, YES,
Dialog, FileDialogBuilder, FilePath, MessageDialogBuilder, MessageDialogButtons,
MessageDialogKind, MessageDialogResult, Result, CANCEL, NO, OK, YES,
};
#[derive(Serialize)]
@@ -248,7 +248,7 @@ fn message_dialog<R: Runtime>(
message: String,
kind: Option<MessageDialogKind>,
buttons: MessageDialogButtons,
) -> bool {
) -> MessageDialogBuilder<R> {
let mut builder = dialog.message(message);
builder = builder.buttons(buttons);
@@ -266,7 +266,7 @@ fn message_dialog<R: Runtime>(
builder = builder.kind(kind);
}
builder.blocking_show()
builder
}
#[command]
@@ -277,19 +277,15 @@ pub(crate) async fn message<R: Runtime>(
message: String,
kind: Option<MessageDialogKind>,
ok_button_label: Option<String>,
) -> Result<bool> {
Ok(message_dialog(
window,
dialog,
title,
message,
kind,
if let Some(ok_button_label) = ok_button_label {
MessageDialogButtons::OkCustom(ok_button_label)
} else {
MessageDialogButtons::Ok
},
))
buttons: Option<MessageDialogButtons>,
) -> Result<MessageDialogResult> {
let buttons = buttons.unwrap_or(if let Some(ok_button_label) = ok_button_label {
MessageDialogButtons::OkCustom(ok_button_label)
} else {
MessageDialogButtons::Ok
});
Ok(message_dialog(window, dialog, title, message, kind, buttons).blocking_show_with_result())
}
#[command]
@@ -302,7 +298,7 @@ pub(crate) async fn ask<R: Runtime>(
yes_button_label: Option<String>,
no_button_label: Option<String>,
) -> Result<bool> {
Ok(message_dialog(
let dialog = message_dialog(
window,
dialog,
title,
@@ -318,7 +314,9 @@ pub(crate) async fn ask<R: Runtime>(
} else {
MessageDialogButtons::YesNo
},
))
);
Ok(dialog.blocking_show())
}
#[command]
@@ -331,7 +329,7 @@ pub(crate) async fn confirm<R: Runtime>(
ok_button_label: Option<String>,
cancel_button_label: Option<String>,
) -> Result<bool> {
Ok(message_dialog(
let dialog = message_dialog(
window,
dialog,
title,
@@ -347,5 +345,7 @@ pub(crate) async fn confirm<R: Runtime>(
} else {
MessageDialogButtons::OkCancel
},
))
);
Ok(dialog.blocking_show())
}