def public_models_component()

in src/backend/entrypoints/streamlit_frontend/components/tabs/public_models.py [0:0]


def public_models_component():
    public_tradings = alerts_backend_proxy_singleton.get_public_trading_rules()

    if st.session_state["is_admin"]:
        columns_titles = [
            "**Title**",
            "**Date**",
            "**Shared by**",
            "**Tickers**",
            "",
        ]
        column_width = [0.2, 0.18, 0.18, 0.3, 0.07, 0.07]
    else:
        columns_titles = [
            "**Title**",
            "**Date**",
            "**Shared by**",
            "**Tickers**",
        ]
        column_width = [0.2, 0.18, 0.18, 0.3, 0.14]

    title_cols = st.columns(column_width, gap="small")

    for index, title in enumerate(columns_titles):
        column_phold = title_cols[index].empty()
        column_phold.markdown(title)

    reset_phold = title_cols[-1].empty()
    reset_phold.button("Refresh", use_container_width=True, key="public_models_refresh")

    def show_public_tradings(tradings):
        for trading in tradings:
            description = trading.get("description", "") if trading.get("description", "") is not None else ""

            html_code = f"""
                <style> 
                .container {{ 
                    display: flex; 
                    align-items: center; 
                }} 
                .text {{ 
                    margin-right: 10px; 
                }} 
                </style> 
                <div class="container"> 
                    <span class="text">{trading["title"]}</span> 
                    <img src="app/static/QuestionMark.png" title="{description}" width="15" height="15">
                </div>
            """

            cols = st.columns(column_width, gap="small")

            title_phold = cols[0].empty()
            # title_phold.text(trading["title"], help=description)
            title_phold.write(html_code, unsafe_allow_html=True)

            date_phold = cols[1].empty()
            date = datetime.strptime(trading["created"], "%Y-%m-%dT%H:%M:%S.%fZ")
            trimmed_time = date.strftime("%Y-%m-%d %H:%M")
            date_phold.write(trimmed_time)

            shared_by_phold = cols[2].empty()

            shared_by_phold.write(trading["author_id"] if trading["author_id"] is not None else "")

            tickers_phold = cols[3].empty()
            tickers_phold.write(trading["tickers_prompt"].replace(":", "\:"))

            edit_phold = cols[4].empty()
            if edit_phold.button(
                "Open",
                key="publ_edit_btn_" + str(trading["id"]),
                use_container_width=True,
                on_click=trading_rule_edit_callback,
                args=[trading["id"], st.session_state.keycloak_session.access_token, True],
            ):
                st.experimental_rerun()

            if st.session_state["is_admin"]:
                delete_phold = cols[5].empty()
                if delete_phold.button(
                    "Delete",
                    key="publ_delete_btn_" + str(trading["id"]),
                    use_container_width=True,
                ):
                    warning_col, submit_col, cancel_col = st.columns([0.8, 0.1, 0.1])
                    warning_col_phold = warning_col.container()
                    submit_phold = submit_col.container()
                    cancel_phold = cancel_col.container()
                    warning_col_phold.warning(f"Are you sure you want to delete model {trading['title']} ?")

                    submit_phold.button(
                        "Confirm",
                        use_container_width=True,
                        on_click=trading_delete_callback,
                        args=[trading["id"], st.session_state.keycloak_session.access_token, True],
                    )

                    cancel_phold.button("Cancel", use_container_width=True)

    paginate(
        data=public_tradings,
        show_func=show_public_tradings,
        page_num=st.session_state.public_page_num if len(public_tradings) else 0,
        page_num_key="public_page_num",
        page_size=st.session_state.public_page_size if len(public_tradings) else 10,
        page_size_key="public_page_size",
    )