Files
MyClub/DOCS/ACTIVITY_RICH_EDITOR_YOUTUBE.md
T
Tomáš Dvořák 12cba639b9 upload
2025-10-16 13:32:05 +02:00

19 KiB

Activity/Event System - Complete Enhancement

🎯 Summary of All Enhancements

Your Activity (Aktivity/Události) system now has professional-grade features:

  1. Maps appear on frontend (EventLocationMap with club colors)
  2. YouTube video integration
  3. Rich text editor (ReactQuill - like Word)
  4. Image upload in editor
  5. MapLinkImporter in admin
  6. Live map preview in admin

📊 Complete Feature List

Frontend (ActivityDetailPage)

Feature Status Description
Event Title Large heading with type badge
Date & Time Start/end time display
Location Shows address with map icon
Map YES! EventLocationMap with club colors
YouTube Video NEW! Responsive 16:9 embed
Rich Content ENHANCED! HTML from ReactQuill
Images Hero image + images in content
Attachments Download files

Admin (AdminActivitiesPage)

Feature Status Description
AI Generation Generate title & description
Title Required field
Rich Text Editor NEW! ReactQuill (like Word)
Image Upload NEW! In ReactQuill toolbar
YouTube URL NEW! Video link field
Date/Time Native inputs + quick presets
MapLinkImporter NEW! Import from URLs
Map Preview NEW! Live preview with club colors
Location Name + Mapy.com suggestions
Type Match/Training/Meeting/Other
Category Competition categories
Visibility Public/Private toggle
Attachments Multiple file uploads

🗺️ Map Integration - Complete Flow

Question: Will the map appear on the frontend?

Answer: YES!

How It Works:

Option A: With Coordinates (Precise)

Admin:
1. Paste Google Maps/Mapy.cz link in MapLinkImporter
2. Coordinates extracted automatically
3. Map preview appears in admin
4. Add location name
5. Save

Frontend:
→ EventLocationMap uses location name
→ Geocodes to coordinates
→ Shows map with club colors
→ Precise location!

Option B: Without Coordinates (Quick)

Admin:
1. Type location name: "Sportovní hala TJ Sokol"
2. Save (no coordinates needed)

Frontend:
→ EventLocationMap geocodes the name
→ Shows map with club colors
→ Works automatically!

Result:

  • Map ALWAYS shows if location is set
  • Club colors applied (primary for marker, accent for elements)
  • Responsive on mobile
  • Interactive - zoom, pan

🎥 YouTube Video Integration

Admin: Add Video

In Admin → Aktivity → Edit Event:

YouTube Video (volitelné)
┌────────────────────────────────────────┐
│ https://www.youtube.com/watch?v=ABC123 │
└────────────────────────────────────────┘
Vložte odkaz na YouTube video

Supported URL Formats:

  • https://www.youtube.com/watch?v=VIDEO_ID
  • https://youtu.be/VIDEO_ID
  • https://www.youtube.com/embed/VIDEO_ID

Frontend: Video Display

Automatic 16:9 responsive embed:

┌────────────────────────────────────┐
│                                    │
│     [YouTube Video Player]         │
│          Responsive                │
│           16:9 Ratio               │
│                                    │
└────────────────────────────────────┘

Features:

  • Responsive container (works on all screen sizes)
  • Auto-converts any YouTube URL format
  • Full player controls (play, pause, fullscreen)
  • Allows fullscreen, HD, captions

Position on Page:

  • Appears after map (if location set)
  • Before description content
  • Rounded corners & shadow for polish

✍️ Rich Text Editor (ReactQuill)

Admin: Editor Interface

Replaced simple textarea with full-featured editor:

