Get region names from API instead of hard-coding them

This commit is contained in:
2024-05-06 16:57:12 -04:00
parent 4c4db6a734
commit 8ea657c757
21 changed files with 333 additions and 107 deletions

View File

@ -50,6 +50,7 @@ import { settings, elements, apiGet, apiPost, parseParams, regionNames, setupHea
data.backup = {};
data.linode = {};
data.linodes = [];
data.region = {};
data.types = [];
// Static references to UI elements
@ -89,6 +90,7 @@ import { settings, elements, apiGet, apiPost, parseParams, regionNames, setupHea
var plan = document.createElement("td");
if (linode.type) {
plan.innerHTML = linode.type;
for (var i = 0; i < data.types.length; i++) {
if (data.types[i].id == linode.type) {
plan.innerHTML = data.types[i].label;
@ -103,7 +105,9 @@ import { settings, elements, apiGet, apiPost, parseParams, regionNames, setupHea
row.appendChild(plan);
var location = document.createElement("td");
if (regionNames[linode.region])
if (data.region.label && data.region.label.length)
location.innerHTML = data.region.label;
else if (regionNames[linode.region])
location.innerHTML = regionNames[linode.region];
else
location.innerHTML = linode.region;
@ -136,6 +140,15 @@ import { settings, elements, apiGet, apiPost, parseParams, regionNames, setupHea
ui.backupType.innerHTML = data.backup.type;
if (regionNames[data.backup.region]) {
ui.backupLocation.innerHTML = regionNames[data.backup.region];
ui.destLocation.innerHTML = regionNames[data.backup.region];
} else {
ui.backupLocation.innerHTML = data.backup.region;
ui.destLocation.innerHTML = data.backup.region;
}
apiGet("/regions/" + data.backup.region, displayRegion, null);
for (var i = 0; i < data.backup.configs.length; i++) {
var li = document.createElement("li");
li.innerHTML = data.backup.configs[i];
@ -152,7 +165,7 @@ import { settings, elements, apiGet, apiPost, parseParams, regionNames, setupHea
ui.backupSize.innerHTML = data.backup.totalSize + " MB";
if (state.haveTypes && data.linode.id)
if (state.haveTypes)
insertTypes();
};
@ -169,18 +182,6 @@ import { settings, elements, apiGet, apiPost, parseParams, regionNames, setupHea
ui.linodeTagLink.innerHTML = "(" + data.linode.tags[0] + ")";
ui.linodeTag.style.display = "inline";
}
// Display location
if (regionNames[data.linode.region]) {
ui.backupLocation.innerHTML = regionNames[data.linode.region];
ui.destLocation.innerHTML = regionNames[data.linode.region];
} else {
ui.backupLocation.innerHTML = data.linode.region;
ui.destLocation.innerHTML = data.linode.region;
}
if (state.haveTypes && data.backup.id)
insertTypes();
};
// Callback for linode disks API call
@ -238,7 +239,7 @@ import { settings, elements, apiGet, apiPost, parseParams, regionNames, setupHea
// Request the next page if there are more pages
if (response.page != response.pages) {
var filter = {
"region": data.linode.region
"region": data.backup.region
};
apiGet("/linode/instances?page=" + (response.page + 1), displayLinodes, filter);
return;
@ -254,6 +255,17 @@ import { settings, elements, apiGet, apiPost, parseParams, regionNames, setupHea
}
};
// Callback for region API call
var displayRegion = function(response)
{
data.region = response;
if (data.region.label && data.region.label.length) {
ui.backupLocation.innerHTML = response.label;
ui.destLocation.innerHTML = response.label;
}
};
// Callback for linode types API call
var displayTypes = function(response)
{
@ -267,7 +279,7 @@ import { settings, elements, apiGet, apiPost, parseParams, regionNames, setupHea
}
state.haveTypes = true;
if (data.backup.id && data.linode.id)
if (data.backup.id)
insertTypes();
};
@ -295,7 +307,7 @@ import { settings, elements, apiGet, apiPost, parseParams, regionNames, setupHea
var req = {
"label": ui.destLabel.value,
"type": ui.destPlan.value,
"region": data.linode.region,
"region": data.backup.region,
"backup_id": data.backup.id
};
var callback = function(response)
@ -348,11 +360,11 @@ import { settings, elements, apiGet, apiPost, parseParams, regionNames, setupHea
ui.destPlan.appendChild(option);
}
updatePrice(null);
updateSpace(null);
ui.newLinode.disabled = false;
var filter = {
"region": data.linode.region
"region": data.backup.region
};
apiGet("/linode/instances", displayLinodes, filter);
};
@ -410,7 +422,7 @@ import { settings, elements, apiGet, apiPost, parseParams, regionNames, setupHea
ui.newLinode = document.getElementById(elements.newLinode);
// Register event handlers
ui.destPlan.addEventListener("input", updatePrice);
ui.destPlan.addEventListener("input", updateSpace);
ui.newLinode.addEventListener("click", handleCreate);
// Get data from API
@ -431,7 +443,7 @@ import { settings, elements, apiGet, apiPost, parseParams, regionNames, setupHea
};
// Update the price display
var updatePrice = function(event)
var updateSpace = function(event)
{
// Find the selected type
var type = null;