| import streamlit as st |
| from streamlit_local_storage import LocalStorage |
| from database import init_supabase |
| from utils import apply_filters, apply_sort |
| from locales import load_locale, lang_codes |
| from data_loader import load_data, get_unique_mood, get_unique_tags |
| from ui_components import render_sidebar, render_main_content, load_css |
|
|
| DEFAULT_LANG = "en" |
|
|
|
|
| |
| st.set_page_config(layout="wide", page_icon="🧙", page_title="Fantasy Characters Explorer") |
| localS = LocalStorage() |
|
|
| |
| database = init_supabase() |
| df = load_data() |
|
|
| st.session_state.lang = localS.getItem("lang") |
| all_langs = lang_codes() |
| if st.session_state.lang not in all_langs: |
| st.session_state.lang = (st.context.locale.split("-", 1)[0] if st.context.locale else DEFAULT_LANG) |
| localS.setItem("lang", st.session_state.lang) |
|
|
| locale = load_locale(st.session_state.lang) |
|
|
| if 'rated' not in st.session_state: |
| st.session_state.rated = localS.getItem("rated") |
| if st.session_state.rated is None: |
| st.session_state.rated = [] |
|
|
| |
| st.markdown(f"<style>{load_css()}</style>", unsafe_allow_html=True) |
|
|
| |
| moods = [locale['filter_all']] + get_unique_mood(df) |
| all_tags = get_unique_tags(df) |
|
|
| |
| selected_filters = render_sidebar(localS, locale, all_langs, moods, all_tags) |
|
|
| |
| filtered_df = apply_filters( |
| locale, |
| df=df, |
| search_query=selected_filters['search_query'], |
| absurdity_range=selected_filters['absurdity_range'], |
| selected_mood=selected_filters['selected_mood'], |
| selected_tags=selected_filters['selected_tags'] |
| ) |
|
|
| sorted_df = apply_sort(locale, filtered_df, selected_filters['sort_option']) |
|
|
|
|
| |
| render_main_content(locale, database, localS, sorted_df) |