From c05a2b6c30674a3ac5e1437ff1a8f37ca50d4406 Mon Sep 17 00:00:00 2001 From: Patrick Balsiger Date: Sat, 30 Aug 2025 20:41:00 +0200 Subject: [PATCH] fix: topology container height --- index.js | 13 +- package-lock.json | 23 + package.json | 1 + public/api-client.js | 15 +- public/components.js | 64 ++- public/debug-cluster-load.html | 190 --------- public/debug-cluster.html | 208 --------- public/debug.html | 124 ------ public/demo-topology-data.js | 174 -------- public/demo-topology-view.html | 641 ---------------------------- public/deploy-button-test.html | 346 --------------- public/simple-test.html | 104 ----- public/styles.css | 46 +- public/test-caching-system.html | 351 --------------- public/test-deploy-button.html | 353 --------------- public/test-framework.html | 131 ------ public/test-member-overlay.html | 58 --- public/test-members-debug.html | 296 ------------- public/test-refresh.html | 192 --------- public/test-state-preservation.html | 419 ------------------ public/test-tabs.html | 72 ---- public/test-topology-debug.html | 296 ------------- public/test-topology-fix.html | 286 ------------- public/test-topology-overlay.html | 63 --- public/test-topology-view.html | 254 ----------- public/test-view-switching.html | 1 - 26 files changed, 147 insertions(+), 4574 deletions(-) delete mode 100644 public/debug-cluster-load.html delete mode 100644 public/debug-cluster.html delete mode 100644 public/debug.html delete mode 100644 public/demo-topology-data.js delete mode 100644 public/demo-topology-view.html delete mode 100644 public/deploy-button-test.html delete mode 100644 public/simple-test.html delete mode 100644 public/test-caching-system.html delete mode 100644 public/test-deploy-button.html delete mode 100644 public/test-framework.html delete mode 100644 public/test-member-overlay.html delete mode 100644 public/test-members-debug.html delete mode 100644 public/test-refresh.html delete mode 100644 public/test-state-preservation.html delete mode 100644 public/test-tabs.html delete mode 100644 public/test-topology-debug.html delete mode 100644 public/test-topology-fix.html delete mode 100644 public/test-topology-overlay.html delete mode 100644 public/test-topology-view.html delete mode 100644 public/test-view-switching.html diff --git a/index.js b/index.js index a95f7e5..01a557b 100644 --- a/index.js +++ b/index.js @@ -3,6 +3,7 @@ const path = require('path'); const fs = require('fs'); const dgram = require('dgram'); const SporeApiClient = require('./src/client'); +const cors = require('cors'); const app = express(); const PORT = process.env.PORT || 3001; @@ -20,6 +21,13 @@ app.use(fileUpload({ debug: false })); +// Add CORS middleware +app.use(cors({ + origin: '*', // Or specify your phone's IP range like: ['http://192.168.1.0/24'] + methods: ['GET', 'POST', 'PUT', 'DELETE'], + allowedHeaders: ['Content-Type', 'Authorization'] +})); + // UDP discovery configuration const UDP_PORT = 4210; const DISCOVERY_MESSAGE = 'CLUSTER_DISCOVERY'; @@ -700,8 +708,9 @@ app.get('/api/health', (req, res) => { // Start the server -const server = app.listen(PORT, () => { - console.log(`Server is running on http://localhost:${PORT}`); +const server = app.listen(PORT, '0.0.0.0', () => { + console.log(`Server is running on http://0.0.0.0:${PORT}`); + console.log(`Accessible from: http://YOUR_COMPUTER_IP:${PORT}`); console.log(`UDP discovery server listening on port ${UDP_PORT}`); console.log('Waiting for CLUSTER_DISCOVERY messages from SPORE nodes...'); }); diff --git a/package-lock.json b/package-lock.json index 91ddd20..d1bbfb7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { + "cors": "^2.8.5", "express": "^5.1.0", "express-fileupload": "^1.4.3" } @@ -134,6 +135,19 @@ "node": ">=6.6.0" } }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/debug": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", @@ -529,6 +543,15 @@ "node": ">= 0.6" } }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", diff --git a/package.json b/package.json index 590f7ef..c273296 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "author": "", "license": "ISC", "dependencies": { + "cors": "^2.8.5", "express": "^5.1.0", "express-fileupload": "^1.4.3" } diff --git a/public/api-client.js b/public/api-client.js index d149570..dd90201 100644 --- a/public/api-client.js +++ b/public/api-client.js @@ -2,7 +2,20 @@ class ApiClient { constructor() { - this.baseUrl = (typeof window !== 'undefined' && window.API_BASE_URL) || 'http://localhost:3001'; // Backend server URL + // Auto-detect server URL based on current location + const currentHost = window.location.hostname; + const currentPort = window.location.port; + + // If accessing from localhost, use localhost:3001 + // If accessing from another device, use the same hostname but port 3001 + if (currentHost === 'localhost' || currentHost === '127.0.0.1') { + this.baseUrl = 'http://localhost:3001'; + } else { + // Use the same hostname but port 3001 + this.baseUrl = `http://${currentHost}:3001`; + } + + console.log('API Client initialized with base URL:', this.baseUrl); } async request(path, { method = 'GET', headers = {}, body = undefined, query = undefined, isForm = false } = {}) { diff --git a/public/components.js b/public/components.js index e84930a..cdbaef1 100644 --- a/public/components.js +++ b/public/components.js @@ -2277,11 +2277,44 @@ class TopologyGraphComponent extends Component { this.svg = null; this.simulation = null; this.zoom = null; - this.width = 1400; // Increased from 1000 for more space - this.height = 1000; // Increased from 800 for more space + this.width = 0; // Will be set dynamically based on container size + this.height = 0; // Will be set dynamically based on container size this.isInitialized = false; } + updateDimensions(container) { + // Get the container's actual dimensions + const rect = container.getBoundingClientRect(); + this.width = rect.width || 1400; // Fallback to 1400 if width is 0 + this.height = rect.height || 1000; // Fallback to 1000 if height is 0 + + // Ensure minimum dimensions + this.width = Math.max(this.width, 800); + this.height = Math.max(this.height, 600); + + console.log('TopologyGraphComponent: Updated dimensions to', this.width, 'x', this.height); + } + + handleResize() { + // Debounce resize events to avoid excessive updates + if (this.resizeTimeout) { + clearTimeout(this.resizeTimeout); + } + + this.resizeTimeout = setTimeout(() => { + const container = this.findElement('#topology-graph-container'); + if (container && this.svg) { + this.updateDimensions(container); + // Update SVG viewBox and force center + this.svg.attr('viewBox', `0 0 ${this.width} ${this.height}`); + if (this.simulation) { + this.simulation.force('center', d3.forceCenter(this.width / 2, this.height / 2)); + this.simulation.alpha(0.3).restart(); + } + } + }, 250); // 250ms debounce + } + // Override mount to ensure proper initialization mount() { if (this.isMounted) return; @@ -2325,6 +2358,10 @@ class TopologyGraphComponent extends Component { console.log('TopologyGraphComponent: Container:', this.container); console.log('TopologyGraphComponent: Container ID:', this.container?.id); + // Add resize listener to update dimensions when window is resized + this.resizeHandler = this.handleResize.bind(this); + window.addEventListener('resize', this.resizeHandler); + // Refresh button removed from HTML, so no need to set up event listeners console.log('TopologyGraphComponent: No event listeners needed (refresh button removed)'); } @@ -2389,14 +2426,17 @@ class TopologyGraphComponent extends Component { return; } + // Calculate dynamic dimensions based on container size + this.updateDimensions(container); + // Clear existing content container.innerHTML = ''; // Create SVG element this.svg = d3.select(container) .append('svg') - .attr('width', this.width) - .attr('height', this.height) + .attr('width', '100%') + .attr('height', '100%') .attr('viewBox', `0 0 ${this.width} ${this.height}`) .style('border', '1px solid rgba(255, 255, 255, 0.1)') .style('background', 'rgba(0, 0, 0, 0.2)') @@ -2887,6 +2927,22 @@ class TopologyGraphComponent extends Component { } } + unmount() { + // Clean up resize listener + if (this.resizeHandler) { + window.removeEventListener('resize', this.resizeHandler); + this.resizeHandler = null; + } + + // Clear resize timeout + if (this.resizeTimeout) { + clearTimeout(this.resizeTimeout); + this.resizeTimeout = null; + } + + // Call parent unmount + super.unmount(); + } } diff --git a/public/debug-cluster-load.html b/public/debug-cluster-load.html deleted file mode 100644 index c335d0f..0000000 --- a/public/debug-cluster-load.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - Debug Cluster Load - - - -

