$(function () {
// configuration js
let m2DriveMaxQty = 4;
let m2DriveSelectedQty = 0;
// configuration items
localStorage.setItem("currency", "INR");
const configCatgories = [
{
id: 1,
title: "barebone",
maxQty: 1,
},
{
id: 2,
title: "processor",
maxQty: 3,
},
{
id: 3,
title: "memory",
maxQty: 1,
},
{
id: 4,
title: "m.2 drive",
maxQty: 4,
},
];
const bareboneProducts = [
{
id: 1,
title: `Intel® C252 Chipset - 1U - 2x SATA - 1x M.2 - Dual Intel® 1-Gigabit Ethernet (RJ45) - 350W Power Supply`,
qty: 3,
price: 99,
},
];
const processorProducts = [
{
productcatid: 1,
productcattitle: `Intel® Xeon® E-2300 Processor Series`,
products: [
{
id: 1,
title: `Quad-Core Intel® Xeon® E-2314 Processor 2.8GHz 8MB
Cache (65W)`,
qty: 3,
price: 99,
},
{
id: 2,
title: `Quad-Core Intel® Xeon® E-2334 Processor 3.4GHz 8MB Cache (65W)`,
qty: 3,
price: 99,
},
{
id: 3,
title: `Eight-Core Intel® Xeon® E-2378 Processor 2.6GHz 16MB Cache (65W)`,
qty: 3,
price: 99,
},
],
},
{
productcatid: 2,
productcattitle: `Intel® Xeon® E-2300 Processor Series with Intel® UHD P750 Graphics`,
products: [
{
id: 1,
title: `Quad-Core Intel® Xeon® E-2324G Processor 3.1GHz
8MB Cache (65W)`,
qty: 3,
price: 99,
},
{
id: 2,
title: `Quad-Core Intel® Xeon® E-2374G Processor 3.7GHz 8MB Cache (80W)`,
qty: 2,
price: 99,
},
{
id: 3,
title: `Six-Core Intel® Xeon® E-2356G Processor 3.2GHz 12MB Cache (80W)`,
qty: 1,
price: 99,
},
{
id: 4,
title: `Six-Core Intel® Xeon® E-2386G Processor 3.5GHz 12MB Cache (95W)`,
qty: 1,
price: 99,
},
],
},
];
const memoryProducts = [
{
id: 1,
title: `16GB PC4-25600 3200MHz DDR4 ECC UDIMM`,
qty: 2,
price: 99,
},
{
id: 2,
title: `32GB PC4-25600 3200MHz DDR4 ECC UDIMM`,
qty: 2,
price: 220,
},
];
const m2driveProducts = [
{
productcatid: 1,
productcattitle: `Kioxia XG6 M.2 PCIe 3.1 x4 NVMe Solid State Drives`,
products: [
{
id: 1,
title: `256GB Kioxia XG6 M.2 PCIe 3.1 x4 NVMe Solid State
Drive`,
qty: 4,
price: 99,
},
{
id: 2,
title: `512GB Kioxia XG6 M.2 PCIe 3.1 x4 NVMe Solid State Drive`,
qty: 4,
price: 149,
},
{
id: 3,
title: `1.0TB Kioxia XG6 M.2 PCIe 3.1 x4 NVMe Solid State Drive`,
qty: 4,
price: 269,
},
],
},
{
productcatid: 2,
productcattitle: `Intel® DC P4801X M.2 PCIe 3.0 x4 NVMe Solid State Drives`,
products: [
{
id: 1,
title: `100GB Intel® Optane™ SSD DC P4801X Series M.2 PCIe 3.0 x4 NVMe
Solid State Drive`,
qty: 4,
price: 99,
},
{
id: 2,
title: `200GB Intel® Optane™ SSD DC P4801X Series M.2 PCIe
3.0 x4 NVMe Solid State Drive`,
qty: 4,
price: 149,
},
{
id: 3,
title: `1.0TB Kioxia XG6 M.2 PCIe 3.1 x4 NVMe Solid State Drive`,
qty: 4,
price: 269,
},
],
},
{
productcatid: 3,
productcattitle: `Micron 7400 PRO M.2 PCIe 4.0 x4 NVMe Solid State Drives`,
products: [
{
id: 1,
title: `480GB Micron 7400 PRO Series M.2 22x80 PCIe 4.0 x4 NVMe Solid
State Drive`,
qty: 4,
price: 99,
},
{
id: 2,
title: `960GB Micron 7400 PRO Series M.2 22x80 PCIe 4.0 x4
NVMe Solid State Drive`,
qty: 4,
price: 149,
},
{
id: 3,
title: `1.92TB Micron 7400 PRO Series M.2 22x110 PCIe 4.0 x4 NVMe Solid
State Drive`,
qty: 4,
price: 269,
},
],
},
];
//Bind Config Categories
bindConfigurations();
updateItemsCount();
// max quantity-progress-bar
function bindConfigurations() {
let configCatHtml = "";
$.each(configCatgories, function (i, cat) {
const id = cat.id;
let title = cat.title;
let qty = cat.maxQty;
let maxQtyHtml = "";
if (title == "m.2 drive") {
title = "m2-drive";
}
if (title == "m2-drive" || title == "processor") {
let quantityHtml = "";
if (title == "m2-drive") {
let qtyProgressBarHtml = "";
for (let i = 0; i < qty; i++) {
qtyProgressBarHtml += ``;
}
quantityHtml = `Quantity:
${qtyProgressBarHtml}
Max Quantity: ${qty}0/${qty}
`;
}
maxQtyHtml = `${quantityHtml}
`;
}
configCatHtml += ``;
});
$("#block-content-main").html(configCatHtml);
bindAllConfigProducts();
}
// appending-html
function bindAllConfigProducts() {
bindBareboneAndMemoryProducts("barebone");
bindBareboneAndMemoryProducts("memory");
bindProcessorAndM2DriveProducts("processor");
bindProcessorAndM2DriveProducts("m2-drive");
bindEventListeners();
}
function bindBareboneAndMemoryProducts(cat) {
let productHtml = "";
let productsArr = bareboneProducts;
if (cat == "memory") {
productsArr = memoryProducts;
}
$.each(productsArr, function (i, product) {
productHtml += `
+₹${product.price}
`;
});
$(`#config-${cat} .config-content`).html(productHtml);
$('.qty-selector option[value="0"]').text("Select");
}
function bindProcessorAndM2DriveProducts(cat) {
let productCatHtml = "";
let productsArr = processorProducts;
let accordion = "processorProductAccordion";
let collapse = "processorProductcollapse";
let lastSelectDataAttr = "";
if (cat == "m2-drive") {
productsArr = m2driveProducts;
accordion = "m2DriveProductAccordion";
collapse = "m2DriveProductcollapse";
lastSelectDataAttr = 'data-lastval="1"';
}
$.each(productsArr, function (i, productcat) {
const productcatid = productcat.productcatid;
const productcattitle = productcat.productcattitle;
productCatHtml += `
`;
let productHtml = "";
$.each(productcat.products, function (i, product) {
productHtml += `
${appendProcessorAndM2DriveInput(
cat,
product.id,
product.title,
productcatid
)}
+₹${product.price}
`;
});
productCatHtml += productHtml;
productCatHtml += `
`;
});
$(`#config-${cat} .config-content`).html(productCatHtml);
//$('.qty-selector option[value="0"]').text('Select')
}
function appendProcessorAndM2DriveInput(cat, id, title, productcatid = 0) {
if (cat == "m2-drive") {
return `
`;
} else {
return `
`;
}
}
// select and radio-check-btn-section
function bindEventListeners() {
var alertBox = `
Holy guacamole! You should check in on some of those fields below.
`;
$(".product-radio-btn").click(function (e) {
const radioEl = $(this);
const accordionID = $(this).parents(".accordion").attr("id");
const parentEl = radioEl.parents(".config-product-item");
const val = radioEl.val();
const productCatId = parentEl.attr("data-id");
const cat = parentEl.attr("data-cat");
const qty = parseInt(parentEl.find(".qty-selector").val("1"));
const price = qty * parseInt(parentEl.attr("data-price"));
const id = parentEl.attr("data-id");
$(`#config-${cat}`).find(".config-price-span").removeClass("active");
parentEl.find(".config-price-span").addClass("active");
bindSelectedProduct(cat, val, qty, price, id, productCatId, accordionID);
updateItemsCount();
updateTotalCartPrice();
});
$(".qty-selector").change(function () {
const selectEl = $(this);
const accordionId = $(this).parents(".accordion").attr("id");
const parentEl = selectEl.parents(".config-product-item");
const val = parseInt(selectEl.val());
const lastSelectedVal = parseInt(selectEl.attr("data-lastval"));
const price = val * parseFloat(parentEl.attr("data-price")).toFixed(2);
const cat = parentEl.attr("data-cat");
const id = parentEl.attr("data-id");
if (!parentEl.find("input").is(":checked")) {
parentEl.find("input").trigger("click");
parentEl.find(".config-price-span").addClass("active");
}
const selectedQty = val - lastSelectedVal;
if (cat == "m2-drive") {
if (m2DriveMaxQty >= m2DriveSelectedQty + selectedQty) {
m2DriveSelectedQty += selectedQty;
selectEl.attr("data-lastval", val);
m2DriveProgress();
parentEl.find(".product-price").text(price);
const selecedSummaryProduct = $(
`.${cat}-cart-product-${id}[data-accordionid="${accordionId}"]`
);
selecedSummaryProduct.find(".summary-total-qty .qty-span").text(val);
selecedSummaryProduct.find(".product-price").text(price);
updateTotalCartPrice();
} else {
alert("Quantity Max limit reached");
selectEl.val(lastSelectedVal);
parentEl.find("input").trigger("click");
return false;
}
} else {
parentEl.find(".product-price").text(price);
const selecedSummaryProduct = $(
`.${cat}-cart-product-${id}[data-accordionid="${accordionId}"]`
);
selecedSummaryProduct.find(".summary-total-qty .qty-span").text(val);
selecedSummaryProduct.find(".product-price").text(price);
updateTotalCartPrice();
}
});
$(".product-check-btn").click(function () {
const checkEl = $(this);
const ElementId = $(this).parents(".accordion").attr("id");
const parentEl = checkEl.parents(".config-product-item");
const val = checkEl.val();
const productCatId = parentEl.attr("data-productcatid");
const cat = parentEl.attr("data-cat");
const qtySelectEl = parentEl.find(".qty-selector");
const qty = parseInt(qtySelectEl.val("1"));
const price = parentEl.attr("data-price");
const totalPrice = qty * parseFloat(price).toFixed(2);
const id = parentEl.attr("data-id");
if (checkEl.is(":checked")) {
m2DriveSelectedQty++;
parentEl.addClass("selected");
} else {
m2DriveSelectedQty -= qty;
qtySelectEl.val("1").attr("data-lastval", "1").trigger("change");
parentEl.removeClass("selected").find(".product-price").text(price);
}
if (m2DriveSelectedQty > m2DriveMaxQty) {
alert("Quantity Max limit reached");
return false;
} else {
parentEl.find(".config-price-span").toggleClass("active");
bindSelectedProduct(
cat,
val,
qty,
totalPrice,
id,
productCatId,
ElementId
);
updateItemsCount();
updateTotalCartPrice();
m2DriveProgress();
}
});
// $('.product-check-btn ,.product-radio-btn').click(function() {
// qtySelectEl.val('1').attr('data-lastval', '1').trigger('change');;
// });
}
function m2DriveProgress() {
if (m2DriveSelectedQty <= m2DriveMaxQty) {
$(".qty-progress-bars .progress-bar").removeClass("active");
for (let i = 0; i < m2DriveSelectedQty; i++) {
$(".qty-progress-bars .progress-bar").eq(i).addClass("active");
}
$("#config-m2-drive .max-qty-wrap")
.find(".selected-qty")
.text(m2DriveSelectedQty);
}
if (m2DriveSelectedQty == m2DriveMaxQty) {
disableM2DriveOptions();
} else {
enableM2DriveOptions();
}
}
function enableM2DriveOptions() {
$(".product-check-btn").prop("disabled", false);
$("#config-m2-drive .qty-selector").prop("disabled", false);
}
function disableM2DriveOptions() {
$(".product-check-btn").not(":checked").prop("disabled", true);
$("#config-m2-drive .config-product-item")
.not(".selected")
.find(".qty-selector")
.prop("disabled", true);
}
// summary section
function bindSelectedProduct(
cat,
val,
qty,
price,
id,
productCatId = "",
ElementId
) {
const summaryProductHtml = `${qty}
${val}
+₹${price}
`;
if (cat == "m2-drive") {
if (
$(
`.m2-drive-cart-product-${id}[data-productcatid = "${productCatId}"] `
).length
) {
$(
`.m2-drive-cart-product-${id}[data-productcatid = "${productCatId}"]`
).remove();
} else {
$(`#${cat}-summary .summary-list`).append(summaryProductHtml);
}
} else {
$(`#${cat}-summary .summary-list`).html(summaryProductHtml);
}
if ($(`#${cat}-summary .summary-list li`).length) {
$(`#${cat}-summary`).removeClass("d-none");
} else {
$(`#${cat}-summary`).addClass("d-none");
}
}
// items-count
function updateItemsCount() {
const cartProductCount = $(
"#productOrderSummary .cart-product-item"
).length;
$(".summary-head #items-count").text(cartProductCount);
if (cartProductCount >= 1) {
$(".your-order-wrap").show();
$(".your-order-wrap-empty").hide();
} else {
$(".your-order-wrap").hide();
$(".your-order-wrap-empty").show();
}
}
// total-cart-price
function updateTotalCartPrice() {
let totalPrice = 0;
$("#productOrderSummary .cart-product-item")
.find(".price-span")
.each(function (i, e) {
totalPrice += Number($(e).text().trim());
});
$("#productOrderSummary #total-amount").text(totalPrice);
}
//currency-converter:
var rates = {
INR: {
value: 1,
symbol: "₹",
USD: 0.01311,
INR: 1,
GBP: 0.01,
},
USD: {
value: 75,
symbol: "$",
USD: 1,
INR: 76.32,
GBP: 0.76,
},
GBP: {
value: 100,
symbol: "£",
USD: 1.31,
INR: 100,
GBP: 1,
},
};
let usercurency;
if (localStorage.getItem("currency")) {
usercurency = localStorage.getItem("currency");
} else {
usercurency = "INR";
}
$("#custom-selects").val(usercurency.toLowerCase());
function updatePrices(previousCurrency, currentCurrency) {
$(".product-price").each(function (i, el) {
console.log(currentCurrency);
let val = parseFloat($(el).text());
let con = val * rates[previousCurrency][currentCurrency],
_con;
if (currentCurrency == "INR") {
_con = Math.round(con);
} else {
_con = con;
}
let curentSymbol = rates[currentCurrency];
$(el).text(_con.toFixed(2));
$(el).siblings(".currency-symbol").text(curentSymbol.symbol);
});
$("[data-price]").each(function (i, e) {
let val = parseFloat($(this).attr("data-price"));
let con = val * rates[previousCurrency][currentCurrency],
_con;
if (currentCurrency == "INR") {
_con = Math.round(con);
} else {
_con = parseInt(con);
}
$(this).attr("data-price", con);
});
let amount = parseFloat($("#total-amount").text()).toFixed(2);
let curentSymbol = rates[currentCurrency];
let conVal = amount * rates[previousCurrency][currentCurrency],
_con;
if (currentCurrency == "INR") {
_con = Math.round(conVal);
} else {
_con = conVal;
}
$("#total-amount").text(parseFloat(_con).toFixed(2));
$(".currency-symbol").text(curentSymbol.symbol);
}
$("#custom-selects").on("change", function (e) {
let previousCurrency = localStorage.getItem("currency");
localStorage.setItem("currency", e.target.value.toUpperCase());
updatePrices(previousCurrency, e.target.value.toUpperCase());
});
updatePrices(rates[usercurency]);
});