Refactor TableManager to improve data transformation logic for indexed and direct formats

This commit is contained in:
fynks 2025-09-30 09:55:53 +05:00
parent d110a106ad
commit 897eb490f9

48
dist/js/app.js vendored
View file

@ -167,43 +167,42 @@ class TableManager {
// New method to transform indexed data to regular format // New method to transform indexed data to regular format
_transformIndexedData(indexedData) { _transformIndexedData(indexedData) {
// Check if data is in the new direct format (host -> service -> ✅/❌) // Check if data is in indexed format (has services and supported properties)
const firstHost = Object.values(indexedData)[0]; if (indexedData.services && indexedData.supported) {
if (firstHost && typeof firstHost === 'object' && !firstHost.hasOwnProperty('services') && !firstHost.hasOwnProperty('supported')) { // Handle indexed format
// Data is already in the new direct format const { services, supported } = indexedData;
const transformed = {};
for (const [host, supportedIndices] of Object.entries(supported)) {
transformed[host] = {};
services.forEach((service, index) => {
transformed[host][service] = supportedIndices.includes(index) ? "✅" : "❌";
});
}
// Store services for later use
this.state.services = services;
this.state.isIndexedFormat = true;
return transformed;
} else {
// Data is already in the direct format (host -> service -> ✅/❌)
this.state.isIndexedFormat = false; this.state.isIndexedFormat = false;
return indexedData; return indexedData;
} }
// Handle indexed format
const { services, supported } = indexedData;
const transformed = {};
for (const [host, supportedIndices] of Object.entries(supported)) {
transformed[host] = {};
services.forEach((service, index) => {
transformed[host][service] = supportedIndices.includes(index) ? "✅" : "❌";
});
}
// Store services for later use
this.state.services = services;
this.state.isIndexedFormat = true;
return transformed;
} }
// Modified method to handle both formats // Modified method to handle both formats
generateTable(data = {}) { generateTable(data = {}) {
if (!this.elements.container) return; if (!this.elements.container) return;
// Handle both old and new indexed formats // Handle both indexed and direct formats
let processedData; let processedData;
if (data.services && data.supported) { if (data.services && data.supported) {
// New indexed format // Indexed format
processedData = this._transformIndexedData(data); processedData = this._transformIndexedData(data);
} else { } else {
// Old format // Direct format
processedData = data; processedData = data;
this.state.isIndexedFormat = false; this.state.isIndexedFormat = false;
// Try to extract services from first entry // Try to extract services from first entry
@ -1010,6 +1009,7 @@ document.addEventListener('DOMContentLoaded', async () => {
results.forEach((result, index) => { results.forEach((result, index) => {
const containers = ['#file-hosts-table-container', '#adult-hosts-table-container']; const containers = ['#file-hosts-table-container', '#adult-hosts-table-container'];
loadingManager.hide(containers[index], loaders[index]); loadingManager.hide(containers[index], loaders[index]);
if (result.status === 'fulfilled') { if (result.status === 'fulfilled') {