๐Ÿ” Debug Cluster Load

- -
-

Debug Controls

- - - - - -
- -
-

Container Elements

-
-
-

Primary Node

-
๐Ÿ” Discovering...
- -
- -
-

Cluster Members

-
Loading cluster members...
-
-
-
- -
-

Debug Log

-
-
- - - - - - - - - - \ No newline at end of file diff --git a/public/debug-cluster.html b/public/debug-cluster.html deleted file mode 100644 index a26c364..0000000 --- a/public/debug-cluster.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - Debug Cluster - - - -

๐Ÿ› Debug Cluster Functionality

- -
-

1. API Client Test

- -
-
- -
-

2. View Model Test

- -
-
- -
-

3. Component Test

- -
-
- -
-

4. Console Log

-
- -
- - - - - - - - - \ No newline at end of file diff --git a/public/debug.html b/public/debug.html deleted file mode 100644 index ce1bce9..0000000 --- a/public/debug.html +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - Debug Framework - - - -

Framework Debug

- -
-

Console Log

-
- -
- -
-

Test Cluster View

-
-
-
-
-
- Primary Node: - Discovering... - -
-
- -
-
-
Loading cluster members...
-
-
-
- -
- - - - - - - - - \ No newline at end of file diff --git a/public/demo-topology-data.js b/public/demo-topology-data.js deleted file mode 100644 index 917e76f..0000000 --- a/public/demo-topology-data.js +++ /dev/null @@ -1,174 +0,0 @@ -// Demo data for testing the Members view without actual cluster data -window.demoMembersData = { - members: [ - { - hostname: "spore-node-1", - ip: "192.168.1.100", - lastSeen: Date.now(), - latency: 3, - status: "ACTIVE", - resources: { - freeHeap: 48748, - chipId: 12345678, - sdkVersion: "3.1.2", - cpuFreqMHz: 80, - flashChipSize: 1048576 - }, - api: [ - { uri: "/api/node/status", method: "GET" }, - { uri: "/api/tasks/status", method: "GET" } - ], - labels: { - environment: "production", - region: "us-west", - role: "worker", - cluster: "spore-main" - } - }, - { - hostname: "spore-node-2", - ip: "192.168.1.101", - lastSeen: Date.now() - 5000, - latency: 8, - status: "ACTIVE", - resources: { - freeHeap: 52340, - chipId: 87654321, - sdkVersion: "3.1.2", - cpuFreqMHz: 80, - flashChipSize: 1048576 - }, - api: [ - { uri: "/api/node/status", method: "GET" }, - { uri: "/api/tasks/status", method: "GET" } - ], - labels: { - environment: "production", - region: "us-west", - role: "controller", - cluster: "spore-main" - } - }, - { - hostname: "spore-node-3", - ip: "192.168.1.102", - lastSeen: Date.now() - 15000, - latency: 12, - status: "INACTIVE", - resources: { - freeHeap: 38920, - chipId: 11223344, - sdkVersion: "3.1.1", - cpuFreqMHz: 80, - flashChipSize: 1048576 - }, - api: [ - { uri: "/api/node/status", method: "GET" } - ], - labels: { - environment: "staging", - region: "us-west", - role: "worker", - cluster: "spore-main" - } - }, - { - hostname: "spore-node-4", - ip: "192.168.1.103", - lastSeen: Date.now() - 30000, - latency: 25, - status: "ACTIVE", - resources: { - freeHeap: 45678, - chipId: 55667788, - sdkVersion: "3.1.2", - cpuFreqMHz: 80, - flashChipSize: 1048576 - }, - api: [ - { uri: "/api/node/status", method: "GET" }, - { uri: "/api/tasks/status", method: "GET" }, - { uri: "/api/capabilities", method: "GET" } - ], - labels: { - environment: "production", - region: "us-east", - role: "gateway", - cluster: "spore-main" - } - }, - { - hostname: "spore-node-5", - ip: "192.168.1.104", - lastSeen: Date.now() - 60000, - latency: 45, - status: "DEAD", - resources: { - freeHeap: 0, - chipId: 99887766, - sdkVersion: "3.1.0", - cpuFreqMHz: 0, - flashChipSize: 1048576 - }, - api: [], - - } - ] -}; - -// Mock API client for demo purposes -window.demoApiClient = { - async getClusterMembers() { - // Simulate network delay - await new Promise(resolve => setTimeout(resolve, 500)); - return window.demoMembersData; - }, - - async getClusterMembersFromNode(ip) { - // Simulate network delay - await new Promise(resolve => setTimeout(resolve, 200)); - - // Return a subset of members to simulate different node perspectives - const allMembers = window.demoMembersData.members; - const nodeIndex = allMembers.findIndex(m => m.ip === ip); - - if (nodeIndex === -1) { - return { members: [] }; - } - - // Simulate each node seeing a different subset of the cluster - const startIndex = (nodeIndex * 2) % allMembers.length; - const members = [ - allMembers[startIndex], - allMembers[(startIndex + 1) % allMembers.length], - allMembers[(startIndex + 2) % allMembers.length] - ]; - - return { members: members.filter(m => m.ip !== ip) }; - }, - - async getNodeStatus(ip) { - // Simulate network delay - await new Promise(resolve => setTimeout(resolve, 300)); - - // Find the member by IP - const member = window.demoMembersData.members.find(m => m.ip === ip); - if (!member) { - throw new Error('Node not found'); - } - - // Return node status with labels - return { - ...member.resources, - api: member.api, - labels: { - environment: ip.includes('103') ? 'production' : 'production', - region: ip.includes('103') ? 'us-east' : 'us-west', - role: ip.includes('101') ? 'controller' : ip.includes('103') ? 'gateway' : 'worker', - cluster: 'spore-main', - nodeType: ip.includes('102') ? 'staging' : 'production', - location: ip.includes('103') ? 'datacenter-2' : 'datacenter-1' - } - }; - } -}; \ No newline at end of file diff --git a/public/demo-topology-view.html b/public/demo-topology-view.html deleted file mode 100644 index 13e4b22..0000000 --- a/public/demo-topology-view.html +++ /dev/null @@ -1,641 +0,0 @@ - - - - - - Demo Members View - SPORE UI - - - - - -
- - -
-
-

