From e15963107c7f57d4a362d055958abb5495de2984 Mon Sep 17 00:00:00 2001
From: barthes <nicolas.barthes@cefe.cnrs.fr>
Date: Tue, 11 Jun 2024 13:26:00 +0200
Subject: [PATCH] moved selectbox interface to style/header.py and called on
 eah pages

---
 src/Modules.py                   |  3 ++-
 src/app.py                       | 34 ++-----------------------------
 src/pages/1-samples_selection.py |  4 ++--
 src/pages/2-model_creation.py    |  8 +-------
 src/pages/3-prediction.py        |  2 +-
 src/style/header.py              | 35 +++++++++++++++++++++++++++++++-
 6 files changed, 42 insertions(+), 44 deletions(-)

diff --git a/src/Modules.py b/src/Modules.py
index da66759..c399a6e 100644
--- a/src/Modules.py
+++ b/src/Modules.py
@@ -3,9 +3,10 @@ from Class_Mod import Plsr, LinearPCA, Umap, find_col_index, PinardPlsr, Nmf, AP
 from Class_Mod import LWPLSR, list_files, metrics, TpeIpls, reg_plot, resid_plot, Sk_Kmeans, DxRead, Hdbscan, read_dx, PlsProcess
 from Class_Mod.DATA_HANDLING import *
 from Class_Mod.Miscellaneous import prediction, download_results, plot_spectra, local_css
-from style.header import add_header
 from Report import report
 css_file = Path("style/")
+pages_folder = Path("pages/")
+from style.header import add_header, add_sidebar
 from config.config import pdflatex_path
 local_css(css_file / "style.css")
 
diff --git a/src/app.py b/src/app.py
index e55e99d..cc8f226 100644
--- a/src/app.py
+++ b/src/app.py
@@ -1,43 +1,13 @@
 from Packages import *
 st.set_page_config(page_title="NIRS Utils", page_icon=":goat:", layout="wide",)
-if 'interface' not in st.session_state:
-    st.session_state['interface'] = 'simple'
+
 from Modules import *
 from Class_Mod.DATA_HANDLING import *
 
 
 add_header()
 
-pages_folder = Path("pages/")
-# # TOC menu on the left
-show_pages(
-    [Page("app.py", "Home"),
-     Page(str(pages_folder / "4-inputs.py"), "Inputs"),
-     Page(str(pages_folder / "1-samples_selection.py"), "Samples Selection"),
-     Page(str(pages_folder / "2-model_creation.py"), "Models Creation & Predictions"),
-
-     ]
-) 
-
-with st.sidebar:
-    interface = st.selectbox(label="Interface", options=['simple', 'advanced'], key='interface')
-    # st.page_link(str(pages_folder / '1-samples_selection.py'))
-    if st.session_state['interface'] == 'simple':
-    #     st.page_link(str(pages_folder / '2-model_creation.py'))
-        pass
-    # if advanced interface, split Models Creation and Predictions
-    elif st.session_state['interface'] == 'advanced':
-        show_pages(
-            [Page("app.py", "Home"),
-             Page(str(pages_folder / "4-inputs.py"), "Inputs"),
-             Page(str(pages_folder / "1-samples_selection.py"), "Samples Selection"),
-             Page(str(pages_folder / "2-model_creation.py"), "Models Creation"),
-             Page(str(pages_folder / "3-prediction.py"), "Predictions"),
-            ]
-        )
-        # st.page_link(str(pages_folder / '2-model_creation.py'))
-        # st.page_link(str(pages_folder / '3-prediction.py'))
-
+add_sidebar(pages_folder)
 
 # Page header
 with st.container():
diff --git a/src/pages/1-samples_selection.py b/src/pages/1-samples_selection.py
index 0b2aac3..8c9d605 100644
--- a/src/pages/1-samples_selection.py
+++ b/src/pages/1-samples_selection.py
@@ -15,6 +15,8 @@ if os.path.exists(repertoire_a_vider):
 add_header()
 #load specific model page css
 local_css(css_file / "style_model.css")
+add_sidebar(pages_folder)
+
 
 #define some variables
 tcr=pd.DataFrame()
