From 6955579f1978dcf50fa1498f7e9c21b942d509d1 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 7 Dec 2023 18:14:10 -0800 Subject: [PATCH] Start work on chat panel and non-uniform list Co-authored-by: Nathan --- crates/assistant2/src/assistant.rs | 4 +- crates/assistant2/src/assistant_panel.rs | 7 +- crates/collab_ui2/src/chat_panel.rs | 585 +++++++----------- .../src/chat_panel/message_editor.rs | 42 +- crates/gpui2/src/elements/list.rs | 493 +++++++++++++++ crates/gpui2/src/elements/mod.rs | 2 + crates/gpui2/src/elements/uniform_list.rs | 2 +- crates/gpui2/src/gpui2.rs | 20 + crates/rich_text2/src/rich_text.rs | 9 +- 9 files changed, 761 insertions(+), 403 deletions(-) create mode 100644 crates/gpui2/src/elements/list.rs diff --git a/crates/assistant2/src/assistant.rs b/crates/assistant2/src/assistant.rs index 910eeda9e115d853cfe2a7ccaea041245050484e..871ab131e5f68600db81dbc3bee643d558b5e361 100644 --- a/crates/assistant2/src/assistant.rs +++ b/crates/assistant2/src/assistant.rs @@ -12,7 +12,7 @@ use chrono::{DateTime, Local}; use collections::HashMap; use fs::Fs; use futures::StreamExt; -use gpui::{actions, AppContext}; +use gpui::{actions, AppContext, SharedString}; use regex::Regex; use serde::{Deserialize, Serialize}; use std::{cmp::Reverse, ffi::OsStr, path::PathBuf, sync::Arc}; @@ -47,7 +47,7 @@ struct MessageMetadata { enum MessageStatus { Pending, Done, - Error(Arc), + Error(SharedString), } #[derive(Serialize, Deserialize)] diff --git a/crates/assistant2/src/assistant_panel.rs b/crates/assistant2/src/assistant_panel.rs index 359056d9d3d4826cbd9014261e0325c67069acd4..79ebb6602d77776ee30f905cacba3ce6434e9512 100644 --- a/crates/assistant2/src/assistant_panel.rs +++ b/crates/assistant2/src/assistant_panel.rs @@ -1628,8 +1628,9 @@ impl Conversation { metadata.status = MessageStatus::Done; } Err(error) => { - metadata.status = - MessageStatus::Error(error.to_string().trim().into()); + metadata.status = MessageStatus::Error(SharedString::from( + error.to_string().trim().to_string(), + )); } } cx.notify(); @@ -2273,7 +2274,7 @@ impl ConversationEditor { Some( div() .id("error") - .tooltip(move |cx| Tooltip::text(&error, cx)) + .tooltip(move |cx| Tooltip::text(error.clone(), cx)) .child(IconElement::new(Icon::XCircle)), ) } else { diff --git a/crates/collab_ui2/src/chat_panel.rs b/crates/collab_ui2/src/chat_panel.rs index e9e2610a8604355d1ea480de81eb01ad64d8471f..0f6d6c3cd1a9085d3e848b821bdf93dda6d5ba5e 100644 --- a/crates/collab_ui2/src/chat_panel.rs +++ b/crates/collab_ui2/src/chat_panel.rs @@ -1,6 +1,4 @@ -// use crate::{ -// channel_view::ChannelView, is_channels_feature_enabled, render_avatar, ChatPanelSettings, -// }; +// use crate::{channel_view::ChannelView, is_channels_feature_enabled, ChatPanelSettings}; // use anyhow::Result; // use call::ActiveCall; // use channel::{ChannelChat, ChannelChatEvent, ChannelMessageId, ChannelStore}; @@ -9,13 +7,9 @@ // use db::kvp::KEY_VALUE_STORE; // use editor::Editor; // use gpui::{ -// actions, -// elements::*, -// platform::{CursorStyle, MouseButton}, -// serde_json, -// views::{ItemType, Select, SelectStyle}, -// AnyViewHandle, AppContext, AsyncAppContext, Entity, ModelHandle, Subscription, Task, View, -// ViewContext, ViewHandle, WeakViewHandle, +// actions, div, list, px, serde_json, AnyElement, AnyView, AppContext, AsyncAppContext, Div, +// Entity, EventEmitter, FocusableView, ListOffset, ListScrollHandle, Model, Orientation, Render, +// Subscription, Task, View, ViewContext, WeakView, // }; // use language::LanguageRegistry; // use menu::Confirm; @@ -23,10 +17,10 @@ // use project::Fs; // use rich_text::RichText; // use serde::{Deserialize, Serialize}; -// use settings::SettingsStore; +// use settings::{Settings, SettingsStore}; // use std::sync::Arc; -// use theme::{IconButton, Theme}; // use time::{OffsetDateTime, UtcOffset}; +// use ui::{h_stack, v_stack, Avatar, Button, Label}; // use util::{ResultExt, TryFutureExt}; // use workspace::{ // dock::{DockPosition, Panel}, @@ -40,19 +34,18 @@ // pub struct ChatPanel { // client: Arc, -// channel_store: ModelHandle, +// channel_store: Model, // languages: Arc, -// active_chat: Option<(ModelHandle, Subscription)>, -// message_list: ListState, -// input_editor: ViewHandle, -// channel_select: ViewHandle, -// ) -> AnyElement, +// // ) -> AnyElement