┌─ Rich Text Editor ─────────────────────────────────────┐
│                                                         │
│ [H1] [H2] [H3] [B] [I] [U] [S] [•] [1.] [🎨] [🖼️] [🔗] │
│ ───────────────────────────────────────────────────────│
│                                                         │
│  Type your content here...                            │
│                                                         │
│  • Bold, italic, underline                            │
│  • Headings (H1, H2, H3)                              │
│  • Lists (ordered & bullet)                           │
│  • Colors & backgrounds                                │
│  • Links                                               │
│  • Images ← UPLOAD DIRECTLY!                          │
│  • Videos                                              │
│                                                         │
└─────────────────────────────────────────────────────────┘

Toolbar Options:

Button Function Description
H1, H2, H3 Headings Large, medium, small headings
B Bold Make text bold
I Italic Make text italic
U Underline Underline text
S Strikethrough Cross out text
Bullet List Create bullet points
1. Numbered List Create numbered list
🎨 Text Color Change text color
🎨 Background Highlight background
🔗 Link Insert hyperlink
🖼️ Image Upload image! ← KEY FEATURE
▶️ Video Embed video
🧹 Clean Remove formatting

Image Upload in Editor

How to add images:

  1. Click the image icon (🖼️) in toolbar
  2. Select image file from computer
  3. Image uploads automatically
  4. Appears inline in content

Features:

  • Direct upload (no need for separate image field)
  • Inline positioning
  • Resize by dragging
  • Automatic optimization
  • Responsive on frontend

Result:

Text with embedded image:

Lorem ipsum dolor sit amet...

[Image appears here]

More text continues...

What You Can Create:

Example 1: Training Announcement

# Trénink A-týmu

**Kdy:** Úterý 18:00-19:30
**Kde:** Fotbalové hřiště TJ Sokol

Milí hráči,

Zítra se sejdeme na společný trénink zaměřený na:
• Kondici a vytrvalost
• Taktiku obrany
• Standardní situace

[Image: Tréninkový plán]

Nezapomeňte:
1. Kopačky
2. Pití
3. Dobrou náladu!

Těším se na vás!

Example 2: Match Report

# Vítězství 3:1 nad Spartou!

[Image: Tým po zápase]

Včera jsme zvítězili v náročném zápase...

**Góly:**
• 15' Jan Novák
• 42' Petr Svoboda
• 78' Jan Novák

[Image: Vstřelený gól]

**Nejlepší hráč:** Jan Novák (2 góly)

📸 Image Handling

Multiple Ways to Add Images:

1. Hero Image (Cover)

Admin → Obrázek (náhled)
┌──────────────────────────┐
│ /uploads/event-hero.jpg  │ [Nahrát]
└──────────────────────────┘

Result: Large cover image at top of page

2. Images in Content (ReactQuill)

In editor → Click 🖼️ icon → Select file

Result: Images embedded in text

3. Image Attachments

Admin → Přílohy → [Nahrát]

Result: Downloadable files at bottom

Image Display on Frontend:

┌─ Event Page ────────────────────────┐
│                                     │
│   [Hero Image - Large, 16:9]       │  ← Hero image
│                                     │
│   Event Title                       │
│   Date, Time, Location              │
│                                     │
│   [Map if location set]             │
│                                     │
│   [YouTube video if set]            │
│                                     │
│   Description:                      │
│   Text with [Image] inline...      │  ← ReactQuill images
│   More text [Image] continues...    │
│                                     │
│   Attachments:                      │
│   📎 image1.jpg [Download]         │  ← Attachments
│   📎 photo.png [Download]          │
│                                     │
└─────────────────────────────────────┘

🎨 Complete Admin Workflow Example

Creating a Professional Event:

Step 1: Basic Info

Název: Turnaj mládeže 2024
Typ: Jiné

Step 2: Description (Rich Text)

[Use ReactQuill editor]

# Turnaj mládeže 2024

Pozvánka na tradiční turnaj...

**Program:**
• 9:00 - Zahájení
• 9:30 - První zápasy
• 12:00 - Oběd

[Click 🖼️ → Upload poster image]

Těšíme se na vás!

Step 3: YouTube Video

YouTube Video:
https://www.youtube.com/watch?v=promo-video-123

Step 4: Date & Time

