import streamlit as st import uuid import re from datetime import datetime from ui_utils import parse_markdown_draft, build_markdown_doc, slugify from ui_api import save_draft_to_vault, analyze_draft_text def render_draft_editor(msg): """ Rendert den Markdown-Editor. Nutzt 'origin_filename' aus der Message, um zwischen Update und Neu zu unterscheiden. """ if "query_id" not in msg or not msg["query_id"]: msg["query_id"] = str(uuid.uuid4()) qid = msg["query_id"] key_base = f"draft_{qid}" # State Keys data_meta_key = f"{key_base}_data_meta" data_sugg_key = f"{key_base}_data_suggestions" widget_body_key = f"{key_base}_widget_body" data_body_key = f"{key_base}_data_body" # --- INIT STATE --- if f"{key_base}_init" not in st.session_state: meta, body = parse_markdown_draft(msg["content"]) if "type" not in meta: meta["type"] = "default" if "title" not in meta: meta["title"] = "" tags = meta.get("tags", []) meta["tags_str"] = ", ".join(tags) if isinstance(tags, list) else str(tags) st.session_state[data_meta_key] = meta st.session_state[data_sugg_key] = [] st.session_state[data_body_key] = body.strip() st.session_state[f"{key_base}_wdg_title"] = meta["title"] st.session_state[f"{key_base}_wdg_type"] = meta["type"] st.session_state[f"{key_base}_wdg_tags"] = meta["tags_str"] # Pfad übernehmen (Source of Truth) st.session_state[f"{key_base}_origin_filename"] = msg.get("origin_filename") st.session_state[f"{key_base}_init"] = True # --- RESURRECTION --- if widget_body_key not in st.session_state and data_body_key in st.session_state: st.session_state[widget_body_key] = st.session_state[data_body_key] # --- SYNC HELPER --- def _sync_meta(): meta = st.session_state[data_meta_key] meta["title"] = st.session_state.get(f"{key_base}_wdg_title", "") meta["type"] = st.session_state.get(f"{key_base}_wdg_type", "default") meta["tags_str"] = st.session_state.get(f"{key_base}_wdg_tags", "") st.session_state[data_meta_key] = meta def _sync_body(): st.session_state[data_body_key] = st.session_state[widget_body_key] def _insert_text(t): st.session_state[widget_body_key] = f"{st.session_state.get(widget_body_key, '')}\n\n{t}" st.session_state[data_body_key] = st.session_state[widget_body_key] def _remove_text(t): st.session_state[widget_body_key] = st.session_state.get(widget_body_key, '').replace(t, "").strip() st.session_state[data_body_key] = st.session_state[widget_body_key] # --- UI LAYOUT --- # Header Info origin_fname = st.session_state.get(f"{key_base}_origin_filename") if origin_fname: display_name = str(origin_fname).split("/")[-1] st.success(f"📂 **Update-Modus**: `{origin_fname}`") st.markdown(f'
{link_text}