Confirm session deletion
This commit is contained in:
@@ -70,6 +70,7 @@ impl App {
|
||||
pub(super) fn modal_open(&self) -> bool {
|
||||
self.preferences_open
|
||||
|| self.pending_project_path.is_some()
|
||||
|| self.pending_session_delete.is_some()
|
||||
|| self.session_rename.is_some()
|
||||
|| self.menu_session().is_some()
|
||||
|| self.pending_a2ui_dismissal.is_some()
|
||||
@@ -136,6 +137,8 @@ impl App {
|
||||
layers.push(self.project_dialog(path));
|
||||
} else if let Some((_, title)) = &self.session_rename {
|
||||
layers.push(self.rename_dialog(title));
|
||||
} else if let Some(session) = self.pending_delete_session() {
|
||||
layers.push(self.delete_session_panel(session));
|
||||
} else if let Some(session) = self.menu_session() {
|
||||
layers.push(self.session_menu_panel(session));
|
||||
} else if let Some(surface_id) = &self.pending_a2ui_dismissal {
|
||||
@@ -150,6 +153,8 @@ impl App {
|
||||
layers.push(self.project_dialog(path));
|
||||
} else if let Some((_, title)) = &self.session_rename {
|
||||
layers.push(self.rename_dialog(title));
|
||||
} else if let Some(session) = self.pending_delete_session() {
|
||||
layers.push(self.delete_session_panel(session));
|
||||
} else if let Some(session) = self.menu_session() {
|
||||
layers.push(self.session_menu_panel(session));
|
||||
} else if let Some(surface_id) = &self.pending_a2ui_dismissal {
|
||||
@@ -389,7 +394,7 @@ impl App {
|
||||
.on_press(Message::OpenSessionMenu(session.id))
|
||||
.style(button::text),
|
||||
button(icon(ICON_TRASH, 14))
|
||||
.on_press(Message::DeleteSession(session.id))
|
||||
.on_press(Message::RequestDeleteSession(session.id))
|
||||
.style(button::text),
|
||||
]
|
||||
.spacing(3)
|
||||
@@ -508,12 +513,53 @@ impl App {
|
||||
|
||||
fn menu_session(&self) -> Option<&Session> {
|
||||
let session_id = self.session_menu?;
|
||||
self.session(session_id)
|
||||
}
|
||||
|
||||
fn pending_delete_session(&self) -> Option<&Session> {
|
||||
let session_id = self.pending_session_delete?;
|
||||
self.session(session_id)
|
||||
}
|
||||
|
||||
fn session(&self, session_id: i32) -> Option<&Session> {
|
||||
self.projects
|
||||
.iter()
|
||||
.flat_map(|project| &project.sessions)
|
||||
.find(|session| session.id == session_id)
|
||||
}
|
||||
|
||||
fn delete_session_panel<'a>(&self, session: &'a Session) -> Element<'a, Message> {
|
||||
let dialog = container(
|
||||
column![
|
||||
text("Delete session?").size(24),
|
||||
text(format!(
|
||||
"Delete “{}” and its conversation history? This cannot be undone.",
|
||||
session.title
|
||||
))
|
||||
.size(14),
|
||||
row![
|
||||
Space::new().width(Length::Fill),
|
||||
action_button("Cancel").on_press(Message::DismissPanel),
|
||||
danger_button("Delete session").on_press(Message::ConfirmDeleteSession),
|
||||
]
|
||||
.spacing(8),
|
||||
]
|
||||
.spacing(12),
|
||||
)
|
||||
.padding(22)
|
||||
.width(460)
|
||||
.style(overview_style);
|
||||
|
||||
opaque(
|
||||
container(dialog)
|
||||
.center_x(Length::Fill)
|
||||
.center_y(Length::Fill)
|
||||
.style(|_| {
|
||||
container::Style::default().background(Color::from_rgba8(0, 0, 0, 0.68))
|
||||
}),
|
||||
)
|
||||
}
|
||||
|
||||
/// Quick actions for one session. Which lifecycle moves are offered depends
|
||||
/// on the state the session is in.
|
||||
fn session_menu_panel<'a>(&self, session: &'a Session) -> Element<'a, Message> {
|
||||
|
||||
Reference in New Issue
Block a user