Začátek: 2024-06-15 09:00
Konec: 2024-06-15 17:00

Step 5: Location

[Paste Google Maps link in MapLinkImporter]
→ Lat: 50.0947, Lng: 17.6997 extracted

Název místa: Sportovní areál TJ Sokol Krnov

[Map preview appears with club colors!]

Step 6: Media

Obrázek (hero): [Upload tournament banner]
Přílohy: 
  - tournament-rules.pdf
  - schedule.xlsx

Step 7: Settings

Kategorie: Mládež
Veřejná: ✓ Ano

Step 8: Save

[Uložit změny]

Result on Frontend:

┌─ Turnaj mládeže 2024 ──────────────────────┐
│                                              │
│  [Tournament Banner - Hero Image]           │
│                                              │
│  # Turnaj mládeže 2024                      │
│  🕐 15.6.2024 9:00 - 17:00                  │
│  📍 Sportovní areál TJ Sokol Krnov          │
│                                              │
│  [Interactive Map with Club Colors]         │
│                                              │
│  [YouTube Promo Video - Responsive]         │
│                                              │
│  Pozvánka na tradiční turnaj...             │
│                                              │
│  **Program:**                                │
│  • 9:00 - Zahájení                          │
│  • 9:30 - První zápasy                      │
│  • 12:00 - Oběd                             │
│                                              │
│  [Poster Image from ReactQuill]             │
│                                              │
│  Těšíme se na vás!                          │
│                                              │
│  📎 Přílohy:                                │
│  tournament-rules.pdf [Stáhnout]            │
│  schedule.xlsx [Stáhnout]                   │
│                                              │
└──────────────────────────────────────────────┘

Perfect! Professional, rich content event page!


🆚 Before vs After Comparison

Description Editor

Feature Before After
Editor Plain textarea ReactQuill (Word-like)
Formatting Manual HTML WYSIWYG buttons
Bold/Italic Type <b>text</b> Click button
Headings Type <h1>text</h1> Select from dropdown
Lists Type <ul><li> Click bullet button
Colors Not possible Color picker
Links Type full HTML Link dialog
Images Separate field Upload in editor
Preview HTML text Live WYSIWYG

Location Features

Feature Before After
Input Text field Text + MapLinkImporter
Suggestions Mapy.com Still works
Coordinates Not possible Import from URLs
Preview None Live map with club colors
Frontend Map Yes (basic) Yes (with club colors)

Media Features

Feature Before After
Hero Image Yes Yes
Inline Images No Yes! (ReactQuill)
YouTube No Yes! (New field)
Attachments Yes Yes

📋 Technical Details

Files Modified

  1. types/event.ts

    • Added youtube_url?: string field
  2. pages/ActivityDetailPage.tsx

    • Added YouTube embed logic (16:9 responsive)
    • Already had EventLocationMap (with club colors)
  3. pages/admin/AdminActivitiesPage.tsx

    • Replaced Textarea with ReactQuill
    • Added YouTube URL field
    • Added MapLinkImporter
    • Added map preview
    • Updated payload to include youtube_url
  4. components/events/EventLocationMap.tsx (previous update)

    • Added club colors support

ReactQuill Configuration

modules={{
  toolbar: [
    [{ header: [1, 2, 3, false] }],        // Headings
    ['bold', 'italic', 'underline', 'strike'], // Text formatting
    [{ list: 'ordered' }, { list: 'bullet' }], // Lists
    [{ color: [] }, { background: [] }],    // Colors
    ['link', 'image', 'video'],             // Media
    ['clean'],                               // Remove formatting
  ],
}}

YouTube URL Parsing

Supports all formats:

  • https://www.youtube.com/watch?v=VIDEO_ID
  • https://youtu.be/VIDEO_ID
  • https://www.youtube.com/embed/VIDEO_ID

Auto-converts to embed format:

data.youtube_url.includes('youtube.com/embed/') 
  ? data.youtube_url 
  : `https://www.youtube.com/embed/${extractedId}`

Complete Feature Checklist

