import utils import streamlit as st import plotly.express as px import pandas as pd def exit_poll(): set_votes([]) st.query_params.pop("poll") del st.session_state["selected_poll_name"] if "selected_poll_admin_password" in st.session_state: del st.session_state["selected_poll_admin_password"] def set_votes(votes=[]): poll = utils.find_poll(st.session_state["selected_poll_name"]) uuid = st.session_state["UUID"] poll["votes"][uuid] = votes def vote(): votes = st.session_state.get("vote_selected", []) set_votes(votes) def load_voting(): st.multiselect( "How do you feel?", utils.get_options(), [], on_change=vote, key="vote_selected") def is_admin(): password = st.session_state.get("selected_poll_admin_password", "") poll = utils.find_poll(st.session_state["selected_poll_name"]) return poll["admin_password"] == password def clear_votes_section(): poll = utils.find_poll(st.session_state["selected_poll_name"]) poll["votes"] = {} def delete_poll(): utils.load_polls().remove(utils.find_poll(st.session_state["selected_poll_name"])) st.query_params.pop("poll") del st.session_state["selected_poll_name"] def load_votes(): selected_poll_name = st.session_state["selected_poll_name"] poll = utils.find_poll(selected_poll_name) votes = {x: 0 for x in utils.get_options()} votes_count = 0 users_count = 0 for _,user_votes in poll["votes"].items(): users_count +=1 for vote in user_votes: votes_count +=1 if vote in votes: votes[vote] += 1 else: votes[vote] = 1 df = pd.DataFrame(list(votes.items()), columns=['Status', 'Count']) if df["Count"].sum() == 0: st.warning("No votes yet!") else: st.success(f"Users:{users_count} | Votes:{votes_count}") fig = px.pie(df, values='Count', names='Status', title="Audience Feedback",) st.plotly_chart(fig) st.write(df) st.button("Clear Votes", on_click=clear_votes_section, use_container_width=True) st.button("Delete Poll", on_click=delete_poll, use_container_width=True) def show_qrcode(): selected_poll_name = st.session_state["selected_poll_name"] columns = st.columns(5) with columns[2]: st.image(utils.generate_qr_code_image_link(selected_poll_name)) def load(): selected_poll_name = st.session_state["selected_poll_name"] st.write("") columns = st.columns(3) with columns[0]: st.button("Exit", on_click=exit_poll, use_container_width=True) with columns[1]: st.button("Refresh", use_container_width=True) with columns[2]: st.link_button("Link To Poll", "?poll="+selected_poll_name, type="primary", use_container_width=True) st.title(selected_poll_name) if not is_admin(): load_voting() else: load_votes() show_qrcode()