forked from RnD/generalFunctions
changed ES6 to normal javascript way of requiring and did export in html file to pass the menuUtils globally to avoid the whole serving part
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
export function initBasicToggles(elements) {
|
||||
class MenuUtils {
|
||||
|
||||
initBasicToggles(elements) {
|
||||
// Toggle visibility for log level
|
||||
elements.logCheckbox.addEventListener("change", function () {
|
||||
elements.rowLogLevel.style.display = this.checked ? "block" : "none";
|
||||
@@ -9,7 +11,7 @@ export function initBasicToggles(elements) {
|
||||
}
|
||||
|
||||
// Define the initialize toggles function within scope
|
||||
export function initMeasurementToggles(elements) {
|
||||
initMeasurementToggles(elements) {
|
||||
// Toggle visibility for scaling inputs
|
||||
elements.scalingCheckbox.addEventListener("change", function () {
|
||||
elements.rowInputMin.style.display = this.checked ? "block" : "none";
|
||||
@@ -25,7 +27,7 @@ export function initMeasurementToggles(elements) {
|
||||
: "none";
|
||||
}
|
||||
|
||||
export function initTensionToggles(elements, node) {
|
||||
initTensionToggles(elements, node) {
|
||||
const currentMethod = node.interpolationMethod;
|
||||
elements.rowTension.style.display =
|
||||
currentMethod === "monotone_cubic_spline" ? "block" : "none";
|
||||
@@ -46,14 +48,14 @@ export function initTensionToggles(elements, node) {
|
||||
});
|
||||
}
|
||||
// Define the smoothing methods population function within scope
|
||||
export function populateSmoothingMethods(configUrls, elements, node) {
|
||||
fetchData(configUrls.cloud.config, configUrls.local.config)
|
||||
populateSmoothingMethods(configUrls, elements, node) {
|
||||
this.fetchData(configUrls.cloud.config, configUrls.local.config)
|
||||
.then((configData) => {
|
||||
const smoothingMethods =
|
||||
configData.smoothing?.smoothMethod?.rules?.values?.map(
|
||||
(o) => o.value
|
||||
) || [];
|
||||
populateDropdown(
|
||||
this.populateDropdown(
|
||||
elements.smoothMethod,
|
||||
smoothingMethods,
|
||||
node,
|
||||
@@ -65,13 +67,13 @@ export function populateSmoothingMethods(configUrls, elements, node) {
|
||||
});
|
||||
}
|
||||
|
||||
export function populateInterpolationMethods(configUrls, elements, node) {
|
||||
fetchData(configUrls.cloud.config, configUrls.local.config)
|
||||
populateInterpolationMethods(configUrls, elements, node) {
|
||||
this.fetchData(configUrls.cloud.config, configUrls.local.config)
|
||||
.then((configData) => {
|
||||
const interpolationMethods =
|
||||
configData?.interpolation?.type?.rules?.values.map((m) => m.value) ||
|
||||
[];
|
||||
populateDropdown(
|
||||
this.populateDropdown(
|
||||
elements.interpolationMethodInput,
|
||||
interpolationMethods,
|
||||
node,
|
||||
@@ -80,14 +82,14 @@ export function populateInterpolationMethods(configUrls, elements, node) {
|
||||
|
||||
// Find the selected method and use it to spawn 1 more field to fill in tension
|
||||
//const selectedMethod = interpolationMethods.find(m => m === node.interpolationMethod);
|
||||
initTensionToggles(elements, node);
|
||||
this.initTensionToggles(elements, node);
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error("Error loading interpolation methods", err);
|
||||
});
|
||||
}
|
||||
|
||||
export function populateLogLevelOptions(logLevelSelect, configData, node) {
|
||||
populateLogLevelOptions(logLevelSelect, configData, node) {
|
||||
// debug log level
|
||||
//console.log("Displaying configData => ", configData) ;
|
||||
|
||||
@@ -99,32 +101,31 @@ export function populateLogLevelOptions(logLevelSelect, configData, node) {
|
||||
//console.log("Displaying logLevels => ", logLevels);
|
||||
|
||||
// Reuse your existing generic populateDropdown helper
|
||||
populateDropdown(logLevelSelect, logLevels, node.logLevel);
|
||||
this.populateDropdown(logLevelSelect, logLevels, node.logLevel);
|
||||
}
|
||||
|
||||
//cascade dropdowns for asset type, supplier, subType, model, unit
|
||||
export function fetchAndPopulateDropdowns(configUrls, elements, node) {
|
||||
|
||||
fetchData(configUrls.cloud.config, configUrls.local.config)
|
||||
fetchAndPopulateDropdowns(configUrls, elements, node) {
|
||||
this.fetchData(configUrls.cloud.config, configUrls.local.config)
|
||||
.then((configData) => {
|
||||
const assetType = configData.asset?.type?.default;
|
||||
const localSuppliersUrl = constructUrl(configUrls.local.taggcodeAPI,`${assetType}s`,"suppliers.json");
|
||||
const cloudSuppliersUrl = constructCloudURL(configUrls.cloud.taggcodeAPI, "/vendor/get_vendors.php");
|
||||
const localSuppliersUrl = this.constructUrl(configUrls.local.taggcodeAPI,`${assetType}s`,"suppliers.json");
|
||||
const cloudSuppliersUrl = this.constructCloudURL(configUrls.cloud.taggcodeAPI, "/vendor/get_vendors.php");
|
||||
|
||||
return fetchData(cloudSuppliersUrl, localSuppliersUrl)
|
||||
return this.fetchData(cloudSuppliersUrl, localSuppliersUrl)
|
||||
.then((supplierData) => {
|
||||
|
||||
const suppliers = supplierData.map((supplier) => supplier.name);
|
||||
|
||||
// Populate suppliers dropdown and set up its change handler
|
||||
return populateDropdown(
|
||||
return this.populateDropdown(
|
||||
elements.supplier,
|
||||
suppliers,
|
||||
node,
|
||||
"supplier",
|
||||
function (selectedSupplier) {
|
||||
if (selectedSupplier) {
|
||||
populateSubTypes(configUrls, elements, node, selectedSupplier);
|
||||
this.populateSubTypes(configUrls, elements, node, selectedSupplier);
|
||||
}
|
||||
}
|
||||
);
|
||||
@@ -132,7 +133,7 @@ export function fetchAndPopulateDropdowns(configUrls, elements, node) {
|
||||
.then(() => {
|
||||
// If we have a saved supplier, trigger subTypes population
|
||||
if (node.supplier) {
|
||||
populateSubTypes(configUrls, elements, node, node.supplier);
|
||||
this.populateSubTypes(configUrls, elements, node, node.supplier);
|
||||
}
|
||||
});
|
||||
})
|
||||
@@ -141,17 +142,17 @@ export function fetchAndPopulateDropdowns(configUrls, elements, node) {
|
||||
});
|
||||
}
|
||||
|
||||
export function getSpecificConfigUrl(nodeName,cloudAPI) {
|
||||
getSpecificConfigUrl(nodeName,cloudAPI) {
|
||||
|
||||
const cloudConfigURL = cloudAPI + "/config/" + nodeName + ".json";
|
||||
const localConfigURL = "http://localhost:1880/"+ nodeName + "/dependencies/"+ nodeName + "/" + nodeName + "Config.json";
|
||||
|
||||
return { cloudConfigURL, localConfigURL };
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Save changes to API
|
||||
export async function apiCall(node) {
|
||||
async apiCall(node) {
|
||||
try{
|
||||
// OLFIANT when a browser refreshes the tag code is lost!!! fix this later!!!!!
|
||||
// FIX UUID ALSO LATER
|
||||
@@ -218,7 +219,7 @@ export async function apiCall(node) {
|
||||
}
|
||||
|
||||
|
||||
export async function fetchData(url, fallbackUrl) {
|
||||
async fetchData(url, fallbackUrl) {
|
||||
try {
|
||||
const response = await fetch(url);
|
||||
if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
|
||||
@@ -253,7 +254,7 @@ export async function fetchData(url, fallbackUrl) {
|
||||
}
|
||||
}
|
||||
|
||||
export async function fetchProjectData(url) {
|
||||
async fetchProjectData(url) {
|
||||
try {
|
||||
const response = await fetch(url);
|
||||
if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
|
||||
@@ -265,14 +266,14 @@ export async function fetchProjectData(url) {
|
||||
}
|
||||
}
|
||||
|
||||
async function populateDropdown(
|
||||
async populateDropdown(
|
||||
htmlElement,
|
||||
options,
|
||||
node,
|
||||
property,
|
||||
callback
|
||||
) {
|
||||
generateHtml(htmlElement, options, node[property]);
|
||||
this.generateHtml(htmlElement, options, node[property]);
|
||||
|
||||
htmlElement.addEventListener("change", async (e) => {
|
||||
const newValue = e.target.value;
|
||||
@@ -285,7 +286,7 @@ async function populateDropdown(
|
||||
}
|
||||
|
||||
// Helper function to construct a URL from a base and path internal
|
||||
function constructUrl(base, ...paths) {
|
||||
constructUrl(base, ...paths) {
|
||||
|
||||
// Remove trailing slash from base and leading slashes from paths
|
||||
const sanitizedBase = (base || "").replace(/\/+$/, "");
|
||||
@@ -300,7 +301,7 @@ function constructUrl(base, ...paths) {
|
||||
}
|
||||
|
||||
//Adjust for API Gateway
|
||||
function constructCloudURL(base, ...paths) {
|
||||
constructCloudURL(base, ...paths) {
|
||||
// Remove trailing slash from base and leading slashes from paths
|
||||
const sanitizedBase = base.replace(/\/+$/, "");
|
||||
const sanitizedPaths = paths.map((path) => path.replace(/^\/+|\/+$/g, ""));
|
||||
@@ -309,21 +310,21 @@ function constructCloudURL(base, ...paths) {
|
||||
return url;
|
||||
}
|
||||
|
||||
function populateSubTypes(configUrls, elements, node, selectedSupplier) {
|
||||
populateSubTypes(configUrls, elements, node, selectedSupplier) {
|
||||
|
||||
fetchData(configUrls.cloud.config, configUrls.local.config)
|
||||
this.fetchData(configUrls.cloud.config, configUrls.local.config)
|
||||
.then((configData) => {
|
||||
const assetType = configData.asset?.type?.default;
|
||||
const supplierFolder = constructUrl( configUrls.local.taggcodeAPI, `${assetType}s`, selectedSupplier );
|
||||
const supplierFolder = this.constructUrl( configUrls.local.taggcodeAPI, `${assetType}s`, selectedSupplier );
|
||||
|
||||
const localSubTypesUrl = constructUrl(supplierFolder, "subtypes.json");
|
||||
const cloudSubTypesUrl = constructCloudURL(configUrls.cloud.taggcodeAPI, "/product/get_subtypesFromVendor.php?vendor_name=" + selectedSupplier);
|
||||
const localSubTypesUrl = this.constructUrl(supplierFolder, "subtypes.json");
|
||||
const cloudSubTypesUrl = this.constructCloudURL(configUrls.cloud.taggcodeAPI, "/product/get_subtypesFromVendor.php?vendor_name=" + selectedSupplier);
|
||||
|
||||
return fetchData(cloudSubTypesUrl, localSubTypesUrl)
|
||||
return this.fetchData(cloudSubTypesUrl, localSubTypesUrl)
|
||||
.then((subTypeData) => {
|
||||
const subTypes = subTypeData.map((subType) => subType.name);
|
||||
|
||||
return populateDropdown(
|
||||
return this.populateDropdown(
|
||||
elements.subType,
|
||||
subTypes,
|
||||
node,
|
||||
@@ -331,14 +332,14 @@ function populateSubTypes(configUrls, elements, node, selectedSupplier) {
|
||||
function (selectedSubType) {
|
||||
if (selectedSubType) {
|
||||
// When subType changes, update both models and units
|
||||
populateModels(
|
||||
this.populateModels(
|
||||
configUrls,
|
||||
elements,
|
||||
node,
|
||||
selectedSupplier,
|
||||
selectedSubType
|
||||
);
|
||||
populateUnitsForSubType(
|
||||
this.populateUnitsForSubType(
|
||||
configUrls,
|
||||
elements,
|
||||
node,
|
||||
@@ -351,14 +352,14 @@ function populateSubTypes(configUrls, elements, node, selectedSupplier) {
|
||||
.then(() => {
|
||||
// If we have a saved subType, trigger both models and units population
|
||||
if (node.subType) {
|
||||
populateModels(
|
||||
this.populateModels(
|
||||
configUrls,
|
||||
elements,
|
||||
node,
|
||||
selectedSupplier,
|
||||
node.subType
|
||||
);
|
||||
populateUnitsForSubType(configUrls, elements, node, node.subType);
|
||||
this.populateUnitsForSubType(configUrls, elements, node, node.subType);
|
||||
}
|
||||
//console.log("In fetch part of subtypes ");
|
||||
// Store all data from selected model
|
||||
@@ -373,9 +374,9 @@ function populateSubTypes(configUrls, elements, node, selectedSupplier) {
|
||||
});
|
||||
}
|
||||
|
||||
function populateUnitsForSubType(configUrls, elements, node, selectedSubType) {
|
||||
populateUnitsForSubType(configUrls, elements, node, selectedSubType) {
|
||||
// Fetch the units data
|
||||
fetchData(configUrls.cloud.units, configUrls.local.units)
|
||||
this.fetchData(configUrls.cloud.units, configUrls.local.units)
|
||||
.then((unitsData) => {
|
||||
// Find the category that matches the subType name
|
||||
const categoryData = unitsData.units.find(
|
||||
@@ -397,7 +398,7 @@ function populateUnitsForSubType(configUrls, elements, node, selectedSubType) {
|
||||
}));
|
||||
|
||||
// Populate the units dropdown
|
||||
populateDropdown(
|
||||
this.populateDropdown(
|
||||
elements.unit,
|
||||
options.map((opt) => opt.value),
|
||||
node,
|
||||
@@ -412,7 +413,7 @@ function populateUnitsForSubType(configUrls, elements, node, selectedSubType) {
|
||||
} else {
|
||||
// If no matching category is found, provide a default % option
|
||||
const defaultUnits = [{ value: "%", description: "Percentage" }];
|
||||
populateDropdown(
|
||||
this.populateDropdown(
|
||||
elements.unit,
|
||||
defaultUnits.map((unit) => unit.value),
|
||||
node,
|
||||
@@ -428,7 +429,7 @@ function populateUnitsForSubType(configUrls, elements, node, selectedSubType) {
|
||||
});
|
||||
}
|
||||
|
||||
function populateModels(
|
||||
populateModels(
|
||||
configUrls,
|
||||
elements,
|
||||
node,
|
||||
@@ -436,18 +437,18 @@ function populateModels(
|
||||
selectedSubType
|
||||
) {
|
||||
|
||||
fetchData(configUrls.cloud.config, configUrls.local.config)
|
||||
this.fetchData(configUrls.cloud.config, configUrls.local.config)
|
||||
.then((configData) => {
|
||||
const assetType = configData.asset?.type?.default;
|
||||
// save assetType to fetch later
|
||||
node.assetType = assetType;
|
||||
|
||||
const supplierFolder = constructUrl( configUrls.local.taggcodeAPI,`${assetType}s`,selectedSupplier);
|
||||
const subTypeFolder = constructUrl(supplierFolder, selectedSubType);
|
||||
const localModelsUrl = constructUrl(subTypeFolder, "models.json");
|
||||
const cloudModelsUrl = constructCloudURL(configUrls.cloud.taggcodeAPI, "/product/get_product_models.php?vendor_name=" + selectedSupplier + "&product_subtype_name=" + selectedSubType);
|
||||
const supplierFolder = this.constructUrl( configUrls.local.taggcodeAPI,`${assetType}s`,selectedSupplier);
|
||||
const subTypeFolder = this.constructUrl(supplierFolder, selectedSubType);
|
||||
const localModelsUrl = this.constructUrl(subTypeFolder, "models.json");
|
||||
const cloudModelsUrl = this.constructCloudURL(configUrls.cloud.taggcodeAPI, "/product/get_product_models.php?vendor_name=" + selectedSupplier + "&product_subtype_name=" + selectedSubType);
|
||||
|
||||
return fetchData(cloudModelsUrl, localModelsUrl).then((modelData) => {
|
||||
return this.fetchData(cloudModelsUrl, localModelsUrl).then((modelData) => {
|
||||
const models = modelData.map((model) => model.name); // use this to populate the dropdown
|
||||
|
||||
// If a model is already selected, store its metadata immediately
|
||||
@@ -455,7 +456,7 @@ function populateModels(
|
||||
node["modelMetadata"] = modelData.find((model) => model.name === node.model);
|
||||
}
|
||||
|
||||
populateDropdown(elements.model, models, node, "model", (selectedModel) => {
|
||||
this.populateDropdown(elements.model, models, node, "model", (selectedModel) => {
|
||||
// Store only the metadata for the selected model
|
||||
node["modelMetadata"] = modelData.find((model) => model.name === selectedModel);
|
||||
});
|
||||
@@ -471,7 +472,7 @@ function populateModels(
|
||||
});
|
||||
}
|
||||
|
||||
function generateHtml(htmlElement, options, savedValue) {
|
||||
generateHtml(htmlElement, options, savedValue) {
|
||||
htmlElement.innerHTML = options.length
|
||||
? `<option value="">Select...</option>${options
|
||||
.map((opt) => `<option value="${opt}">${opt}</option>`)
|
||||
@@ -482,3 +483,7 @@ function generateHtml(htmlElement, options, savedValue) {
|
||||
htmlElement.value = savedValue;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = MenuUtils;
|
||||
Reference in New Issue
Block a user