import folium
import streamlit as st
import pandas as pd
from streamlit_folium import st_folium
import time
st.set_page_config(layout="wide")
if "sleep_time" not in st.session_state:
st.session_state.sleep_time = 2
if "auto_refresh" not in st.session_state:
st.session_state.auto_refresh = False
auto_refresh = st.sidebar.checkbox("Auto Refresh?", st.session_state.auto_refresh)
if auto_refresh:
number = st.sidebar.number_input("Refresh rate in seconds", value=st.session_state.sleep_time)
st.session_state.sleep_time = number
#Logo
st.markdown(
"""
""",
unsafe_allow_html=True,
)
st.title("Nt3awnu 🤝 نتعاونو")
st.markdown("Help us report more people in need by filling this form: https://forms.gle/nZNCUVog9ka2Vdqu6 : ساعدونا نبلغو الناس ليمحتاجين فهاد الاستمارة")
def parse_gg_sheet(url):
url = url.replace("edit#gid=", "export?format=csv&gid=")
df = pd.read_csv(url)
# parse latlng (column 4) to [lat, lng]
def parse_latlng(latlng):
if type(latlng) == str and "," in latlng:
lat, lng = latlng.split(",")
return [float(lat), float(lng)]
else:
return None
return df.assign(latlng=df.iloc[:, 4].apply(parse_latlng))
df = parse_gg_sheet(
"https://docs.google.com/spreadsheets/d/1gYoBBiBo1L18IVakHkf3t1fOGvHWb23loadyFZUeHJs/edit#gid=966953708"
)
headers_mapping = {
"إغاثة": "Rescue/إغاثة",
"مساعدة طبية": "Medical Assistance/مساعدة طبية",
"مأوى": "Shelter/مأوى",
"طعام وماء": "Food & Water/طعام وماء",
"مخاطر (تسرب الغاز، تلف في الخدمات العامة...)": "Danger/مخاطر (تسرب الغاز، تلف في الخدمات العامة...)",
}
colors_mapping = {
"إغاثة": "red",
"مساعدة طبية": "orange",
"مأوى": "yellow",
"طعام وماء": "blue",
"مخاطر (تسرب الغاز، تلف في الخدمات العامة...)": "grey",
}
options = ["إغاثة", "مساعدة طبية", "مأوى", "طعام وماء", "مخاطر (تسرب الغاز، تلف في الخدمات العامة...)"]
selected_options = []
st.markdown("👉 **Choose request type / اختر نوع الطلب**")
cols = st.columns(len(options))
for i, option in enumerate(options):
checked = cols[i].checkbox(headers_mapping[option], value=True)
if checked:
selected_options.append(headers_mapping[option])
arabic_options = [e.split("/")[1] for e in selected_options]
df['id'] = df.index
filtered_df = df[df[' What are your needs? / ما هي احتياجاتك؟ (أضفها إذا لم يتم ذكرها)'].isin(arabic_options)]
selected_headers = [headers_mapping[request] for request in arabic_options]
#st.subheader(", ".join(selected_headers))
m = folium.Map(
location=[31.628674, -7.992047],
zoom_start=8.5,
min_zoom=8.5,
max_lat=35.628674,
min_lat=29.628674,
max_lon=-4.992047,
min_lon=-10.992047,
max_bounds=True,
)
for index, row in filtered_df.iterrows():
request_type = row[' What are your needs? / ما هي احتياجاتك؟ (أضفها إذا لم يتم ذكرها)']
phone = row["رقم الهاتف (اختياري)"] if not pd.isna(row["رقم الهاتف (اختياري)"]) else ""
display_text = f"{request_type} {phone} Id: {row['id']}"
if row["latlng"] is None:
continue
folium.Marker(
location=row["latlng"],
tooltip=row[' لأي قيادة / دوار تنتمون ؟'] if not pd.isna(row[' لأي قيادة / دوار تنتمون ؟']) else None,
popup=display_text,
icon=folium.Icon(colors_mapping[request_type])
).add_to(m)
st_data = st_folium(m, use_container_width=True)
# Google Sheet Table
st.markdown(
"""
""",
unsafe_allow_html=True,
)
# Google Form
# st.markdown(
# """
#
# """,
# unsafe_allow_html=True,
# )
# Credits
st.markdown(
"""
Created by Moroccans for Moroccans 🤝
Powered by Annarabic
""",
unsafe_allow_html=True,
)
if auto_refresh:
time.sleep(number)
st.experimental_rerun()