@@ -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::<Vec<_>>();
+
+ match sort_order {
+ SortOrder::Alphabetical => prompts.sort_by(|(_, a), (_, b)| a.title().cmp(&b.title())),
+ };
+
+ prompts
+ }
+
pub fn first_prompt_id(&self) -> Option<PromptId> {
let state = self.state.read();
state.prompts.keys().next().cloned()
@@ -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)| {