This commit is contained in:
Tomas Dvorak
2025-11-02 21:31:00 +01:00
parent b9cea0cd77
commit 087f30e82c
130 changed files with 20104 additions and 34330 deletions
+128
View File
@@ -0,0 +1,128 @@
# 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