mirror of
https://github.com/The-Low-Code-Foundation/OpenNoodl.git
synced 2026-03-08 01:53:30 +01:00
feat: Phase 5 BYOB foundation + Phase 3 GitHub integration
Phase 5 - BYOB Backend (TASK-007A/B): - LocalSQL Adapter with full CloudStore API compatibility - QueryBuilder translates Parse-style queries to SQL - SchemaManager with PostgreSQL/Supabase export - LocalBackendServer with REST endpoints - BackendManager with IPC handlers for Electron - In-memory fallback when better-sqlite3 unavailable Phase 3 - GitHub Panel (GIT-004): - Issues tab with list/detail views - Pull Requests tab with list/detail views - GitHub API client with OAuth support - Repository info hook integration Phase 3 - Editor UX Bugfixes (TASK-013): - Legacy runtime detection banners - Read-only enforcement for legacy projects - Code editor modal close improvements - Property panel stuck state fix - Blockly node deletion and UI polish Phase 11 - Cloud Functions Planning: - Architecture documentation for workflow automation - Execution history storage schema design - Canvas overlay concept for debugging Docs: Updated LEARNINGS.md and COMMON-ISSUES.md
This commit is contained in:
@@ -731,6 +731,60 @@ const NoodlRuntime = require('../../noodl-runtime'); // 2 levels from src/api/
|
||||
|
||||
---
|
||||
|
||||
### 🔴 GOTCHA #8: Port Properties Must Be Inside `type` Object (Jan 2026)
|
||||
|
||||
**THE BUG:**
|
||||
|
||||
```javascript
|
||||
// Port-level properties are NOT passed to property panel
|
||||
generatedCode: {
|
||||
type: {
|
||||
name: 'string',
|
||||
codeeditor: 'javascript'
|
||||
},
|
||||
readOnly: true // ❌ Not accessible in property panel!
|
||||
}
|
||||
```
|
||||
|
||||
**WHY IT BREAKS:**
|
||||
|
||||
- Port object only contains: `['name', 'type', 'plug', 'group', 'displayName', 'index']`
|
||||
- Custom properties like `readOnly` at port level are NOT included in this list
|
||||
- Property panel accesses ports via `port.type.propertyName`, not `port.propertyName`
|
||||
- Result: `port.readOnly` is `undefined`, property panel ignores the flag
|
||||
|
||||
**THE FIX:**
|
||||
|
||||
```javascript
|
||||
// ✅ CORRECT - Put custom properties inside type object
|
||||
generatedCode: {
|
||||
type: {
|
||||
name: 'string',
|
||||
codeeditor: 'javascript',
|
||||
readOnly: true // ✅ Accessible as port.type.readOnly
|
||||
},
|
||||
displayName: 'Generated code',
|
||||
group: 'Advanced'
|
||||
}
|
||||
```
|
||||
|
||||
**DEBUGGING TIP:**
|
||||
|
||||
Add logging to see what properties are actually available:
|
||||
|
||||
```javascript
|
||||
console.log('Port properties:', {
|
||||
name: p.name,
|
||||
readOnly: p.readOnly, // undefined ❌
|
||||
typeReadOnly: p.type?.readOnly, // true ✅
|
||||
allKeys: Object.keys(p) // Shows actual properties
|
||||
});
|
||||
```
|
||||
|
||||
**RULE:** Any custom property you want accessible in the property panel must be inside the `type` object.
|
||||
|
||||
---
|
||||
|
||||
## Complete Working Pattern (HTTP Node Reference)
|
||||
|
||||
Here's the proven pattern from the HTTP node that handles all gotchas:
|
||||
|
||||
Reference in New Issue
Block a user