mirror of
https://github.com/Dvorinka/MyClubServer.git
synced 2026-06-03 18:22:57 +00:00
dev day #80
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user