Based on the following calculate function /**
*
* @param {Array} questionnaireItems
* @returns {void}
*/
export default function (questionnaireItems) {
questionnaireItems.forEach((questionnaireItem) => {
let product = 1;
let count = 0;
let min = Number.POSITIVE_INFINITY;
let max = Number.NEGATIVE_INFINITY;
for (const quotation of questionnaireItem.quotations) {
for (const quote of quotation.cleanedQuotes) {
const price = parseFloat(quote.price);
quote.price = price;
if (price > 0) {
product *= price;
count++;
min = Math.min(min, price);
max = Math.max(max, price);
}
}
}
const geomean = count > 0 ? Math.pow(product, 1 / count) : 0;

const stdev = Math.sqrt(
questionnaireItem.quotations.reduce((sum, quotation) => {
for (const quote of quotation.cleanedQuotes) {
const price = parseFloat(quote.price);
if (price > 0) sum += Math.pow(price - geomean, 2);
}
return sum;
}, 0) / count
);
const variation = stdev / geomean;

if (geomean > 0) {
questionnaireItem.geomean = geomean.toFixed(2);
questionnaireItem.stdev = stdev.toFixed(2);
questionnaireItem.variation = variation.toFixed(2);
questionnaireItem.min = min.toFixed(2);
questionnaireItem.max = max.toFixed(2);
questionnaireItem.product = product.toFixed(2);
questionnaireItem.count = count.toFixed(2);
}
});
}

export function recalculateRow(rowData) {
// console.log("Row date is: ", rowData);
let product = 1;
let count = 0;
let min = Number.POSITIVE_INFINITY;
let max = Number.NEGATIVE_INFINITY;
for (const quotation of Object.values(rowData.quotes)) {
for (const key of Object.keys(quotation)) {
const price = parseFloat(quotation[key]);
if (isOnlyQuote(key) && price > 0) {
product *= price;
count++;
min = Math.min(min, parseFloat(price));
max = Math.max(max, price);
}
}
}
const geomean = count > 0 ? Math.pow(product, 1 / count) : 0;

const stdev = Math.sqrt(
Object.values(rowData.quotes).reduce((sum, quotation) => {
for (const key of Object.keys(quotation)) {
const price = parseFloat(quotation[key]);
if (isOnlyQuote(key) && price > 0) sum += Math.pow(price - geomean, 2);
}
return sum;
}, 0) /
(count - 1)
);
const variation = stdev / geomean;

if (geomean > 0) {
rowData.geomean = isNaN(geomean) ? “0” : geomean.toFixed(2);
rowData.deviation = isNaN(stdev) ? “0” : stdev.toFixed(2);
rowData.variation = isNaN(variation) ? “0” : variation.toFixed(2);
rowData.minQ = isNaN(min) ? “0” : min.toFixed(2);
rowData.maxQ = isNaN(max) ? “0” : max.toFixed(2);
rowData.product = isNaN(product) ? “0” : product.toFixed(2);
rowData.count = isNaN(count) ? “0” : count.toFixed(2);
rowData.ratio = isNaN(max / min) ? “0” : (max / min).toFixed(2);
}
// console.log("Recalculated data: ", geomean, stdev, variation, rowData);
}

const isOnlyQuote = (str) => {
return /^((?!_)[A-Za-z0-9])+/.test(str);
};
why is the below fucntion not calculating after it fetches questionnaireItems from the backend emisAxiosInstance
.get(reqUrl, {
headers: { Authorization: `Bearer{auth.accessToken}` },
// signal: controller.signal
})
.then((response) => {
// console.log('grid data response: ', response);
// console.log('auth: ', auth);
// Calculate geomean and stuff
const { marketplaces, maxQuotation } =
getMarketplacesAndMaxQuotation(response);
geomean_calculator(response.data.data.questionnaireItems);

console.log("response: ", response);
// responseData = response;
setReqResponseData(response);

generateRows(response, marketplaces, maxQuotation);
generateColumns(response, marketplaces, maxQuotation);
});
setIsAgGridLoading(false);

// }, [saveCounter, fetchRegionCode]);
}, [saveCounter, selectedRegion]);