diff --git a/force-app/main/default/lwc/developmentPage/developmentPage.css b/force-app/main/default/lwc/developmentPage/developmentPage.css index 6f678c1..f4314ec 100644 --- a/force-app/main/default/lwc/developmentPage/developmentPage.css +++ b/force-app/main/default/lwc/developmentPage/developmentPage.css @@ -85,6 +85,25 @@ font-style: normal; } +.dev-close-btn { + margin-top: 10px; + padding: 8px 16px; + background: #ff6b6b; + color: white; + border: none; + border-radius: 4px; + cursor: pointer; + font-size: 0.9rem; + font-weight: 600; + transition: all 0.3s ease; +} + +.dev-close-btn:hover { + background: #ff5252; + transform: translateY(-1px); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); +} + .dev-content { padding: 30px; diff --git a/force-app/main/default/lwc/developmentPage/developmentPage.html b/force-app/main/default/lwc/developmentPage/developmentPage.html index f198256..feb1ce6 100644 --- a/force-app/main/default/lwc/developmentPage/developmentPage.html +++ b/force-app/main/default/lwc/developmentPage/developmentPage.html @@ -10,7 +10,9 @@ value={tbizzInput} onchange={handleTbizzInputChange} onkeydown={handleKeyPress} + placeholder="Enter 'bweixx' to show/hide dev mode" /> + diff --git a/force-app/main/default/lwc/developmentPage/developmentPage.js b/force-app/main/default/lwc/developmentPage/developmentPage.js index 1d5436b..4dff42b 100644 --- a/force-app/main/default/lwc/developmentPage/developmentPage.js +++ b/force-app/main/default/lwc/developmentPage/developmentPage.js @@ -1,7 +1,7 @@ import { LightningElement, track } from 'lwc'; export default class DevelopmentPage extends LightningElement { - @track showDevPage = true; // Visible by default, hidden when tbizz is entered + @track showDevPage = false; // Hidden by default, can be shown by entering bweixx @track currentStep = 1; @track selectedTemplateId = ''; @track selectedPropertyId = ''; @@ -38,7 +38,7 @@ export default class DevelopmentPage extends LightningElement { // Listen for Enter key to check bweixx input if (event.key === 'Enter') { if (this.tbizzInput.toLowerCase() === 'bweixx') { - this.showDevPage = false; + this.showDevPage = true; // Show development page when bweixx is entered this.tbizzInput = ''; // Clear input } } @@ -49,6 +49,11 @@ export default class DevelopmentPage extends LightningElement { this.tbizzInput = event.target.value; } + // Hide development page + hideDevPage() { + this.showDevPage = false; + } + updateTimestamp() { this.currentTimestamp = new Date().toLocaleString(); } diff --git a/force-app/main/default/lwc/propertyTemplateSelector/propertyTemplateSelector.js b/force-app/main/default/lwc/propertyTemplateSelector/propertyTemplateSelector.js index b3b1da0..a8b2c38 100644 --- a/force-app/main/default/lwc/propertyTemplateSelector/propertyTemplateSelector.js +++ b/force-app/main/default/lwc/propertyTemplateSelector/propertyTemplateSelector.js @@ -1318,10 +1318,11 @@ export default class PropertyTemplateSelector extends LightningElement { setTimeout(() => { this.forceHTMLRendering(); - // Add pencil icon to hero section for modern home template, serenity house template, and luxury mansion template + // Add pencil icon to hero section for modern home template, serenity house template, luxury mansion template, and grand oak villa template if (this.selectedTemplateId === 'modern-home-template' || this.selectedTemplateId === 'modern-home-a3-template' || this.selectedTemplateId === 'serenity-house-template' || this.selectedTemplateId === 'serenity-house-a3-template' || - this.selectedTemplateId === 'luxury-mansion-template' || this.selectedTemplateId === 'luxury-mansion-a3-template') { + this.selectedTemplateId === 'luxury-mansion-template' || this.selectedTemplateId === 'luxury-mansion-a3-template' || + this.selectedTemplateId === 'grand-oak-villa-template' || this.selectedTemplateId === 'grand-oak-villa-a3-template') { this.addPencilIconToHeroSection(); } }, 100); @@ -1693,10 +1694,11 @@ export default class PropertyTemplateSelector extends LightningElement { // Force proper HTML rendering to match PDF exactly this.forceHTMLRendering(); - // Add pencil icon to hero section for modern home template, serenity house template, and luxury mansion template + // Add pencil icon to hero section for modern home template, serenity house template, luxury mansion template, and grand oak villa template if (this.selectedTemplateId === 'modern-home-template' || this.selectedTemplateId === 'modern-home-a3-template' || this.selectedTemplateId === 'serenity-house-template' || this.selectedTemplateId === 'serenity-house-a3-template' || - this.selectedTemplateId === 'luxury-mansion-template' || this.selectedTemplateId === 'luxury-mansion-a3-template') { + this.selectedTemplateId === 'luxury-mansion-template' || this.selectedTemplateId === 'luxury-mansion-a3-template' || + this.selectedTemplateId === 'grand-oak-villa-template' || this.selectedTemplateId === 'grand-oak-villa-a3-template') { this.addPencilIconToHeroSection(); } }, 100); @@ -1766,10 +1768,11 @@ export default class PropertyTemplateSelector extends LightningElement { // Force proper HTML rendering to match PDF exactly this.forceHTMLRendering(); - // Add pencil icon to hero section for modern home template, serenity house template, and luxury mansion template + // Add pencil icon to hero section for modern home template, serenity house template, luxury mansion template, and grand oak villa template if (this.selectedTemplateId === 'modern-home-template' || this.selectedTemplateId === 'modern-home-a3-template' || this.selectedTemplateId === 'serenity-house-template' || this.selectedTemplateId === 'serenity-house-a3-template' || - this.selectedTemplateId === 'luxury-mansion-template' || this.selectedTemplateId === 'luxury-mansion-a3-template') { + this.selectedTemplateId === 'luxury-mansion-template' || this.selectedTemplateId === 'luxury-mansion-a3-template' || + this.selectedTemplateId === 'grand-oak-villa-template' || this.selectedTemplateId === 'grand-oak-villa-a3-template') { this.addPencilIconToHeroSection(); } }, 100); @@ -4545,12 +4548,19 @@ export default class PropertyTemplateSelector extends LightningElement { .join(""); } // Template methods + // Helper method to escape HTML and prevent injection + escapeHtml(text) { + if (!text) return ''; + const div = document.createElement('div'); + div.textContent = text; + return div.innerHTML; + } + createBlankTemplate() { const data = this.propertyData || {}; const propertyName = data.Name || data.propertyName || "Property Name"; const location = data.Address__c || data.location || "Location"; - // Use price toggle to determine what to display - const price = this.showPrice ? (data.Price__c || data.price || "Price") : "Price on Request"; + const price = data.Price__c || data.price || "Price"; const bedrooms = data.Bedrooms__c || data.bedrooms || "N/A"; const bathrooms = data.Bathrooms__c || data.bathrooms || "N/A"; const size = data.Square_Feet__c || data.size || "N/A"; @@ -4567,20 +4577,21 @@ export default class PropertyTemplateSelector extends LightningElement { const buildYear = data.Build_Year__c || data.buildYear || "N/A"; const titleEnglish = data.Title_English__c || data.titleEnglish || "Property Title"; - - const descriptionEnglish = this.formatDescriptionForPDF( + let descriptionEnglish = data.Description_English__c || data.descriptionEnglish || - data.description || - "please add your description here..." - ); + "Property Description"; + const rawDescription = data.Description_English__c || + data.descriptionEnglish || + data.description || + "This beautiful property offers exceptional value and modern amenities. Located in a prime area, it represents an excellent investment opportunity."; + + const description = this.formatDescriptionForPDF(rawDescription); + descriptionEnglish = description; const rentPriceMin = data.Rent_Price_Min__c || data.rentPriceMin || "N/A"; const salePriceMin = data.Sale_Price_Min__c || data.salePriceMin || "N/A"; - // Define logoUrl for template usage - const logoUrl = this.logoUrl; - // Build gallery pages so ALL images render in the empty template const allImages = Array.isArray(this.realPropertyImages) ? this.realPropertyImages @@ -4592,186 +4603,178 @@ export default class PropertyTemplateSelector extends LightningElement { for (let i = imagesPerPage; i < allImages.length; i += imagesPerPage) { const chunk = allImages.slice(i, i + imagesPerPage); additionalGalleryPagesHTML += ` -
${descriptionEnglish}
-