# Poll Creation Feature in Activity Management ## Summary Enhanced the activity creation/editing interface to allow direct poll (anketa) creation without navigating away to a separate page. ## Changes Made ### 1. Enhanced PollLinker Component **File:** `frontend/src/components/admin/PollLinker.tsx` #### New Features: - **Tabbed Interface**: Added two tabs for better organization - **Tab 1: "Propojit existující"** - Link existing polls (original functionality) - **Tab 2: "Vytvořit novou"** - Create new polls inline - **Inline Poll Creation Form** includes: - Poll title (required) - Description (optional) - Poll type selector (single/multiple choice) - Dynamic options list (min. 2 options) - Add/remove options with validation - Each option has its own input field - Guest voting toggle - Active status toggle - Create button with loading state #### Technical Implementation: - Added state management for new poll form (`newPollData`) - Implemented `createPollMutation` for poll creation - Added helper functions: - `resetNewPollForm()` - Resets form to initial state - `handleCreatePoll()` - Validates and submits new poll - `addOption()` - Adds new poll option - `removeOption()` - Removes poll option with validation - `updateOption()` - Updates option text - Automatically links created poll to the current activity/article ### 2. Updated AdminActivitiesPage **File:** `frontend/src/pages/admin/AdminActivitiesPage.tsx` #### Changes: - Always shows the "Anketa" section (previously hidden for new activities) - When creating a **new activity**: - Displays helpful message: "💡 Nejprve uložte aktivitu, poté budete moci vytvořit nebo připojit anketu přímo zde." - When editing an **existing activity**: - Shows full PollLinker component with both tabs - Users can immediately create or link polls ## User Experience Flow ### Creating Activity with Poll: 1. User creates a new activity 2. Fills in activity details 3. Sees poll section with informative message 4. **Saves the activity first** 5. Reopens the activity for editing 6. In the "Anketa" section: - Switch to "Vytvořit novou" tab - Fill in poll details (title, description, type) - Add poll options (at least 2 required) - Configure settings (guest voting, active status) - Click "Vytvořit anketu" 7. Poll is automatically created and linked to the activity ### Editing Activity - Adding Poll: 1. Open existing activity 2. Scroll to "Anketa" section at the bottom 3. Choose between: - **Propojit existující**: Select and link an existing poll - **Vytvořit novou**: Create a new poll inline 4. Poll appears on the activity detail page for users to vote ## Technical Details ### API Integration: - Uses `/admin/polls` POST endpoint for poll creation - Automatically sets `related_event_id` when creating poll - Invalidates relevant query cache after operations ### Validation: - Poll title is required - Minimum 2 options required - Empty options are filtered out before submission - Warning toasts for validation errors ### State Management: - React Query for data fetching and mutations - Local state for form inputs - Automatic cache invalidation for data consistency ## Benefits 1. **Improved UX**: No need to navigate to separate poll management page 2. **Faster Workflow**: Create polls directly when creating activities 3. **Better Context**: Poll creation happens in the context of the activity 4. **Reduced Clicks**: Fewer page transitions required 5. **Clearer Process**: Tabbed interface makes options obvious ## Future Enhancements (Optional) - Allow poll creation before saving activity (requires state management) - Poll templates for common questions (e.g., "Dorazíš na trénink?") - Duplicate existing poll functionality - Poll preview before creation - Rich text editor for poll descriptions - Image support for poll options - Poll scheduling (start/end dates) in the inline form ## Testing Checklist - ✅ Create new activity and see poll section message - ✅ Save activity and reopen to create poll - ✅ Create poll with 2 options - ✅ Add more options dynamically - ✅ Try to submit poll without title (should show error) - ✅ Try to submit poll with <2 options (should show error) - ✅ Toggle guest voting and active status - ✅ Verify poll appears linked after creation - ✅ Link existing poll still works - ✅ Unlink poll still works - ✅ Poll displays on activity detail page ## Notes - Frontend changes require rebuild if running in Docker: `docker compose restart frontend` - For local development, changes should hot-reload automatically - Poll creation requires the activity to be saved first (has an ID) - All poll text is in Czech to match the application language