Skip to content

Commit a67500c

Browse files
authored
Merge pull request #7 from opensass/custom
feat: allow users to drag og canvas elements && improve prompts
2 parents 699c894 + d4b1e7f commit a67500c

23 files changed

+317
-141
lines changed

src/components/dashboard/chat/panel.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ use crate::server::og::request::GetOGsForUserRequest;
1111
use gloo_storage::Storage;
1212

1313
use crate::theme::Theme;
14-
use crate::theme::THEME;
1514
use bson::oid::ObjectId;
1615
use chrono::Utc;
1716
use dioxus::prelude::*;
@@ -44,6 +43,7 @@ pub fn ChatPanel(conversation_id: Signal<ObjectId>, user_token: Signal<String>)
4443
let mut ogs = use_signal(Vec::<OG>::new);
4544
let mut thinking = use_signal(|| false);
4645
let mut loading = use_signal(|| false);
46+
let theme = use_context::<Signal<Theme>>();
4747

4848
let _ = use_resource(move || async move {
4949
let now = Utc::now().timestamp();
@@ -159,7 +159,7 @@ pub fn ChatPanel(conversation_id: Signal<ObjectId>, user_token: Signal<String>)
159159
div {
160160
class: format!(
161161
"flex flex-col h-full {}",
162-
if *THEME.read() == Theme::Dark { "bg-gray-900 text-white" } else { "bg-white text-gray-900" }
162+
if theme() == Theme::Dark { "bg-gray-900 text-white" } else { "bg-white text-gray-900" }
163163
),
164164

165165
div {
@@ -168,7 +168,7 @@ pub fn ChatPanel(conversation_id: Signal<ObjectId>, user_token: Signal<String>)
168168
select {
169169
class: format!(
170170
"p-2 rounded-lg mb-2 md:mb-0 flex-grow w-full md:w-auto truncate {}",
171-
if *THEME.read() == Theme::Dark { "bg-gray-700 text-white" } else { "bg-gray-100 text-black" }
171+
if theme() == Theme::Dark { "bg-gray-700 text-white" } else { "bg-gray-100 text-black" }
172172
),
173173
onchange: move |evt| handle_og_change(evt.value()),
174174
option { value: "", "Select a og" },
@@ -184,7 +184,7 @@ pub fn ChatPanel(conversation_id: Signal<ObjectId>, user_token: Signal<String>)
184184
input {
185185
class: format!(
186186
"flex-1 p-2 rounded-lg border w-full {}",
187-
if *THEME.read() == Theme::Dark { "bg-gray-700 text-white border-gray-600" } else { "border-gray-300" }
187+
if theme() == Theme::Dark { "bg-gray-700 text-white border-gray-600" } else { "border-gray-300" }
188188
),
189189
r#type: "text",
190190
placeholder: "Type your query here...",

src/components/dashboard/chat/sidebar.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use crate::server::conversation::model::Conversation;
44
use crate::server::conversation::request::CreateConversationRequest;
55
use crate::server::conversation::request::GetConversationsRequest;
66
use crate::theme::Theme;
7-
use crate::theme::THEME;
87
use bson::oid::ObjectId;
98
use chrono::Utc;
109

@@ -19,6 +18,7 @@ pub fn ConversationsSidebar(
1918
) -> Element {
2019
let token_clone = token.clone();
2120
let og_id_clone = og_id.clone();
21+
let theme = use_context::<Signal<Theme>>();
2222

2323
use_effect(move || {
2424
let token = token.clone();
@@ -34,7 +34,7 @@ pub fn ConversationsSidebar(
3434

3535
rsx! {
3636
div {
37-
class: format!("p-4 {}", if *THEME.read() == Theme::Dark { "border-gray-600 bg-gray-900" } else { "border-gray-200" }),
37+
class: format!("p-4 {}", if theme() == Theme::Dark { "border-gray-600 bg-gray-900" } else { "border-gray-200" }),
3838

3939
h3 { class: "text-lg font-semibold mb-4 text-blue-500", "Conversations" }
4040

src/components/dashboard/fields/input.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use crate::theme::Theme;
2-
use crate::theme::THEME;
32
use dioxus::prelude::*;
43

54
#[component]
@@ -10,7 +9,8 @@ pub fn InputField(
109
validate: fn(&str) -> bool,
1110
required: bool,
1211
) -> Element {
13-
let dark_mode = *THEME.read() == Theme::Dark;
12+
let theme = use_context::<Signal<Theme>>();
13+
let dark_mode = theme() == Theme::Dark;
1414

1515
let handle_input = move |e: Event<FormData>| {
1616
let input_value = e.value().clone();
@@ -20,6 +20,7 @@ pub fn InputField(
2020

2121
rsx! {
2222
div {
23+
class: "flex-grow w-full",
2324
label {
2425
class: format!("block text-sm font-medium {}", if dark_mode { "text-gray-300" } else { "text-gray-700" }),
2526
"{label}"

src/components/dashboard/fields/number.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
use crate::theme::Theme;
2-
use crate::theme::THEME;
32
use dioxus::prelude::*;
43

54
#[component]
65
pub fn NumberField(label: &'static str, value: Signal<u64>, required: bool) -> Element {
7-
let dark_mode = *THEME.read() == Theme::Dark;
6+
let theme = use_context::<Signal<Theme>>();
7+
let dark_mode = theme() == Theme::Dark;
88
rsx! {
99
div {
1010
label { class: format!("block text-sm font-medium {}", if dark_mode { "text-gray-300" } else { "text-gray-700" }), "{label}" }

src/components/dashboard/fields/select.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use crate::theme::Theme;
2-
use crate::theme::THEME;
32
use dioxus::prelude::*;
43

54
#[component]
@@ -8,7 +7,8 @@ pub fn SelectField(
87
options: Vec<&'static str>,
98
selected: Signal<String>,
109
) -> Element {
11-
let dark_mode = *THEME.read() == Theme::Dark;
10+
let theme = use_context::<Signal<Theme>>();
11+
let dark_mode = theme() == Theme::Dark;
1212
rsx! {
1313
div {
1414
label { class: format!("block text-sm font-medium {}", if dark_mode { "text-gray-300" } else { "text-gray-700" }), "{label}" }

src/components/dashboard/navbar.rs

+6-7
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
use crate::components::spinner::Spinner;
22
use crate::components::spinner::SpinnerSize;
3-
use crate::pages::dashboard::toggle_theme;
3+
use crate::theme::Theme;
4+
use crate::theme::ThemeToggle;
45
use dioxus::prelude::*;
56
use gloo_storage::Storage;
67
use gloo_storage::{LocalStorage, SessionStorage};
78

89
#[component]
9-
pub fn Navbar(dark_mode: bool) -> Element {
10+
pub fn Navbar() -> Element {
1011
let mut show_dropdown = use_signal(|| false);
1112
let mut loading = use_signal(|| false);
1213
let navigator = use_navigator();
14+
let theme = use_context::<Signal<Theme>>();
15+
let dark_mode = theme() == Theme::Dark;
1316

1417
let handle_logout = move |e: Event<MouseData>| {
1518
e.stop_propagation();
@@ -25,11 +28,7 @@ pub fn Navbar(dark_mode: bool) -> Element {
2528
h1 { class: "text-2xl font-semibold", "Dashboard" }
2629

2730
div { class: "flex items-center space-x-4",
28-
button {
29-
onclick: |_| toggle_theme(),
30-
class: "p-2 rounded-full text-lg",
31-
if dark_mode { "🌙" } else { "🌞" }
32-
}
31+
ThemeToggle {}
3332

3433
div { class: "relative",
3534
button {

0 commit comments

Comments
 (0)