@@ -24,8 +26,6 @@ dim_red_methods=['', 'PCA','UMAP', 'NMF']  # List of dimensionality reduction al
 cluster_methods = ['', 'Kmeans','HDBSCAN', 'AP'] # List of clustering algos
 selec_strategy = ['center','random']
 
-# check session state and define default values if simple interface to automate processing
-st.session_state["interface"] = st.session_state.get('interface')
 if st.session_state["interface"] == 'simple':
     st.write(':red[Automated Simple Interface]')
     hide_pages("Predictions")
diff --git a/src/pages/2-model_creation.py b/src/pages/2-model_creation.py
index 8c31f31..c5e2497 100644
--- a/src/pages/2-model_creation.py
+++ b/src/pages/2-model_creation.py
@@ -5,6 +5,7 @@ from Modules import *
 from Class_Mod.DATA_HANDLING import *
 from Class_Mod.Miscellaneous import desc_stats
 add_header()
+add_sidebar(pages_folder)
 
 repertoire_a_vider = Path('Report/figures')
 if os.path.exists(repertoire_a_vider):
@@ -17,13 +18,6 @@ if os.path.exists(repertoire_a_vider):
 
 json_sp = pd.DataFrame()
 
-st.session_state["interface"] = st.session_state.get('interface')
-if st.session_state["interface"] == 'simple':
-    hide_pages("Predictions")
-
-#path = os.path.dirname(os.path.abspath(__file__)).replace('\\','/')
-#css_file = path[:path.find('/pages')]+'/style'
-#local_css(css_file +"/style_model.css")
 local_css(css_file / "style_model.css")
 
     ####################################### page Design #######################################
diff --git a/src/pages/3-prediction.py b/src/pages/3-prediction.py
index b79dafd..dcd5936 100644
--- a/src/pages/3-prediction.py
+++ b/src/pages/3-prediction.py
@@ -11,8 +11,8 @@ from Class_Mod.DATA_HANDLING import *
 # # Injecter le code HTML du bandeau
 # st.markdown(bandeau_html, unsafe_allow_html=True)
 add_header()
+add_sidebar(pages_folder)
 
-st.session_state["interface"] = st.session_state.get('interface')
 local_css(css_file / "style_model.css")
 
 
diff --git a/src/style/header.py b/src/style/header.py
index b91bf42..0c01027 100644
--- a/src/style/header.py
+++ b/src/style/header.py
@@ -8,4 +8,37 @@ def add_header():
         </div>
         """,
         unsafe_allow_html=True,
-    )
\ No newline at end of file
+    )
+
+def add_sidebar(pages_folder):
+    if 'interface' not in st.session_state:
+        st.session_state['interface'] = 'simple'
+
+    # # TOC menu on the left
+    show_pages(
+        [Page("app.py", "Home"),
+         Page(str(pages_folder / "4-inputs.py"), "Inputs"),
+         Page(str(pages_folder / "1-samples_selection.py"), "Samples Selection"),
+         Page(str(pages_folder / "2-model_creation.py"), "Models Creation & Predictions"),
+
+         ]
+    )
+
+    with st.sidebar:
+        interface = st.selectbox(label="Interface", options=['simple', 'advanced'], key='interface')
+        # st.page_link(str(pages_folder / '1-samples_selection.py'))
+        if st.session_state['interface'] == 'simple':
+            #     st.page_link(str(pages_folder / '2-model_creation.py'))
+            pass
+        # if advanced interface, split Models Creation and Predictions
+        elif st.session_state['interface'] == 'advanced':
+            show_pages(
+                [Page("app.py", "Home"),
+                 Page(str(pages_folder / "4-inputs.py"), "Inputs"),
+                 Page(str(pages_folder / "1-samples_selection.py"), "Samples Selection"),
+                 Page(str(pages_folder / "2-model_creation.py"), "Models Creation"),
+                 Page(str(pages_folder / "3-prediction.py"), "Predictions"),
+                 ]
+            )
+            # st.page_link(str(pages_folder / '2-model_creation.py'))
+            # st.page_link(str(pages_folder / '3-prediction.py'))
-- 
GitLab