This commit is contained in:
Tomáš Dvořák
2025-10-16 17:10:13 +02:00
parent f5e7be92c7
commit 35d0954afd
84 changed files with 9571 additions and 4668 deletions
+175
View File
@@ -0,0 +1,175 @@
# MyUIbrix Editor Fixes - December 2024
## Issues Fixed
### 1. ✅ Element Picker Shows Only Implemented Elements
**Problem**: The element picker was showing ALL available element types (30+), but only a subset were actually implemented on the HomePage.
**Solution**:
- Created `HOMEPAGE_IMPLEMENTED_ELEMENTS` array in `defaultElements.ts` listing only implemented elements
- Updated MyUIbrixEditor to filter `PREDEFINED_ELEMENTS` by what's actually available on the current page
- Now only shows: hero, news, matches, table, team, videos, merch, newsletter, sponsors, banner
### 2. ✅ Live Preview Now Works
**Problem**: Changing variants and visibility in the editor didn't show changes in real-time. You had to save and reload to see effects.
**Solution**:
- Integrated `useAllPageElementConfigs` hook into HomePage component
- Hook listens to `myuibrix-change` events and updates visibility/variant state in real-time
- All sections now use `isVisible('elementName', defaultValue)` to control rendering
- Variant changes use `getVariant('elementName', fallback)` to switch between styles
### 3. ✅ All Sections Have data-element Attributes
**Problem**: Some sections were missing `data-element` attributes, so the editor couldn't highlight or edit them.
**Solution**:
- Added `data-element` attributes to all major sections:
- `hero` - Main hero section (grid/scroller/swiper variants)
- `news` - Featured news articles
- `matches` - Upcoming matches display
- `table` - League standings table
- `team` - Players scroller
- `videos` - Videos section
- `merch` - Merchandise/fanshop
- `newsletter` - Newsletter subscription
- `sponsors` - Sponsors/partners
- `banner` - Advertisement banners
### 4. ✅ Visibility Controls Work
**Problem**: Hiding/showing elements didn't work at all.
**Solution**:
- All sections now wrapped with `isVisible()` checks
- Changes in the editor immediately toggle visibility
- Default visibility set appropriately (hero=true, videos=false, etc.)
## How It Works Now
### For Admins (Editing Mode)
1. **Activate Editor**: Click the floating edit button (bottom left)
2. **Select Element**: Click on any section to select it
3. **Change Style**: Pick from available style variants for that element
4. **Move Elements**: Use up/down arrows to reorder sections
5. **Hide/Show**: Toggle element visibility in the layers panel
6. **Preview**: Changes appear IMMEDIATELY (live preview mode)
7. **Save**: Click "Publikovat" to save changes permanently
### Technical Details
**Live Preview Architecture**:
```
MyUIbrixEditor (editing)
→ Dispatches 'myuibrix-change' event
→ useAllPageElementConfigs hook listens
→ Updates getVariant() & isVisible() functions
→ HomePage re-renders with new configuration
```
**Only Editing User Sees Changes**:
- Preview mode is indicated by `previewMode: true` in events
- Changes only apply in browser memory during editing
- Other users see the published version until you click "Publikovat"
## Element Variants Available
### Hero Section
- `grid` - Grid layout with featured article
- `scroller` - Horizontal scrolling cards
- `swiper` - Carousel/swiper
- `swiper_full` - Full-width carousel
### Matches
- `compact` - Compact next match display
- `compact_split` - Split layout with multiple matches
### Table
- `split_news` - News + table side-by-side (default)
- `standard` - Table only
### Sponsors
- `grid` - Grid layout
- `slider` - Animated slider
### Videos, Team, News, etc.
- See `ELEMENT_VARIANTS` in `pageElements.ts` for full list
## Default Configuration
New installations use these defaults (from `defaultElements.ts`):
- Hero (grid) - Visible
- News (grid) - Visible
- Matches (compact) - Visible
- Table (split_news) - Visible
- Merch (grid) - Visible
- Sponsors (grid) - Visible
- Videos - **Hidden** (must enable)
- Team - **Hidden** (must enable)
- Newsletter - **Hidden** (must enable)
- Banner - **Hidden** (must enable)
## ✅ NEW: Drag-and-Drop Reordering (Just Added!)
### Visual Reordering Works
- **Up/Down arrows** now visually reorder sections immediately
- **Drag-and-drop** support in layers panel - grab any element and drag it
- Changes apply in real-time (live preview)
- DOM elements are physically reordered to match your layout
### How to Reorder
**Method 1: Arrow Buttons**
1. Click on an element to select it
2. Use ↑ ↓ arrows in the contextual panel or layers panel
3. Section moves immediately
**Method 2: Drag and Drop (Recommended)**
1. Open Layers Panel (L key or layers button)
2. Grab the drag handle (⋮⋮ icon) or any layer item
3. Drag to desired position
4. Drop - section reorders instantly!
### Visual Feedback
- **Dragging**: Item becomes semi-transparent with "grabbing" cursor
- **Drop target**: Highlighted in blue with scale effect
- **Grip handle**: Shows ⋮⋮ icon to indicate draggability
- **Position label**: Shows "Position 1 of 10" etc.
### Some Variants Not Fully Styled
- Not all variant options have complete styling
- Most common variants (grid, compact, standard) work well
- Exotic variants may need CSS work
## Testing Checklist
After deployment, test these scenarios:
- [ ] Click edit button → editor UI appears
- [ ] Click on hero section → style picker appears
- [ ] Change hero from "grid" to "scroller" → updates immediately
- [ ] Hide "sponsors" section → disappears immediately
- [ ] Show "videos" section → appears immediately
- [ ] **NEW**: Click ↑ arrow on "matches" → moves up visually
- [ ] **NEW**: Open layers panel (L) → see all sections with drag handles
- [ ] **NEW**: Drag "newsletter" above "sponsors" → reorders immediately
- [ ] **NEW**: Drag "hero" to bottom → entire page reorders
- [ ] Open element picker (+ button) → only shows 10 implemented elements
- [ ] Save changes (Publikovat) → page reloads with saved state
- [ ] **NEW**: Reload page → sections appear in saved order
- [ ] Open page in incognito → sees published version (not draft)
## Files Modified
1. **defaultElements.ts** - Added `HOMEPAGE_IMPLEMENTED_ELEMENTS` list
2. **MyUIbrixEditor.tsx** - Filter element picker, add overlays, **drag-drop handlers**, **visual reordering**
3. **HomePage.tsx** - Integrated `useAllPageElementConfigs` hook, added visibility controls
4. **usePageElementConfig.ts** - Added **DOM reordering**, **element order state**, initial order application
## Migration Notes
**Existing Sites**: No data migration needed. The system will:
1. Load existing configurations from database
2. Fall back to defaults for missing elements
3. Mark as "hasChanges" if using defaults (so admin can save)
**New Sites**: Defaults are applied automatically on first page load.