Download ops/logistic_flutter/streamlit/components/forms.py from MouleeswaranM/FairRelay: direct link, hf CLI and curl.
- Browser
- Download file 12.7 kB
-
https://huggingface.co/MouleeswaranM/FairRelay/resolve/refs%2Fpr%2F2/ops/logistic_flutter/streamlit/components/forms.py
- Command line
-
hf download hf://MouleeswaranM/FairRelay@refs/pr/2/ops/logistic_flutter/streamlit/components/forms.py
-
curl -L -o forms.py https://huggingface.co/MouleeswaranM/FairRelay/resolve/refs%2Fpr%2F2/ops/logistic_flutter/streamlit/components/forms.py
12.7 kB
| """ | |
| Reusable Form Components | |
| """ | |
| import streamlit as st | |
| from datetime import datetime | |
| import re | |
| def validate_email(email): | |
| """Validate email format""" | |
| pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' | |
| return re.match(pattern, email) is not None | |
| def validate_phone(phone): | |
| """Validate phone number format""" | |
| pattern = r'^[\d\s\+\-\(\)]{10,}$' | |
| return re.match(pattern, phone) is not None | |
| def contact_form(form_key="contact"): | |
| """Display a contact form""" | |
| st.markdown("### π§ Contact Us") | |
| with st.form(key=f"{form_key}_form"): | |
| name = st.text_input("Your Name *", placeholder="Enter your full name") | |
| email = st.text_input("Email Address *", placeholder="your.email@example.com") | |
| phone = st.text_input("Phone Number", placeholder="+91-XXXXX-XXXXX") | |
| subject = st.text_input("Subject *", placeholder="What is this regarding?") | |
| message = st.text_area("Message *", placeholder="Tell us more...", height=150) | |
| submitted = st.form_submit_button("π€ Send Message", use_container_width=True) | |
| if submitted: | |
| if not name or not email or not subject or not message: | |
| st.error("β Please fill in all required fields (*)") | |
| return None | |
| if not validate_email(email): | |
| st.error("β Please enter a valid email address") | |
| return None | |
| if phone and not validate_phone(phone): | |
| st.error("β Please enter a valid phone number") | |
| return None | |
| st.success("β Message sent successfully! We'll get back to you soon.") | |
| st.balloons() | |
| return { | |
| "name": name, | |
| "email": email, | |
| "phone": phone, | |
| "subject": subject, | |
| "message": message, | |
| "timestamp": datetime.now() | |
| } | |
| return None | |
| def job_application_form(job_title="", form_key="job_app"): | |
| """Display a job application form""" | |
| st.markdown(f"### πΌ Apply for: {job_title}") | |
| with st.form(key=f"{form_key}_form"): | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| name = st.text_input("Full Name *", placeholder="Your full name") | |
| email = st.text_input("Email Address *", placeholder="your.email@example.com") | |
| phone = st.text_input("Phone Number *", placeholder="+91-XXXXX-XXXXX") | |
| with col2: | |
| current_role = st.text_input("Current Role", placeholder="e.g., Software Engineer") | |
| experience = st.number_input("Years of Experience", min_value=0, max_value=50, value=0) | |
| location = st.text_input("Current Location", placeholder="City, Country") | |
| st.markdown("#### π Resume") | |
| resume = st.file_uploader("Upload Resume (PDF, DOC, DOCX)", type=["pdf", "doc", "docx"]) | |
| linkedin = st.text_input("LinkedIn Profile URL", placeholder="https://linkedin.com/in/yourprofile") | |
| portfolio = st.text_input("Portfolio/Website URL (optional)", placeholder="https://yourportfolio.com") | |
| cover_letter = st.text_area( | |
| "Cover Letter / Why do you want this job? *", | |
| placeholder="Tell us why you're a great fit for this role...", | |
| height=200 | |
| ) | |
| availability = st.selectbox( | |
| "When can you start?", | |
| ["Immediately", "2 weeks notice", "1 month notice", "2+ months"] | |
| ) | |
| salary_expectation = st.text_input("Salary Expectation (Optional)", placeholder="e.g., βΉ15-20 LPA") | |
| submitted = st.form_submit_button("π€ Submit Application", use_container_width=True) | |
| if submitted: | |
| if not name or not email or not phone or not cover_letter: | |
| st.error("β Please fill in all required fields (*)") | |
| return None | |
| if not validate_email(email): | |
| st.error("β Please enter a valid email address") | |
| return None | |
| if not validate_phone(phone): | |
| st.error("β Please enter a valid phone number") | |
| return None | |
| st.success("β Application submitted successfully! Good luck!") | |
| st.balloons() | |
| return { | |
| "name": name, | |
| "email": email, | |
| "phone": phone, | |
| "current_role": current_role, | |
| "experience": experience, | |
| "location": location, | |
| "linkedin": linkedin, | |
| "portfolio": portfolio, | |
| "cover_letter": cover_letter, | |
| "availability": availability, | |
| "salary_expectation": salary_expectation, | |
| "timestamp": datetime.now() | |
| } | |
| return None | |
| def mentor_application_form(form_key="mentor_app"): | |
| """Display a mentor application form""" | |
| st.markdown("### π Become a Mentor") | |
| with st.form(key=f"{form_key}_form"): | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| name = st.text_input("Full Name *", placeholder="Your full name") | |
| email = st.text_input("Email Address *", placeholder="your.email@example.com") | |
| phone = st.text_input("Phone Number", placeholder="+91-XXXXX-XXXXX") | |
| with col2: | |
| current_role = st.text_input("Current Role *", placeholder="e.g., Senior Engineer") | |
| company = st.text_input("Current Company", placeholder="Company name") | |
| experience = st.number_input("Years of Experience *", min_value=1, max_value=50, value=5) | |
| expertise = st.multiselect( | |
| "Areas of Expertise *", | |
| ["Technology", "Marketing", "Design", "Finance", "Healthcare", "Education", | |
| "Entrepreneurship", "Leadership", "Data Science", "Product Management", "Other"] | |
| ) | |
| specific_skills = st.text_input( | |
| "Specific Skills *", | |
| placeholder="e.g., Python, Machine Learning, Product Strategy" | |
| ) | |
| bio = st.text_area( | |
| "Professional Bio *", | |
| placeholder="Tell us about your professional journey, achievements, and why you want to mentor...", | |
| height=200 | |
| ) | |
| linkedin = st.text_input("LinkedIn Profile URL *", placeholder="https://linkedin.com/in/yourprofile") | |
| availability = st.multiselect( | |
| "Available for:", | |
| ["One-on-one mentoring", "Group sessions", "Career guidance", "Resume review", | |
| "Mock interviews", "Technical guidance", "Workshops/Speaking"] | |
| ) | |
| hours_per_month = st.slider("Hours you can commit per month", 1, 20, 5) | |
| why_mentor = st.text_area( | |
| "Why do you want to be a mentor? *", | |
| placeholder="What motivates you to help other women?", | |
| height=150 | |
| ) | |
| submitted = st.form_submit_button("π Submit Application", use_container_width=True) | |
| if submitted: | |
| if not name or not email or not current_role or not expertise or not bio or not linkedin or not why_mentor: | |
| st.error("β Please fill in all required fields (*)") | |
| return None | |
| if not validate_email(email): | |
| st.error("β Please enter a valid email address") | |
| return None | |
| st.success("β Application submitted! We'll review and get back to you within 48 hours.") | |
| st.balloons() | |
| return { | |
| "name": name, | |
| "email": email, | |
| "phone": phone, | |
| "current_role": current_role, | |
| "company": company, | |
| "experience": experience, | |
| "expertise": expertise, | |
| "specific_skills": specific_skills, | |
| "bio": bio, | |
| "linkedin": linkedin, | |
| "availability": availability, | |
| "hours_per_month": hours_per_month, | |
| "why_mentor": why_mentor, | |
| "timestamp": datetime.now() | |
| } | |
| return None | |
| def story_submission_form(form_key="story"): | |
| """Display a success story submission form""" | |
| st.markdown("### β Share Your Success Story") | |
| with st.form(key=f"{form_key}_form"): | |
| name = st.text_input("Your Name *", placeholder="You can use a pseudonym") | |
| anonymous = st.checkbox("Submit anonymously") | |
| col1, col2 = st.columns(2) | |
| with col1: | |
| age = st.number_input("Your Age (Optional)", min_value=18, max_value=100, value=30) | |
| location = st.text_input("Location (Optional)", placeholder="City, Country") | |
| with col2: | |
| occupation = st.text_input("Current Occupation *", placeholder="e.g., Software Engineer") | |
| category = st.selectbox( | |
| "Story Category *", | |
| ["Career", "Education", "Entrepreneurship", "Health", "Overcoming Abuse", | |
| "Personal Growth", "Leadership", "Other"] | |
| ) | |
| title = st.text_input("Story Title *", placeholder="e.g., From Struggles to Success") | |
| story = st.text_area( | |
| "Your Story *", | |
| placeholder="Share your journey, challenges, how you overcame them, and your message for other women...", | |
| height=300 | |
| ) | |
| impact = st.text_area( | |
| "Your Impact (Optional)", | |
| placeholder="What impact has your journey made? e.g., Started a business, Mentored others, etc.", | |
| height=100 | |
| ) | |
| photo = st.file_uploader("Upload Photo (Optional)", type=["jpg", "jpeg", "png"]) | |
| consent = st.checkbox("I agree my story can be published on this platform *") | |
| contact_consent = st.checkbox("I agree to be contacted by the team (optional)") | |
| submitted = st.form_submit_button("π Submit Story", use_container_width=True) | |
| if submitted: | |
| if not name or not occupation or not title or not story or not consent: | |
| st.error("β Please fill in all required fields (*) and agree to terms") | |
| return None | |
| st.success("β Thank you for sharing your story! It will be reviewed and published soon. π") | |
| st.balloons() | |
| return { | |
| "name": "Anonymous" if anonymous else name, | |
| "age": age, | |
| "location": location, | |
| "occupation": occupation, | |
| "category": category, | |
| "title": title, | |
| "story": story, | |
| "impact": impact, | |
| "anonymous": anonymous, | |
| "contact_consent": contact_consent, | |
| "timestamp": datetime.now() | |
| } | |
| return None | |
| def feedback_form(form_key="feedback"): | |
| """Display a feedback form""" | |
| st.markdown("### π¬ Send Us Feedback") | |
| with st.form(key=f"{form_key}_form"): | |
| name = st.text_input("Your Name (Optional)", placeholder="Enter your name") | |
| email = st.text_input("Your Email (Optional)", placeholder="your.email@example.com") | |
| feedback_type = st.selectbox( | |
| "Feedback Type *", | |
| ["Suggestion", "Bug Report", "Feature Request", "General Feedback", "Compliment"] | |
| ) | |
| message = st.text_area( | |
| "Your Feedback *", | |
| placeholder="Tell us what you think...", | |
| height=200 | |
| ) | |
| rating = st.slider("Rate your experience (1-5)", 1, 5, 5) | |
| submitted = st.form_submit_button("π€ Send Feedback", use_container_width=True) | |
| if submitted: | |
| if not message: | |
| st.error("β Please write your feedback") | |
| return None | |
| if email and not validate_email(email): | |
| st.error("β Please enter a valid email address") | |
| return None | |
| st.success("β Thank you for your feedback! We appreciate it.") | |
| st.balloons() | |
| return { | |
| "name": name, | |
| "email": email, | |
| "feedback_type": feedback_type, | |
| "message": message, | |
| "rating": rating, | |
| "timestamp": datetime.now() | |
| } | |
| return None | |