ankban commited on
Commit
cfa4630
Β·
verified Β·
1 Parent(s): 75b3e3c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +38 -25
app.py CHANGED
@@ -4,22 +4,21 @@ from written_module import written_dashboard
4
  from file_dashboard import file_based_learning_router
5
  from file_utils import save_nickname_to_db, load_latest_nickname
6
 
 
7
  def main_app():
8
  with gr.Blocks(css="light_mode_chatter_owl.css") as app:
9
  current_mode = gr.State("spoken")
 
 
10
 
11
- with gr.Row():
12
- # === Static Top Bar (with icons) ===
13
- gr.Markdown("""
14
- <div id="top-bar">
15
- <span id="collapse-left">☰</span>
16
- <span id="dark-mode-toggle">πŸŒ™</span>
17
- </div>
18
- """, elem_id="top-bar")
19
 
20
  with gr.Row():
21
  # === Sidebar ===
22
- with gr.Column(scale=1, min_width=220, elem_id="sidebar"):
23
  gr.Markdown("""
24
  <div id="brand-header">
25
  <img src="images/chatternest_logo.png" alt="ChatterNest Logo" width="60" style="margin-bottom: 0.5em;">
@@ -37,29 +36,46 @@ def main_app():
37
  nickname_input.change(fn=handle_nickname, inputs=[nickname_input], outputs=[nickname_display])
38
 
39
  gr.Markdown("---")
40
-
41
- # Navigation
42
- btn_spoken = gr.Button("πŸ—£ Spoken Communication")
43
  btn_written = gr.Button("✍️ Written Communication")
44
  gr.Markdown("### πŸ“„ File-Based Learning")
45
- btn_file_study = gr.Button("β€ƒπŸ“˜ Study Guides")
46
- btn_file_view = gr.Button("β€ƒπŸ“ Files")
47
-
48
  gr.Markdown("---")
49
 
50
  # === Main View Panels ===
51
- with gr.Column(scale=4, elem_classes=["main-content"]):
52
- nickname_display # Optional name confirmation message
53
-
54
  with gr.Column(visible=True, elem_id="module-wrapper") as spoken_panel:
55
- spoken_dashboard(nickname_input) # βœ… pass textbox directly
56
 
57
  with gr.Column(visible=False, elem_id="module-wrapper") as written_panel:
58
- written_dashboard(nickname_input) # βœ… pass textbox directly
59
 
60
  file_router, switch_view, study_panel, file_panel = file_based_learning_router(nickname_input)
61
 
62
- # === Mode Visibility Logic ===
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
  def switch_mode(mode):
64
  return (
65
  gr.update(visible=(mode == "spoken")),
@@ -69,20 +85,17 @@ def main_app():
69
  mode
70
  )
71
 
72
- # === Button Hooks ===
73
  btn_spoken.click(fn=switch_mode, inputs=[gr.State("spoken")],
74
  outputs=[spoken_panel, written_panel, study_panel, file_panel, current_mode])
75
-
76
  btn_written.click(fn=switch_mode, inputs=[gr.State("written")],
77
  outputs=[spoken_panel, written_panel, study_panel, file_panel, current_mode])
78
-
79
  btn_file_study.click(fn=switch_mode, inputs=[gr.State("study")],
80
  outputs=[spoken_panel, written_panel, study_panel, file_panel, current_mode])
81
-
82
  btn_file_view.click(fn=switch_mode, inputs=[gr.State("file")],
83
  outputs=[spoken_panel, written_panel, study_panel, file_panel, current_mode])
84
 
85
  return app
86
 
 
87
  if __name__ == "__main__":
88
  main_app().launch(server_name="0.0.0.0", server_port=7860)
 
4
  from file_dashboard import file_based_learning_router
5
  from file_utils import save_nickname_to_db, load_latest_nickname
6
 
7
+
8
  def main_app():
9
  with gr.Blocks(css="light_mode_chatter_owl.css") as app:
10
  current_mode = gr.State("spoken")
11
+ dark_mode_state = gr.State("light")
12
+ sidebar_visible = gr.State(True)
13
 
14
+ # === Header Top Bar ===
15
+ with gr.Row(elem_id="top-bar"):
16
+ collapse_btn = gr.Button("☰", elem_id="collapse-left", size="sm")
17
+ darkmode_btn = gr.Button("πŸŒ™", elem_id="dark-toggle", size="sm")
 
 
 
 
18
 
19
  with gr.Row():
20
  # === Sidebar ===
21
+ with gr.Column(scale=1, min_width=220, elem_id="sidebar") as sidebar:
22
  gr.Markdown("""
23
  <div id="brand-header">
24
  <img src="images/chatternest_logo.png" alt="ChatterNest Logo" width="60" style="margin-bottom: 0.5em;">
 
36
  nickname_input.change(fn=handle_nickname, inputs=[nickname_input], outputs=[nickname_display])
37
 
38
  gr.Markdown("---")
39
+ btn_spoken = gr.Button("πŸ”‘ Spoken Communication")
 
 
40
  btn_written = gr.Button("✍️ Written Communication")
41
  gr.Markdown("### πŸ“„ File-Based Learning")
42
+ btn_file_study = gr.Button("\u2003πŸ“˜ Study Guides")
43
+ btn_file_view = gr.Button("\u2003πŸ“ Files")
 
44
  gr.Markdown("---")
45
 
46
  # === Main View Panels ===
47
+ with gr.Column(scale=4, elem_classes=["main-content"], elem_id="main-column") as main_column:
48
+ nickname_display
 
49
  with gr.Column(visible=True, elem_id="module-wrapper") as spoken_panel:
50
+ spoken_dashboard(nickname_input)
51
 
52
  with gr.Column(visible=False, elem_id="module-wrapper") as written_panel:
53
+ written_dashboard(nickname_input)
54
 
55
  file_router, switch_view, study_panel, file_panel = file_based_learning_router(nickname_input)
56
 
57
+ # === Toggle Sidebar Logic ===
58
+ def toggle_sidebar(current):
59
+ return gr.update(visible=not current), not current
60
+
61
+ collapse_btn.click(
62
+ fn=toggle_sidebar,
63
+ inputs=[sidebar_visible],
64
+ outputs=[sidebar, sidebar_visible]
65
+ )
66
+
67
+ # === Toggle Dark Mode Logic ===
68
+ def toggle_theme(current_theme):
69
+ new_theme = "dark" if current_theme == "light" else "light"
70
+ return app.set_theme(new_theme), new_theme
71
+
72
+ darkmode_btn.click(
73
+ fn=toggle_theme,
74
+ inputs=[dark_mode_state],
75
+ outputs=[dark_mode_state]
76
+ )
77
+
78
+ # === Mode Switching Logic ===
79
  def switch_mode(mode):
80
  return (
81
  gr.update(visible=(mode == "spoken")),
 
85
  mode
86
  )
87
 
 
88
  btn_spoken.click(fn=switch_mode, inputs=[gr.State("spoken")],
89
  outputs=[spoken_panel, written_panel, study_panel, file_panel, current_mode])
 
90
  btn_written.click(fn=switch_mode, inputs=[gr.State("written")],
91
  outputs=[spoken_panel, written_panel, study_panel, file_panel, current_mode])
 
92
  btn_file_study.click(fn=switch_mode, inputs=[gr.State("study")],
93
  outputs=[spoken_panel, written_panel, study_panel, file_panel, current_mode])
 
94
  btn_file_view.click(fn=switch_mode, inputs=[gr.State("file")],
95
  outputs=[spoken_panel, written_panel, study_panel, file_panel, current_mode])
96
 
97
  return app
98
 
99
+
100
  if __name__ == "__main__":
101
  main_app().launch(server_name="0.0.0.0", server_port=7860)