๐ŸŒ Cluster View (Demo)

-

This is a demo of the cluster view. Switch to Members to see the network topology visualization.

-
-
- -
-
-
-

๐ŸŒ Network Topology (Demo)

- -
- -
-
-
Loading network topology...
-
-
-
-
- -
-
-

๐Ÿ“ฆ Firmware View (Demo)

-

This is a demo of the firmware view. Switch to Members to see the network topology visualization.

-
-
-
- - - - \ No newline at end of file diff --git a/public/deploy-button-test.html b/public/deploy-button-test.html deleted file mode 100644 index e45494a..0000000 --- a/public/deploy-button-test.html +++ /dev/null @@ -1,346 +0,0 @@ - - - - - - Deploy Button Test - Isolated - - - -

๐Ÿš€ Deploy Button Test - Isolated

- -
-

Test Scenario: Deploy Button State

-

This test isolates the deploy button functionality to debug the issue.

-
- -
-

๐Ÿš€ Firmware Update

- -
- - -
- -
- - - No file selected -
- - -
- -
-

Cluster Members

-
-
Loading cluster members...
-
- - -
- -
-

Debug Information

-
Waiting for actions...
-
- - - - \ No newline at end of file diff --git a/public/simple-test.html b/public/simple-test.html deleted file mode 100644 index 291e4f0..0000000 --- a/public/simple-test.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - Simple Framework Test - - - -

