import gradio as gr import pandas as pd from app.db.repo import ( get_recommendations, approve_recommendation, reject_recommendation, ) def load_recommendations(): recommendations = get_recommendations() data = [] for recommendation in recommendations: campaign_name = "" if recommendation.campaign: campaign_name = recommendation.campaign.name data.append( { "ID": recommendation.id, "Campaign": campaign_name, "Recommendation": recommendation.action, "Status": recommendation.status, } ) return pd.DataFrame(data) def approve_action(rec_id): approve_recommendation(int(rec_id)) return ( "Recommendation approved", load_recommendations(), ) def reject_action(rec_id): reject_recommendation(int(rec_id)) return ( "Recommendation rejected", load_recommendations(), ) def build_recommendations_page(): gr.Markdown("## Recommendations") recommendation_table = gr.Dataframe( label="Recommendations", interactive=False, ) recommendation_id = gr.Number( label="Recommendation ID" ) status_message = gr.Textbox( label="Status" ) with gr.Row(): approve_btn = gr.Button("Approve") reject_btn = gr.Button("Reject") refresh_btn = gr.Button("Refresh") refresh_btn.click( fn=load_recommendations, outputs=recommendation_table, ) approve_btn.click( fn=approve_action, inputs=recommendation_id, outputs=[ status_message, recommendation_table, ], ) reject_btn.click( fn=reject_action, inputs=recommendation_id, outputs=[ status_message, recommendation_table, ], )