Commit cba7ebfe authored by Luna Riegel's avatar Luna Riegel
Browse files

Fix catalogue loading

parent b88f4cbe
...@@ -119,9 +119,9 @@ let projectStateObject = undefined; ...@@ -119,9 +119,9 @@ let projectStateObject = undefined;
async function loadCataloguesFromConfig(config) { async function loadCataloguesFromConfig(config) {
const configJson = JSON.parse(JSON.stringify(config)); const configJson = JSON.parse(JSON.stringify(config));
const catalogues = configJson.objectCatalogues; const catalogues = Object.values(configJson.objectCatalogues);
for (let cat of catalogues) { for (const cat of catalogues) {
const catJson = await retrieveCatalogueJson(cat.url); const catJson = await retrieveCatalogueJson(cat.url);
if (!catJson) continue; if (!catJson) continue;
...@@ -146,11 +146,15 @@ async function retrieveCatalogueJson(link) { ...@@ -146,11 +146,15 @@ async function retrieveCatalogueJson(link) {
try { try {
const response = await fetch(link, { signal: controller.signal }); const response = await fetch(link, { signal: controller.signal });
if (!response.ok) { if (!response.ok) {
throw new Error(`HTTP error: ${response.status} for catalogue ${link}`); throw new Error(`HTTP error ${response.status} for ${link}`);
} }
return await response.json(); return await response.json();
} catch (error) { } catch (error) {
console.error(error); if (error.name === 'AbortError') {
console.warn(`Fetch aborted (timeout) for: ${link}`);
} else {
console.error(`Fetch failed for ${link}:`, error);
}
return null; return null;
} finally { } finally {
clearTimeout(timeout); clearTimeout(timeout);
...@@ -160,24 +164,38 @@ async function retrieveCatalogueJson(link) { ...@@ -160,24 +164,38 @@ async function retrieveCatalogueJson(link) {
function getCatalogueEntries(json, linkPrefix) { function getCatalogueEntries(json, linkPrefix) {
const part = {}; const part = {};
for (let item of json.items) {
const subCat = item.title;
const entries = [];
for (let entry of item.predefinedObjects) { if (!json || !Array.isArray(json.items)) {
const info = { console.warn('Invalid or missing `json.items`:', json);
title: entry.title, return part;
icon: linkPrefix + entry.icon,
model: linkPrefix + entry.properties?.olcs_modelUrl,
};
entries.push(info);
} }
part[subCat.toString()] = entries; for (const item of json.items) {
} const subCat = item.title || 'Unnamed';
const entries = [];
return part; if (Array.isArray(item.predefinedObjects)) {
} for (const entry of item.predefinedObjects) {
if (typeof entry !== 'object' || entry === null) {
console.warn('Invalid entry:', entry);
continue;
}
const title = entry.title || 'Untitled';
const icon = linkPrefix + (entry.icon || '');
const model = linkPrefix + (entry.properties?.olcs_modelUrl || '');
entries.push({ title, icon, model });
}
} else {
console.warn('Expected array for predefinedObjects, got:', item.predefinedObjects);
}
part[subCat] = entries;
}
return part;
}
function uploadModel() { function uploadModel() {
// Create an input element // Create an input element
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment