File size: 2,067 Bytes
c8fb072
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
import streamlit as st
from langgraph.types import Command
import zipfile
import io

def create_zip(generated_code):
    zip_buffer = io.BytesIO()
    with zipfile.ZipFile(zip_buffer, "w", zipfile.ZIP_DEFLATED) as zip_file:
        for file_path, code_content in generated_code.items():
            zip_file.writestr(file_path, code_content)
    zip_buffer.seek(0)
    return zip_buffer

def display_code_files(self, generated_code):
    st.title("Generated Code Review")

    st.subheader("📄 Generated Code Files")

    # Display all code files
    for file_path, code_content in generated_code.items():
        st.markdown(f"**`{file_path}`**")
        st.code(code_content, language="python")  # adjust language as needed

    # Create ZIP only once
    if "zip_buffer" not in st.session_state:
        st.session_state.zip_buffer = create_zip(generated_code)

    # Download button
    st.download_button(
        label="⬇️ Download All as ZIP",
        data=st.session_state.zip_buffer,
        file_name="generated_code.zip",
        mime="application/zip"
    )

    # Inline Approve + Feedback Form
    st.divider()

    with st.form(key="approve_feedback_form"):
        col1, col2 = st.columns([1, 4])  # Adjust ratio as needed

        with col1:
            approve = st.form_submit_button("✅ Approve")

        with col2:
            feedback = st.text_area("Edit/Submit feedback if not approved:", value=self.feedback, height=700)
            submit_feedback = st.form_submit_button("✏️ Submit Feedback")

    if approve:
        self.graph.invoke(Command(resume=""), config=st.session_state.thread)
        if self.index < len(self.sdlc_nodes) - 1:
            st.session_state.curr_state = self.sdlc_nodes[self.index + 1]
            st.session_state.feedback_text = ""
            st.rerun()

    elif submit_feedback and feedback.strip():
        st.session_state.feedback_text = feedback
        self.graph.invoke(Command(resume=feedback), config=st.session_state.thread)
        st.session_state.feedback_text = ""
        st.rerun()