fix(luci-app-secubox-admin): fix WidgetRenderer constructor error
Fixed TypeError "WidgetRenderer is not a constructor" in dashboard.js
by removing the 'new' keyword. LuCI's baseclass.extend() creates callable
classes that should not be instantiated with 'new'.
Changes:
- dashboard.js: Changed from 'new WidgetRenderer({...})' to 'WidgetRenderer({...})'
- Added comprehensive try-catch error handling with fallback error display
- Incremented PKG_RELEASE: 5 → 6
- Updated DEPLOY_UPDATES.md with v1.0.0-6 details
This fix allows the widget system to initialize properly on the dashboard.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
9536a89744
commit
1c5d8eb29f
@ -69,11 +69,17 @@ ubus -S call luci.secubox check_updates
|
||||
### Package Versions
|
||||
|
||||
- `secubox-core`: 0.8.0-6
|
||||
- `luci-app-secubox-admin`: 1.0.0-5
|
||||
- `luci-app-secubox-admin`: 1.0.0-6
|
||||
|
||||
### Recent Fixes
|
||||
|
||||
**v1.0.0-5** (Latest):
|
||||
**v1.0.0-6** (Latest):
|
||||
- Fixed WidgetRenderer constructor error
|
||||
- Changed from `new WidgetRenderer({...})` to `WidgetRenderer({...})`
|
||||
- Added comprehensive error handling with try-catch and fallback error display
|
||||
- baseclass-extended classes should not be called with `new` keyword
|
||||
|
||||
**v1.0.0-5**:
|
||||
- Added graceful RPC fallback with L.resolveDefault()
|
||||
- Pages now load with empty data instead of crashing when backend not deployed
|
||||
- Fixes "No related RPC reply" errors
|
||||
|
||||
@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-secubox-admin
|
||||
PKG_VERSION:=1.0.0
|
||||
PKG_RELEASE:=5
|
||||
PKG_RELEASE:=6
|
||||
PKG_LICENSE:=MIT
|
||||
PKG_MAINTAINER:=CyberMind <contact@cybermind.fr>
|
||||
|
||||
|
||||
@ -198,19 +198,35 @@ return view.extend({
|
||||
initializeWidgets: function(apps) {
|
||||
// Cleanup existing widget renderer
|
||||
if (this.widgetRenderer) {
|
||||
this.widgetRenderer.destroy();
|
||||
try {
|
||||
this.widgetRenderer.destroy();
|
||||
} catch (e) {
|
||||
console.error('Error destroying widget renderer:', e);
|
||||
}
|
||||
}
|
||||
|
||||
// Create new widget renderer
|
||||
this.widgetRenderer = new WidgetRenderer({
|
||||
containerId: 'dashboard-widgets-container',
|
||||
apps: apps,
|
||||
defaultRefreshInterval: 30,
|
||||
gridMode: 'auto'
|
||||
});
|
||||
try {
|
||||
// Create new widget renderer instance
|
||||
// WidgetRenderer is a baseclass-extended class, call it directly
|
||||
this.widgetRenderer = WidgetRenderer({
|
||||
containerId: 'dashboard-widgets-container',
|
||||
apps: apps,
|
||||
defaultRefreshInterval: 30,
|
||||
gridMode: 'auto'
|
||||
});
|
||||
|
||||
// Render widgets
|
||||
this.widgetRenderer.render();
|
||||
// Render widgets
|
||||
if (this.widgetRenderer && this.widgetRenderer.render) {
|
||||
this.widgetRenderer.render();
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Error initializing widgets:', e);
|
||||
// Render error message in widget container
|
||||
var container = document.getElementById('dashboard-widgets-container');
|
||||
if (container) {
|
||||
container.innerHTML = '<div class="alert alert-warning">Widget system initialization failed. Please refresh the page.</div>';
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
pollData: function() {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user