mirror of
https://github.com/The-Low-Code-Foundation/OpenNoodl.git
synced 2026-01-11 23:02:56 +01:00
181 lines
5.4 KiB
Markdown
181 lines
5.4 KiB
Markdown
# TASK-004B Changelog
|
|
|
|
## [December 26, 2025] - Session: Root Folder Fix - TASK COMPLETE! 🎉
|
|
|
|
### Summary
|
|
|
|
Fixed the unnamed root folder issue that was preventing top-level components from being immediately visible. The ComponentsPanel React migration is now **100% COMPLETE** and ready for production use!
|
|
|
|
### Issue Fixed
|
|
|
|
**Problem:**
|
|
|
|
- Unnamed folder with caret appeared at top of components list
|
|
- Users had to click the unnamed folder to reveal "App" and other top-level components
|
|
- Root folder was rendering as a visible FolderItem instead of being transparent
|
|
|
|
**Root Cause:**
|
|
The `convertFolderToTreeNodes()` function was creating FolderItem nodes for ALL folders, including the root folder with `name: ''`. This caused the root to render as a clickable folder item instead of just showing its contents directly.
|
|
|
|
**Solution:**
|
|
Modified `convertFolderToTreeNodes()` to skip rendering folders with empty names (the root folder). When encountering the root, we now spread its children directly into the tree instead of wrapping them in a folder node.
|
|
|
|
### Files Modified
|
|
|
|
**packages/noodl-editor/src/editor/src/views/panels/ComponentsPanelNew/hooks/useComponentsPanel.ts**
|
|
|
|
- Added check in `convertFolderToTreeNodes()` to skip empty-named folders
|
|
- Root folder now transparent - children render directly at top level
|
|
- "App" and other top-level components now immediately visible on app load
|
|
|
|
```typescript
|
|
// Added this logic:
|
|
sortedChildren.forEach((childFolder) => {
|
|
// Skip root folder (empty name) from rendering as a folder item
|
|
// The root should be transparent - just show its contents directly
|
|
if (childFolder.name === '') {
|
|
nodes.push(...convertFolderToTreeNodes(childFolder));
|
|
return;
|
|
}
|
|
// ... rest of folder rendering
|
|
});
|
|
```
|
|
|
|
### What Works Now
|
|
|
|
**Before Fix:**
|
|
|
|
```
|
|
▶ (unnamed folder) ← Bad! User had to click this
|
|
☐ App
|
|
☐ MyComponent
|
|
☐ Folder1
|
|
```
|
|
|
|
**After Fix:**
|
|
|
|
```
|
|
☐ App ← Immediately visible!
|
|
☐ MyComponent ← Immediately visible!
|
|
☐ Folder1 ← Named folders work normally
|
|
☐ Child1
|
|
```
|
|
|
|
### Complete Feature List (All Working ✅)
|
|
|
|
- ✅ Full React implementation with hooks
|
|
- ✅ Tree rendering with folders/components
|
|
- ✅ Expand/collapse folders
|
|
- ✅ Component selection and navigation
|
|
- ✅ Context menus (add, rename, delete, duplicate)
|
|
- ✅ Drag-drop for organizing components
|
|
- ✅ Inline rename with validation
|
|
- ✅ Home component indicator
|
|
- ✅ Component type icons (page, cloud function, visual)
|
|
- ✅ Direct ProjectModel subscription (event updates working!)
|
|
- ✅ Root folder transparent (components visible by default)
|
|
- ✅ No unnamed folder UI issue
|
|
- ✅ Zero jQuery dependencies
|
|
- ✅ Proper TypeScript typing throughout
|
|
|
|
### Testing Notes
|
|
|
|
**Manual Testing:**
|
|
|
|
1. ✅ Open editor and click Components sidebar icon
|
|
2. ✅ "App" component is immediately visible (no unnamed folder)
|
|
3. ✅ Top-level components display without requiring expansion
|
|
4. ✅ Named folders still have carets and expand/collapse properly
|
|
5. ✅ All context menu actions work correctly
|
|
6. ✅ Drag-drop still functional
|
|
7. ✅ Rename functionality working
|
|
8. ✅ Component navigation works
|
|
|
|
### Status Update
|
|
|
|
**Previous Status:** 🚫 BLOCKED (85% complete, caching issues)
|
|
**Current Status:** ✅ COMPLETE (100% complete, all features working!)
|
|
|
|
The previous caching issue was resolved by changes in another task (sidebar system updates). The only remaining issue was the unnamed root folder, which is now fixed.
|
|
|
|
### Technical Notes
|
|
|
|
- The root folder has `name: ''` and `path: '/'` by design
|
|
- It serves as the container for the tree structure
|
|
- It should never be rendered as a visible UI element
|
|
- The fix ensures it acts as a transparent container
|
|
- All children render directly at the root level of the tree
|
|
|
|
### Code Quality
|
|
|
|
- ✅ No jQuery dependencies
|
|
- ✅ No TSFixme types
|
|
- ✅ Proper TypeScript interfaces
|
|
- ✅ JSDoc comments on functions
|
|
- ✅ Clean separation of concerns
|
|
- ✅ Follows React best practices
|
|
- ✅ Uses proven direct subscription pattern from UseRoutes.ts
|
|
|
|
### Migration Complete!
|
|
|
|
This completes the ComponentsPanel React migration. The panel is now:
|
|
|
|
- Fully modernized with React hooks
|
|
- Free of legacy jQuery/underscore.js code
|
|
- Ready for future enhancements (TASK-004 badges/filters)
|
|
- A reference implementation for other panel migrations
|
|
|
|
---
|
|
|
|
## [December 22, 2025] - Previous Sessions Summary
|
|
|
|
### What Was Completed Previously
|
|
|
|
**Phase 1-4: Foundation & Core Features (85% complete)**
|
|
|
|
- ✅ React component structure created
|
|
- ✅ Tree rendering implemented
|
|
- ✅ Context menus working
|
|
- ✅ Drag & drop functional
|
|
- ✅ Inline rename implemented
|
|
|
|
**Phase 5: Backend Integration**
|
|
|
|
- ✅ Component rename backend works perfectly
|
|
- ✅ Files renamed on disk
|
|
- ✅ Project state updates correctly
|
|
- ✅ Changes persisted
|
|
|
|
**Previous Blocker:**
|
|
|
|
- ❌ Webpack 5 caching prevented testing UI updates
|
|
- ❌ useEventListener hook useEffect never executed
|
|
- ❌ UI didn't receive ProjectModel events
|
|
|
|
**Resolution:**
|
|
The caching issue was resolved by infrastructure changes in another task. The direct subscription pattern from UseRoutes.ts is now working correctly in the ComponentsPanel.
|
|
|
|
---
|
|
|
|
## Template for Future Entries
|
|
|
|
```markdown
|
|
## [YYYY-MM-DD] - Session N: [Description]
|
|
|
|
### Summary
|
|
|
|
Brief description of what was accomplished
|
|
|
|
### Files Created/Modified
|
|
|
|
List of changes
|
|
|
|
### Testing Notes
|
|
|
|
What was tested and results
|
|
|
|
### Next Steps
|
|
|
|
What needs to be done next
|
|
```
|