Jacob Schmidt 69f8f037df
All checks were successful
Build / Build (push) Successful in 28s
refactor: Remove tasks.json and update documentation in store functions
This commit removes the `tasks.json` file from the `.vscode` directory. Additionally, it enhances the documentation in `fnc_buyItem.sqf` and `fnc_buyVehicle.sqf` by providing clearer descriptions of item and vehicle types. The `fnc_handlePurchase.sqf` has also been updated to improve variable scoping for better code clarity.
2025-04-19 11:12:53 -05:00

175 lines
6.6 KiB
JavaScript

// Store data will be loaded from JSON
let categories = null;
let currentCategory = null;
let currentSubcategory = null;
let selectedPaymentMethod = null;
function initializePaymentMethods() {
const paymentSelect = document.getElementById('paymentMethod');
paymentSelect.innerHTML = `
<option value="" disabled ${!selectedPaymentMethod ? 'selected' : ''}>Select Payment Method</option>
${categories.paymentMethods.map(method => `
<option value="${method.id}" ${method.id === selectedPaymentMethod ? 'selected' : ''}>
${method.icon} ${method.name}
</option>
`).join('')}
`;
paymentSelect.addEventListener('change', (e) => {
selectedPaymentMethod = e.target.value;
updateBuyButtons();
});
}
function updateBuyButtons() {
const buyButtons = document.querySelectorAll('.buy-btn');
buyButtons.forEach(button => {
button.disabled = !selectedPaymentMethod;
});
}
function handleQuantityChange(productId, change, quantityDisplay) {
const currentQty = parseInt(quantityDisplay.textContent);
const newQty = Math.max(1, currentQty + change);
quantityDisplay.textContent = newQty;
}
function handlePurchase(product, quantity) {
if (!selectedPaymentMethod) {
alert('Please select a payment method first');
return;
}
const total = product.price * quantity;
alert(`Purchase Summary:
Product: ${product.name}
Quantity: ${quantity}
Total: $${total.toLocaleString()}
Payment Method: ${categories.paymentMethods.find(m => m.id === selectedPaymentMethod).name}`);
// Here you would typically integrate with your game's purchasing system
}
function showMainCategories() {
const mainContent = document.querySelector('main');
currentCategory = null;
currentSubcategory = null;
mainContent.innerHTML = `
<div class="categories-grid"></div>
`;
const categoriesGrid = document.querySelector('.categories-grid');
Object.entries(categories)
.filter(([key]) => key !== 'paymentMethods')
.forEach(([categoryName, categoryData]) => {
const categoryTile = document.createElement('button');
categoryTile.className = 'category-tile';
categoryTile.innerHTML = `
<span class="icon">${categoryData.icon}</span>
<span class="name">${categoryName}</span>
`;
categoryTile.addEventListener('click', () => showSubcategories(categoryName));
categoriesGrid.appendChild(categoryTile);
});
}
function showSubcategories(categoryName) {
const mainContent = document.querySelector('main');
currentCategory = categoryName;
currentSubcategory = null;
mainContent.innerHTML = `
<button class="back-button">← Back to Categories</button>
<h2>${categoryName}</h2>
<div class="subcategories-grid"></div>
`;
const subcategoriesGrid = document.querySelector('.subcategories-grid');
const backButton = document.querySelector('.back-button');
backButton.addEventListener('click', showMainCategories);
Object.entries(categories[categoryName].subcategories).forEach(([subCategoryName, subCategoryData]) => {
const subCategoryTile = document.createElement('button');
subCategoryTile.className = 'subcategory-tile';
subCategoryTile.innerHTML = `
<span class="icon">${subCategoryData.icon}</span>
<span class="name">${subCategoryName}</span>
`;
subCategoryTile.addEventListener('click', () => showProducts(categoryName, subCategoryName));
subcategoriesGrid.appendChild(subCategoryTile);
});
}
function showProducts(categoryName, subCategoryName) {
const mainContent = document.querySelector('main');
currentSubcategory = subCategoryName;
mainContent.innerHTML = `
<button class="back-button">← Back to ${categoryName}</button>
<h2>${categoryName} > ${subCategoryName}</h2>
<div class="products-grid"></div>
`;
const productsGrid = document.querySelector('.products-grid');
const backButton = document.querySelector('.back-button');
backButton.addEventListener('click', () => showSubcategories(categoryName));
const products = categories[categoryName].subcategories[subCategoryName].products;
products.forEach(product => {
const productCard = document.createElement('div');
productCard.className = 'product-card';
productCard.innerHTML = `
<div class="product-image"></div>
<div class="product-info">
<h3 class="product-name">${product.name}</h3>
<p class="product-price">$${product.price.toLocaleString()}</p>
<div class="product-controls">
<div class="quantity-controls">
<button class="quantity-btn minus">-</button>
<span class="quantity-display">1</span>
<button class="quantity-btn plus">+</button>
</div>
<button class="buy-btn" ${!selectedPaymentMethod ? 'disabled' : ''}>
Buy Now
</button>
</div>
</div>
`;
const quantityDisplay = productCard.querySelector('.quantity-display');
const minusBtn = productCard.querySelector('.quantity-btn.minus');
const plusBtn = productCard.querySelector('.quantity-btn.plus');
const buyBtn = productCard.querySelector('.buy-btn');
minusBtn.addEventListener('click', () => handleQuantityChange(product.id, -1, quantityDisplay));
plusBtn.addEventListener('click', () => handleQuantityChange(product.id, 1, quantityDisplay));
buyBtn.addEventListener('click', () => handlePurchase(product, parseInt(quantityDisplay.textContent)));
productsGrid.appendChild(productCard);
});
}
// Initialize the store
async function initializeStore() {
try {
const response = await fetch('http://localhost:8000/data/categories.json');
if (!response.ok) {
throw new Error('Failed to load store data');
}
categories = await response.json();
initializePaymentMethods();
showMainCategories();
} catch (error) {
console.error('Error loading store data:', error);
document.querySelector('main').innerHTML = `
<div class="error-message">
<h2>Error Loading Store Data</h2>
<p>Please try again later.</p>
</div>
`;
}
}
document.addEventListener('DOMContentLoaded', () => {
initializeStore();
});