Simple Framework Test

- -
-

API Test

- -
-
- -
-

Framework Test

- -
-
- - - - - - - - \ No newline at end of file diff --git a/public/styles.css b/public/styles.css index fd43397..38f0a32 100644 --- a/public/styles.css +++ b/public/styles.css @@ -7,14 +7,24 @@ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; background: linear-gradient(135deg, #2c3e50 0%, #34495e 50%, #1a252f 100%); - min-height: 100vh; + height: 100vh; /* Fixed height instead of min-height */ padding: 1rem; color: #ecf0f1; + display: flex; + flex-direction: column; + overflow: hidden; /* Prevent body from growing beyond viewport */ } .container { - max-width: 1200px; + max-width: none; /* Remove width constraint for full screen coverage */ + width: 100%; margin: 0 auto; + display: flex; + flex-direction: column; + flex: 1; + padding: 0 2rem; /* Increase horizontal padding for better spacing */ + max-height: calc(100vh - 2rem); /* Constrain to viewport height minus body padding */ + overflow: hidden; /* Prevent container from growing beyond bounds */ } /* Header styles removed - integrated into navigation */ @@ -233,7 +243,7 @@ p { display: inline-flex; align-items: center; font-size: 0.75rem; - padding: 0.25rem 0.6rem; + padding: 0.3rem 0.7rem; border-radius: 9999px; background: rgba(30, 58, 138, 0.35); border: 1px solid rgba(59, 130, 246, 0.4); @@ -804,10 +814,15 @@ p { } .view-content.active { - display: block; + display: flex; opacity: 1; } +/* Special handling for cluster and firmware views to ensure proper width */ +#cluster-view.active, #firmware-view.active { + display: block; /* Use block display for proper width inheritance */ +} + /* Firmware Section Styles */ .firmware-section { background: rgba(0, 0, 0, 0.3); @@ -2308,22 +2323,37 @@ p { /* Topology View Styles */ #topology-view { - height: 100%; + flex: 1; /* Take up remaining space */ padding: 0; - min-height: 100vh; /* Ensure full viewport height */ + margin: 0; + position: relative; + width: 100%; /* Use full container width */ + min-height: 0; /* Allow flex item to shrink */ + max-height: 100vh; /* Never exceed viewport height */ + overflow: hidden; /* Prevent content from exceeding bounds */ +} + +/* Ensure other views work properly with flexbox */ +#cluster-view, #firmware-view { + flex: 0 0 auto; /* Don't grow or shrink, use natural size */ + width: 100%; /* Use full container width */ } #topology-graph-container { background: rgba(0, 0, 0, 0.2); border-radius: 12px; box-shadow: 0 4px 16px rgba(0, 0, 0, 0.3); - min-height: 100%; - height: 100vh; /* Use full viewport height */ + height: 100%; + width: 100%; + margin: 0; + padding: 0; display: flex; align-items: center; justify-content: center; overflow: hidden; border: 1px solid rgba(255, 255, 255, 0.1); + box-sizing: border-box; + max-height: 100%; /* Ensure it doesn't exceed parent height */ } #topology-graph-container svg { diff --git a/public/test-caching-system.html b/public/test-caching-system.html deleted file mode 100644 index 05fb513..0000000 --- a/public/test-caching-system.html +++ /dev/null @@ -1,351 +0,0 @@ - - - - - - SPORE UI - Component Caching Test - - - - -
-
-

๐Ÿงช Component Caching System Test

-

This page tests the new component caching system to verify that components are not re-rendered on view switches.

-

Note: Components now start with clean default state (collapsed cards, status tab) and don't restore previous UI state.

-
- - - - -
-
- - - -
-
-
-
-
- Primary Node: - Discovering... - -
-
- -
- -
-
-
Loading cluster members...
-
-
-
-
- -
-
-
-
-
-

๐Ÿš€ Firmware Update

-
-
-
-
- - -
- -
- - - No file selected -
-
- - -
-
-
-
-
- -
- -
-
-
- -
-

Test Results:

-
Run a test to see results...
-
-
- - - - - - - - - - \ No newline at end of file diff --git a/public/test-deploy-button.html b/public/test-deploy-button.html deleted file mode 100644 index 03129c6..0000000 --- a/public/test-deploy-button.html +++ /dev/null @@ -1,353 +0,0 @@ - - - - - - Deploy Button Test - - - -

๐Ÿš€ Deploy Button Test

- -
-

Test Scenario: Deploy Button State

-

This test demonstrates the deploy button behavior when:

- -
- -
-

๐Ÿš€ Firmware Update

- -
- - -
- -
- - - No file selected -
- - -
- -
-

Cluster Members

-
-
Loading cluster members...
-
- - -
- -
-

Test Instructions

-
    -
  1. Select "Specific Node" radio button - notice the deploy button remains disabled
  2. -
  3. Click "Add Test Node" to simulate cluster discovery
  4. -
  5. Select "Specific Node" again - now you should see nodes in the dropdown
  6. -
  7. Select a file - deploy button should remain disabled until you select a node
  8. -
  9. Select a specific node - deploy button should now be enabled
  10. -
  11. Click "Remove All Nodes" to test the "no nodes available" state
  12. -
-
- - - - \ No newline at end of file diff --git a/public/test-framework.html b/public/test-framework.html deleted file mode 100644 index 8c7115a..0000000 --- a/public/test-framework.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - Framework Test - - - -

SPORE UI Framework Test

- -
-

Framework Initialization Test

-
Checking...
-
- -
-

Event Bus Test

- -
-
- -
-

View Model Test

- - -
Name: (not set)
-
- -
-

Component Test

-
-
Loading...
-
- -
- - - - - \ No newline at end of file diff --git a/public/test-member-overlay.html b/public/test-member-overlay.html deleted file mode 100644 index e18c82e..0000000 --- a/public/test-member-overlay.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - Test Member Card Overlay - - - - -
-

Test Member Card Overlay

- -
-

Test Data

- -
- -
-
- - - - - - \ No newline at end of file diff --git a/public/test-members-debug.html b/public/test-members-debug.html deleted file mode 100644 index 56b0d14..0000000 --- a/public/test-members-debug.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - - - Debug Members Component - - - - -
-

๐Ÿ› Debug Members Component

- -
-

Component Test

-

Testing if the TopologyGraphComponent can be created and initialized.

- - - - -
-
- -
-

Graph Container

-
-
- Graph will appear here after testing -
-
-
-
- - - - \ No newline at end of file diff --git a/public/test-refresh.html b/public/test-refresh.html deleted file mode 100644 index e81695b..0000000 --- a/public/test-refresh.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - Test Refresh Button - - - - -

๐Ÿ” Test Refresh Button Functionality

- -
-

Test Controls

- - - - -
- -
-

Cluster View (Simplified)

-
-
-
-
- Primary Node: - ๐Ÿ” Discovering... -
-
- -
- -
-
Loading cluster members...
-
-
-
- -
-

Debug Log

-
-
- - - - - - - - - - \ No newline at end of file diff --git a/public/test-state-preservation.html b/public/test-state-preservation.html deleted file mode 100644 index 8e1aed0..0000000 --- a/public/test-state-preservation.html +++ /dev/null @@ -1,419 +0,0 @@ - - - - - - SPORE UI - State Preservation Test - - - - -
-

๐Ÿงช SPORE UI State Preservation Test

- -
-

Test Controls

-
- - - - - - - - -
- -
-

What This Test Demonstrates:

-
    -
  • State Preservation: When data is refreshed, expanded cards and active tabs are maintained
  • -
  • Partial Updates: Only changed data is updated, not entire components
  • -
  • UI State Persistence: User interactions (expanded cards, active tabs) are preserved across refreshes
  • -
  • Smart Updates: The system detects when data has actually changed and only updates what's necessary
  • -
-
-
- -
-

Current State Indicators

-
- Expanded Cards: - 0 -
-
- Active Tabs: - 0 -
-
- Last Update: - Never -
-
- -
-

Test Log

-
-
Test log initialized. Use the test controls above to test state preservation.
-
-
- - -
-
-

Primary Node

-
๐Ÿ” Discovering...
- -
- -
-

Cluster Members

- -
- -
-
-
-
- - - - - - - - - - \ No newline at end of file diff --git a/public/test-tabs.html b/public/test-tabs.html deleted file mode 100644 index 4195d16..0000000 --- a/public/test-tabs.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - Tab Test - - - -
-

Tab Active State Test

- -
-
- - - - -
- -
-

Status Tab

-

This is the status tab content.

-
- -
-

Endpoints Tab

-

This is the endpoints tab content.

-
- -
-

Tasks Tab

-

This is the tasks tab content.

-
- -
-

Firmware Tab

-

This is the firmware tab content.

-
-
-
- - - - \ No newline at end of file diff --git a/public/test-topology-debug.html b/public/test-topology-debug.html deleted file mode 100644 index 56b0d14..0000000 --- a/public/test-topology-debug.html +++ /dev/null @@ -1,296 +0,0 @@ - - - - - - Debug Members Component - - - - -
-

๐Ÿ› Debug Members Component

- -
-

Component Test

-

Testing if the TopologyGraphComponent can be created and initialized.

- - - - -
-
- -
-

Graph Container

-
-
- Graph will appear here after testing -
-
-
-
- - - - \ No newline at end of file diff --git a/public/test-topology-fix.html b/public/test-topology-fix.html deleted file mode 100644 index 93ec547..0000000 --- a/public/test-topology-fix.html +++ /dev/null @@ -1,286 +0,0 @@ - - - - - - Test Members View Fix - - - - -
-

๐Ÿงช Test Members View Fix

- -
-

Initialization Test

-

Testing the fixed initialization order for the Members view component.

- - - -
-
- -
-

Graph Container

-
-
- Graph will appear here after initialization -
-
-
-
- - - - \ No newline at end of file diff --git a/public/test-topology-overlay.html b/public/test-topology-overlay.html deleted file mode 100644 index abca027..0000000 --- a/public/test-topology-overlay.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - Test Topology with Member Card Overlay - - - - -
-

Test Topology with Member Card Overlay

- -
-

Topology View with Clickable Nodes

-

Click on any node in the topology to see the member card overlay.

- -
- -
-
-
Loading network topology...
-
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/public/test-topology-view.html b/public/test-topology-view.html deleted file mode 100644 index 1d43123..0000000 --- a/public/test-topology-view.html +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - Test Members View - - - - -
-

๐Ÿงช Test Members View

- -
-

D3.js Integration Test

-

Testing D3.js library integration and basic force-directed graph functionality.

- - - -
-
- -
-

Graph Visualization

-
-
-
- - - - \ No newline at end of file diff --git a/public/test-view-switching.html b/public/test-view-switching.html deleted file mode 100644 index 0519ecb..0000000 --- a/public/test-view-switching.html +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file