robustness review of price calc js
This commit is contained in:
parent
e7c6a53a17
commit
27c41a6187
7 changed files with 143 additions and 24 deletions
|
|
@ -4,17 +4,27 @@
|
|||
*/
|
||||
class PriceCalculator {
|
||||
constructor() {
|
||||
// Initialize managers
|
||||
this.domManager = new DOMManager();
|
||||
this.currentOffering = this.extractOfferingFromURL();
|
||||
this.pricingDataManager = new PricingDataManager(this.currentOffering);
|
||||
this.planManager = new PlanManager(this.pricingDataManager);
|
||||
this.addonManager = new AddonManager(this.pricingDataManager);
|
||||
this.uiManager = new UIManager();
|
||||
this.orderManager = new OrderManager();
|
||||
try {
|
||||
// Initialize managers
|
||||
this.domManager = new DOMManager();
|
||||
this.currentOffering = this.extractOfferingFromURL();
|
||||
|
||||
// Initialize the calculator
|
||||
this.init();
|
||||
if (!this.currentOffering) {
|
||||
throw new Error('Unable to extract offering information from URL');
|
||||
}
|
||||
|
||||
this.pricingDataManager = new PricingDataManager(this.currentOffering);
|
||||
this.planManager = new PlanManager(this.pricingDataManager);
|
||||
this.addonManager = new AddonManager(this.pricingDataManager);
|
||||
this.uiManager = new UIManager();
|
||||
this.orderManager = new OrderManager();
|
||||
|
||||
// Initialize the calculator
|
||||
this.init();
|
||||
} catch (error) {
|
||||
console.error('Error initializing PriceCalculator:', error);
|
||||
this.showInitializationError(error.message);
|
||||
}
|
||||
}
|
||||
|
||||
// Extract offering info from URL
|
||||
|
|
@ -41,11 +51,24 @@ class PriceCalculator {
|
|||
this.orderManager.setupOrderButton(this.domManager);
|
||||
this.updateCalculator();
|
||||
} else {
|
||||
console.warn('No current offering found, calculator not initialized');
|
||||
throw new Error('No current offering found');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Error initializing price calculator:', error);
|
||||
this.uiManager.showError(this.domManager, 'Failed to load pricing information');
|
||||
this.showInitializationError(error.message);
|
||||
}
|
||||
}
|
||||
|
||||
// Show initialization error to user
|
||||
showInitializationError(message) {
|
||||
const planMatchStatus = this.domManager?.get('planMatchStatus');
|
||||
if (planMatchStatus) {
|
||||
planMatchStatus.innerHTML = `
|
||||
<i class="bi bi-exclamation-triangle me-2 text-danger"></i>
|
||||
<span class="text-danger">Failed to load pricing calculator: ${message}</span>
|
||||
`;
|
||||
planMatchStatus.className = 'alert alert-danger mb-3';
|
||||
planMatchStatus.style.display = 'block';
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -130,6 +153,23 @@ class PriceCalculator {
|
|||
window.addEventListener('addon-changed', () => {
|
||||
this.updatePricing();
|
||||
});
|
||||
|
||||
// Service level change listener
|
||||
const serviceLevelInputs = this.domManager.get('serviceLevelInputs');
|
||||
if (serviceLevelInputs) {
|
||||
serviceLevelInputs.forEach(input => {
|
||||
input.addEventListener('change', () => {
|
||||
// Update plan dropdown for new service level
|
||||
this.planManager.populatePlanDropdown(this.domManager);
|
||||
|
||||
// Update addons for new service level
|
||||
this.addonManager.updateAddons(this.domManager);
|
||||
|
||||
// Update pricing
|
||||
this.updatePricing();
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// Update calculator (initial setup)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue