From d5fe2c85d80288a0f50eb1c2dfb1e82f11046402 Mon Sep 17 00:00:00 2001 From: Nate Butler Date: Fri, 24 May 2024 22:59:37 -0400 Subject: [PATCH] Order prompts by default (#12268) Prompts in the prompt library will be in A->Z order by default. Release Notes: - N/A --- .../assistant/src/prompts/prompt_library.rs | 21 +++++++++++++++++++ .../assistant/src/prompts/prompt_manager.rs | 4 ++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/crates/assistant/src/prompts/prompt_library.rs b/crates/assistant/src/prompts/prompt_library.rs index d0e73ccb0f..50fff5b6ee 100644 --- a/crates/assistant/src/prompts/prompt_library.rs +++ b/crates/assistant/src/prompts/prompt_library.rs @@ -15,6 +15,11 @@ use super::prompt::StaticPrompt; #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, Serialize, Deserialize)] pub struct PromptId(pub Uuid); +#[derive(Debug, Clone, Copy, Eq, PartialEq)] +pub enum SortOrder { + Alphabetical, +} + #[allow(unused)] impl PromptId { pub fn new() -> Self { @@ -60,6 +65,22 @@ impl PromptLibrary { .collect() } + pub fn sorted_prompts(&self, sort_order: SortOrder) -> Vec<(PromptId, StaticPrompt)> { + let state = self.state.read(); + + let mut prompts = state + .prompts + .iter() + .map(|(id, prompt)| (*id, prompt.clone())) + .collect::>(); + + match sort_order { + SortOrder::Alphabetical => prompts.sort_by(|(_, a), (_, b)| a.title().cmp(&b.title())), + }; + + prompts + } + pub fn first_prompt_id(&self) -> Option { let state = self.state.read(); state.prompts.keys().next().cloned() diff --git a/crates/assistant/src/prompts/prompt_manager.rs b/crates/assistant/src/prompts/prompt_manager.rs index cfaacaeb09..c16c9140fb 100644 --- a/crates/assistant/src/prompts/prompt_manager.rs +++ b/crates/assistant/src/prompts/prompt_manager.rs @@ -9,7 +9,7 @@ use ui::{prelude::*, IconButtonShape, ListItem, ListItemSpacing}; use util::{ResultExt, TryFutureExt}; use workspace::ModalView; -use super::prompt_library::{PromptId, PromptLibrary}; +use super::prompt_library::{PromptId, PromptLibrary, SortOrder}; use crate::prompts::prompt::StaticPrompt; pub struct PromptManager { @@ -264,7 +264,7 @@ impl PickerDelegate for PromptManagerDelegate { let prompt_library = self.prompt_library.clone(); cx.spawn(|picker, mut cx| async move { async { - let prompts = prompt_library.prompts(); + let prompts = prompt_library.sorted_prompts(SortOrder::Alphabetical); let matching_prompts = prompts .into_iter() .filter(|(_, prompt)| {