Admin Features

  • Rich text editor (ReactQuill)
  • Bold, italic, underline, strikethrough
  • Headings (H1, H2, H3)
  • Lists (ordered & bullet)
  • Text & background colors
  • Links
  • Image upload in editor
  • Video embeds
  • YouTube URL field
  • MapLinkImporter (Google Maps, Mapy.cz, OSM)
  • Live map preview with club colors
  • Location autocomplete (Mapy.com)
  • AI generation
  • Date/time pickers with presets
  • File attachments
  • Hero image upload
  • Categories
  • Public/Private toggle

Frontend Features

  • Map display with club colors
  • YouTube video embed (responsive 16:9)
  • Rich HTML content from ReactQuill
  • Inline images in content
  • Hero image
  • Date/time display
  • Location with icon
  • Type badge
  • File attachments with download
  • Responsive design
  • Clean, modern UI

🎯 Use Cases

1. Training Session with Photos

Admin:
- Rich editor → Add training plan
- Upload photos directly in editor
- Add location via MapLinkImporter
- Set date/time

Result:
- Beautiful page with embedded photos
- Map showing training location
- Professional layout

2. Match Announcement with Video

Admin:
- Add match details in rich editor
- Paste YouTube promo video link
- Import stadium coordinates from Google Maps
- Upload match poster as hero

Result:
- Promo video embedded
- Stadium map with club colors
- Professional match announcement

3. Tournament with Full Details

Admin:
- Create detailed schedule in editor
- Format with headings, lists, colors
- Upload multiple images inline
- Add PDF schedule as attachment
- Import venue location

Result:
- Rich, formatted content
- Inline images throughout
- Downloadable PDF
- Venue map

💡 Tips & Best Practices

For Rich Text Editor

  1. Use Headings - Structure content with H1, H2, H3
  2. Break Up Text - Use lists and paragraphs
  3. Add Visual Interest - Upload images inline
  4. Use Colors Sparingly - Highlight important info
  5. Preview - Editor shows exactly what visitors see

For Images

  1. Hero Image - Use high-quality, 16:9 ratio
  2. Inline Images - Resize to fit content width
  3. File Size - Optimize before upload (< 1MB)
  4. Alt Text - Use descriptive filenames

For YouTube Videos

  1. Quality - Use 1080p or better
  2. Length - Keep under 5 minutes for best engagement
  3. Privacy - Check video is public/unlisted
  4. Test - Preview embed before publishing

For Maps

  1. Precise Locations - Use MapLinkImporter for accuracy
  2. Name - Add descriptive location name
  3. Verify - Check map preview in admin
  4. Club Colors - Ensure set in Settings → Vzhled

🐛 Troubleshooting

Rich Editor Issues

Images not uploading?

  • Check file size (< 5MB)
  • Ensure supported format (JPG, PNG, GIF)
  • Check server upload limits

Formatting disappearing?

  • Content is saved as HTML
  • Check browser console for errors
  • Try clearing and re-adding formatting

YouTube Issues

Video not showing?

  • Verify video is public/unlisted
  • Check URL format is correct
  • Test URL in browser first
  • Try different URL format (youtu.be vs youtube.com)

Map Issues

Map not showing on frontend?

  • Ensure location field is filled
  • Check coordinates are valid (if using MapLinkImporter)
  • Verify club colors are set
  • Check browser console for errors

📊 Summary

Your Activity/Event system now rivals professional CMS platforms!

What You Can Do:

  • Create rich, formatted content like Word
  • Upload images directly in content
  • Embed YouTube videos
  • Show maps with your club colors
  • Import precise locations from map URLs
  • Preview everything before publishing
  • Generate content with AI
  • Add downloadable files
  • Professional, mobile-responsive output

Perfect for:

  • Match announcements
  • Training schedules
  • Tournament invitations
  • Club events
  • Member meetings
  • News and updates

Implementation Date: 2025-10-10
Status: Production Ready
Complexity: Advanced
User Experience: Professional Grade